permission.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { constantRoutes } from '@/router'
  2. import { getRouters } from '@/api/menu'
  3. import Layout from '@/layout/index'
  4. const permission = {
  5. state: {
  6. routes: [],
  7. sidebarRouters: []
  8. },
  9. mutations: {
  10. SET_ROUTES: (state, routes) => {
  11. state.routes = routes
  12. },
  13. SET_SIDEBAR_ROUTERS: (state, routes) => {
  14. state.sidebarRouters = routes
  15. }
  16. },
  17. actions: {
  18. // 生成路由
  19. GenerateRoutes({ commit }) {
  20. return new Promise(resolve => {
  21. // 向后端请求路由数据
  22. getRouters().then(res => {
  23. const data = JSON.parse(JSON.stringify(res.data))
  24. const sidebarRouters = filterSideBarRouters(data)
  25. const rewriteRoutes = filterAsyncRouter(data)
  26. rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
  27. sidebarRouters.unshift({ menuName: '风险办公', menuType: 'M', path: 'index' })
  28. commit(
  29. 'SET_ROUTES',
  30. data.filter(item => item.menuType === 'C')
  31. )
  32. commit('SET_SIDEBAR_ROUTERS', sidebarRouters)
  33. resolve(rewriteRoutes)
  34. })
  35. })
  36. }
  37. }
  38. }
  39. // 遍历后台传来的路由字符串,转换为组件对象
  40. function filterAsyncRouter(data) {
  41. return data
  42. .filter(item => item.menuType === 'C')
  43. .map(item => {
  44. return {
  45. path: '/' + item.path,
  46. component: Layout,
  47. hidden: true,
  48. children: [
  49. {
  50. path: '',
  51. component: loadView(item.component),
  52. name: item.path,
  53. meta: {
  54. title: item.menuName,
  55. icon: item.icon,
  56. menuId: item.menuId,
  57. parentId: item.parentId
  58. }
  59. }
  60. ]
  61. }
  62. })
  63. }
  64. function filterSideBarRouters(data) {
  65. return data.filter(item => item.menuType === 'M')
  66. }
  67. export const loadView = view => {
  68. if (process.env.NODE_ENV === 'development') {
  69. return resolve => require([`@/views/${view}`], resolve)
  70. } else {
  71. return () => import(`@/views/${view}`)
  72. }
  73. }
  74. export default permission