1
0

index.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { createRouter, createWebHashHistory } from "vue-router";
  2. import { Routes, routes, system, Route } from "./config";
  3. import { RouteName } from "./routeName";
  4. export * from "./config";
  5. export * from "./routeName";
  6. export const router = createRouter({
  7. history: createWebHashHistory(),
  8. routes: routes as any,
  9. });
  10. router.beforeEach((to, from, next) => {
  11. if (!to.name || to.name === RouteName.viewLayout) {
  12. router.replace({ name: RouteName.scene });
  13. return;
  14. }
  15. next();
  16. });
  17. const getConfig = (routes: Routes) => {
  18. let config: Routes = [];
  19. for (let item of routes) {
  20. if (!system.includes(item)) {
  21. config.push({
  22. ...item,
  23. children: item.children && getConfig(item.children),
  24. });
  25. }
  26. }
  27. return config;
  28. };
  29. export const routeIsSystem = (proutes = routes) => {
  30. for (let item of proutes) {
  31. if (!system.includes(item)) {
  32. if (item.name === router.currentRoute.value?.name) {
  33. return false;
  34. } else if (item.children && !routeIsSystem(item.children)) {
  35. return false;
  36. }
  37. }
  38. }
  39. return true;
  40. };
  41. export const findRoute = (
  42. routeName: string,
  43. fullPath = false,
  44. routeAll = routes
  45. ): Route | null => {
  46. for (const route of routeAll) {
  47. if (route.name === routeName) {
  48. return route;
  49. } else if (route.children) {
  50. const childRoute = findRoute(routeName, fullPath, route.children);
  51. if (childRoute) {
  52. return fullPath ? { ...route, children: [childRoute] } : childRoute;
  53. }
  54. }
  55. }
  56. return null;
  57. };