拦截封装推荐(有来)
import axios, {
type InternalAxiosRequestConfig,
type AxiosResponse,
} from "axios";
import qs from "qs";
import { useUserStoreHook } from "@/store/modules/user";
import { ResultEnum } from "@/enums/ResultEnum";
import { getToken } from "@/utils/auth";
// 创建 axios 实例
const service = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API,
timeout: 50000,
headers: { "Content-Type": "application/json;charset=utf-8" },
paramsSerializer: (params) => {
return qs.stringify(params);
},
});
// 请求拦截器
service.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
const accessToken = getToken();
if (accessToken) {
config.headers.Authorization = accessToken;
}
return config;
},
(error: any) => {
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
(response: AxiosResponse) => {
// 检查配置的响应类型是否为二进制类型('blob' 或 'arraybuffer'), 如果是,直接返回响应对象
if (
response.config.responseType === "blob" ||
response.config.responseType === "arraybuffer"
) {
return response;
}
const { code, data, msg } = response.data;
if (code === ResultEnum.SUCCESS) {
return data;
}
ElMessage.error(msg || "系统出错");
return Promise.reject(new Error(msg || "Error"));
},
(error: any) => {
// 异常处理 非 2xx 状态码 会进入这里
if (error.response.data) {
const { code, msg } = error.response.data;
if (code === ResultEnum.TOKEN_INVALID) {
ElNotification({
title: "提示",
message: "您的会话已过期,请重新登录",
type: "info",
});
useUserStoreHook()
.clearUserSession()
.then(() => {
location.reload();
});
} else {
ElMessage.error(msg || "系统出错");
}
}
return Promise.reject(error.message);
}
);
export default service;
使用:
const USER_BASE_URL = "/api/v1/users";
getInfo() {
return request<any, UserInfo>({
url: `${USER_BASE_URL}/me`,
method: "get",
});
}
add(data: UserForm) {
return request({
url: `${USER_BASE_URL}`,
method: "post",
data: data,
});
},
/*
*/
import axios from "axios";
import { Toast } from "vant";
import { useUserStore } from "@/store/user";
import router from "@/route";
class BaseApi {
baseService;
constructor({ baseURL, timeout = 60000 }) {
const baseServiceConfig = {
baseURL,
timeout,
};
this.baseService = axios.create(baseServiceConfig);
this._setInterceptorsRequest();
this._setInterceptorsResponse();
}
get(url, params = {}) {
return this.request(url, "get", params, {});
}
post(url, data = {}, withToken = true, loginMark = null) {
const user = useUserStore();
if (withToken) {
data.token = user.token;
}
// if (loginMark) {
// data.loginMark = loginMark;
// }
// if (!!loginMark && USER_APP_CID == "") {
// data.loginMark = loginMark;
// } else {
// data.loginMark = user.loginMark;
// }
data.loginMark = user.loginMark || loginMark || "";
return this.request(url, "post", {}, data);
}
postFormData(url, data = {}) {
const formData = new FormData();
for (const key in data) {
formData.append(key, data[key]);
}
const user = useUserStore();
formData.append("loginMark", user.loginMark);
if (!!user.token) {
formData.append("token", user.token);
}
return this.request(url, "post", {}, formData, "multipart/form-data");
}
uploader(url, formData, withToken = true) {
const user = useUserStore();
if (withToken) {
formData.append("token", user.token);
}
// if (loginMark) {
// formData.append("loginMark", loginMark);
// }
formData.append("loginMark", user.loginMark);
return this.request(url, "post", {}, formData, "multipart/form-data");
}
request(url, method, params, data, contentType = "application/json") {
// console.log(data);
const headers = {
"Content-Type": contentType,
// "Access-Control-Allow-Origin": "*",
};
return this.baseService({
method,
url: url,
params: params,
data: data,
headers,
responseType: "json",
// 允许为上传处理进度事件
onUploadProgress: function (progressEvent) {
// console.log("progressEvent", progressEvent);
},
// 允许为下载处理进度事件
onDownloadProgress: function (progressEvent) {
// console.log("progressEvent", progressEvent);
},
});
}
// 请求拦截器
_setInterceptorsRequest() {
this.baseService.interceptors.request.use(
config => {
return config;
},
error => {
return Promise.reject(error);
}
);
}
// 响应拦截器
_setInterceptorsResponse() {
this.baseService.interceptors.response.use(
function (response) {
if (response.status >= 200 && response.status <= 299) {
const { code, info: errMsg, data } = response.data;
switch (code) {
case 200:
return Promise.resolve(data);
break;
case 410:
// 登录失效
Toast.fail(errMsg);
const user = useUserStore();
user.clearUser();
user.$reset();
router.push("/login");
return romise.reject(response.data);
break;
default:
Toast.fail(errMsg);
return Promise.reject(errMsg);
break;
}
}
return Promise.reject("error");
},
function (error) {
if (error.code === "ECONNABORTED" && error.message.indexOf("timeout") !== -1) {
Toast.fail("请求超时");
return Promise.reject("请求超时");
}
Toast.fail("服务器错误");
return Promise.reject(error);
}
);
}
}
// http://192.168.0.125:8081
// http://127.0.0.1:4523/mock/725336
// API_BASE_URL
// http://127.0.0.1:4523/mock/760770
// http://192.168.31.53:4523/mock/760770
export default new BaseApi({ baseURL: API_BASE_URL });
export const dev = new BaseApi({ baseURL: "http://192.168.0.161:8088" });
使用
import api from "@/libs/BaseApi";
export function apiGetApprovalList({ categoryId = "1", pageSize = 10, pageNo = 1 }) {
return api.post("/Hermi/leave/GetPageApplyList", {
data: `{'categoryId':'${categoryId}','billNo':'','StartTime':'','EndTime':'','FdStartTime':'','FdEndTime':'','leaveType':'','rows':${pageSize},'page':${pageNo},'sidx':'applyDate','sord':'desc','records':0,'total':0}`,
});
}
state.js状态
/*
* @Desc:
*/
class STATE {
constructor(text = "", flag = "draft", isShowWithdrawBtn = false) {
this.text = text;
this.flag = flag;
this.isShowWithdrawBtn = isShowWithdrawBtn;
}
}
const STATE_MAP = {
0: new STATE("草稿", "draft"),
1: new STATE("课长待审核", "pending", true),
2: new STATE("部长待审核", "pending", true),
};
const CLOSE_FLAG_MAP = {
0: new STATE("审核通过", "agreed"),
1: new STATE("审核驳回", "rejected"),
};
const FINISHED_MAP_FN = {
// 流程未结束
0: ({ state, closeFlg }) => {
if (state == 3) return FINISHED_MAP_FN[1]({ closeFlg });
return STATE_MAP?.[state] ?? FINISHED_MAP_FN["none"];
},
// 流程结束
1: ({ closeFlg }) => {
return CLOSE_FLAG_MAP?.[closeFlg] ?? FINISHED_MAP_FN["none"];
},
// 流程撤回
102: () => {
return new STATE("已撤回", "draft");
},
none: new STATE("状态无效"),
};
/**
* @description: 获取审批状态
* @param {*} state 0草稿 1 课长待审核 2课长已审核、部长待审核 3审核完成
* @param {*} closeFlg 0正常 1驳回
* @param {*} finishedFlag 0流程未结束 1流程结束 102流程撤回
* @return {*}
*/
export function getApprovalState_old(state, closeFlg, finishedFlag) {
return FINISHED_MAP_FN?.[finishedFlag]({ state: state, closeFlg }) ?? FINISHED_MAP_FN["none"];
}
const STEPNO_MAP = {
100: new STATE("草稿", "draft"),
200: new STATE("课长待审核", "pending", true),
300: new STATE("部长待审核", "pending", true),
400: new STATE("本部待审核", "pending", true),
101: new STATE("已撤回", "draft"),
201: new STATE("课长审核驳回", "rejected"),
210: new STATE("课长审核通过", "agreed"),
301: new STATE("部长审核驳回", "rejected"),
310: new STATE("部长审核通过", "agreed"),
401: new STATE("本部审核驳回", "rejected"),
410: new STATE("本部审核通过", "agreed"),
none: new STATE("状态无效"),
};
/**
* @description:
* @param {*} stepNo
* @return {*}
*/
export function getApprovalState(stepNo) {
return STEPNO_MAP?.[stepNo] ?? STEPNO_MAP["none"];
}