diff --git a/src/config/axios/service.ts b/src/config/axios/service.ts index 618f14a99..600de970a 100644 --- a/src/config/axios/service.ts +++ b/src/config/axios/service.ts @@ -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 }