From c7566bba45e6f90594d36ec4b80ac4ff89f577ee Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 08 十月 2026 14:19:36 +0800
Subject: [PATCH] 项目重构

---
 src/store/modules/permission.js |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 51 insertions(+), 3 deletions(-)

diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
index 36da015..53c6372 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -36,9 +36,11 @@
         return new Promise(resolve => {
           // 鍚戝悗绔姹傝矾鐢辨暟鎹�
           getRouters().then(res => {
-            const sdata = JSON.parse(JSON.stringify(res.data))
-            const rdata = JSON.parse(JSON.stringify(res.data))
-            const defaultData = JSON.parse(JSON.stringify(res.data))
+            // 涓変唤鏁版嵁鍚勮嚜娣辨嫹璐濆悗鍒嗗埆鏋勫缓锛宯ormalizeRouteNames 鏄‘瀹氭�х殑锛�
+            // 鍥犳涓夊寰楀埌鐨� name 瀹屽叏涓�鑷达紝椤电缂撳瓨涓嶄細瀵逛笉涓娿��
+            const sdata = normalizeRouteNames(JSON.parse(JSON.stringify(res.data)))
+            const rdata = normalizeRouteNames(JSON.parse(JSON.stringify(res.data)))
+            const defaultData = normalizeRouteNames(JSON.parse(JSON.stringify(res.data)))
             const sidebarRoutes = filterAsyncRouter(sdata)
             const rewriteRoutes = filterAsyncRouter(rdata, false, true)
             const defaultRoutes = filterAsyncRouter(defaultData)
@@ -55,6 +57,52 @@
     }
   })
 
+const isContainerRoute = (route) =>
+  route.component === 'Layout' || route.component === 'ParentView' || route.component === 'InnerLink'
+
+/**
+ * 淇鍚庣鑿滃崟閲岀殑璺敱閲嶅悕銆�
+ *
+ * 涓ょ鎯呭喌 vue-router 4 浼氬洜閲嶅悕涓㈣矾鐢辨垨鐩存帴鎶ラ敊锛�
+ * 1. 鐖跺鍣ㄤ笌鍚庝唬椤甸潰鍚屽悕锛堝 /standardMaterial 瀹瑰櫒涓庡叾涓嬬殑鏍囧噯鐗╄川娓呭崟椤甸兘鍙�
+ *    StandardMaterial锛夆�斺�攙ue-router 3 鍏佽锛寁ue-router 4 鎶�
+ *    "A route named X has been added as a child of a route with the same name"锛�
+ * 2. 涓や釜涓嶅悓鑿滃崟椤瑰彇浜嗗悓涓�涓� name锛堝涓や釜銆屾姤鍛婄粨鏋溿�嶉兘鍙� ReportResults锛夆�斺��
+ *    addRoute 鏃跺悗鑰呬細鎶婂墠鑰呮尋鎺夛紝琚尋鎺夌殑閭f潯璺緞灏辩偣涓嶅紑浜嗐��
+ *
+ * 澶勭悊绛栫暐锛氬厛淇濈暀绗竴娆″嚭鐜扮殑 name锛屽悗缁噸鍚嶄竴寰嬪姞鏁板瓧鍚庣紑銆傚鍣ㄤ笌鍚庝唬鍙跺瓙閲嶅悕
+ * 鏃朵紭鍏堟敼瀹瑰櫒鍚嶏紙椤甸潰 name 涓庣粍浠� name 涓�鑷达紝鏄〉绛剧紦瀛樼殑閿紝灏介噺涓嶅姩锛夈��
+ */
+function normalizeRouteNames(routes) {
+  const leafNames = new Set()
+  const collectLeafNames = (list) => {
+    list.forEach(route => {
+      if (route.name && !isContainerRoute(route)) leafNames.add(route.name)
+      if (route.children && route.children.length) collectLeafNames(route.children)
+    })
+  }
+  collectLeafNames(routes)
+
+  const used = new Set()
+  const walk = (list) => {
+    list.forEach(route => {
+      if (route.name) {
+        const conflict = used.has(route.name) ||
+          (isContainerRoute(route) && leafNames.has(route.name))
+        if (conflict) {
+          let suffix = 2
+          while (leafNames.has(`${route.name}${suffix}`) || used.has(`${route.name}${suffix}`)) suffix++
+          route.name = `${route.name}${suffix}`
+        }
+        used.add(route.name)
+      }
+      if (route.children && route.children.length) walk(route.children)
+    })
+  }
+  walk(routes)
+  return routes
+}
+
 // 閬嶅巻鍚庡彴浼犳潵鐨勮矾鐢卞瓧绗︿覆锛岃浆鎹负缁勪欢瀵硅薄
 function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
   return asyncRouterMap.filter(route => {

--
Gitblit v1.9.3