From 4d6b02dada557b4186cdcef843cd3859aeeaac01 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 02 四月 2026 19:28:57 +0800
Subject: [PATCH] #

---
 rsf-design/src/router/guards/beforeEach.js |   66 ++++++++++++++++++++++++++++-----
 1 files changed, 56 insertions(+), 10 deletions(-)

diff --git a/rsf-design/src/router/guards/beforeEach.js b/rsf-design/src/router/guards/beforeEach.js
index 1b797f0..96c6a21 100644
--- a/rsf-design/src/router/guards/beforeEach.js
+++ b/rsf-design/src/router/guards/beforeEach.js
@@ -50,6 +50,32 @@
   pendingRouteLocation = null
   return queuedRoute
 }
+function isSameRouteLocation(firstRoute, secondRoute) {
+  if (!firstRoute || !secondRoute) {
+    return false
+  }
+  return (
+    firstRoute.path === secondRoute.path &&
+    JSON.stringify(firstRoute.query || {}) === JSON.stringify(secondRoute.query || {}) &&
+    (firstRoute.hash || '') === (secondRoute.hash || '')
+  )
+}
+function schedulePendingRouteNavigation(router, routeLocation) {
+  if (!routeLocation) {
+    return
+  }
+  setTimeout(() => {
+    const currentRoute = router.currentRoute?.value
+    if (isSameRouteLocation(currentRoute, routeLocation)) {
+      return
+    }
+    void router.push({
+      path: routeLocation.path,
+      query: routeLocation.query,
+      hash: routeLocation.hash
+    })
+  }, 0)
+}
 function setupBeforeEachGuard(router) {
   routeRegistry = new RouteRegistry(router)
   router.beforeEach(async (to, from, next) => {
@@ -176,33 +202,53 @@
     menuStore.addRemoveRouteFns(routeRegistry?.getRemoveRouteFns() || [])
     IframeRouteManager.getInstance().save()
     useWorktabStore().validateWorktabs(router)
-    const targetLocation = consumePendingRoute() || createRouteLocation(to)
-    if (isStaticRoute(targetLocation.path)) {
+    const initialTargetLocation = createRouteLocation(to)
+    const queuedTargetLocation = consumePendingRoute()
+    if (isStaticRoute(initialTargetLocation.path)) {
       routeInitInProgress = false
-      next(targetLocation)
+      next(initialTargetLocation)
+      if (queuedTargetLocation) {
+        schedulePendingRouteNavigation(router, queuedTargetLocation)
+      }
       return
     }
     const { homePath } = useCommon()
-    const { path: validatedPath, hasPermission } = RoutePermissionValidator.validatePath(
-      targetLocation.path,
+    const initialValidation = RoutePermissionValidator.validatePath(
+      initialTargetLocation.path,
       menuList,
       homePath.value || '/'
     )
+    const queuedValidation = queuedTargetLocation
+      ? RoutePermissionValidator.validatePath(
+          queuedTargetLocation.path,
+          menuList,
+          homePath.value || '/'
+        )
+      : null
     routeInitInProgress = false
-    if (!hasPermission) {
+    if (!initialValidation.hasPermission) {
       closeLoading()
-      console.warn(`[RouteGuard] 鐢ㄦ埛鏃犳潈闄愯闂矾寰�: ${targetLocation.path}锛屽凡璺宠浆鍒伴椤礰)
+      console.warn(`[RouteGuard] 鐢ㄦ埛鏃犳潈闄愯闂矾寰�: ${initialTargetLocation.path}锛屽凡璺宠浆鍒伴椤礰)
       next({
-        path: validatedPath,
+        path: initialValidation.path,
         replace: true
       })
     } else {
       next({
-        ...targetLocation,
-        path: validatedPath,
+        ...initialTargetLocation,
+        path: initialValidation.path,
         replace: true
       })
     }
+    if (queuedValidation) {
+      if (!queuedValidation.hasPermission) {
+        console.warn(`[RouteGuard] 鐢ㄦ埛鏃犳潈闄愯闂矾寰�: ${queuedTargetLocation.path}锛屽凡璺宠浆鍒伴椤礰)
+      }
+      schedulePendingRouteNavigation(router, {
+        ...queuedTargetLocation,
+        path: queuedValidation.path
+      })
+    }
   } catch (error) {
     console.error('[RouteGuard] 鍔ㄦ�佽矾鐢辨敞鍐屽け璐�:', error)
     closeLoading()

--
Gitblit v1.9.1