request.js 3.35 KB
import axios from "axios";
import { MessageBox } from "element-ui";
import router from "@/router";

const service = axios.create({
  baseURL: '/',
  method: "post",
  timeout: 150000,
  withCredentials: true,
});

//请求拦截
service.interceptors.request.use(
  (config) => {
    if (!config.headers["Content-Type"])
      config.headers["Content-Type"] = "application/json;charset=utf-8";

    if (localStorage.pcUserInfo) {
      let userInfo = JSON.parse(localStorage.pcUserInfo);

      config.headers["x-access-token"] = userInfo.token
    }

    return config;
  },
  (error) => {
    Promise.reject(error);
  }
);

let ifCanShow = true; //为了防止页面有异常情况时,多个接口请求导致弹窗多次的问题
let catchFun = function (msg) {
  if (!ifCanShow) {
    return;
  }
  ifCanShow = false;

  MessageBox.confirm(msg, "提示", {
    showClose: false,
    closeOnPressEscape: false,
    closeOnClickModal: false,
    showCancelButton: false,
  }).then(() => {
    ifCanShow = true;

    router.push({ path: "/login" });
  });
};

//响应拦截
service.interceptors.response.use(
  (response) => {
    console.log(response);
    if (response.status == 200) {
      if (response.data.code == "401") {
        //登陆失效,重新登陆
        catchFun("账户状态异常");
      } else if (response.data.code == "133") {
        //灰名单
        MessageBox.alert(response.data.msg, "状态异常/错误提示", {
          dangerouslyUseHTMLString: true,
        });
      } else {
        if (response.data instanceof Blob) {
          return new Promise(function (resolve, reject) {
            var r = new FileReader();
            var resData = response.data;
            if (response.config.url.indexOf("poster/createPoster") >= 0) {
              if (resData.type == "application/json") {
                r.readAsText(resData);
              } else {
                r.readAsDataURL(resData);
              }
            } else {
              r.readAsText(resData);
            }
            r.onload = function () {
              let res = {};
              //PK 为二进制压缩包(ZIP)导出数据流
              if (
                escape(r.result).indexOf("%u") == 0 ||
                escape(r.result).indexOf("PK") == 0 ||
                r.result.indexOf("pdf") >= 0 ||
                r.result.indexOf("PDF") >= 0 ||
                r.result.indexOf("data:image") >= 0
              ) {
                res.type = "blob";
                res.value = resData;
              } else {
                res.type = "object";
                res.value = JSON.parse(r.result);
              }
              resolve(res);
            };
          }).catch((e) => {});
        } else {
          return {
            url: response.config.url,
            ...response.data,
          };
        }
      }
    } else if (response.status == 302) {
      catchFun("登陆失效,请重新登陆");
    } else if (response.status == 401 || response.status == 403) {
      catchFun("账户状态异常");
    } else {
      if (sessionStorage.notFirstIn) {
        catchFun("网络异常,请稍后再试");
      }
    }
  },
  (error) => {
    if (sessionStorage.notFirstIn) {
      catchFun("网络异常,请稍后再试");
    }
  }
);

export default service;