router.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { asyncRouterHandle } from '@/utils/asyncRouter'
  2. import { asyncMenu } from '@/api/menu'
  3. const routerList = []
  4. const formatRouter = (routes) => {
  5. routes && routes.map(item => {
  6. if ((!item.children || item.children.every(ch => ch.hidden)) && item.name !== '404') {
  7. routerList.push({ label: item.meta.title, value: item.name })
  8. }
  9. if (item.children && item.children.length > 0) {
  10. formatRouter(item.children)
  11. }
  12. })
  13. }
  14. export const router = {
  15. namespaced: true,
  16. state: {
  17. asyncRouters: [],
  18. routerList: routerList
  19. },
  20. mutations: {
  21. setRouterList(state, routerList) {
  22. state.routerList = routerList
  23. },
  24. // 设置动态路由
  25. setAsyncRouter(state, asyncRouters) {
  26. state.asyncRouters = asyncRouters
  27. }
  28. },
  29. actions: {
  30. // 从后台获取动态路由
  31. async SetAsyncRouter({ commit }) {
  32. const baseRouter = [{
  33. path: '/layout',
  34. name: 'layout',
  35. component: 'view/layout/index.vue',
  36. meta: {
  37. title: '底层layout'
  38. },
  39. children: []
  40. }]
  41. const asyncRouterRes = await asyncMenu()
  42. if (asyncRouterRes.code !== 0) {
  43. return
  44. }
  45. const asyncRouter = asyncRouterRes.data && asyncRouterRes.data.menus
  46. asyncRouter.push({
  47. path: '404',
  48. name: '404',
  49. hidden: true,
  50. meta: {
  51. title: '迷路了*。*'
  52. },
  53. component: 'view/error/index.vue'
  54. })
  55. formatRouter(asyncRouter)
  56. baseRouter[0].children = asyncRouter
  57. baseRouter.push({
  58. path: '*',
  59. redirect: '/layout/404'
  60. })
  61. asyncRouterHandle(baseRouter)
  62. commit('setAsyncRouter', baseRouter)
  63. commit('setRouterList', routerList)
  64. return true
  65. }
  66. },
  67. getters: {
  68. // 获取动态路由
  69. asyncRouters(state) {
  70. return state.asyncRouters
  71. },
  72. routerList(state) {
  73. return state.routerList
  74. },
  75. defaultRouter(state) {
  76. return state.defaultRouter
  77. }
  78. }
  79. }