10.10综合交易所原始源码-管理后台
1
admin
2026-01-06 089bf5d2378b3c4a61d795b2a92bede2c193b771
src/utils/httpRequest.js
New file
@@ -0,0 +1,180 @@
import Vue from "vue";
import axios from "axios";
import router from "@/router";
import qs from "qs";
import merge from "lodash/merge";
import MyDialog from "@/components/ipPop/ip-update.vue"; // 导入外部组件
import { clearLoginInfo } from "@/utils";
import { Message } from "element-ui";
import { signatureGenerate } from '@/utils/crypto'
// import store from "@/store";
let dialogInstance = null;
const http = axios.create({
  timeout: 1000 * 30,
  withCredentials: true,
  headers: {
    "Content-Type": "application/json; charset=utf-8",
  },
});
/**
 * 请求拦截
 */
http.interceptors.request.use(
  (config) => {
    config.headers["Authorization"] = Vue.cookie.get("Authorization"); // 请求头带上token
    const signature = signatureGenerate();
    config.headers["Sign"] = signature.signature;
    config.headers["Systemrandom"] = signature.systemRandom;
    config.headers["Tissuepaper"] = signature.timestamp;
    // console.log("config => " + JSON.stringify(config));
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);
/**
 * 响应拦截
 */
http.interceptors.response.use(
  (response) => {
    if (
      response.data.code == "403" ||
      response.data.code == "401"
    ) {
      Message({
        message: response.data.msg,
        type: "error",
        duration: 1500,
        customClass: "element-error-message-zindex",
      });
      clearLoginInfo();
      router.push({ name: "login" });
      return Promise.reject(response);
    }
    console.log(response.data);
    if (response.data.code == "1001") {
      // 在这里触发弹窗组件
      if (dialogInstance) {
        return false;
      }
      //console.log(3);
      //console.log(store.user);
      // 获取当前路由信息
      const currentRoute = router.currentRoute;
      //console.log(currentRoute);
      if (currentRoute.path == "/") {
        //console.log("qqq");
        document.body.removeChild(dialogInstance.$el);
        return false;
      }
      const DialogConstructor = Vue.extend(MyDialog);
      dialogInstance = new DialogConstructor();
      dialogInstance.$mount();
      // 监听弹窗关闭事件
      // dialogInstance.$on("close", () => {
      //   console.log("qqq");
      //   document.body.removeChild(dialogInstance.$el);
      // });
      // 将弹窗组件实例挂载到页面中
      document.body.appendChild(dialogInstance.$el);
      return Promise.reject(error);
    }
    return response;
  },
  (error) => {
    if (!error.response) {
      console.log("error = " + JSON.stringify(error));
    }
    switch (error.response.status) {
      case 400:
        Message({
          message: error.response.data,
          type: "error",
          duration: 1500,
          customClass: "element-error-message-zindex",
        });
        break;
      case 401:
        clearLoginInfo();
        router.push({ name: "login" });
        console.log(1);
        if (dialogInstance) {
          console.log(2);
          document.body.removeChild(dialogInstance.$el);
        }
        break;
      case 405:
        Message({
          message: "http请求方式有误",
          type: "error",
          duration: 1500,
          customClass: "element-error-message-zindex",
        });
        break;
      case 500:
        Message({
          message: "服务器出了点小差,请稍后再试",
          type: "error",
          duration: 1500,
          customClass: "element-error-message-zindex",
        });
        break;
      case 501:
        Message({
          message: "服务器不支持当前请求所需要的某个功能",
          type: "error",
          duration: 1500,
          customClass: "element-error-message-zindex",
        });
        break;
    }
    return Promise.reject(error);
  }
);
/**
 * 请求地址处理
 * @param {*} actionName action方法名称
 */
http.adornUrl = (actionName) => {
  // 非生产环境 && 开启代理, 接口前缀统一使用[/proxyApi/]前缀做代理拦截!
  return (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY ? '/proxyApi' : process.env.VUE_APP_BASE_API) + actionName
}
/**
 * get请求参数处理
 * @param {*} params 参数对象
 * @param {*} openDefultParams 是否开启默认参数?
 */
http.adornParams = (params = {}, openDefultParams = true) => {
  var defaults = {
    t: new Date().getTime(),
  };
  return openDefultParams ? merge(defaults, params) : params;
};
/**
 * post请求数据处理
 * @param {*} data 数据对象
 * @param {*} openDefultdata 是否开启默认数据?
 * @param {*} contentType 数据格式
 *  json: 'application/json; charset=utf-8'
 *  form: 'application/x-www-form-urlencoded; charset=utf-8'
 */
http.adornData = (data = {}, openDefultdata = true, contentType = "json") => {
  var defaults = {
    t: new Date().getTime(),
  };
  data = openDefultdata ? merge(defaults, data) : data;
  return contentType === "json" ? JSON.stringify(data) : qs.stringify(data);
};
export default http;