permission.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { constantRoutes } from '@/router'
  2. import { getRouters } from '@/api/menu'
  3. import Layout from '@/layout/index'
  4. import ParentView from '@/components/ParentView';
  5. const permission = {
  6. state: {
  7. routes: [],
  8. addRoutes: []
  9. },
  10. mutations: {
  11. SET_ROUTES: (state, routes) => {
  12. state.addRoutes = routes
  13. state.routes = constantRoutes.concat(routes)
  14. }
  15. },
  16. actions: {
  17. // 生成路由
  18. GenerateRoutes({ commit }) {
  19. return new Promise(resolve => {
  20. // 向后端请求路由数据
  21. getRouters().then(res => {
  22. console.log(res);
  23. if("000000" == res.msg){
  24. resolve(res.msg);
  25. }else{
  26. const accessedRoutes = filterAsyncRouter(res.data)
  27. if (accessedRoutes.length == 0) {
  28. resolve(accessedRoutes)
  29. } else {
  30. accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
  31. commit('SET_ROUTES', accessedRoutes)
  32. resolve(accessedRoutes)
  33. }
  34. }
  35. })
  36. })
  37. }
  38. }
  39. }
  40. // 遍历后台传来的路由字符串,转换为组件对象
  41. function filterAsyncRouter(asyncRouterMap) {
  42. return asyncRouterMap.filter(route => {
  43. if (route.component) {
  44. // Layout ParentView 组件特殊处理
  45. if (route.component === 'Layout') {
  46. route.component = Layout
  47. } else if (route.component === 'ParentView') {
  48. route.component = ParentView
  49. } else {
  50. route.component = loadView(route.component)
  51. }
  52. }
  53. if (route.children != null && route.children && route.children.length) {
  54. route.children = filterAsyncRouter(route.children)
  55. }
  56. return true
  57. })
  58. }
  59. export const loadView = (view) => { // 路由懒加载
  60. return (resolve) => require([`@/views/${view}`], resolve)
  61. }
  62. export default permission