fix(router): preserve static routes during session reset

This commit is contained in:
Kroytz committed 2026-07-24 13:32:57 +08:00
1 parent 81ccaa6e01
commit 3c474ad135
5 files changed
+12 -12

No files matched your search

+1 -1
View File
@@ -200,7 +200,7 @@ const handleAuthorized = () => {
confirmButtonText: t('login.relogin'), confirmButtonText: t('login.relogin'),
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
resetRouter() // 重置静态路由表 resetRouter() // 重置动态路由表
isRelogin.show = false isRelogin.show = false
// 重新加载后由路由守卫向服务端确认会话 // 重新加载后由路由守卫向服务端确认会话
window.location.href = window.location.href window.location.href = window.location.href
@@ -50,7 +50,7 @@ async function goLogin() {
await userStore.loginOut().catch(() => {}) await userStore.loginOut().catch(() => {})
// 登出后清理 // 登出后清理
tagsViewStore.delAllViews() tagsViewStore.delAllViews()
resetRouter() // 重置静态路由表 resetRouter() // 重置动态路由表
lockStore.resetLockInfo() lockStore.resetLockInfo()
replace('/login') replace('/login')
} }
+2 -2
View File
@@ -1,4 +1,4 @@
import router, { resetRouter } from './router' import router, { addDynamicRoute, resetRouter } from './router'
import type { RouteRecordRaw } from 'vue-router' import type { RouteRecordRaw } from 'vue-router'
import { isRelogin } from '@/config/axios/service' import { isRelogin } from '@/config/axios/service'
import { useTitle } from '@/hooks/web/useTitle' import { useTitle } from '@/hooks/web/useTitle'
@@ -55,7 +55,7 @@ router.beforeEach(async (to, _from, next) => {
const permissionStore = usePermissionStoreWithOut() const permissionStore = usePermissionStoreWithOut()
permissionStore.generateRoutes(userStore.getMenus) permissionStore.generateRoutes(userStore.getMenus)
permissionStore.getAddRouters.forEach((route) => { permissionStore.getAddRouters.forEach((route) => {
router.addRoute(route as unknown as RouteRecordRaw) addDynamicRoute(route as unknown as RouteRecordRaw)
}) })
next({ path: to.path, query: to.query, hash: to.hash, replace: true }) next({ path: to.path, query: to.query, hash: to.hash, replace: true })
+7 -7
View File
@@ -11,14 +11,14 @@ const router = createRouter({
scrollBehavior: () => ({ left: 0, top: 0 }) scrollBehavior: () => ({ left: 0, top: 0 })
}) })
const removeDynamicRoutes: Array<() => void> = []
export const addDynamicRoute = (route: RouteRecordRaw): void => {
removeDynamicRoutes.push(router.addRoute(route))
}
export const resetRouter = (): void => { export const resetRouter = (): void => {
const resetWhiteNameList = ['Redirect', 'Login', 'NoFind', 'Root'] removeDynamicRoutes.splice(0).forEach((removeRoute) => removeRoute())
router.getRoutes().forEach((route) => {
const { name } = route
if (name && !resetWhiteNameList.includes(name as string)) {
router.hasRoute(name) && router.removeRoute(name)
}
})
} }
export const setupRouter = (app: App<Element>) => { export const setupRouter = (app: App<Element>) => {
@@ -35,7 +35,7 @@ export const usePermissionStore = defineStore('permission', {
this.addRouters = routerMap.concat([ this.addRouters = routerMap.concat([
{ {
path: '/:path(.*)*', path: '/:path(.*)*',
redirect: '/404', component: () => import('@/views/Error/404.vue'),
name: '404Page', name: '404Page',
meta: { meta: {
hidden: true, hidden: true,