router-modules.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const routerModules = import.meta.glob([
  2. '~/pages/**/*.vue',
  3. '!~/pages/**/*copy.vue',
  4. '!~/pages/**/component',
  5. '!~/pages/**/components',
  6. '!~/pages/**/composables',
  7. '!~/pages/**/hooks',
  8. '!~/pages/**/locales',
  9. '!~/pages/**/modules',
  10. '!~/pages/**/plugins',
  11. '!~/pages/**/tests',
  12. '!~/pages/**/test',
  13. '!~/pages/common',
  14. ])
  15. export const basicRouteMap = {
  16. // iframe模式下使用
  17. Iframe: () => import('~/pages/common/iframe.vue'),
  18. // 一般用于存在子集的页面
  19. RouteView: () => import('~/layouts/components/route-view.vue'),
  20. // 空页面
  21. ComponentError: () => import('~/pages/exception/component-error.vue'),
  22. }
  23. function checkEager(module) {
  24. if (typeof module === 'object' && 'default' in module)
  25. return module.default
  26. return module
  27. }
  28. export function getRouterModule(path) {
  29. if (!path)
  30. return basicRouteMap.ComponentError
  31. if (path in basicRouteMap)
  32. return basicRouteMap[path]
  33. if (path.startsWith('/'))
  34. path = path.slice(1)
  35. const fullPath = `/src/pages/${path}.vue`
  36. const fullPathIndex = `/src/pages/${path}/index.vue`
  37. if (fullPathIndex in routerModules)
  38. return checkEager(routerModules[fullPathIndex])
  39. return checkEager(routerModules[fullPath])
  40. }
  41. export default routerModules