去掉登录退出的冗余代码

在大神inori_lover的指导下,实现自动导入路由
pull/768/head
panda 2025-05-08 09:57:34 +08:00
parent 39d354aeab
commit 1d04e86c08
2 changed files with 46 additions and 33 deletions

View File

@ -114,7 +114,7 @@ service.interceptors.response.use(
isRefreshToken = true
// 1. 如果获取不到刷新令牌,则只能执行登出操作
if (!getRefreshToken()) {
return handleAuthorized()
return handleAuthorized(t('sys.api.timeoutMessage'))
}
// 2. 进行刷新访问令牌
try {
@ -122,7 +122,7 @@ service.interceptors.response.use(
const retData = (await refreshTokenRes).data
if (retData.code === 1002000499) {
//登录被踢下线的处理 by panda 25.04.23
return handleOfflineAuthorized(retData.msg)
return handleAuthorized(retData.msg)
} else {
// 2.1 刷新成功,则回放队列的请求 + 当前请求
setToken((await refreshTokenRes).data.data)
@ -140,7 +140,7 @@ service.interceptors.response.use(
cb()
})
// 提示是否要登出。即不回放当前请求!不然会形成递归
return handleAuthorized()
return handleAuthorized(t('sys.api.timeoutMessage'))
} finally {
requestList = []
isRefreshToken = false
@ -175,7 +175,7 @@ service.interceptors.response.use(
if (msg === '无效的刷新令牌') {
// hard coding忽略这个提示直接登出
console.log(msg)
return handleAuthorized()
return handleAuthorized(t('sys.api.timeoutMessage'))
} else {
ElNotification.error({ title: msg })
}
@ -204,11 +204,11 @@ const refreshToken = async () => {
axios.defaults.headers.common['tenant-id'] = getTenantId()
return await axios.post(base_url + '/system/auth/refresh-token?refreshToken=' + getRefreshToken())
}
const handleAuthorized = () => {
const handleAuthorized = (msg: any) => {
const { t } = useI18n()
if (!isRelogin.show) {
isRelogin.show = true
ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), {
ElMessageBox.confirm(msg, t('common.confirmTitle'), {
showCancelButton: false,
closeOnClickModal: false,
showClose: false,
@ -226,31 +226,4 @@ const handleAuthorized = () => {
}
return Promise.reject(t('sys.api.timeoutMessage'))
}
/** 账号被踢下线的处理 by panda 25.04.23 */
const handleOfflineAuthorized = (msg: any) => {
const { t } = useI18n()
if (!isRelogin.show) {
// 如果已经到登录页面则不进行弹窗提示
if (window.location.href.includes('login')) {
return
}
isRelogin.show = true
ElMessageBox.confirm(msg, t('common.confirmTitle'), {
showCancelButton: false,
closeOnClickModal: false,
showClose: false,
closeOnPressEscape: false,
confirmButtonText: '确定',
type: 'warning'
}).then(() => {
resetRouter() // 重置静态路由表
deleteUserCache() // 删除用户缓存
removeToken()
isRelogin.show = false
// 干掉token后再走一次路由让它过router.beforeEach的校验
window.location.href = window.location.href
})
}
return Promise.reject(msg)
}
export { service }

40
src/router/index.ts Normal file
View File

@ -0,0 +1,40 @@
import type { App } from 'vue'
import type { RouteRecordRaw } from 'vue-router'
import { createRouter, createWebHistory } from 'vue-router'
// 自动导入modules目录下的所有静态路由项目可以按模块分类增加路由文件
// by panda & inori_lover 25.03.21
const allRouters: RouteRecordRaw[] = Object.values<{ default: RouteRecordRaw[] }>(
import.meta.glob('./modules/*.ts', { eager: true })
).reduce<RouteRecordRaw[]>((acc, module) => {
// just ensure module.default is valid route define
if (Array.isArray(module?.default)) {
acc.push(...module.default)
}
return acc
}, [])
// 创建路由实例
const router = createRouter({
history: createWebHistory(import.meta.env.VITE_BASE_PATH), // createWebHashHistory URL带#createWebHistory URL不带#
strict: true,
routes: allRouters, //自动导入的所有静态路由 by panda & inori_lover 25.03.21
scrollBehavior: () => ({ left: 0, top: 0 })
})
export const resetRouter = (): void => {
const resetWhiteNameList = ['Redirect', 'Login', 'NoFind', 'Root']
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>) => {
app.use(router)
}
export default router