index.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import type { RouteRecordRaw } from 'vue-router';
  2. import { mergeRouteModules, traverseTreeValues } from '@vben/utils';
  3. import { coreRoutes, fallbackNotFoundRoute } from './core';
  4. const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', {
  5. eager: true,
  6. });
  7. // 有需要可以自行打开注释,并创建文件夹
  8. const externalRouteFiles = import.meta.glob('./external/**/*.ts', {
  9. eager: true,
  10. });
  11. // const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true });
  12. /** 动态路由 */
  13. const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles);
  14. /** 外部路由列表,访问这些页面可以不需要Layout,可能用于内嵌在别的系统(不会显示在菜单中) */
  15. const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles);
  16. // const staticRoutes: RouteRecordRaw[] = mergeRouteModules(staticRouteFiles);
  17. const staticRoutes: RouteRecordRaw[] = [];
  18. // const externalRoutes: RouteRecordRaw[] = [];
  19. /** 路由列表,由基本路由、外部路由和404兜底路由组成
  20. * 无需走权限验证(会一直显示在菜单中) */
  21. const routes: RouteRecordRaw[] = [
  22. ...coreRoutes,
  23. ...externalRoutes,
  24. fallbackNotFoundRoute,
  25. ];
  26. /** 基本路由列表,这些路由不需要进入权限拦截 */
  27. const coreRouteNames = traverseTreeValues(coreRoutes, (route) => route.name);
  28. /** 有权限校验的路由列表,包含动态路由和静态路由 */
  29. const accessRoutes = [...dynamicRoutes, ...staticRoutes];
  30. const componentKeys: string[] = Object.keys(
  31. import.meta.glob('../../views/**/*.vue'),
  32. )
  33. .filter((item) => !item.includes('/modules/'))
  34. .map((v) => {
  35. const path = v.replace('../../views/', '/');
  36. return path.endsWith('.vue') ? path.slice(0, -4) : path;
  37. });
  38. export { accessRoutes, componentKeys, coreRouteNames, routes };