|
|
@@ -1,46 +1,110 @@
|
|
|
-import axios from 'axios'
|
|
|
+import axios, { type AxiosResponse } from "axios";
|
|
|
+import { useLoginStore } from "@stores/loginStore";
|
|
|
|
|
|
const request = axios.create({
|
|
|
- baseURL: 'http://39.100.95.39:8089',
|
|
|
+ baseURL: import.meta.env.VITE_BASE_URL as string,
|
|
|
+ headers: {
|
|
|
+ "Content-Type": "application/json",
|
|
|
+ },
|
|
|
timeout: 5000,
|
|
|
-})
|
|
|
+});
|
|
|
|
|
|
-request.interceptors.request.use((config) => {
|
|
|
- return config
|
|
|
-})
|
|
|
+// 请求拦截:注入 token
|
|
|
+request.interceptors.request.use(
|
|
|
+ (config) => {
|
|
|
+ const loginStore = useLoginStore();
|
|
|
+ // 添加 token
|
|
|
+ if (loginStore.token) {
|
|
|
+ config.headers.Authorization = `Bearer ${loginStore.token}`;
|
|
|
+ }
|
|
|
+ // 添加请求时间戳,防止缓存
|
|
|
+ if (config.method?.toLowerCase() === "get") {
|
|
|
+ config.params = {
|
|
|
+ ...config.params,
|
|
|
+ _t: Date.now(),
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return config;
|
|
|
+ },
|
|
|
+ (error) => {
|
|
|
+ console.error("请求配置错误:", error);
|
|
|
+ return Promise.reject(error);
|
|
|
+ }
|
|
|
+);
|
|
|
|
|
|
-request.interceptors.response.use((response) => {
|
|
|
- return response.data
|
|
|
-})
|
|
|
+// 统一响应处理:提取后端 data 字段并对非成功状态构造错误
|
|
|
+request.interceptors.response.use(
|
|
|
+ (response: AxiosResponse) => {
|
|
|
+ // 如果没有业务状态字段,直接返回数据
|
|
|
+ return response.data;
|
|
|
+ },
|
|
|
+ (error) => {
|
|
|
+ return Promise.reject(error);
|
|
|
+ }
|
|
|
+);
|
|
|
+
|
|
|
+type ResponseData = {
|
|
|
+ code: number;
|
|
|
+ msg: string;
|
|
|
+ data: any;
|
|
|
+};
|
|
|
|
|
|
const http = {
|
|
|
- get(url: string, data?: any) {
|
|
|
+ get(url: string, data?: any): Promise<ResponseData> {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request
|
|
|
.get(url, {
|
|
|
params: data,
|
|
|
})
|
|
|
.then((res) => {
|
|
|
- resolve(res)
|
|
|
+ resolve(res);
|
|
|
})
|
|
|
.catch((err) => {
|
|
|
- reject(err)
|
|
|
- })
|
|
|
- })
|
|
|
+ reject(err);
|
|
|
+ });
|
|
|
+ });
|
|
|
},
|
|
|
|
|
|
- post(url: string, data?: any) {
|
|
|
+ post(url: string, data?: any): Promise<ResponseData> {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
request
|
|
|
.post(url, data)
|
|
|
.then((res) => {
|
|
|
- resolve(res)
|
|
|
+ resolve(res);
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ reject(err);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ put(url: string, data?: any) {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ request
|
|
|
+ .put(url, data)
|
|
|
+ .then((res) => {
|
|
|
+ resolve(res);
|
|
|
})
|
|
|
.catch((err) => {
|
|
|
- reject(err)
|
|
|
+ reject(err);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ delete(url: string, data?: any) {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ request
|
|
|
+ .delete(url, {
|
|
|
+ params: data,
|
|
|
})
|
|
|
- })
|
|
|
+ .then((res) => {
|
|
|
+ resolve(res);
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ reject(err);
|
|
|
+ });
|
|
|
+ });
|
|
|
},
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
-export default http
|
|
|
+export default http;
|