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