commit:升级到vue3,更新最近工作流技术栈,支持sa-token

This commit is contained in:
Jerry
2024-07-05 22:42:33 +08:00
parent bbcc608584
commit 565ecb6371
1751 changed files with 236790 additions and 0 deletions

View File

@@ -0,0 +1,147 @@
import axios, { AxiosInstance, AxiosPromise, AxiosResponse } from 'axios';
import JSONbig from 'json-bigint';
import { router } from '@/router';
import { getToken, setToken, getAppId } from '@/common/utils/index';
import { useLayoutStore } from '@/store';
import { Dialog } from '@/components/Dialog';
import { serverDefaultCfg } from './config';
import { ResponseDataType } from './types';
// 创建 axios 请求实例
const axiosInstance: AxiosInstance = axios.create({
baseURL: serverDefaultCfg.baseURL, // 基础请求地址
timeout: 30000, // 请求超时设置
withCredentials: true, // 跨域请求是否需要携带 cookie
headers: {
//Accept: 'application/json, text/plain, */*',
//'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/json; charset=utf-8',
deviceType: '4',
},
validateStatus: status => {
return status === 200 || status === 401; // 放行哪些状态的请求
},
transformResponse: [
function (data) {
//console.log('transformResponse', data);
if (typeof data === 'string') {
return JSONbig({ storeAsString: true }).parse(data);
} else {
return data;
}
},
],
});
// 创建请求拦截
axiosInstance.interceptors.request.use(
config => {
const token = getToken();
const appId = getAppId();
const currentMenuId = useLayoutStore().currentMenuId;
if (token != null) config.headers['Authorization'] = token;
if (appId != null && appId !== '') config.headers['AppCode'] = appId;
if (currentMenuId != null) config.headers['MenuId'] = currentMenuId;
return config;
},
error => {
Promise.reject(error);
},
);
const loginInvalid = () => {
setToken(null);
Dialog.closeAll();
router.push({ name: 'login' });
};
// 创建响应拦截
axiosInstance.interceptors.response.use(
<T>(response: AxiosResponse): AxiosPromise<ResponseDataType<T>> => {
//console.log('axios response => ', response);
const { data, status } = response;
// 如果401响应放行至此执行此逻辑
if (status === 401) {
const appId = getAppId();
if (appId == null) {
loginInvalid();
}
return Promise.reject(new Error('您未登录,或者登录已经超时,请先登录!'));
}
if (response.data && response.data.errorCode === 'UNAUTHORIZED_LOGIN') {
// 401, token失效
const appId = getAppId();
if (appId == null) {
loginInvalid();
} else {
return Promise.reject(new Error(response.data.errorMessage));
}
} else {
if (response.headers['refreshedtoken'] != null) {
setToken(response.headers['refreshedtoken']);
}
//console.log('response', response, 'blob', response.data instanceof Blob);
// 判断请求是否成功
if (!(response.data instanceof Blob) && !response.data.success) {
return Promise.reject(new Error(response.data.errorMessage || 'error'));
}
}
return data;
},
error => {
//console.warn(error);
let message = '';
if (error && error.response) {
switch (error.response.status) {
case 302:
message = '接口重定向了!';
break;
case 400:
message = '参数不正确!';
break;
case 401:
message = '您未登录,或者登录已经超时,请先登录!';
break;
case 403:
message = '您没有权限操作!';
break;
case 404:
message = `请求地址出错: ${error.response.config.url}`;
break;
case 408:
message = '请求超时!';
break;
case 409:
message = '系统已存在相同数据!';
break;
case 500:
message = '服务器内部错误!';
break;
case 501:
message = '服务未实现!';
break;
case 502:
message = '网关错误!';
break;
case 503:
message = '服务不可用!';
break;
case 504:
message = '服务暂时无法访问,请稍后再试!';
break;
case 505:
message = 'HTTP 版本不受支持!';
break;
default:
message = '异常问题,请联系管理员!';
break;
}
console.log('请求异常 ==>', message);
return Promise.reject(new Error(message));
} else {
return Promise.reject(new Error(error.message));
}
},
);
export default axiosInstance;