import axios, { AxiosInstance, AxiosRequestConfig } from "axios"; import { Message } from "element-ui"; import { jumpLogin, downloadFile } from "@/utils"; import { Loading } from "element-ui"; import { ElLoadingComponent } from "element-ui/types/loading";
let loadingInstance: ElLoadingComponent | null = null; let requestNum = 0;
const addLoading = () => { requestNum++; if (requestNum == 1) { loadingInstance = Loading.service({ text: "正在努力加载中....", background: "rgba(0, 0, 0, 0)", }); } };
const cancelLoading = () => { requestNum--; if (requestNum === 0) loadingInstance?.close(); };
export const createAxiosByinterceptors = ( config?: AxiosRequestConfig ): AxiosInstance => { const instance = axios.create({ timeout: 1000, withCredentials: true, ...config, });
instance.interceptors.request.use( function (config: any) { const { loading = true } = config; console.log("config:", config); if (loading) addLoading(); return config; }, function (error) { return Promise.reject(error); } );
instance.interceptors.response.use( function (response) { console.log("response:", response); const { loading = true } = response.config; if (loading) cancelLoading(); const { code, data, message } = response.data; if (response.data instanceof Blob) { return downloadFile(response); } else { if (code === 200) return data; else if (code === 401) { jumpLogin(); } else { Message.error(message); return Promise.reject(response.data); } } }, function (error) { console.log("error-response:", error.response); console.log("error-config:", error.config); console.log("error-request:", error.request); const { loading = true } = error.config; if (loading) cancelLoading(); if (error.response) { if (error.response.status === 401) { jumpLogin(); } } Message.error(error?.response?.data?.message || "服务端异常"); return Promise.reject(error); } ); return instance; };
|