|
<template>
<aside class="site-sidebar">
<div class="site-sidebar__inner">
<el-menu
:default-active="menuNavActive"
:collapse="$store.state.sidebarCollapse"
class="site-sidebar__menu"
background-color="#545c64"
text-color="#fff"
active-text-color="#ffd04b">
<el-menu-item index="1-1" @click="$router.push({ name: 'home' })">
<i class="site-sidebar__menu-icon fa fa-home"></i>
<span slot="title">首页</span>
</el-menu-item>
<sub-menu-nav
v-for="menuNav in $store.state.menuNavList"
:key="menuNav.menuId"
:menu-nav="menuNav">
</sub-menu-nav>
</el-menu>
</div>
</aside>
</template>
<script>
import SubMenuNav from '@/components/sub-menu-nav'
import API from '@/api'
import { mapMutations } from 'vuex'
import { getRouteNameByUrl } from '@/utils'
import isEmpty from 'lodash/isEmpty'
export default {
data () {
return {
menuNavActive: '1-1'
}
},
components: {
SubMenuNav
},
watch: {
$route: 'routeHandle'
},
created () {
this.getMenuNavList().then(() => {
this.routeHandle(this.$route)
})
},
methods: {
// 获取菜单导航列表 / 权限
getMenuNavList () {
return API.menu.nav().then(({data}) => {
if (data && data.code === 0) {
this.UPDATE_MENU_NAV_LIST(data.menuList)
sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]'))
} else {
this.UPDATE_MENU_NAV_LIST([])
sessionStorage.setItem('permissions', '[]')
}
})
},
// 路由操作
routeHandle (route) {
if (/^\/n\/.*$/.test(route.path)) {
var tab = this.$store.state.contentTabs.filter(item => item.name === route.name)[0]
// tab不存在, 先添加
if (isEmpty(tab)) {
var menuNav = this.getMenuNavByRouteName(route.name, this.$store.state.menuNavList)
if (!isEmpty(menuNav)) {
tab = {
id: menuNav.menuId,
name: route.name,
title: menuNav.name,
type: (window.SITE_CONFIG.nestIframeRouteNameList || []).indexOf(route.name) !== -1 ? 'iframe' : 'module',
url: menuNav.url
}
this.ADD_CONTENT_TAB(tab)
}
}
this.menuNavActive = tab.id + ''
this.UPDATE_CONTENT_TABS_ACTIVE_NAME({ name: route.name })
}
},
// 获取菜单导航, 根据路由名称
getMenuNavByRouteName (name, menuNavList) {
for (var i = 0; i < menuNavList.length; i++) {
if (menuNavList[i].list && menuNavList[i].list.length >= 1) {
return this.getMenuNavByRouteName(name, menuNavList[i].list)
} else {
if (getRouteNameByUrl(menuNavList[i].url) === name) {
return menuNavList[i]
}
}
}
},
...mapMutations(['UPDATE_MENU_NAV_LIST', 'ADD_CONTENT_TAB', 'UPDATE_CONTENT_TABS_ACTIVE_NAME'])
}
}
</script>
|