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