blob: 9e5df58cac019922a6334a97987d4bfff0996411 [file] [log] [blame]
ybtda5978b2025-05-31 15:58:05 +08001import axios from "axios";
2import { message } from "antd";
3
4// 创建 axios 实例
5const request = axios.create({
ybtbac75f22025-06-08 22:31:15 +08006 baseURL: "http://192.168.10.174:8080/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
21 // 角色检查
ybtda5978b2025-05-31 15:58:05 +080022 if (config.url.startsWith("/api/admin") && !hasAdminRole()) {
ybtda5978b2025-05-31 15:58:05 +080023 return Promise.reject(new Error("无权限执行此操作"));
24 }
25
ybtbac75f22025-06-08 22:31:15 +080026 console.log("发出的请求", config);
ybtda5978b2025-05-31 15:58:05 +080027 return config;
28 },
29 (error) => {
30 return Promise.reject(error);
31 }
32);
33
34// 辅助函数:检查是否有管理员角色
35function hasAdminRole() {
36 const user = JSON.parse(localStorage.getItem("user") || "{}");
37 return user.role === "admin";
38}
39
40// 响应拦截器
41request.interceptors.response.use(
42 (response) => {
ybtbac75f22025-06-08 22:31:15 +080043 return response.data;
ybtda5978b2025-05-31 15:58:05 +080044 },
45 (error) => {
46 if (error.response) {
47 const { status, data } = error.response;
48
49 // 处理 401 未授权错误(token 无效或过期)
50 if (status === 401) {
51 message.error("登录已过期,请重新登录");
52
53 // 清除本地存储的 token 和用户信息
54 localStorage.removeItem("token");
55 localStorage.removeItem("user");
56
57 // 重定向到登录页
58 if (window.location.pathname !== "/login") {
59 window.location.href = "/login";
60 }
61 } else {
62 // 处理其他错误
ybtbac75f22025-06-08 22:31:15 +080063 // message.error(data.message || "11111请求失败");
64 message.error(data.message || "11111请求失败");
ybtda5978b2025-05-31 15:58:05 +080065 }
66 } else if (error.request) {
67 // 请求发出但没有收到响应
68 message.error("网络错误,请检查您的网络连接");
69 } else {
70 // 请求配置出错
71 message.error("请求配置错误");
72 }
73
74 return Promise.reject(error);
75 }
76);
77
ybtbac75f22025-06-08 22:31:15 +080078export default request;