import axios from "axios"; import { message } from "antd"; const http = axios.create({ baseURL: "", timeout: 15000 }); http.interceptors.request.use((config) => { const token = localStorage.getItem("accessToken"); if (token) { config.headers = config.headers || {}; config.headers.Authorization = `Bearer ${token}`; } return config; }); http.interceptors.response.use( (resp) => { const body = resp.data; // 如果返回的 code 不是 0,表示业务错误 if (body && body.code !== "0") { const errorMsg = body.msg || "请求失败"; message.error(errorMsg); // 自动展示后端错误消息 const err = new Error(errorMsg); (err as any).code = body.code; (err as any).msg = body.msg; return Promise.reject(err); } return resp; }, (error) => { // 处理 HTTP 状态码错误 (4xx, 5xx) if (error.response && (error.response.status === 401 || error.response.status === 403)) { localStorage.removeItem("accessToken"); localStorage.removeItem("refreshToken"); sessionStorage.removeItem("userProfile"); window.location.href = "/login?timeout=1"; return Promise.reject(error); } const body = error.response?.data; const errorMsg = body?.msg || error.message || "网络异常"; // 防止重复弹出相同的提示(可选逻辑,根据需要调整) message.error(errorMsg); if (body && body.msg) { const err = new Error(body.msg); (err as any).code = body.code; (err as any).msg = body.msg; return Promise.reject(err); } return Promise.reject(error); } ); export default http;