wms_vue/src/api/request.js

108 lines
3.1 KiB
JavaScript
Raw Normal View History

2025-08-07 15:16:23 +08:00
import axios from "axios";
import {
message as antdMessage
2025-11-03 16:40:10 +08:00
} from "@hwork/ant-design-vue";
2025-08-07 15:16:23 +08:00
import store from "../store";
import qs from 'qs';
import router from '@/route/index'
class Request {
constructor(config) {
this.config = config || {
timeout: 8000,
withCredentials: true,
baseURL: process.env.VUE_APP_API_BASE_URL,
headers: {
"Content-Type": "application/json; charset=utf-8"
}
};
}
interceptors(instance) {
/// 请求拦截
instance.interceptors.request.use(
config => {
// 确保 headers 存在
config.headers = config.headers || {};
/// 权鉴相关
const tokenKey = localStorage.getItem("token_key");
const token = localStorage.getItem("token")
if (token) config.headers["Authorization"] = "Bearer " + token;
if (tokenKey) config.headers["Authorization-key"] = tokenKey;
config.headers["Platform"] = "PC";
config.cancelToken = new axios.CancelToken(async cancel => {
await store.dispatch("app/execCancelToken", {
cancelToken: cancel
});
});
/// 格式化 []
if (config.method === 'delete') {
config.paramsSerializer = (params) => {
return qs.stringify(params, {
arrayFormat: 'repeat'
})
}
}
// 如果是文件上传设置Content-Type为multipart/form-data
if (config.data instanceof FormData) {
delete config.headers["Content-Type"]; // 让 Axios 设置正确的 Content-Type
config.headers["Content-Type"] = "multipart/form-data";
} else {
config.headers["Content-Type"] = "application/json; charset=utf-8";
}
// config.cancelToken = new axios.CancelToken(async cancel => {
// await store.dispatch("app/execCancelToken", {
// cancelToken: cancel
// });
// });
return config;
},
error => {
return Promise.reject(error);
}
);
/// 响应拦截
instance.interceptors.response.use(
response => {
if (response.data.code === 502) {
antdMessage.error("登录过期").then(() => router.push("/login"))
}
return response.data;
},
error => {
console.log("响应拦截error", error)
this.errorHandle(error);
return Promise.reject(error);
}
);
}
errorHandle = function(error) {
var response = error.response
var message = error.message
if (response) {
if (response.status === 404) antdMessage.error("接口不存在");
} else {
if (message === "Network Error") antdMessage.error("连接异常")
if (message.includes("timeout")) antdMessage.error("请求超时");
if (message.includes("Request failed with status code")) antdMessage.error("接口异常");
}
}
request(options) {
const instance = axios.create();
const requestOptions = Object.assign({}, this.config, options);
this.interceptors(instance);
return instance(requestOptions);
}
}
const request = new Request();
export default new Request();