import axios from "axios";
import qs from "qs";
import { message } from "antd";
import { isObject } from "@/utils";
const timeout = 10000;
export const Service = axios.create({
timeout,
});
const location = window.location;
const errorStatusDesc = {
_400: "未能获取有效服务, 请稍后重试",
_401: "身份信息异常, 请尝试重新登陆",
_404: "请求的服务异常, 请稍后重试或联系管理员",
_500: "内部服务器异常, 请刷新或稍后重试",
_502: "返回数据无效, 请稍后重试或联系管理员",
_503: "服务器响应超时, 请稍后重试",
_504: "网络超时, 请检查网络或稍后重试",
_999: "服务异常,请联系管理员或稍后重试",
};
function showLoading(delay = 0) {
message.loading({
content: "数据加载中,请稍候...",
key: "ajaxMessage",
duration: delay,
});
}
function showError(content, delay = 3) {
message.error({ content, duration: delay });
}
function redirectToLogin() {
location.href = "/login?origin=" + location.pathname;
}
function checkErrorMessage(error) {
const message = error.message || error.Message;
if (!message || typeof message !== "string") {
return errorStatusDesc["_999"];
}
const errorCode = message.match(/\d{3}/g)[0];
if (!errorCode || errorCode > 503) {
return errorStatusDesc["_999"];
}
const errorMessage = errorStatusDesc["_" + errorCode];
return errorMessage || errorStatusDesc["_999"];
}
function checkApiError(res, rej, result) {
if (result.status.code !== 0 || result.status.msg !== "success") {
showError(result.message);
return rej(new Error(result.message));
}
message.success({ content: "数据加载完成", duration: 2 });
res(result.data);
}
Service.interceptors.request.use((config) => {
showLoading();
const token = sessionStorage.getItem("access_token");
if (!token && !location.pathname.includes("login")) {
return redirectToLogin();
}
Object.assign(config.headers, {
"access-token": token,
"Content-Type": "application/x-www-form-urlencoded",
});
return config;
});
Service.interceptors.response.use(
(response) => {
showLoading(0.5);
return Promise.resolve(response.data);
},
(error) => {
showLoading(0.5);
showError(checkErrorMessage(error));
return Promise.reject(error);
}
);
export function post(url, data) {
return new Promise((resolve, reject) => {
Service.post(url, isObject(data) ? qs.stringify(data) : data)
.then((res) => {
checkApiError(resolve, reject, res);
})
.catch((err) => console.log(err));
});
}
export function get(url, data = "") {
return new Promise((resolve, reject) => {
Service.get(url, {
params: qs.stringify(data),
})
.then((res) => {
checkApiError(resolve, reject, res.result);
})
.catch((err) => console.log(err));
});
}