办学质量监测教学评价系统
shenrongliang
2025-06-13 11d86cc6c26bb4f709e407acadf4805c2024e79f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import type { Router, RouteRecordName, RouteRecordRaw } from 'vue-router';
 
import { traverseTreeValues } from '@vben-core/shared/utils';
 
/**
 * @zh_CN 重置所有路由,如有指定白名单除外
 */
export function resetStaticRoutes(router: Router, routes: RouteRecordRaw[]) {
  // 获取静态路由所有节点包含子节点的 name,并排除不存在 name 字段的路由
  const staticRouteNames = traverseTreeValues<
    RouteRecordRaw,
    RouteRecordName | undefined
  >(routes, (route) => {
    // 这些路由需要指定 name,防止在路由重置时,不能删除没有指定 name 的路由
    if (!route.name) {
      console.warn(
        `The route with the path ${route.path} needs to have the field name specified.`,
      );
    }
    return route.name;
  });
 
  const { getRoutes, hasRoute, removeRoute } = router;
  const allRoutes = getRoutes();
  allRoutes.forEach(({ name }) => {
    // 存在于路由表且非白名单才需要删除
    if (name && !staticRouteNames.includes(name) && hasRoute(name)) {
      removeRoute(name);
    }
  });
}