fix(router): preserve static routes during session reset
This commit is contained in:
1 parent
81ccaa6e01
commit
3c474ad135
5 files changed
+12
-12
No files matched your search
@@ -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')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 })
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in new issue
Block a user