permission.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { constantRoutes } from '@/router'
  2. /**
  3. * 深拷贝路由配置,避免修改原始 constantRoutes 对象
  4. */
  5. function deepCloneRoutes(routes) {
  6. return routes.map(route => {
  7. const newRoute = { ...route }
  8. if (route.children) {
  9. newRoute.children = route.children.map(child => ({ ...child }))
  10. }
  11. return newRoute
  12. })
  13. }
  14. const state = {
  15. routes: [],
  16. sidebarRouters: []
  17. }
  18. const mutations = {
  19. SET_ROUTES: (state, routes) => {
  20. state.routes = constantRoutes.concat(routes)
  21. state.sidebarRouters = routes
  22. }
  23. }
  24. const actions = {
  25. generateRoutes({ commit }) {
  26. return new Promise(resolve => {
  27. // 代理端使用constantRoutes作为菜单,过滤hidden的路由
  28. // 必须使用深拷贝,避免修改原始constantRoutes导致路由匹配异常
  29. const clonedRoutes = deepCloneRoutes(constantRoutes)
  30. const accessedRoutes = clonedRoutes.filter(route => {
  31. if (route.children) {
  32. route.children = route.children.filter(child => {
  33. return !child.hidden
  34. })
  35. }
  36. return !route.hidden
  37. })
  38. commit('SET_ROUTES', accessedRoutes)
  39. resolve(accessedRoutes)
  40. })
  41. }
  42. }
  43. export default {
  44. namespaced: true,
  45. state,
  46. mutations,
  47. actions
  48. }