116 lines
2.7 KiB
JavaScript
116 lines
2.7 KiB
JavaScript
/*
|
|
* @Descripttion:
|
|
* @Author: zenghua.wang
|
|
* @Date: 2022-02-23 21:12:37
|
|
* @LastEditors: zenghua.wang
|
|
* @LastEditTime: 2025-02-18 09:47:41
|
|
*/
|
|
import axios from 'axios';
|
|
import { ElNotification } from 'element-plus';
|
|
import router from '@/router';
|
|
import { isEmpty } from '@/utils';
|
|
import { useUserStore } from '@/store/modules/user';
|
|
|
|
const { VITE_APP_BASE_API, VITE_APP_UPLOAD_API, VITE_APP_DICDATA_API } = import.meta.env;
|
|
|
|
/**
|
|
* 创建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();
|
|
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;
|
|
}
|
|
}
|
|
if (UserStore.hasToken()) {
|
|
config.headers['authorization'] = config.headers['authorization'] ?? UserStore.token;
|
|
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 代表存在错误
|
|
ElNotification.error(res.data.msg);
|
|
break;
|
|
default:
|
|
ElNotification.error(res.data.msg);
|
|
break;
|
|
}
|
|
};
|
|
/**
|
|
* 响应拦截器
|
|
*/
|
|
publicAxios.interceptors.response.use((response) => {
|
|
const { config } = response;
|
|
if (config?.responseType) {
|
|
return response;
|
|
}
|
|
const token = response?.headers['authorization'];
|
|
if (!isEmpty(token)) {
|
|
const UserStore = useUserStore();
|
|
UserStore.setToken(token);
|
|
}
|
|
const result = formatResult(response);
|
|
if (result) {
|
|
return result;
|
|
}
|
|
throw new Error(response.data.msg);
|
|
}, errorHandler);
|
|
|
|
export default publicAxios;
|