From ad991e248a452a8913bc9e4a0af18c3f90a2606f Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Wed, 26 Jun 2024 11:34:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E8=B7=AF=E7=94=B1name=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/modules/permission.ts | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index cf12a73..a8611a9 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -58,6 +58,8 @@ export const usePermissionStore = defineStore('permission', () => { setSidebarRouters(constantRoutes.concat(sidebarRoutes)); setDefaultRoutes(sidebarRoutes); setTopbarRoutes(defaultRoutes); + // 路由name重复检查 + duplicateRouteChecker(asyncRoutes, sidebarRoutes); return new Promise((resolve) => resolve(rewriteRoutes)); }; @@ -167,4 +169,42 @@ export const usePermissionStoreHook = () => { return usePermissionStore(store); }; +interface Route { + name?: string | symbol; + path: string; + children?: Route[]; +} + +/** + * 检查路由name是否重复 + * @param localRoutes 本地路由 + * @param routes 动态路由 + */ +function duplicateRouteChecker(localRoutes: Route[], routes: Route[]) { + // 展平 + function flatRoutes(routes: Route[]) { + const res: Route[] = []; + routes.forEach((route) => { + if (route.children) { + res.push(...flatRoutes(route.children)); + } else { + res.push(route); + } + }); + return res; + } + + const allRoutes = flatRoutes([...localRoutes, ...routes]); + + const nameList: string[] = []; + allRoutes.forEach((route) => { + const name = route.name.toString(); + if (name && nameList.includes(name)) { + console.error(`路由名称: [${name}] 重复, 会造成 404`); + return; + } + nameList.push(route.name.toString()); + }); +} + export default usePermissionStore; From 762ebd4ededbc1cacbaf301a47376df8c34473eb Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Wed, 26 Jun 2024 11:59:41 +0800 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=E5=A2=9E=E5=8A=A0=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/modules/permission.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index a8611a9..8bab2d8 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -200,7 +200,13 @@ function duplicateRouteChecker(localRoutes: Route[], routes: Route[]) { allRoutes.forEach((route) => { const name = route.name.toString(); if (name && nameList.includes(name)) { - console.error(`路由名称: [${name}] 重复, 会造成 404`); + const message = `路由名称: [${name}] 重复, 会造成 404`; + console.error(message); + ElNotification({ + title: '路由名称重复', + message, + type: 'error' + }); return; } nameList.push(route.name.toString());