request.js 5.36 KB
import axios from "axios";
import { MessageBox, Message } from "element-ui";
import store from "@/store";
import { getToken, setTime, removeTime, removeToken } from "@/utils/auth";
import errorCode from "@/utils/errorCode";
import i18n from "@/assets/languages";

axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项,表示请求URL公共部分
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时
  timeout: 180000000,
});
// request拦截器
service.interceptors.request.use(
  (config) => {
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false;
    // if (getToken() && !isToken) {
    config.headers["Authorization"] =
      getToken() == null ? "1" : "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
    // }
    config.headers["Lang"] = localStorage.getItem("iClearExpLang")
      ? localStorage.getItem("iClearExpLang")
      : "1";
    config.headers["Ver"] = process.env.VUE_APP_APIVERSION;
    // get请求映射params参数
    if (config.method === "get" && config.params) {
      let url = config.url + "?";
      for (const propName of Object.keys(config.params)) {
        const value = config.params[propName];
        var part = encodeURIComponent(propName) + "=";
        if (value !== null && typeof value !== "undefined") {
          if (typeof value === "object") {
            for (const key of Object.keys(value)) {
              let params = propName + "[" + key + "]";
              var subPart = encodeURIComponent(params) + "=";
              url += subPart + encodeURIComponent(value[key]) + "&";
            }
          } else {
            url += part + encodeURIComponent(value) + "&";
          }
        }
      }
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }
    // let token = getToken() != null ? getToken().split('.')[0] : null
    // let userType = store.getters.userData.organization ? store.getters.userData.organization.code : null
    // if ((token == '2' && userType != null && userType != 'customer') || (token == '1' && userType == 'customer')) {
    //   config.url = ''
    //   MessageBox.alert('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
    //     confirmButtonText: '重新登录',
    //     cancelButtonText: '取消',
    //     type: 'warning'
    //   }
    //   ).then(() => {
    //     store.dispatch('FedLogOut')
    //   })
    //   return config
    // } else {
    return config;
    // }
  },
  (error) => {
    console.log(error);
    Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (res) => {
    if (
      res.config.url !=
      "/manager-server/systemAddressInfoController/findSystemAddressInfoAll"
    ) {
      setTime(new Date().getTime());
    }
    // 未设置状态码则默认成功状态
    const code = Number(res.data.code) || 200;
    // 获取错误信息
    const msg = errorCode[code] || res.data.message || errorCode["default"];
    if (code === 50000 || code === 530) {
      removeToken();
      MessageBox.alert(i18n.t("system.loginOut"), i18n.t("system.systemTip"), {
        confirmButtonText: i18n.t("system.relogin"),
        cancelButtonText: i18n.t("system.close"),
        type: "warning",
      }).finally(() => {
        store.dispatch("FedLogOut");
      });
    } else if (code === 10005) {
      removeToken();
      MessageBox.alert(
        '<span style="font-weight:700">系统版本已更新!</span><br/>当前版本非最新版,请退出系统后刷新您当前所使用的浏览器后,重新登录系统!</br> </br>常用浏览器的快速刷新页面操作方法有:</br>1、谷歌浏览器请按“F5键”或“Ctrl键 + R键”快速刷新页面</br>2、360浏览器跟EDGE浏览器请按“Ctrl键 + R键”快速刷新页面</br>3、IE浏览器请按“F5键”或“Ctrl键 + R键”快速刷新页面</br> </br>其它浏览器的刷新方式请根据浏览器的菜单进行操作!',
        i18n.t("system.systemTip"),
        {
          confirmButtonText: i18n.t("system.relogin"),
          cancelButtonText: i18n.t("system.close"),
          type: "warning",
          customClass: "systemVerError",
          dangerouslyUseHTMLString: true,
        }
      ).finally(() => {
        store.dispatch("FedLogOut");
      });
    } else if (code === 500) {
      MessageBox.alert(msg, i18n.t("system.tipTitle2"), {
        dangerouslyUseHTMLString: true,
      });
      return Promise.reject(new Error(msg));
    } else if (code !== 200) {
      // MessageBox.alert(msg, '注意', {
      //   dangerouslyUseHTMLString: true
      // });
      return res.data;
    } else {
      return res.data;
    }
  },
  (error) => {
    removeTime();
    console.log("err" + error);
    let { message } = error;
    if (message == "Network Error") {
      message = i18n.t("system.systemError1");
    } else if (message.includes("timeout")) {
      message = i18n.t("system.systemError2");
    } else if (message.includes("Request failed with status code")) {
      message = i18n.t("system.systemError3", {
        a: message.substr(message.length - 3),
      });
    }
    Message({
      message: message,
      type: "error",
      duration: 5 * 1000,
    });
    return Promise.reject(error);
  }
);

export default service;