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 = permission.find(item => { return item&&item == 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 flag } 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 baseRouter = JSON.parse(JSON.stringify(asyncRouterMap)) const accessedRouters = filterAsyncRouter(baseRouter, roles) commit('SET_ROUTERS', accessedRouters) resolve() }) }, // 重置菜单 ResetRoutes ({ commit }) { return new Promise(resolve => { commit('SET_ROUTERS', []) resolve() }) } } } export default permission