import axios, { AxiosRequestConfig } from "axios";
interface IRequestConfig extends AxiosRequestConfig {
loading?: boolean;
}
export interface IResponseType<P = Record<string, unknown>> {
code: string;
message: string;
data: P;
success: boolean;
pageNum?: number;
pageSize?: number;
totalPages?: number;
totalCount?: number;
}
const instance = axios.create({
baseURL: window._env_.baseURL,
timeout: 8000,
withCredentials: false,
headers: {
"X-GW-AccessKey": window._env_.accessKey,
},
});
const ERROR_RESPONSE_DATA = (message = "") => {
return {
code: "-1",
message,
data: null as any,
success: false,
};
};
const request = async <T = Record<string, unknown>>(
config: IRequestConfig
): Promise<IResponseType<T>> => {
try {
const { data } = await instance.request<IResponseType<T>>(config);
if (data.code !== "0") {
const message = `[${[data.code]}]\n ${data.message}`;
ElMsgToast({
message,
type: "error",
duration: 3000,
});
return ERROR_RESPONSE_DATA(message);
}
return data;
} catch (error: any) {
let message;
let isShownToast = true;
if (error.response) {
const code = error.response?.status;
const url =
error.response?.request?.__currentUrl ?? error.response?.__currentUr;
const errorCodeSourceMap: Record<number, string> = {
400: `接口参数错误!\n${url}`,
401: `接口尚未授权,请联系企业管理员!\n${url}`,
404: `接口未找到!\n${url}`,
418: `用户Token失效\n${url}`,
502: `服务器正在启动,请耐心等待!\n${url}`,
};
message = errorCodeSourceMap[code] ?? `连接错误: ${error.message}`;
isShownToast = code !== 417;
} else {
if (error.message === "Network Error")
message = "网络异常,请检查后重试!";
message = "连接到服务器失败,请联系管理员!";
}
isShownToast &&
Message({
message,
type: "error",
duration: 3000,
});
return ERROR_RESPONSE_DATA(message);
}
};
export default request;