62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
|
|
import axios from "axios";
|
||
|
|
import router from "@/router/index.js";
|
||
|
|
import { ElMessage } from 'element-plus';
|
||
|
|
|
||
|
|
// 错误处理函数
|
||
|
|
const handleResponseError = (result) => {
|
||
|
|
if (result.status !== 200) {
|
||
|
|
router.push("/login");
|
||
|
|
}
|
||
|
|
if (result.data.message === "NOT_LOGIN" || [2, 3, 4].includes(result.data.code)) {
|
||
|
|
ElMessage.error('登录失效,请重新登录!');
|
||
|
|
localStorage.removeItem("token");
|
||
|
|
router.push("/login");
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
if (result.data.code === 7) {
|
||
|
|
ElMessage.error('该用户已存在,请重新输入!');
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
if (result.data.code === 1) {
|
||
|
|
ElMessage.error('请求失败,请稍后重试!');
|
||
|
|
}
|
||
|
|
return result.data;
|
||
|
|
};
|
||
|
|
|
||
|
|
// 请求实例缓存
|
||
|
|
const instances = new Map();
|
||
|
|
|
||
|
|
// 请求工厂函数(单例模式)
|
||
|
|
export const createRequestInstance = (baseURL, config = {}) => {
|
||
|
|
// 检查是否已存在该域名的实例
|
||
|
|
if (instances.has(baseURL)) {
|
||
|
|
return instances.get(baseURL);
|
||
|
|
}
|
||
|
|
|
||
|
|
// 创建新实例
|
||
|
|
const instance = axios.create({
|
||
|
|
baseURL,
|
||
|
|
timeout: 10000, // 默认超时时间
|
||
|
|
headers: {
|
||
|
|
'Content-Type': 'application/json'
|
||
|
|
},
|
||
|
|
...config
|
||
|
|
});
|
||
|
|
|
||
|
|
// 添加响应拦截器
|
||
|
|
instance.interceptors.response.use(
|
||
|
|
result => handleResponseError(result),
|
||
|
|
error => {
|
||
|
|
ElMessage.error('请求失败,请稍后重试!');
|
||
|
|
return Promise.reject(error);
|
||
|
|
}
|
||
|
|
);
|
||
|
|
|
||
|
|
// 缓存实例
|
||
|
|
instances.set(baseURL, instance);
|
||
|
|
|
||
|
|
return instance;
|
||
|
|
};
|
||
|
|
|
||
|
|
// 默认导出原有的阿里云请求实例
|
||
|
|
export default createRequestInstance("https://tx.ljsea.top/");
|