import { asyncRouterMap, constantRouterMap } from '@/config/router.config' import cloneDeep from 'lodash.clonedeep' /** * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除 * * @param permission * @param route * @returns {boolean} */ function hasPermission (permission, route) { if (route.meta && route.meta.permission) { if (permission === undefined) { return false } for (let i = 0, len = permission.length; i < len; i++) { for (let j = 0, len2 = route.meta.permission.length; j < len2; j++) { var p = permission[i] var p2 = route.meta.permission[j] if (p.toLowerCase() === p2.toLowerCase()) { 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, role) { const accessedRouters = routerMap.filter(route => { var yes = hasPermission(role.permissionList, route) if (yes) { if (route.children && route.children.length) { route.children = filterAsyncRouter(route.children, role) } 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 { role } = data const routerMap = cloneDeep(asyncRouterMap) const accessedRouters = filterAsyncRouter(routerMap, role) commit('SET_ROUTERS', accessedRouters) resolve() }) } } } export default permission