diff --git a/src/layouts/components/LayoutToolbar.vue b/src/layouts/components/LayoutToolbar.vue index d38e5675..96641dce 100644 --- a/src/layouts/components/LayoutToolbar.vue +++ b/src/layouts/components/LayoutToolbar.vue @@ -160,7 +160,9 @@ function logout() { lockScroll: false, }).then(() => { userStore.logout().then(() => { - router.push(`/login?redirect=${route.fullPath}`); + // 若当前已在 404/401 等错误页,退出后不再跳回错误页 + const redirect = ["/404", "/401"].includes(route.path) ? "/" : route.fullPath; + router.push(`/login?redirect=${encodeURIComponent(redirect)}`); }); }); } @@ -191,8 +193,8 @@ function handleSettingsClick() { cursor: pointer; transition: all 0.3s; - // 确保子元素居中 - > * { + // 只对需要居中的子元素生效,不使用通配符避免影响选择器组件 + > [class^="i-svg:"] { display: flex; align-items: center; justify-content: center; diff --git a/src/router/guards/permission.ts b/src/router/guards/permission.ts index 5de45807..4685be0b 100644 --- a/src/router/guards/permission.ts +++ b/src/router/guards/permission.ts @@ -56,6 +56,10 @@ export function setupPermissionGuard() { // 路由 404 检查 if (to.matched.length === 0) { + // 从登录页跳转且目标路径无效,回退首页(避免不同用户权限不同导致的 404) + if (_from.path === "/login") { + return { path: "/", replace: true }; + } return "/404"; }