wework.sidebar/src/store/modules/static-router.js

85 lines
2.0 KiB
JavaScript

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