index.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import type { RouteRecordRaw } from 'vue-router';
  2. import type { App } from 'vue';
  3. import { basicRoutes } from './routes';
  4. import { createRouter as createVueRouter, destroyRouter, router } from './router';
  5. // 白名单应该包含基本静态路由
  6. const WHITE_NAME_LIST: string[] = [];
  7. const getRouteNames = (array: any[]) =>
  8. array.forEach((item) => {
  9. WHITE_NAME_LIST.push(item.name);
  10. getRouteNames(item.children || []);
  11. });
  12. getRouteNames(basicRoutes);
  13. /**
  14. * 创建路由实例
  15. */
  16. export function createRouter() {
  17. let router = createVueRouter(
  18. {
  19. routes: basicRoutes as unknown as RouteRecordRaw[],
  20. strict: true,
  21. scrollBehavior: () => ({ left: 0, top: 0 }),
  22. },
  23. true
  24. );
  25. // TODO 【QQYUN-4517】【表单设计器】记录分享路由守卫测试
  26. // @ts-ignore
  27. router.beforeEach(async (to, from, next) => {
  28. //console.group('【QQYUN-4517】beforeEach');
  29. //console.warn('from', from);
  30. //console.warn('to', to);
  31. //console.groupEnd();
  32. next();
  33. });
  34. }
  35. // reset router
  36. export function resetRouter() {
  37. router.getRoutes().forEach((route) => {
  38. const { name } = route;
  39. if (name && !WHITE_NAME_LIST.includes(name as string)) {
  40. router.hasRoute(name) && router.removeRoute(name);
  41. }
  42. });
  43. }
  44. // config router
  45. export function setupRouter(app: App<Element>) {
  46. app.use(router);
  47. }
  48. export { router, destroyRouter };