From 9bcb8a9f273566c803bb6124889f90c88734d970 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: Thu, 11 Jun 2026 13:17:19 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=A1=B5=E5=90=8E=E7=AB=AF403=E4=BC=9A=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E5=BC=B9=E7=AA=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/request.ts | 14 +++++++++++++- src/layouts/BasicLayout.tsx | 5 ++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/api/request.ts b/src/api/request.ts index 8f37dbfc..63e1826e 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -26,6 +26,18 @@ export interface RequestConfig extends AxiosRequestConfig { export const isRelogin = { show: false }; +type HandledRequestError = Error & { isHandled?: boolean }; + +function createHandledError(message: string) { + const error = new Error(message) as HandledRequestError; + error.isHandled = true; + return error; +} + +export function isHandledRequestError(error: unknown) { + return Boolean((error as { isHandled?: boolean } | undefined)?.isHandled); +} + export function globalHeaders() { return { Authorization: `Bearer ${getToken() || ''}`, @@ -196,7 +208,7 @@ service.interceptors.response.use( } }); } - return Promise.reject(new Error('无效的会话,或者会话已过期,请重新登录。')); + return Promise.reject(createHandledError('无效的会话,或者会话已过期,请重新登录。')); } if (code === SERVER_ERROR || code === WARN || code !== SUCCESS) { diff --git a/src/layouts/BasicLayout.tsx b/src/layouts/BasicLayout.tsx index 4d22241a..480ed2f8 100644 --- a/src/layouts/BasicLayout.tsx +++ b/src/layouts/BasicLayout.tsx @@ -10,6 +10,7 @@ import dayjs from 'dayjs'; import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; import type { RuntimeMenuItem } from '@/api/types'; import { logout } from '@/api/login'; +import { isHandledRequestError } from '@/api/request'; import defaultAvatar from '@/assets/images/profile.jpg'; import appLogo from '@/assets/logo/logo.png'; import ExternalLinkButton from '@/components/layout/ExternalLinkButton'; @@ -81,7 +82,9 @@ export default function BasicLayout() { } }) .catch(error => { - message.error(error.message || '加载用户信息失败'); + if (!isHandledRequestError(error)) { + message.error(error.message || '加载用户信息失败'); + } closePush(); pushStartedRef.current = false; removeToken();