import axios, { type AxiosInstance, type InternalAxiosRequestConfig, type AxiosResponse, } from "axios"; export enum ResponseStatusCode { SUCCESS = 0, TOKEN_INVALID = 5001, TOKEN_INVALID2 = 5002, } interface DageConfig extends InternalAxiosRequestConfig { /** * 隐藏错误提醒 */ hidden?: boolean; } export interface DageResponse extends AxiosResponse { code: number; msg: string; } interface Service extends AxiosInstance { get, D = any>( url: string, config?: Partial> ): Promise; post, D = any>( url: string, data?: D, config?: DageConfig ): Promise; } const service: Service = axios.create({ baseURL: process.env.REACT_APP_BACKEND_URL, timeout: 5 * 60 * 1000, headers: { "Cache-Control": "no-cache", "Content-Type": "application/json;charset=UTF-8", "X-Requested-With": "XMLHttpRequest", }, }); /** * 服务端接口empty字符串跟null返回的结果不同,过滤掉empty字符串 * @param params * @param emptyString 是否过滤空字符串 */ function filterEmptyKey(params: any, emptyString = false) { if (Array.isArray(params) || params == null) { return params; } Object.keys(params).forEach((key) => { if (params[key] === null || (emptyString && params[key] === "")) { delete params[key]; } }); } service.interceptors.request.use((config: DageConfig) => { if (config.method === "post") { if (!(config.data instanceof FormData)) { const params = { ...config.data, }; filterEmptyKey(params); // 过滤空字符串 config.data = params; } } else if (config.method === "get") { config.params = { _t: new Date().getTime() / 1000, ...config.params, }; filterEmptyKey(config.params, true); } return config; }); service.interceptors.response.use( (res) => { const { data }: { config: DageConfig; data: DageResponse } = res; return data || {}; }, (error) => { return new Promise((res, rej) => { rej(error); }); } ); export default service as Required;