import axios from "axios"; // @ts-ignore import { loadProgressBar } from "axios-progress-bar"; import { notifyInvalidTokenThrottled } from "./axiosNotice"; import axiosRetry from "axios-retry"; import { message } from "ant-design-vue"; import { store } from "@/store/store"; const config = { // baseURL: process.env.baseURL || process.env.apiUrl || "" timeout: 1 * 60 * 1000, // Timeout withCredentials: true, // Check cross-site Access-Control }; const _axiosApp = axios.create(config); axiosRetry(_axiosApp); _axiosApp.interceptors.request.use( function (config) { if (config.setGlobalMask) { store.globalMask = true; } return config; }, function (error) { if (error.config.setGlobalMask) { store.globalMask = false; } void message.error({ content: error, duration: 10 }); console.log(error); return Promise.reject(error); } ); // Add a response interceptor _axiosApp.interceptors.response.use( (response) => { if (response.config.setGlobalMask) { store.globalMask = false; } return response; }, (error) => { if (error.config?.setGlobalMask) { store.globalMask = false; } const showErrorMessage = !error.config?.noErrorMessage; if (!error.response) { if (showErrorMessage) { // "Network Error" 网络不通,直接返回 void message.error({ content: "网络连接异常,请检查网络设置。", duration: 10, }); } return Promise.reject(error); } // 这里是返回状态码不为200时候的错误处理 const status = error.response.status; // 登录失效 跳转登录页面 if (status == 403 || status == 401) { notifyInvalidTokenThrottled(); return Promise.reject(error); } else if (status == 405) { if (showErrorMessage) { void message.error({ content: "没有权限!", duration: 10 }); } return Promise.reject(error); } else if (status == 502) { if (showErrorMessage) { void message.error({ content: "服务器异常(502)!", duration: 10 }); } return Promise.reject(error); } if (status != 200) { const data = error.response.data; if (data && data.message) { if (showErrorMessage) { void message.error({ content: data.message, duration: 10 }); } } else { if (showErrorMessage) { void message.error({ content: "未定义异常: " + JSON.stringify(data, null, 2), duration: 10, }); } } return Promise.reject(error); } } ); // eslint-disable-next-line loadProgressBar(null, _axiosApp); export const httpApp = _axiosApp;