From d428d0793680de01f972306e6fc6e4b6a5738f84 Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Thu, 27 Mar 2025 11:40:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B1=E8=B4=A5=E6=B2=A1=E6=9C=89=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/src/requestConfig.ts | 39 ++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/react-ui/src/requestConfig.ts b/react-ui/src/requestConfig.ts index 06dd26b8..1b496981 100644 --- a/react-ui/src/requestConfig.ts +++ b/react-ui/src/requestConfig.ts @@ -53,7 +53,7 @@ export const requestConfig: RequestConfig = { ], responseInterceptors: [ [ - (response: AxiosResponse) => { + async (response: AxiosResponse) => { const { status, data, config } = response || {}; const options = config as RequestOptions; const skipErrorHandler = options?.skipErrorHandler; @@ -63,20 +63,45 @@ export const requestConfig: RequestConfig = { Loading.hide(); } if (status >= 200 && status < 300) { - if (status === 204) { + // 无内容或者无需验证 + if (status === 204 || skipValidating) { return response; - } else if (data && (skipValidating || data instanceof Blob || data.code === 200)) { + } + + if (data && data.code === 200) { + return response; + } + + // Blob 数据 + if (data && data instanceof Blob && data.size > 0) { + // 下载文件失败时,返回的是 JSON 数据,格式为:{code: 500, msg: "xxx"} + if (data.type === 'application/json') { + try { + const text = await data.text(); + const json = JSON.parse(text); + + if (json.code === 500) { + popupError(json.msg || '请求失败', skipErrorHandler); + return Promise.reject(json); + } + } catch (error) { + console.error('JSON 解析失败', error); + } + } return response; - } else if (data && data.code === 401) { + } + + // Token 失效 + if (data && data.code === 401) { clearSessionToken(); setRemoteMenu(null); gotoLoginPage(false); popupError('请重新登录'); return Promise.reject(response); - } else { - popupError(data?.msg ?? '请求失败', skipErrorHandler); - return Promise.reject(response); } + + popupError(data?.msg ?? '请求失败', skipErrorHandler); + return Promise.reject(response); } else { popupError('请求失败', skipErrorHandler); return Promise.reject(response);