import config from "../config/index.js";
import { Toast } from "vant";
import "vant/lib/toast/style/index";

function getdata(data) {
  let text = "";
  for (const key in data) {
    text += key + "=" + data[key] + "&";
  }
  text ? (text = "?" + text) : "";
  text = text.replace(/&$/, "");
  return text;
}

export default function (ori) {
  let baseurl = config.base[ori.urlType || "ajax"];
  let url = baseurl + ori.url;
  !ori.noLoad && Toast.loading({
    message: '加载中...',
    forbidClick: true,
    duration: 0
  });
  return new Promise((resolve, reject) => {
    var xhttp;
    if (window.XMLHttpRequest) xhttp = new XMLHttpRequest();
    else if (window.ActiveXObject)
      xhttp = new window.ActiveXObject("Microsoft.XMLHTTP");
    let method = ori.method.toUpperCase();
    if (method === "GET") url += getdata(ori.data || {});
    xhttp.open(method, url, true);
    xhttp.setRequestHeader(
      "Content-type",
      ori.header
        ? ori.header.contentType || "application/json"
        : "application/json"
    );
    method === "GET" ? xhttp.send() : xhttp.send(JSON.stringify(ori.data));
    xhttp.onreadystatechange = function () {
      if (this.readyState != 4) return;
      Toast.clear()
      if (this.status === 404) {
        Toast("请求失败 " + this.status);
        reject(this.status);
        return;
      }
      if (this.status != 200) {
        let t = JSON.parse(this.responseText || "{}");
        Toast(t.message || "请求失败 " + this.status);
        reject(t.message);
        return;
      }
    //   console.log(this.responseText)
      let data = {};
      try {
        data =
          this.responseText !== "null"
            ? JSON.parse(this.responseText || "{}")
            : {};
      } catch (err) {
        Toast("请求失败");
        console.error(err);
        reject(err);
      }
      if (data.code === 0) resolve(data.data);
      else {
        Toast(data.message || "请求失败");
        reject(data);
      }
    };
  });
}
