permission.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { constantRoutes } from '@/router'
  2. import { getRouters } from '@/api/menu'
  3. import { reject } from 'lodash'
  4. /**
  5. * 路由数据
  6. * @param item
  7. * @returns {{path, children: *[], meta: {icon, id, title}, name}}
  8. */
  9. function getRoute(item) {
  10. // 路由基本格式
  11. const route = {
  12. // 路由的路径
  13. path: item.url,
  14. // 路由名
  15. name: item.label,
  16. meta: {
  17. id: item.id,
  18. title: item.label,
  19. icon: item.icon
  20. },
  21. // 路由的子路由
  22. children: []
  23. }
  24. if (item.url === 'layout') {
  25. route.component = (resolve) => require([`@/layout`], resolve)
  26. } else {
  27. route.component = (resolve) => require([`@/views${item.url}`], resolve)
  28. }
  29. return route
  30. }
  31. /**
  32. * 菜单数据转换路由
  33. * @param menuList
  34. * @param routes
  35. * @returns {*[]}
  36. */
  37. function dynamicMenuRoutes(menuList = [], routes = []) {
  38. // 用于保存普通路由数据
  39. const temp = []
  40. // 用于保存存在子路由的路由数据
  41. let route = []
  42. // 遍历数据
  43. for (let i = 0; i < menuList.length; i++) {
  44. // 存在子路由,则递归遍历,并返回数据作为 children 保存
  45. if (menuList[i].children && menuList[i].children.length > 0) {
  46. // 获取路由的基本格式
  47. route = getRoute(menuList[i])
  48. // 递归处理子路由数据,并返回,将其作为路由的 children 保存
  49. route.children = dynamicMenuRoutes(menuList[i].children)
  50. // 保存存在子路由的路由
  51. routes.push(route)
  52. } else {
  53. // 保存普通路由
  54. temp.push(getRoute(menuList[i]))
  55. }
  56. }
  57. return routes.concat(temp)
  58. }
  59. const state = {
  60. routes: [],
  61. addRoutes: []
  62. }
  63. const mutations = {
  64. SET_ROUTES: (state, routes) => {
  65. state.addRoutes = routes
  66. state.routes = constantRoutes.concat(routes)
  67. }
  68. }
  69. const actions = {
  70. /**
  71. * 根据角色设置路由菜单
  72. * @param commit
  73. * @param roles
  74. * @returns {Promise<unknown>}
  75. */
  76. GenerateRoutes({ commit }, roles) {
  77. let roleIdList = []
  78. roles.forEach((e) => {
  79. if (roles.length >= 1 && e.roleCode === 'ManagerRole') {
  80. roleIdList = [1]
  81. } else {
  82. roleIdList = [2]
  83. }
  84. })
  85. return new Promise((resolve) => {
  86. // 向后端请求路由数据
  87. getRouters(roleIdList).then((res) => {
  88. try {
  89. const menuList = res.data.menuTree
  90. const accessedRoutes = dynamicMenuRoutes(menuList)
  91. accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
  92. commit('SET_ROUTES', accessedRoutes)
  93. resolve(accessedRoutes)
  94. } catch (error) {
  95. reject(error)
  96. }
  97. })
  98. })
  99. }
  100. }
  101. export default {
  102. namespaced: true,
  103. state,
  104. mutations,
  105. actions
  106. }