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