333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* 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;