http.js 3.36 KB
import axios from "axios";
import md5 from "blueimp-md5";
import { param2 } from "@/utils";
import { Toast } from "vant";
//const baseURL = 'https://store.keliuyun.com/report';
//const baseURL = 'https://mall.keliuyun.com';
// const baseURL = "https://store.keliuyun.com";
const Axios = axios.create({
  // baseURL 通过接口信息数据传递
  // baseURL: baseURL, // 因为我本地做了反向代理
  timeout: 0,
  // responseType: "json",
  // changeOrigin: true,//允许跨域
  withCredentials: true, // 是否允许带cookie这些
  headers: {
    "Content-Type": "application/json;charset=UTF-8",
    // 'Content-Type': 'application/x-www-form-urlencoded'
  },
});
let store = {
  source: {
    token: null,
    cancel: null,
  },
};
// 请求拦截器
Axios.interceptors.request.use(
  (config) => {
    // 如果有serverIp, 则用传入值替换baseURL
    if (config.serverIp) {
      config.baseURL = config.serverIp;
    } else if (config.config?.serverIp) {
      config.baseURL = config.config.serverIp;
    } else {
      config.baseURL = "https://store.keliuyun.com";
    }

    const suffix = "4c413628731691abc99eb2fca5f69aab";
    const { method, params, data, url } = config;
    let language = localStorage.getItem("lang"),
      aToken = localStorage.getItem("atoken");
    if (language) {
      let languageObj = {
        mall_CN: "zh-CN,zh;q=0.9",
        zh_CN: "zh-CN,zh;q=0.9",
        en_US: "en-US,en;q=0.5",
        zh_TW: "zh-TW,zh;q=0.3",
        // 'zh_ar': 'zh-AR,zh;q=0.9'
      };
      languageObj[language] &&
        (config.headers["Accept-Language"] = languageObj[language]);
    }
    aToken && (config.headers.Authorization = aToken);
    config.cancelToken = store.source.token;
    const signalStr =
      method.toUpperCase() +
      (params ? param2(params) : "") +
      (data ? JSON.stringify(data) : "") +
      suffix +
      (config.headers.Authorization ? config.headers.Authorization : "");
    const hashSignature = md5(signalStr);
    config.headers["signature"] = hashSignature;
    return config;
  },
  (error) => {
    console.error(error);
    return Promise.reject(error.data.msg);
  }
);
Axios.interceptors.response.use((res) => {
  if (res.data && !res.data.success) {
    if (res.data.ecode && res.data.ecode != 200) {
      Toast.fail(res.data.enote);
      console.error(res.data.enote);
      return;
    } else {
      // 非标准返回体
      if (res.status == 200) {
        return res;
      }
    }
    if (res.data.code == 500) {
      console.error(res.data.msg);
    }
    return Promise.reject(res.data.msg);
  } else if (!res.data && res.status == 200) {
    return res;
  } else if (res.data.success && res.config.method != "get") {
    //
  }
  return res;
});
export default function (method, url, data = null, config = null, bodyDelete) {
  method = method.toLowerCase();
  if (method == "post") {
    return Axios.post(url, data, config);
  } else if (method == "get") {
    let defaultParam = {
      _t: Date.parse(new Date()) / 1000,
    };
    return Axios.get(url, { params: { ...defaultParam, ...data }, config });
  } else if (bodyDelete) {
    return Axios.delete(url, { data: data }, config);
  } else if (method == "delete") {
    return Axios.delete(url, { params: data }, config);
  } else if (method == "put") {
    return Axios.put(url, data, config);
  } else {
    console.error("unknown method" + method);
    return false;
  }
}