From ba24afce52bcdffdbccf6475544c79c4eefcd14e Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期二, 09 七月 2024 11:02:34 +0800 Subject: [PATCH] !131 ♥️发布 vue 版本 5.2.1 与 cloud 版本 2.2.0 Merge pull request !131 from 疯狂的狮子Li/dev --- src/store/modules/permission.ts | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index cf12a73..2e719ba 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -9,6 +9,8 @@ import ParentView from '@/components/ParentView/index.vue'; import InnerLink from '@/layout/components/InnerLink/index.vue'; +import { createCustomNameComponent } from '@/utils/createCustomNameComponent'; + // 鍖归厤views閲岄潰鎵�鏈夌殑.vue鏂囦欢 const modules = import.meta.glob('./../../views/**/*.vue'); export const usePermissionStore = defineStore('permission', () => { @@ -58,6 +60,8 @@ setSidebarRouters(constantRoutes.concat(sidebarRoutes)); setDefaultRoutes(sidebarRoutes); setTopbarRoutes(defaultRoutes); + // 璺敱name閲嶅妫�鏌� + duplicateRouteChecker(asyncRoutes, sidebarRoutes); return new Promise<RouteRecordRaw[]>((resolve) => resolve(rewriteRoutes)); }; @@ -80,7 +84,7 @@ } else if (route.component?.toString() === 'InnerLink') { route.component = InnerLink; } else { - route.component = loadView(route.component); + route.component = loadView(route.component, route.name as string); } if (route.children != null && route.children && route.children.length) { route.children = filterAsyncRouter(route.children, route, type); @@ -151,12 +155,12 @@ return res; }; -export const loadView = (view: any) => { +export const loadView = (view: any, name: string) => { let res; for (const path in modules) { const dir = path.split('views/')[1].split('.vue')[0]; if (dir === view) { - res = () => modules[path](); + res = createCustomNameComponent(modules[path], { name }); } } return res; @@ -167,4 +171,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