116 lines
2.7 KiB
JavaScript
Raw Normal View History

2025-01-23 01:10:59 +00:00
/*
* @Descripttion:
* @Author: zenghua.wang
* @Date: 2022-02-23 21:12:37
* @LastEditors: zenghua.wang
2025-02-27 01:24:25 +00:00
* @LastEditTime: 2025-02-18 09:47:41
2025-01-23 01:10:59 +00:00
*/
import axios from 'axios';
import { ElNotification } from 'element-plus';
import router from '@/router';
import { isEmpty } from '@/utils';
import { useUserStore } from '@/store/modules/user';
2025-02-10 05:54:41 +00:00
const { VITE_APP_BASE_API, VITE_APP_UPLOAD_API, VITE_APP_DICDATA_API } = import.meta.env;
2025-01-23 01:10:59 +00:00
/**
* 创建axios实例
*/
const publicAxios = axios.create({
baseURL: VITE_APP_BASE_API, // API请求的默认前缀
timeout: 30000,
});
/**
* 异常拦截处理器
* @param error
* @returns
*/
const errorHandler = async (error) => {
const { response } = error;
const UserStore = useUserStore();
if (response && response.status) {
switch (response.status) {
case 401:
await UserStore.logout();
router.push('/login');
break;
default:
break;
}
}
return Promise.reject(error?.response?.data);
};
/**
* 请求拦截器
*/
publicAxios.interceptors.request.use(async (config) => {
const UserStore = useUserStore();
2025-02-10 05:54:41 +00:00
switch (config.apisType) {
case 'upload': {
config.baseURL = VITE_APP_UPLOAD_API;
config.headers['Content-Type'] = config.uploadType;
break;
}
case 'dicData': {
config.baseURL = VITE_APP_DICDATA_API;
break;
}
default: {
config.baseURL = VITE_APP_BASE_API;
}
}
2025-01-23 01:10:59 +00:00
if (UserStore.hasToken()) {
2025-02-10 05:54:41 +00:00
config.headers['authorization'] = config.headers['authorization'] ?? UserStore.token;
2025-01-23 01:10:59 +00:00
config.headers['cache-control'] = 'no-cache';
config.headers.Pragma = 'no-cache';
}
if (config.method === 'POST' || config.method === 'DELETE') {
config.headers.Accept = 'application/json';
}
return config;
}, errorHandler);
/**
* 返回结果处理
* @param res
* @returns
*/
const formatResult = (res) => {
const code = res.data.code || res.status;
switch (code) {
case 200:
case 0:
// code === 0 或 200 代表没有错误
return res.data || res.data.data || res;
case 500:
case 1:
// code === 1 或 500 代表存在错误
2025-02-10 05:54:41 +00:00
ElNotification.error(res.data.msg);
2025-01-23 01:10:59 +00:00
break;
default:
2025-02-10 05:54:41 +00:00
ElNotification.error(res.data.msg);
2025-01-23 01:10:59 +00:00
break;
}
};
/**
* 响应拦截器
*/
publicAxios.interceptors.response.use((response) => {
const { config } = response;
if (config?.responseType) {
return response;
}
2025-02-10 05:54:41 +00:00
const token = response?.headers['authorization'];
2025-01-23 01:10:59 +00:00
if (!isEmpty(token)) {
const UserStore = useUserStore();
UserStore.setToken(token);
}
const result = formatResult(response);
if (result) {
return result;
}
2025-02-10 05:54:41 +00:00
throw new Error(response.data.msg);
2025-01-23 01:10:59 +00:00
}, errorHandler);
export default publicAxios;