routes.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import router from '@/router'
  2. import path from 'path'
  3. import { rolesControl } from '@/config'
  4. import { isExternal } from '@/utils/validate'
  5. import { hasRole } from '@/utils/hasRole'
  6. import Layout from '@/layout'
  7. /**
  8. * @description all模式渲染后端返回路由
  9. * @param constantRoutes
  10. * @returns {*}
  11. */
  12. export function convertRouter(constantRoutes) {
  13. return constantRoutes.map((route) => {
  14. if (route.component) {
  15. if (route.component === 'Layout') {
  16. // const path = 'layouts'
  17. // route.component = (resolve) => require([`@/${path}`], resolve)
  18. route.component = Layout
  19. } else {
  20. // console.log(route.component)
  21. let path = route.component
  22. if (
  23. new RegExp('^/views/.*$').test(route.component) ||
  24. new RegExp('^views/.*$').test(route.component)
  25. ) {
  26. path = route.component
  27. } else if (new RegExp('^/.*$').test(route.component)) {
  28. path = 'views' + route.component
  29. } else if (new RegExp('^@views/.*$').test(route.component)) {
  30. path = route.component.slice(1)
  31. } else {
  32. path = route.component.slice(8);
  33. // console.log('path', path)
  34. }
  35. // route.component = (resolve) => require([`@/views/alarmManage/index`], resolve)
  36. route.component = () =>
  37. import (`@/views/${path}`)
  38. // route.component = () => import(`@/views/alarmManage/index`)
  39. // console.log(route)
  40. }
  41. }
  42. if (route.children && route.children.length)
  43. route.children = convertRouter(route.children)
  44. if (route.children && route.children.length === 0) delete route.children
  45. return route
  46. })
  47. }
  48. /**
  49. * @description 根据roles数组拦截路由
  50. * @param routes
  51. * @param baseUrl
  52. * @returns {[]}
  53. */
  54. export function filterRoutes(routes, baseUrl = '/') {
  55. return routes
  56. .filter((route) => {
  57. if (route.meta && route.meta.roles)
  58. return !rolesControl || hasRole(route.meta.roles)
  59. else return true
  60. })
  61. .map((route) => {
  62. if (route.path !== '*' && !isExternal(route.path))
  63. route.path = path.resolve(baseUrl, route.path)
  64. route.fullPath = route.path
  65. if (route.children)
  66. route.children = filterRoutes(route.children, route.fullPath)
  67. return route
  68. })
  69. }
  70. /**
  71. * 根据当前页面firstMenu
  72. * @returns {string}
  73. */
  74. export function handleFirstMenu() {
  75. const firstMenu = router.currentRoute.matched[0].path
  76. if (firstMenu === '') return '/'
  77. return firstMenu
  78. }