handleRoutes.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * @author https://gitee.com/chu1204505056/vue-admin-better (不想保留author可删除)
  3. * @description all模式渲染后端返回路由
  4. * @param constantRoutes
  5. * @returns {*}
  6. */
  7. export function convertRouter(asyncRoutes) {
  8. return asyncRoutes.map((route) => {
  9. if (route.component) {
  10. if (route.component === 'Layout') {
  11. route.component = (resolve) => require(['@/layouts'], resolve)
  12. } else if (route.component === 'EmptyLayout') {
  13. route.component = (resolve) =>
  14. require(['@/layouts/EmptyLayout'], resolve)
  15. } else {
  16. const index = route.component.indexOf('views')
  17. const path =
  18. index > 0 ? route.component.slice(index) : `views/${route.component}`
  19. route.component = (resolve) => require([`@/${path}`], resolve)
  20. }
  21. }
  22. if (route.children && route.children.length)
  23. route.children = convertRouter(route.children)
  24. if (route.children && route.children.length === 0) delete route.children
  25. return route
  26. })
  27. }
  28. /**
  29. * @author https://gitee.com/chu1204505056/vue-admin-better (不想保留author可删除)
  30. * @description 判断当前路由是否包含权限
  31. * @param permissions
  32. * @param route
  33. * @returns {boolean|*}
  34. */
  35. function hasPermission(permissions, route) {
  36. if (route.meta && route.meta.permissions) {
  37. return permissions.some((role) => route.meta.permissions.includes(role))
  38. } else {
  39. return true
  40. }
  41. }
  42. /**
  43. * @author https://gitee.com/chu1204505056/vue-admin-better (不想保留author可删除)
  44. * @description intelligence模式根据permissions数组拦截路由
  45. * @param routes
  46. * @param permissions
  47. * @returns {[]}
  48. */
  49. export function filterAsyncRoutes(routes, permissions) {
  50. const finallyRoutes = []
  51. routes.forEach((route) => {
  52. const item = { ...route }
  53. if (hasPermission(permissions, item)) {
  54. if (item.children) {
  55. item.children = filterAsyncRoutes(item.children, permissions)
  56. }
  57. finallyRoutes.push(item)
  58. }
  59. })
  60. return finallyRoutes
  61. }