fetch-api.js 4.97 KB
let config = require('./../config');
let Store = require('./../utils/stroage');
let Router = require('./../router/index');
const errMsg = '服务异常,请稍后重试';

// 检查并获取sessionid
function checkSessionId() {
  return new Promise((resolve, reject) => {
    let sessionId = Store.getItem('sessionId');
    if (sessionId) {
      resolve();
    } else {
      // 没有sessionId则获取并埋值
      wx.login({
        success: function (res) {
          console.log("wxlogin:", res);
          Store.setItem('wxcode', res.code);
          let baseUrl = config.NET_CONFIG.baseApi;
          wx.request({
            url: baseUrl + '/warubiEyeCreamApi/app/login',
            data: {
              code: res.code
            },
            method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
            // header: {}, // 设置请求的 header
            success: function (res2) {
              let {
                code,
                content
              } = res2.data;
              if (code == 200 && content.sessionId) {
                Store.setItem('sessionId', content.sessionId);
                resolve();
              } else {
                wx.showToast({
                  title: errMsg,
                  icon: 'none'
                });
                reject();
              }
              // console.log("sid:", Store.getItem('sessionId'));
              // resolve();
            }
          })
        }
      });
    }
  });
}

const fetch = function ({
  loading = true,
  toast = true,
  sid = true,
  auth = true,
  mode,
  isMock,
  url,
  data,
  method
}) {
  // 自定义参数
  // const clientInfo = {
  // 	user_id: 1
  // }
  // 日志埋点不需要出现loading
  if (loading && mode != 'log') wx.showLoading();
  // if (loading && mode != 'log') Util.showLoading();

  // 新建promise对象
  let promise = new Promise((resolve, reject) => {
    /**
     * isMock设置单个接口Mock开启
     * mode:目前针对不同业务的接口进行处理,log标识本地埋点上传
     */
    let baseUrl = config.NET_CONFIG.baseApi;
    if (isMock && mode != 'log') {
      baseUrl = config.MOCKAPI; //环境配置
    }

    checkSessionId().then((result) => {
      // if (sid) {
      //     url += "?sessionId=" + Store.getItem("sessionId")
      // }
      // url += "?sessionId=" + Store.getItem("sessionId")
      // console.log("url:", url);
      wx.request({
        url: baseUrl + url, //请求地址
        data: data, //自定义参数
        method: method || 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
        header: {
          sessionId: Store.getItem("sessionId")
        }, // 设置请求的 header的默认参数,根据项目需求添加
        // header: {
        // 	'clientInfo': JSON.stringify(clientInfo),
        // 	'Server-Token':'xxx'
        // },
        success: function (result) {
          // 日志上传不需要处理结果
          if (mode == 'log') return;
          let res = result.data;
          // 登陆失效拦截,根据项目需要添加自己的配置
          if (res.code == 404) {
            // wx.showToast({
            // 	title: '当前登陆失效,请重新登陆',
            // 	icon: 'none',
            // 	mask: true,
            // 	success: () => {
            // 		return;
            // 	}
            // })
            //登陆失效的回调
            Store.clear("sessionId");
            wx.reLaunch({
              url: '/pages/authorize/authorize'
            })
            return;

            // Router.push({
            //     path: "authorize",
            //     openType: "reLaunch",
            //     query: {
            //         status: '404'
            //     }
            // })
          }
          // 内部统一的成功code拦截码
          if (res.code === 200) {
            if (loading) {
              wx.hideLoading();
            }
            // resolve(res);
            // 直接返回content
            // 再多封一层,把errMsg塞带content去
            // let content = res.content;
            // content.errMsg = res.errMsg;
            resolve(res.content);
          } else {
            // 有些特殊状况不需要toast 需要弹窗
            if (toast) {
              wx.showToast({
                title: res.errMsg || errMsg,
                icon: 'none'
              })
            } else {
              wx.hideLoading();
            }
            // 返回错误信息
            reject(res);
          }
        },
        fail: function (e = {
          CODE: -1,
          msg: errMsg,
          errMsg
        }) {
          let msg = e.errMsg;
          if (e.errMsg == 'request:fail timeout') {
            msg = '服务请求超时,请稍后重试'
          }
          wx.showToast({
            title: msg,
            icon: 'none'
          });
          reject(e)
        },
        complete: function () {
          // complete
        }
      })
    })
  });
  return promise;
}

module.exports = {
  fetch
}