

// 此处第二个参数vm，就是我们在页面使用的this，你可以通过vm获取vuex等操作
const install = (Vue, vm) => {
  // 通用请求头设定
  const ajaxHeader = "x-ajax";
  const sessionIdHeader = "Authorization";
  const rememberMeHeader = "x-remember";
  const lang = 'lang';

  // 请求参数默认配置
  Vue.prototype.$u.http.setConfig({
    baseUrl: vm.vuex_config.baseUrl,
    originalData: true,
    // 默认头部，http2约定header名称统一小写
    header: {
      "content-type": "application/json",
      "x-requested-with": "XMLHttpRequest",
    },
  });

  // 请求拦截，配置Token等参数
  Vue.prototype.$u.http.interceptor.request = (req) => {
    if (!req.header) {
      req.header = [];
    }
    req.header["source"] = "app";

    // 默认指定返回 JSON 数据
    if (!req.header[ajaxHeader]) {
      req.header[ajaxHeader] = "json";
    }

    // 设定传递 Token 认证参数
    if (!req.header[sessionIdHeader] && vm.vuex_token) {
      req.header[sessionIdHeader] = vm.vuex_token;
	   req.header[lang] = vm.vuex_language;
    }

    // 为节省流量，记住我数据不是每次都发送的，当会话失效后，尝试重试登录
    if (!req.header[rememberMeHeader] && vm.vuex_remember && req.remember) {
      req.header[rememberMeHeader] = vm.vuex_remember;
      req.remember = false;
    }
    return req;
  };

  // 响应拦截，判断状态码是否通过
  Vue.prototype.$u.http.interceptor.response = async (res, req) => {
    let data = res.data;
    if (!data) {
      // vm.$u.toast("未连接到服务器");
      return false;
    }
    if (res.data.code !== 200) {
      if (res.data.code === 401002 || res.data.code === 401001 || res.data.code === 50014) {
        uni.showToast({
          title: data.msg ? data.msg : '请重新登陆！',
          duration: 3000,
          icon:'none'
        })
        setTimeout(() => {
          uni.reLaunch({
            url: "/pages/login/index"
          });
        }, 3000)
      }else{
        uni.showToast({
          title: data.msg ? data.msg : '接口报错，请联系管理员！',
          duration:3000,
          icon:'none'
        })
      }
    } else {
      return res.data
    }
  };

  // 封装 get text 请求
  vm.$u.getText = (url, data = {}, header = {}) => {
    return vm.$u.http.request({
      dataType: "text",
      method: "GET",
      url,
      header,
      data,
    });
  };

  // 封装 post json 请求
  vm.$u.postJson = (url, data = {}, header = {}) => {
    header["content-type"] = "application/json";
    return vm.$u.http.request({
      url,
      method: "POST",
      header,
      data,
    });
  };
};

export default {
  install,
};
