coop.js 9.01 KB
import {
  getBindtapData,
  getObjByListKeyValue,
  debounce,
} from '../../utils/util';

import {
  productMap
} from '../../const/custom-data';

let app = getApp();
Page({
  data: {
    groupMemberCoopVisible: false,
    tipsCommonVisible: false,
    authorizeVisible: false,
    tipsGuideRegisterVisible: false,
    animationPassVisible: false,
    tipsInnerText: "",
    options: null,
    wishInfo: {},
    wishList: [],
    coopInfo: {},
    userInfo: {},
    indexInfo: {},
    canShake: true,
    status: 0,
    animationShake: {}, // 摇一摇动画
    aniTimeoutIndex: 0,
    initComplete: false,
    initShakeComplete: false,
    isShake: true,
  },

  onShareAppMessage() {},
  showAuth() {
    this.setData({
      authorizeVisible: true
    })
  },
  onLoad(options) {
    this.setData({
      options
    })
    console.log("coop options:", options);
    // 注册回调的入参
    if (!options.code) {
      if (app.globalData.coopOptions) {
        this.setData({
          options: app.globalData.coopOptions
        })
        console.log("app.globalData.coopOptions:", app.globalData.coopOptions);
        app.globalData.coopOptions = null;
      }
    }
    // this.initData();
    console.log("onLoad");
  },
  onHide() {},
  onShow() {
    console.log("onShow");
    this.initData();
  },
  initData() {
    console.log("coop - initData");
    app.queryIndex().then((result) => {
      this.setData({
        indexInfo: app.globalData.indexInfo,
        userInfo: app.globalData.userInfo,
      })

      this.queryWishbillDetail().then((result) => {
        let {
          wishInfo,
          indexInfo
        } = this.data;
        // 如果是本人的话,就跳转到我首页
        if (wishInfo.isSelfWishBill == 1) {
          this.onPlayTooHandler();
          return;
        }
        // 判断是否需要显示注册蒙层
        // 条件 1.不是本人 2.未为她助力 3.未登陆
        if (wishInfo.isSelfWishBill == 0 && wishInfo.isAssist != 1 && indexInfo.isCrmLogin != 1) {
          this.setData({
            tipsGuideRegisterVisible: true
          })
        }
        this.initShake();
      })
    })
  },
  // 添加摇一摇
  // initShake() {
  //   console.log("initShake start");
  //   if (this.data.initShakeComplete) {
  //     return;
  //   }
  //   console.log("initShake completed");
  //   this.data.initShakeComplete = true;
  //   let _this = this;
  //   wx.onAccelerometerChange(function (res) {
  //     if (!_this.data.canShake || _this.data.tipsCommonVisible) {
  //       return
  //     }
  //     let shakeValue = 2;
  //     if (res.x > shakeValue || res.y > shakeValue || res.z > shakeValue) { //偏移量为2时触发,有的使用1
  //       // 触发摇一摇
  //       console.log("摇一摇");
  //       // 加防抖函数 100毫秒
  //       debounce(_this.queryWishbillAssist.bind(_this), 1000)()
  //     }
  //   });
  // },

  // 添加摇一摇
  initShake() {
    return;
    console.log("initShake start");
    if (this.data.initShakeComplete) {
      return;
    }
    console.log("initShake completed");
    this.data.initShakeComplete = true;
    let _this = this;
    wx.onAccelerometerChange(_this.onShakeHandler.bind(_this));
  },

  onShakeHandler(res) {
    let _this = this;
    if (!_this.data.canShake || _this.data.tipsCommonVisible) {
      return
    }
    let shakeValue = 2;
    if (res.x > shakeValue || res.y > shakeValue || res.z > shakeValue) { //偏移量为2时触发,有的使用1
      // 触发摇一摇
      console.log("摇一摇");
      // 加防抖函数 100毫秒
      debounce(_this.queryWishbillAssist.bind(this), 1000)()
    }
  },

  // 我也要玩
  onPlayTooHandler() {
    app.router.push({
      openType: "reLaunch",
      path: "index"
    })
  },

  playShakeSound() {
    const innerAudioContext = wx.createInnerAudioContext()
    innerAudioContext.autoplay = true;
    innerAudioContext.src = "https://kdcdn.oss-cn-shenzhen.aliyuncs.com/weapp/marubi/wish-list/mp3/shake.mp3";
    innerAudioContext.onPlay(() => {
      console.log('开始播放')
    })
    innerAudioContext.onError((res) => {
      console.log(res.errMsg)
      console.log(res.errCode)
    })
  },

  // 助力
  queryWishbillAssist() {
    let {
      wishInfo
    } = this.data;
    if (!this.data.canShake) {
      return;
    }
    // 在弹窗状态
    if (this.data.tipsCommonVisible) {
      return;
    }
    // 引导注册
    if (this.data.tipsGuideRegisterVisible) {
      return;
    }
    // 自己表单
    if (wishInfo.isSelfWishBill == 1) {
      return;
    }
    // 已经助力过这张表单
    if (wishInfo.isAssistThisBill == 1) {
      return;
    }

    this.data.canShake = false;

    console.log("app.api.wishbillAssist");
    app.post({
      toast: false,
      url: app.api.wishbillAssist,
      data: {
        billCode: this.data.options.code
      }
    }).then((result) => {
      this.playShakeSound();
      let status = result.status;
      if (status != 1) {
        this.setData({
          status: status
        })
      }
      if (status == 1) {
        this.setData({
          animationPassVisible: true
        })

        setTimeout(() => {
          // 助力成功
          // 合并数据
          let wishList = result.elasticValueList;
          wishList.forEach(element => {
            let product = productMap[element.prizeDefineCode + ""];
            element = Object.assign(element, product);
            let progress = element.elasticValue / element.conditionElasticValue * 100;
            if (progress > 100) progress = 100;
            // 直接计算坐标
            let progressLeft = progress * 3.22 - 51;
            element.progress = progress;
            element.progressLeft = progressLeft;
          });
          this.setData({
            coopInfo: result,
            wishList: wishList,
            status: status,
            animationPassVisible: false
          })
          this.queryWishbillDetail();
        }, 2000);

      } else if (status == 2) {
        // 助力失败 已经为别人助力过
        this.setData({
          tipsCommonVisible: true,
          tipsInnerText: `亲爱的女神,您已为${result.assistNickname}好友助力过,每人只能为一位好友助力噢!`
        })
      } else if (status == 3) {
        this.setData({
          tipsCommonVisible: true,
          tipsInnerText: "不能为自己助力哦~"
        })
      } else if (status == 4) {
        // 好友是团购会员
        this.setData({
          groupMemberCoopVisible: true
        })
      } else if (status == 5) {
        this.setData({
          tipsCommonVisible: true,
          tipsInnerText: "亲爱的女神,TA的心愿已达成,您可为其它好友心愿充值~"
        })
      } else {
        // 助力失败
        this.setData({
          tipsCommonVisible: true,
          tipsInnerText: "助力失败"
        })
        this.data.canShake = false;
      }
    })
  },
  // 获取心愿单详情
  queryWishbillDetail() {
    console.log("queryWishbillDetail code:", this.data.options.code);
    return new Promise((resolve, reject) => {
      app.post({
        url: app.api.wishbillDetail,
        data: {
          billCode: this.data.options.code
        }
      }).then((result) => {
        // let status = result.isAssist;
        // this.setData({
        //   status
        // })
        let wishList = result.wishGifts;
        wishList.forEach(element => {
          let product = productMap[element.prizeDefineCode + ""];
          element = Object.assign(element, product);
          let progress = element.elasticValue / element.conditionElasticValue * 100;
          if (progress > 100) progress = 100;
          // 直接计算坐标
          let progressLeft = progress * 3.22 - 51;
          element.progress = progress;
          element.progressLeft = progressLeft;
        });
        this.setData({
          wishInfo: result,
          wishList: wishList,
          initComplete: true,
        })
        console.log("wishInfo:", this.data.wishInfo);
        console.log("wishList:", this.data.wishList);
        resolve();
      })
    });
  },

  // 触发摇一摇测试入口
  queryWishbillAssistTest() {},

  hideMask() {
    this.setData({
      groupMemberCoopVisible: false,
      tipsCommonVisible: false,
      authorizeVisible: false,
      tipsGuideRegisterVisible: false,
    })
  },
  // 子组件事件
  evtcomp(evt) {
    let {
      name,
      data
    } = evt.detail;
    console.log("name:", name);
    switch (name) {

      case "_evt_hide_mask":
        this.hideMask();
        let cid = data && data.cid || "";
        if (cid == "play-too") {
          this.onPlayTooHandler();
        }
        break;

        // 前往注册页面
      case "_evt_to_register":
        this.hideMask();
        app.globalData.coopOptions = this.data.options;
        app.router.push({
          path: "login",
          query: {
            redirect: "coop"
          }
        })
        break;

      case "_evt_auth_complete":
        this.hideMask();
        this.initData();
        break;

      default:
        break;
    }
  },
})