service请求拦截中增加单账号登录模式下被踢下线的友好提示

pull/768/head
panda 2025-04-24 11:10:25 +08:00
parent 565fad6cc5
commit 2b09b05f13
1 changed files with 41 additions and 8 deletions

View File

@ -119,14 +119,20 @@ service.interceptors.response.use(
// 2. 进行刷新访问令牌
try {
const refreshTokenRes = await refreshToken()
// 2.1 刷新成功,则回放队列的请求 + 当前请求
setToken((await refreshTokenRes).data.data)
config.headers!.Authorization = 'Bearer ' + getAccessToken()
requestList.forEach((cb: any) => {
cb()
})
requestList = []
return service(config)
const retData = (await refreshTokenRes).data
if (retData.code === 499) {
//登录被踢下线的处理 by panda 25.04.23
return handleOfflineAuthorized(retData.msg)
} else {
// 2.1 刷新成功,则回放队列的请求 + 当前请求
setToken((await refreshTokenRes).data.data)
config.headers!.Authorization = 'Bearer ' + getAccessToken()
requestList.forEach((cb: any) => {
cb()
})
requestList = []
return service(config)
}
} catch (e) {
// 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。
// 2.2 刷新失败,只回放队列的请求
@ -220,4 +226,31 @@ 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 }