/* eslint-disable */
|
import { constantRouterMap } from "@/router";
|
|
import { asyncRouterMap } from "@/router/modules/router.js";
|
|
/* 用户菜单 */
|
import { asyncUserRouterMap } from "@/router/modules/router-user.js";
|
import { constantUserRouterMap } from "@/router/index-user.js";
|
|
/* *
|
* 通过meta.role判断是否与当前用户权限匹配
|
* @param roles
|
* @param route
|
*/
|
function hasPermission(menuList, route) {
|
if (menuList && menuList.length) {
|
let menuInfo = menuList.find(item => {
|
let result = !route.meta || item.m == route.meta.menu_Id;
|
return result;
|
});
|
if (route.meta && menuInfo && menuInfo.d) {
|
route.meta.menuName = menuInfo.d; // 启用别名
|
}
|
return !!menuInfo;
|
} else {
|
return false;
|
}
|
}
|
|
/* *
|
* 递归过滤异步路由表,返回符合用户角色权限的路由表
|
* @param routes asyncRouterMap
|
* @param menuList
|
*/
|
function filterAsyncRouter(routes, menuList) {
|
const res = [];
|
|
routes.forEach(route => {
|
if (hasPermission(menuList, route)) {
|
const tmp = { ...route };
|
if (tmp.children) {
|
tmp.children = filterAsyncRouter(tmp.children, menuList);
|
}
|
res.push(tmp);
|
}
|
});
|
|
return res;
|
}
|
var userRouterMap = constantUserRouterMap();
|
var routerMap = constantRouterMap;
|
const routers = location.href.indexOf("user.html") > 0 ? userRouterMap : routerMap;
|
const permission = {
|
state: {
|
routers: routers,
|
addRouters: []
|
},
|
mutations: {
|
SET_ROUTERS: (state, routers) => {
|
state.addRouters = routers;
|
let allRouters = constantRouterMap.concat(routers);
|
state.routers = allRouters;
|
},
|
// 生成前端用户菜单
|
SET_USER_ROUTERS: (state, routers) => {
|
state.addRouters = routers;
|
let allRouters = constantUserRouterMap().concat(routers);
|
state.routers = allRouters;
|
}
|
},
|
actions: {
|
GenerateRoutes({ commit }, menuList) {
|
return new Promise(resolve => {
|
let accessedRouters = filterAsyncRouter(asyncRouterMap, menuList);
|
commit("SET_ROUTERS", accessedRouters);
|
resolve();
|
});
|
},
|
// 生成前端用户菜单
|
GenerateUserRoutes({ commit }, menuList) {
|
return new Promise(resolve => {
|
let accessedRouters = filterAsyncRouter(asyncUserRouterMap, menuList);
|
commit("SET_USER_ROUTERS", accessedRouters);
|
resolve();
|
});
|
}
|
}
|
};
|
|
export default permission;
|