diff --git a/src/router/index.ts b/src/router/index.ts index 91d26d2b0b..d4ffd1f151 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -7,7 +7,13 @@ import { buildHierarchyTree } from "@/utils/tree"; import remainingRouter from "./modules/remaining"; import { useMultiTagsStoreHook } from "@/store/modules/multiTags"; import { usePermissionStoreHook } from "@/store/modules/permission"; -import { isUrl, openLink, storageLocal, isAllEmpty } from "@pureadmin/utils"; +import { + isUrl, + openLink, + storageLocal, + isAllEmpty, + cloneDeep +} from "@pureadmin/utils"; import { ascending, getTopMenu, @@ -55,6 +61,9 @@ export const constantRoutes: Array = formatTwoStageRoutes( formatFlatteningRoutes(buildHierarchyTree(ascending(routes.flat(Infinity)))) ); +/** 初始的静态路由,用来在退出登陆时重置路由 */ +const initConstantRoutes: Array = cloneDeep(constantRoutes); + /** 用于渲染菜单,保持原始层级 */ export const constantMenus: Array = ascending( routes.flat(Infinity) @@ -87,17 +96,13 @@ export const router: Router = createRouter({ /** 重置路由 */ export function resetRouter() { - router.getRoutes().forEach(route => { - const { name, meta } = route; - if (name && router.hasRoute(name) && meta?.backstage) { - router.removeRoute(name); - router.options.routes = formatTwoStageRoutes( - formatFlatteningRoutes( - buildHierarchyTree(ascending(routes.flat(Infinity))) - ) - ); - } - }); + router.clearRoutes(); + for (const route of initConstantRoutes.concat(...(remainingRouter as any))) { + router.addRoute(route); + } + router.options.routes = formatTwoStageRoutes( + formatFlatteningRoutes(buildHierarchyTree(ascending(routes.flat(Infinity)))) + ); usePermissionStoreHook().clearAllCachePage(); } diff --git a/src/router/utils.ts b/src/router/utils.ts index dd6df9aa1e..1e9157114d 100644 --- a/src/router/utils.ts +++ b/src/router/utils.ts @@ -172,6 +172,8 @@ function handleAsyncRoutes(routeList) { const flattenRouters: any = router .getRoutes() .find(n => n.path === "/"); + // 保持router.options.routes[0].children与path为"/"的children一致,防止数据不一致导致异常 + flattenRouters.children = router.options.routes[0].children; router.addRoute(flattenRouters); } }