blob: a82602afd75e248fd65b8c0216dd2f2efc26ae88 [file] [log] [blame]
ybtda5978b2025-05-31 15:58:05 +08001import axios from "axios";
2import { message } from "antd";
3
4// 创建 axios 实例
5const request = axios.create({
ybt71fb2642025-06-09 00:29:36 +08006 baseURL: "/api",
ybtda5978b2025-05-31 15:58:05 +08007 timeout: 10000,
8});
9
10// 请求拦截器
ybtda5978b2025-05-31 15:58:05 +080011request.interceptors.request.use(
12 (config) => {
13 // 从 localStorage 获取 token
14 const token = localStorage.getItem("token");
15
16 // 如果有 token 则添加到请求头
17 if (token) {
ybtbac75f22025-06-08 22:31:15 +080018 config.headers["token"] = token;
ybtda5978b2025-05-31 15:58:05 +080019 }
20
ybtda5978b2025-05-31 15:58:05 +080021
ybtbac75f22025-06-08 22:31:15 +080022 console.log("发出的请求", config);
ybtda5978b2025-05-31 15:58:05 +080023 return config;
24 },
25 (error) => {
26 return Promise.reject(error);
27 }
28);
29
ybtda5978b2025-05-31 15:58:05 +080030
31// 响应拦截器
32request.interceptors.response.use(
33 (response) => {
ybtbac75f22025-06-08 22:31:15 +080034 return response.data;
ybtda5978b2025-05-31 15:58:05 +080035 },
36 (error) => {
37 if (error.response) {
38 const { status, data } = error.response;
39
40 // 处理 401 未授权错误(token 无效或过期)
41 if (status === 401) {
42 message.error("登录已过期,请重新登录");
43
44 // 清除本地存储的 token 和用户信息
45 localStorage.removeItem("token");
46 localStorage.removeItem("user");
47
48 // 重定向到登录页
49 if (window.location.pathname !== "/login") {
50 window.location.href = "/login";
51 }
52 } else {
53 // 处理其他错误
ybtbac75f22025-06-08 22:31:15 +080054 // message.error(data.message || "11111请求失败");
55 message.error(data.message || "11111请求失败");
ybtda5978b2025-05-31 15:58:05 +080056 }
57 } else if (error.request) {
58 // 请求发出但没有收到响应
59 message.error("网络错误,请检查您的网络连接");
60 } else {
61 // 请求配置出错
ybt0d010e52025-06-09 00:29:36 +080062 message.error(error.message || "请求配置错误");
ybtda5978b2025-05-31 15:58:05 +080063 }
64
65 return Promise.reject(error);
66 }
67);
68
ybtbac75f22025-06-08 22:31:15 +080069export default request;