From 27d36f797012e33280f36117e86bae84ad1ca06c Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期三, 26 六月 2024 12:02:28 +0800 Subject: [PATCH] !129 feat: 路由name重复检查 Merge pull request !129 from 玲娜贝er/dev --- src/store/modules/permission.ts | 71 +++++++++++++++++++++++++++++++++++ 1 files changed, 70 insertions(+), 1 deletions(-) diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index 14d2387..8bab2d8 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -18,6 +18,16 @@ const topbarRouters = ref<RouteRecordRaw[]>([]); const sidebarRouters = ref<RouteRecordRaw[]>([]); + const getRoutes = (): RouteRecordRaw[] => { + return routes.value; + }; + const getSidebarRoutes = (): RouteRecordRaw[] => { + return sidebarRouters.value; + }; + const getTopbarRoutes = (): RouteRecordRaw[] => { + return topbarRouters.value; + }; + const setRoutes = (newRoutes: RouteRecordRaw[]): void => { addRoutes.value = newRoutes; routes.value = constantRoutes.concat(newRoutes); @@ -48,6 +58,8 @@ setSidebarRouters(constantRoutes.concat(sidebarRoutes)); setDefaultRoutes(sidebarRoutes); setTopbarRoutes(defaultRoutes); + // 璺敱name閲嶅妫�鏌� + duplicateRouteChecker(asyncRoutes, sidebarRoutes); return new Promise<RouteRecordRaw[]>((resolve) => resolve(rewriteRoutes)); }; @@ -108,7 +120,20 @@ }); return children; }; - return { routes, setRoutes, generateRoutes, setSidebarRouters, topbarRouters, sidebarRouters, defaultRoutes }; + return { + routes, + topbarRouters, + sidebarRouters, + defaultRoutes, + + getRoutes, + getSidebarRoutes, + getTopbarRoutes, + + setRoutes, + generateRoutes, + setSidebarRouters + }; }); // 鍔ㄦ�佽矾鐢遍亶鍘嗭紝楠岃瘉鏄惁鍏峰鏉冮檺 @@ -144,4 +169,48 @@ return usePermissionStore(store); }; +interface Route { + name?: string | symbol; + path: string; + children?: Route[]; +} + +/** + * 妫�鏌ヨ矾鐢眓ame鏄惁閲嶅 + * @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)) { + const message = `璺敱鍚嶇О: [${name}] 閲嶅, 浼氶�犳垚 404`; + console.error(message); + ElNotification({ + title: '璺敱鍚嶇О閲嶅', + message, + type: 'error' + }); + return; + } + nameList.push(route.name.toString()); + }); +} + export default usePermissionStore; -- Gitblit v1.9.3