From 2b09b05f13ba9286245dd12bcc828d15ca02f9a0 Mon Sep 17 00:00:00 2001 From: panda <1565636758@qq.com> Date: Thu, 24 Apr 2025 11:10:25 +0800 Subject: [PATCH] =?UTF-8?q?service=E8=AF=B7=E6=B1=82=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E4=B8=AD=E5=A2=9E=E5=8A=A0=E5=8D=95=E8=B4=A6=E5=8F=B7=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=A8=A1=E5=BC=8F=E4=B8=8B=E8=A2=AB=E8=B8=A2=E4=B8=8B?= =?UTF-8?q?=E7=BA=BF=E7=9A=84=E5=8F=8B=E5=A5=BD=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/axios/service.ts | 49 +++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 8 deletions(-) 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 }