import { asyncRouterMap, constantRouterMap } from '@/router/index'; //判断是否有权限访问该菜单 function hasPermission(menus, route) { if (route.name) { let currMenu = getMenu(route.name, menus); if (currMenu!=null) { //设置菜单的标题、图标和可见性 if (currMenu.title != null && currMenu.title !== '') { route.meta.title = currMenu.title; } if (currMenu.icon != null && currMenu.title !== '') { route.meta.icon = currMenu.icon; } if(currMenu.hidden!=null){ route.hidden = currMenu.hidden !== 0; } if (currMenu.sort != null && currMenu.sort !== '') { route.sort = currMenu.sort; } return true; } else { route.sort = 0; if (route.hidden !== undefined && route.hidden === true) { route.sort=-1; return true; } else { return false; } } } else { return true } } //根据路由名称获取菜单 function getMenu(name, menus) { for (let i = 0; i < menus.length; i++) { let menu = menus[i]; if (name===menu.name) { return menu; } } return null; } //对菜单进行排序 function sortRouters(accessedRouters) { for (let i = 0; i < accessedRouters.length; i++) { let router = accessedRouters[i]; if(router.children && router.children.length > 0){ router.children.sort(compare("sort")); } } accessedRouters.sort(compare("sort")); } //降序比较函数 function compare(p){ return function(m,n){ let a = m[p]; let b = n[p]; return b - a; } } const permission = { state: { routers: constantRouterMap, addRouters: [] }, mutations: { SET_ROUTERS: (state, routers) => { state.addRouters = routers; state.routers = constantRouterMap.concat(routers); } }, actions: { GenerateRoutes({ commit }, data) { return new Promise(resolve => { const { menus } = data; const { username } = data; const accessedRouters = asyncRouterMap.filter(v => { //admin帐号直接返回所有菜单 // if(username==='admin') return true; if (hasPermission(menus, v)) { if (v.children && v.children.length > 0) { v.children = v.children.filter(child => { if (hasPermission(menus, child)) { return child } return false; }); return v } else { return v } } return false; }); //对菜单进行排序 sortRouters(accessedRouters); commit('SET_ROUTERS', accessedRouters); resolve(); }) } } }; export default permission;