detail.js 6.56 KB
import detailModel from '../../../models/product/detail';
import config from '../../../common/config';
import Yas from '../../../common/yas';
import {
  Actionsheet
} from '../../../vendors/zanui/index';

let app = getApp();
let router = global.router;

const LIMIT_TYPE = {
  UNKNOWN: 0,
  ASSIS: 4,
  QUEUE: 5
};

const SHOW_STATUS = {
  UNKONWN: 0,
  SHARE: 1,
  NOT_BUY_NOW: 2,
  END: 3,
  BUY_NOW: 4,
  CODE_EMPTY: 5,
  COMING_SOON: 6,
  USED: 7
};

const PRODUCT_SOURCE_TYPE = {
  UNKONWN: 0,
  ORIGIN: 1,
  SHARE: 2
};

const ASSIS_STATUS = {
  UNKONWN: 0,
  UN_ASSIS: 1,
  ASSIS_FULL: 2,
  ASSIS_ACTION: 3,
};

const QUEUE_STATUS = {
  UNKONWN: 0,
  UN_QUEUE: 1,
  QUEUE_PROCESSING: 2,
  QUEUE_END: 3,
  QUEUE_ACTION: 4,
  WAIT_FOR_BUY: 5
};

const ASSIS_SUCCESS = {
  unknown: 0,
  ok: 1,
  repeat: 2
};

const QUEUE_SUCCESS = {
  unknown: 0,
  ok: 1,
  repeat: 2
};

let {
  windowHeight
} = app.getSystemInfo();

let yas;

Page(Object.assign({
  data: {
    productSkn: 0,
    productName: '',
    limitProductCode: '',
    price: '',
    defaultImage: '',
    productDesc: [],
    snapData: {},
    originUid: '',
    avatarList: [],
    uid: '',

    limitProductType: LIMIT_TYPE.ASSIS,
    showStatus: SHOW_STATUS.SHARE,
    productSourceType: PRODUCT_SOURCE_TYPE.SHARE,
    assisStatus: ASSIS_STATUS.UN_ASSIS,
    queueStatus: QUEUE_STATUS.UN_QUEUE,
    showAssisList: true,
    assisLimit: 0,
    assisSuccess: ASSIS_SUCCESS.unknown,
    queueSuccess: QUEUE_SUCCESS.unknown,

    actionSheet: {
      componentId: 'shareActionSheet',
      show: false,
      closeOnClickOverlay: true,
      cancelText: '取消',
      actions: [{
        name: '邀请好友助力',
        className: 'action-class',
        loading: false,
        openType: 'share'
      }, {
        name: '生成图片分享到朋友圈',
        className: 'action-class',
        loading: false,
      }]
    },
  },
  onLoad: function(options) {
    let limitProductCode = options.limitProductCode ? options.limitProductCode : '';
    let originUid = options.originUid ? options.originUid : '';

    // let uid = app.getUid();
    let uid = '500027570';

    this.setData({
      limitProductCode,
      originUid,
      uid,
    });

    this.productInfo().then(() => {
      this.getAssitInfo();
    });

    yas = new Yas(app);
    yas.pageOpenReport();
  },
  onShareAppMessage: function(res) {
    let params = {
      FROM: res.from,
      SHARE_RESUIL: 0,
      TITLE: this.data.productName,
      DESC: '我在有货限定频道发现一个不错的商品赶快来看看吧!',
      PATH: `/pages/product/detail/detail?limitProductCode=${this.data.limitProductCode}&originUid=${app.getUid()}`,
    };

    // 用户点击右上角分享
    return {
      title: params.TITLE, // 分享标题
      desc: params.DESC, // 分享描述
      path: params.PATH, // 分享路径
      success: function() {
        params.SHARE_RESUIL = 1;
        yas.report('YB_SHARE_RESULT_L', params);
      },
      fail: function() {
        params.SHARE_RESUIL = 2;
        yas.report('YB_SHARE_RESULT_L', params);
      }
    };
  },
  share: function() {
    this.setData({
      'actionSheet.show': true
    });
  },
  handleZanActionsheetCancel() {
    this.setData({
      'actionSheet.show': false
    });
  },

  // 当行动按钮中有一个被点击时触发
  // index 代表被点击按钮在传入参数 actions 中的位置
  handleZanActionsheetClick({
    index
  }) {
    this.setData({
      'actionSheet.show': false
    });

    if (index === 1) {
      // 生成页面给
      router.go('snapShare', this.snapData);
    }
  },
  productInfo: function() {
    let uid = this.data.originUid || this.data.uid;

    return detailModel.productInfo(uid, this.data.limitProductCode)
      .then(res => {
        if (res.code === 200) {
          let defaultImage;

          if (res.data.defaultUrl) {
            defaultImage = res.data.defaultUrl;
          }

          let productDesc = [];

          if (res.data.attachment) {
            productDesc = res.data.attachment.map(a => {
              return {
                imageUrl: a.attachUrl,
                intro: a.intro
              };
            });
          }

          let default_image = defaultImage;
          let product_qrCode = config.domains.api + `/wechat/miniapp/img-check.jpg?param=${res.data.product_skn}&uid=${app.getUid()}&limitProductCode=${this.data.limitProductCode}`; // eslint-disable-line

          let snapData = {
            product_name: res.data.product_name,
            default_image,
            product_qrCode,
            product_skn: this.data.productSkn
          };

          let productSourceType = PRODUCT_SOURCE_TYPE.ORIGIN;

          if (this.data.originUid) {
            productSourceType = PRODUCT_SOURCE_TYPE.SHARE;
          }

          this.setData({
            productSkn: res.data.productSkn,
            productName: res.data.productName,
            price: res.data.price,
            saleTime: res.data.saleTime,
            reminderNum: res.data.reminderNum,
            limitProductTyp: res.data.limitProductType,
            showStatus: res.data.showStatus,
            assisLimit: res.data.helpLimit,
            defaultImage,
            productDesc,
            snapData,
            productSourceType
          });
        }
      });
  },
  getAssitInfo() {
    let uid = this.data.originUid || this.data.uid;

    if (this.data.limitProductType === LIMIT_TYPE.ASSIS) {
      return detailModel.getAssistInfo(uid, this.data.limitProductCode).then(result => {
        if (result.code !== 200) {
          return;
        }

        let assisStatus = ASSIS_STATUS.SHARE;

        if (this.assisLimit === result.data.length) {
          assisStatus = ASSIS_STATUS.ASSIS_FULL;
        } else {
          if (this.originUid) {
            assisStatus = ASSIS_STATUS.ASSIS_ACTION;
          } else {
            assisStatus = ASSIS_STATUS.UN_ASSIS;
          }
        }

        this.setData({
          avatarList: result.data,
          assisStatus
        });

      });
    } else {
      return detailModel.getQueueInfo(uid).then(result => {

      });
    }
  },
  assisShare() {
    this.share();
  },
  assisAction() {

    this.setData({
      assisSuccess: ASSIS_SUCCESS.ok
    });

    // this.setData({
    // assisSuccess: ASSIS_SUCCESS.repeat
    // });
  },
  queueAction() {
    this.setData({
      queueSuccess: QUEUE_SUCCESS.ok
    });

    // this.setData({
    //   queueSuccess: QUEUE_SUCCESS.repeat
    // });
  },
  queueCancel() {

  },
  assisCancel() {

  },
  buyNow() {

  },
  goList() {

  },
  restartSelfShare() {

  },
  goQueueList() {

  }
}, Actionsheet));