import { asyncRouterMap, constantRouterMap } from '@/config/router.config' /** * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除 * * @param permission * @param route * @returns {boolean} */ function hasPermission (permission, route) { // if (route.meta && route.meta.permission) { // let flag = false // for (let i = 0, len = permission.length; i < len; i++) { // flag = route.meta.permission.includes(permission[i]) // if (flag) { // return true // } // } // return false // } return true } /** * 单账户多角色时,使用该方法可过滤角色不存在的菜单 * * @param roles * @param route * @returns {*} */ // eslint-disable-next-line function hasRole(roles, route) { if (route.meta && route.meta.roles) { return route.meta.roles.includes(roles.id) } else { return true } } function filterAsyncRouter (routerMap, roles) { const accessedRouters = routerMap.filter(route => { if (hasPermission(roles.permissionList, route)) { if (route.children && route.children.length) { route.children = filterAsyncRouter(route.children, roles) } return true } return false }) return accessedRouters } 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 { roles } = data const accessedRouters = filterAsyncRouter(asyncRouterMap, roles) // console.log('动态获取到的菜单列表:'+JSON.stringify(accessedRouters)) commit('SET_ROUTERS', accessedRouters) resolve() }) } } } export default permission