后端

main-sidebar.vue 4.1KB

    <template> <aside class="site-sidebar" :class="sidebarClasses"> <div class="site-sidebar__inner"> <el-menu :default-active="menuActiveName" :collapse="sidebarFold" :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 v-for="menu in menuList" :key="menu.menuId" :menu="menu"> </sub-menu> </el-menu> </div> </aside> </template> <script> import SubMenu from './main-sidebar-sub-menu' import { getRouteNameByUrl } from '@/utils' import isEmpty from 'lodash/isEmpty' export default { data () { return { } }, components: { SubMenu }, computed: { sidebarLayoutSkin: { get () { return this.$store.state.common.sidebarLayoutSkin } }, sidebarFold: { get () { return this.$store.state.common.sidebarFold } }, menuList: { get () { return this.$store.state.common.menuList }, set (val) { this.$store.commit('common/updateMenuList', val) } }, menuActiveName: { get () { let name = this.$store.state.common.menuActiveName return /\S/.test(name) ? name : '1-1' }, set (val) { this.$store.commit('common/updateMenuActiveName', val) } }, mainTabs: { get () { return this.$store.state.common.mainTabs }, set (val) { this.$store.commit('common/updateMainTabs', val) } }, mainTabsActiveName: { get () { return this.$store.state.common.mainTabsActiveName }, set (val) { this.$store.commit('common/updateMainTabsActiveName', val) } }, sidebarClasses () { return [ !/\S/.test(this.sidebarLayoutSkin) || this.sidebarLayoutSkin === 'light' ? '' : `site-sidebar--${this.sidebarLayoutSkin}` ] } }, watch: { $route: 'routeHandle' }, created () { this.getMenuList().then(() => { this.routeHandle(this.$route) }) }, methods: { // 获取菜单列表 / 权限 getMenuList () { return this.$http({ url: this.$http.adornUrl('/sys/menu/nav'), method: 'get', params: this.$http.adornParams() }).then(({data}) => { if (data && data.code === 0) { this.menuList = data.menuList sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]')) } else { this.menuList = [] sessionStorage.setItem('permissions', '[]') } }) }, // 路由操作 routeHandle (route) { if (route.meta && route.meta.isTab) { var tab = this.mainTabs.filter(item => item.name === route.name)[0] // tab不存在, 先添加 if (isEmpty(tab)) { var menu = this.getMenuByRouteName(route.name, this.menuList) if (!isEmpty(menu)) { tab = { id: menu.menuId, name: route.name, title: menu.name, type: (window.SITE_CONFIG.nestIframeRouteNameList || []).indexOf(route.name) !== -1 ? 'iframe' : 'module', url: menu.url } this.mainTabs = this.mainTabs.concat(tab) } else { return console.error('未能找到可用标签页!') } } this.menuActiveName = tab.id + '' this.mainTabsActiveName = route.name } }, // 获取菜单, 根据路由名称 getMenuByRouteName (name, menuList) { var temp = [] for (var i = 0; i < menuList.length; i++) { if (menuList[i].list && menuList[i].list.length >= 1) { temp = temp.concat(menuList[i].list) } else if (getRouteNameByUrl(menuList[i].url) === name) { return menuList[i] } } return temp.length >= 1 ? this.getMenuByRouteName(name, temp) : [] } } } </script>