From 8f217a2cc8775811bcc5b4b0abf9ae5d31e0079a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 29 Jun 2026 11:06:15 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E5=BC=82=E5=B8=B8500=20=E5=89=8D=E7=AB=AF=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/request.ts | 63 +++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/src/api/request.ts b/src/api/request.ts index 63e1826e..b601db74 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -1,5 +1,5 @@ import { history } from '@umijs/max'; -import { Modal } from 'antd'; +import { message, Modal } from 'antd'; import axios, { type AxiosError, type AxiosRequestConfig } from 'axios'; import { useAppStore } from '@/stores/appStore'; import { useTagsViewStore } from '@/stores/tagsViewStore'; @@ -45,6 +45,32 @@ export function globalHeaders() { }; } +function showRequestError(content: string) { + message.error({ content, key: `request-error:${content}` }); +} + +function showReloginConfirm() { + if (isRelogin.show) return; + isRelogin.show = true; + Modal.confirm({ + title: '系统提示', + content: '登录状态已过期,您可以继续留在该页面,或者重新登录', + okText: '重新登录', + cancelText: '取消', + onOk: () => { + isRelogin.show = false; + removeToken(); + useTagsViewStore.getState().resetTags(); + history.replace( + `/login?redirect=${encodeURIComponent(`${window.location.pathname || '/'}${window.location.search || ''}`)}` + ); + }, + onCancel: () => { + isRelogin.show = false; + } + }); +} + function stableDataString(data: unknown) { if (data instanceof FormData) return ''; if (typeof data === 'string') return data; @@ -188,37 +214,28 @@ service.interceptors.response.use( const msg = response.data?.msg || '系统未知错误'; if (code === 401) { - if (!isRelogin.show) { - isRelogin.show = true; - Modal.confirm({ - title: '系统提示', - content: '登录状态已过期,您可以继续留在该页面,或者重新登录', - okText: '重新登录', - cancelText: '取消', - onOk: () => { - isRelogin.show = false; - removeToken(); - useTagsViewStore.getState().resetTags(); - history.replace( - `/login?redirect=${encodeURIComponent(`${window.location.pathname || '/'}${window.location.search || ''}`)}` - ); - }, - onCancel: () => { - isRelogin.show = false; - } - }); - } + showReloginConfirm(); return Promise.reject(createHandledError('无效的会话,或者会话已过期,请重新登录。')); } if (code === SERVER_ERROR || code === WARN || code !== SUCCESS) { - return Promise.reject(new Error(msg)); + showRequestError(msg); + return Promise.reject(createHandledError(msg)); } return response.data; }, async error => { - return Promise.reject(new Error(await getErrorMessage(error))); + if (axios.isAxiosError(error) && error.response?.status === 401) { + showReloginConfirm(); + return Promise.reject(createHandledError('无效的会话,或者会话已过期,请重新登录。')); + } + + const msg = axios.isAxiosError(error) + ? await getErrorMessage(error) + : normalizeErrorMessage((error as Error | undefined)?.message) || '系统未知错误'; + showRequestError(msg); + return Promise.reject(createHandledError(msg)); } );