92afcf90022e583e447a1395074e2c75ff064c76.svn-base 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { asyncRouterMap, constantRouterMap } from "@/config/router.config"
  2. /**
  3. * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
  4. *
  5. * @param permission
  6. * @param route
  7. * @returns {boolean}
  8. */
  9. function hasPermission(permission, route) {
  10. if (route.meta && route.meta.permission) {
  11. let flag = -1
  12. for (let i = 0, len = permission.length; i < len; i++) {
  13. flag = route.meta.permission.indexOf(permission[i])
  14. if (flag >= 0) {
  15. return true
  16. }
  17. }
  18. return false
  19. }
  20. return true
  21. }
  22. /**
  23. * 单账户多角色时,使用该方法可过滤角色不存在的菜单
  24. *
  25. * @param roles
  26. * @param route
  27. * @returns {*}
  28. */
  29. // eslint-disable-next-line
  30. function hasRole(roles, route) {
  31. if (route.meta && route.meta.roles) {
  32. return route.meta.roles.indexOf(roles.id)
  33. } else {
  34. return true
  35. }
  36. }
  37. function filterAsyncRouter(routerMap, roles) {
  38. const accessedRouters = routerMap.filter(route => {
  39. if (hasPermission(roles.permissionList, route)) {
  40. if (route.children && route.children.length) {
  41. route.children = filterAsyncRouter(route.children, roles)
  42. }
  43. return true
  44. }
  45. return false
  46. })
  47. return accessedRouters
  48. }
  49. const permission = {
  50. state: {
  51. routers: constantRouterMap,
  52. addRouters: []
  53. },
  54. mutations: {
  55. SET_ROUTERS: (state, data) => {
  56. state.addRouters = data
  57. state.routers = constantRouterMap.concat(data)
  58. //console.log('-----mutations---SET_ROUTERS----', data)
  59. }
  60. },
  61. actions: {
  62. GenerateRoutes({ commit }, data) {
  63. return new Promise(resolve => {
  64. const { roles } = data
  65. console.log('-----mutations---data----', data)
  66. let accessedRouters
  67. accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
  68. console.log('-----mutations---accessedRouters----', accessedRouters)
  69. commit('SET_ROUTERS', accessedRouters)
  70. resolve()
  71. })
  72. },
  73. // 动态添加主界面路由,需要缓存
  74. UpdateAppRouter({ commit }, routes) {
  75. return new Promise(resolve => {
  76. //const [ roles ] = routes.constRoutes
  77. let routelist = routes.constRoutes;
  78. commit('SET_ROUTERS', routelist)
  79. resolve()
  80. })
  81. }
  82. }
  83. }
  84. export default permission