后端

main-sidebar.vue 3.8KB

    <template> <aside class="site-sidebar" :class="sidebarClasses"> <div class="site-sidebar__inner"> <el-menu :default-active="menuNavActiveName" :collapse="$store.state.sidebarCollapse" :collapseTransition="false" class="site-sidebar__menu"> <el-menu-item index="1-1" @click="$router.push({ name: 'home' })"> <icon-svg name="shouye" class="site-sidebar__menu-icon"></icon-svg> <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 './main-sidebar-sub-menu-nav' import { mapMutations } from 'vuex' import { getRouteNameByUrl } from '@/utils' import isEmpty from 'lodash/isEmpty' export default { data () { return { } }, components: { SubMenuNav }, computed: { menuNavActiveName: { get () { let name = this.$store.state.menuNavActiveName return /\S/.test(name) ? name : '1-1' }, set (name) { this.UPDATE_MENU_NAV_ACTIVE_NAME({ name }) } }, sidebarClasses () { let skin = this.$store.state.sidebarLayoutSkin return [ !/\S/.test(skin) || skin === 'light' ? '' : `site-sidebar--${skin}` ] } }, watch: { $route: 'routeHandle' }, created () { this.getMenuNavList().then(() => { this.routeHandle(this.$route) }) }, methods: { // 获取菜单导航列表 / 权限 getMenuNavList () { return this.$http({ url: this.$http.adornUrl('/sys/menu/nav'), method: 'get', params: this.$http.adornParams() }).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 (route.meta && route.meta.isTab) { 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) } else { return console.error('未能找到可用tab标签页!') } } this.menuNavActiveName = tab.id + '' this.UPDATE_CONTENT_TABS_ACTIVE_NAME({ name: route.name }) } }, // 获取菜单导航, 根据路由名称 getMenuNavByRouteName (name, menuNavList) { var temp = [] for (var i = 0; i < menuNavList.length; i++) { if (menuNavList[i].list && menuNavList[i].list.length >= 1) { temp = temp.concat(menuNavList[i].list) } else if (getRouteNameByUrl(menuNavList[i].url) === name) { return menuNavList[i] } } return temp.length >= 1 ? this.getMenuNavByRouteName(name, temp) : [] }, ...mapMutations(['UPDATE_MENU_NAV_LIST', 'UPDATE_MENU_NAV_ACTIVE_NAME', 'ADD_CONTENT_TAB', 'UPDATE_CONTENT_TABS_ACTIVE_NAME']) } } </script>