permission.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { asyncRoutes, constantRoutes } from '@/router'
  2. // 根据路由名称查询路由
  3. function findRoute(name, routes) {
  4. return routes.find(route => route.name === name)
  5. }
  6. // 设置路由meta属性
  7. function getMeta(route) {
  8. return {
  9. icon: route.icon,
  10. title: route.title,
  11. sort: route.sort,
  12. id: route.id
  13. }
  14. }
  15. function filterAsyncRoutes(sourceRoutes, targetRoutes) {
  16. const res = []
  17. sourceRoutes.forEach(route => {
  18. const userRoute = findRoute(route.name, targetRoutes)
  19. if (userRoute) {
  20. route.hidden = Boolean(userRoute.hidden)
  21. route.meta = { ...route.meta, ...getMeta(userRoute) }
  22. if (route.children && route.children.length > 0) {
  23. route.children = filterAsyncRoutes(route.children, targetRoutes).sort((a, b) => a.meta.sort - b.meta.sort)
  24. }
  25. res.push(route)
  26. }
  27. })
  28. return res
  29. }
  30. const state = {
  31. routes: [],
  32. addRoutes: []
  33. }
  34. const mutations = {
  35. SET_ROUTES: (state, routes) => {
  36. state.addRoutes = routes
  37. state.routes = constantRoutes.concat(routes)
  38. }
  39. }
  40. const actions = {
  41. generateRoutes({ commit, rootGetters }) {
  42. return new Promise(resolve => {
  43. const accessedRoutes = filterAsyncRoutes(asyncRoutes, rootGetters.menusList)
  44. commit('SET_ROUTES', accessedRoutes)
  45. resolve(accessedRoutes)
  46. })
  47. }
  48. }
  49. export default {
  50. namespaced: true,
  51. state,
  52. mutations,
  53. actions
  54. }