123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import axios, { AxiosError } from "axios";
- import { message } from "ant-design-vue";
- import { loadProgressBar } from "axios-progress-bar";
- import { signToken } from "@/plugins/signToken";
- import { filterConfigEmpty } from "@/plugins/configFilter";
- import { downloadBlob, exitLogin } from "@/utils/common";
- const request = axios.create({
- baseURL: import.meta.env.VITE_APP_API_HOST,
- withCredentials: true,
- timeout: 180000,
- method: "post",
- transformRequest: [],
- });
- request.interceptors.request.use(
- (config) => {
- if (!config.url) {
- throw new AxiosError(
- "request must should a url parameter",
- "REQUEST_PARAMETER_ERROR",
- config
- );
- }
- config.headers = config.headers || {};
- if (!config.noAuth) {
- const { token, timestamp } = signToken(config.url, config.method);
- config.headers["Authorization"] = token;
- config.headers["time"] = timestamp;
- }
- config.headers["Content-Type"] =
- config.headers["Content-Type"] || "application/x-www-form-urlencoded";
- if (!config.headers["Content-Type"]?.toString().includes("multipart")) {
- config.transformRequest = (d) => new URLSearchParams(d);
- }
- if (config.download) {
- config.responseType = config.responseType || "blob";
- }
- filterConfigEmpty(config);
- return config;
- },
- (error: AxiosError) => {
- if (!error.config.noToast) {
- message.error(error.message || error.name || error.code);
- }
- return Promise.reject(error);
- }
- );
- request.interceptors.response.use(
- (response) => {
- if (response.config.download) {
- downloadBlob(response);
- return response;
- }
- if (response.data.hasError) {
- const errMsg = response.data?.errMsg?.join("\n");
- message.error(errMsg);
- return Promise.reject(response.data);
- }
- return response.data;
- },
- async (error: AxiosError<any>) => {
- if (error.isAxiosError && !error.config.noToast) {
- if (
- error.response &&
- ([401, 403].includes(error.response.status) ||
- error.response.data?.code?.toString()?.startsWith("401"))
- ) {
- exitLogin(false);
- message.error({ content: "登录状态已过期", key: "token-valid" });
- return Promise.reject(error);
- }
- let msg = "";
- if (error.config?.responseType === "blob") {
- try {
- const e = JSON.parse(await error?.response?.data?.text());
- msg = e.message || e.error || e;
- } catch (error) {
- console.error(error);
- }
- }
- if (!msg) {
- msg =
- error?.response?.data?.message ||
- error.message ||
- error.name ||
- error.code;
- }
- message.error(msg);
- } else if (!error.isAxiosError) {
- error.message && message.error(error.message);
- }
- return Promise.reject(error);
- }
- );
- loadProgressBar(null, request);
- export default request;
|