Blame view

juvenile-prosecution-vue/src/store/modules/permission.js 2.22 KB
6c637641   wxy   no message
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
  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 = -1
      for (let i = 0, len = permission.length; i < len; i++) {
        flag = route.meta.permission.indexOf(permission[i])
        if (flag >= 0) {
          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.indexOf(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, data) => {
        state.addRouters = data
        state.routers = constantRouterMap.concat(data)
        //console.log('-----mutations---SET_ROUTERS----', data)
      }
    },
    actions: {
      GenerateRoutes({ commit }, data) {
        return new Promise(resolve => {
          const { roles } = data
          console.log('-----mutations---data----', data)
          let accessedRouters
          accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
          console.log('-----mutations---accessedRouters----', accessedRouters)
          commit('SET_ROUTERS', accessedRouters)
          resolve()
        })
      },
      // 动态添加主界面路由,需要缓存
      UpdateAppRouter({ commit }, routes) {
        return new Promise(resolve => {
          //const [ roles ] = routes.constRoutes
          let routelist = routes.constRoutes;
          commit('SET_ROUTERS', routelist)
          resolve()
        })
      }
    }
  }
  
  export default permission