| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 | // pages/submit-order/submit-order.jsvar http = require("../../utils/http.js");Page({  /**   * 页面的初始数据   */  data: {    popupShow: false,    // 订单入口 0购物车 1立即购买    orderEntry: "0",    userAddr: null,    orderItems: [],    shopCartOrders: [], //所有店铺的数据    couponSts: 1,    platformCoupons: {}, // 平台优惠券数据    showCoupons: {      canUseCoupons: [],      unCanUseCoupons: []    },    actualTotal: 0,    total: 0,    totalCount: 0,    transfee: 0,    reduceAmount: 0, //减免金额    couponIds: [],    orderReduce: 0,    userChangeCoupon: 0, // 用户有没有对优惠券进行改变    orderReduce: 0,    choose: true,    totalScoreAmount: 0, //积分抵扣金额    maxUsableScore: 0, //整个订单可以使用的积分数    isScorePay: 0, //用户是否选择积分抵现(0不使用 1使用 默认不使用)    isChecked: false, //是否选择会员积分抵现    totalLevelAmount: 0, //等级抵扣金额    freeTransfee: 0, //用户等级免运费金额    userUseScore: '', // 用于抵扣的金额数量    scorePopPlaceholder: '', // 积分弹窗输入框占位符    isPurePoints: false,    address_id: 0,    shop_id: 0,    deliveryAmount_num: 0,    shop_weight: 0,    is_distance:false,    dvyType:'',//配送方式    totalAvailableScore:0,//可用积分    totalUsableScore:0,//积分抵扣金额  },  /**   * 生命周期函数--监听页面加载   */  onLoad: function (options) {    this.setData({      orderEntry: options.orderEntry,    });    // 请求用户可用积分    this.getUserScore()  },  /**   * 获取用户可用积分   */  getUserScore() {    var params = {      url: '/p/user/userInfo',      method: 'GET',      callBack: res => {        this.setData({          accountScore: res.score        })      }    }    http.request(params)  },  // 会员积分抵现选择  useMemberPoints: function () {    this.data.isChecked = !this.data.isChecked    if (this.data.maxUsableScore > 0) { // maxUsableScore 整个订单可以使用的积分数      this.setData({        isScorePay: this.data.isChecked ? 1 : 0,        userUseScore: this.data.isChecked ? this.data.userUseScore : ''      })      this.loadOrderData()    }  },  /**   * 积分抵扣输入框   */  handleScoreInput(e) {    var maxScore = 0    if (this.data.maxUsableScore > this.data.accountScore) {      maxScore = this.data.accountScore    } else {      maxScore = this.data.maxUsableScore    }    this.setData({      userUseScore: e.detail.value > 0 ? e.detail.value > maxScore ? maxScore : e.detail.value : ''    })  },  /**   * 修改积分确定弹窗   */  confirmScore() {    this.loadOrderData()    this.closePopup()  },  //加载订单数据  loadOrderData: function () {    var addrId = 0;    if (this.data.userAddr != null) {      addrId = this.data.userAddr.addrId;    }    wx.showLoading({      mask: true    });    // 重置地址  避免超出配送 使用之前地址    this.setData({userAddr:null})    var params = {      url: "/p/order/confirm",      method: "POST",      data: {        addrId: addrId,        orderItem: this.data.orderEntry === "1" ? JSON.parse(wx.getStorageSync("orderItem")) : undefined,        basketIds: this.data.orderEntry === "0" ? JSON.parse(wx.getStorageSync("basketIds")) : undefined,        couponIds: this.data.couponIds,        userChangeCoupon: this.data.userChangeCoupon,        isScorePay: this.data.isScorePay,        userUseScore: this.data.userUseScore ? this.data.userUseScore : 0,        platform:1      },      callBack: res => {        wx.hideLoading();        if(res.code == 500){          return wx.showToast({            title: res.msg,            icon:'none'          })        }                this.setData({          address_id: res.userAddr?res.userAddr.addrId:0,          shop_weight: res.weight        })        var shopCartOrders = res.shopCartOrders; //购物车店铺商品信息列表        var couponIds = []        let img=''        shopCartOrders.forEach(shopCart => {          shopCart.shopCartItemDiscounts.forEach(e=>{            e.shopCartItems.forEach(item=>{              img=item.pic.split(',')              item.pic=img[0]            })          })          this.setData({            shop_id: shopCart.shopId          })          shopCart.remarks = '';          shopCart.shopCoupons = this.splitCouponAndPushCouponIds(shopCart.coupons, couponIds)        })        // 平台优惠券        var platformCoupons = this.splitCouponAndPushCouponIds(res.coupons, couponIds) //平台优惠券        var dvyType        if(res.dvyType == 1){          dvyType = '运费(快递)'        }else if(res.dvyType == 3){          dvyType = '配送费(即时配送)'        }else{          dvyType = '自提'        }        // 平台优惠券end        this.setData({          dvyType:dvyType,          platformCoupons: platformCoupons, //整个订单可以使用的优惠券列表          shopCartOrders: shopCartOrders, //所有的店铺的购物车信息          actualTotal: res.actualTotal, //实际总值          total: res.total, //商品总值          totalCount: res.totalCount, //商品总数          userAddr: res.userAddr, //地址Dto          transfee: res.totalTransfee, //总运费          orderReduce: res.orderReduce, //订单优惠金额(所有店铺优惠金额和使用积分抵现相加)          totalScoreAmount: res.totalScoreAmount, //积分抵扣金额          totalUsableScore: res.totalUsableScore, //用于抵扣的积分数量          isScorePay: res.isScorePay, //用户是否选择积分抵现(0不使用 1使用 默认不使用)          totalLevelAmount: res.totalLevelAmount, //等级抵扣金额          freeTransfee: res.freeTransfee, //用户等级免运费金额          couponIds: couponIds,          maxUsableScore: res.maxUsableScore, //整个订单可以使用的积分数          scorePopPlaceholder: `剩余积分${this.data.accountScore},此订单最多可用${res.maxUsableScore}`,          scorePlaceholder: `使用${res.totalUsableScore}积分抵扣${res.totalScoreAmount}元`,          shopUseScore: res.shopUseScore, // 店铺积分抵扣比例;           isPurePoints: res.actualTotal == 0 ? true : false,          totalUsableScore:res.totalUsableScore,          totalAvailableScore:res.totalAvailableScore,        });        if(!res.userAddr){          return wx.showToast({            title: '请添加收货地址',            icon:'none'          })        }        this.getDeliveryAmount()      },      errCallBack: res => {        setTimeout(()=>{          wx.showToast({            title:res.data,            icon: "none"          })        },1)        wx.hideLoading();      }    };    http.request(params);  },  /**   * 分割优惠券成   * 1. canUseCoupons 可使用优惠券列表   * 2. unCanUseCoupons 不可使用优惠券列表   * 3. couponAmount 选中的优惠券可优惠金额   * 4. 将选中的优惠券ids保存起来   * @param {*} coupons 优惠券列表   * @param {*} couponIds 选中的优惠券id   */  splitCouponAndPushCouponIds(coupons, couponIds) {    if (!coupons || !coupons.length) {      return    }    let canUseCoupons = []    let unCanUseCoupons = []    let couponAmount = 0;    coupons.forEach(coupon => {      if (coupon.canUse) {        canUseCoupons.push(coupon)      } else {        unCanUseCoupons.push(coupon)      }      if (coupon.choose) {        couponIds.push(coupon.couponId)        couponAmount = coupon.reduceAmount;      }    })    return {      canUseLength: canUseCoupons.length,      couponAmount: couponAmount,      canUseCoupons: canUseCoupons,      unCanUseCoupons: unCanUseCoupons,    }  },  /**   * 提交订单校验   */  toPay: function () {    // if (this.data.actualTotal < this.data.deliveryAmount_num) {    //   wx.showToast({    //     title: '商品总额需大于起送价~',    //     icon: "none"    //   })    //   return;    // }    if (!this.data.userAddr) {      wx.showToast({        title: '请选择地址',        icon: "none"      })      return;    }    if (this.data.shop_weight > 20000) {      wx.showToast({        title: '已超过单次配送限制20kg,请减少商品数',        icon: "none"      })    return    }    if(this.data.is_distance==false){      wx.showToast({        title: '超出配送范围',        icon: "none"      })      return    }    this.submitOrder();  },  /**   * 获取起送价   */  getDeliveryAmount: function () {    if(!this.data.shop_id||!this.data.address_id) return    var params = {      url: "/p/address/deliveryAmount/" + this.data.shop_id + '/' + this.data.address_id,      method: "GET",      callBack: res => {        this.setData({          deliveryAmount_num: res.deliveryAmount,          is_distance:true        })      },      errCallBack:(err)=>{        this.setData({          is_distance:false        })      }    }    http.request(params);  },/** * 获取配送距离 */// getaddress_transports: function () {//   let _this = this//   var params = {//     url: "/p/address/transport2",//     method: "GET",//     data: {//       shopId: this.data.shop_id,//       addrId:this.data.address_id//     },//     callBack: function (res) {//       wx.setStorageSync('DISTANCE', res.distance)//       _this.setData({//       })//     }//   };//   http.request(params);// },  // 提交订单  submitOrder: function () {    wx.showLoading({      mask: true    });    var shopCartOrders = this.data.shopCartOrders;    var orderShopParam = [];    shopCartOrders.forEach(shopCart => {      orderShopParam.push({        remarks: shopCart.remarks,        shopId: shopCart.shopId      });    })    var params = {      url: "/p/order/submit",      method: "POST",      data: {        orderShopParam: orderShopParam,        // coupons: this.data.platformCoupons,        coupons: this.data.coupons,        isScorePay: this.data.isScorePay,        platform:1      },      callBack: res => {        wx.hideLoading();        if(res.nextPay){          this.calWeixinPay(res.orderNumbers);        }else{          wx.redirectTo({            url: `/pages/pay-result/pay-result?sts=1&orderNumbers=${res.orderNumbers}&orderType=${this.data.orderType}`,          })        }      },      errCallBack: res => {        wx.showModal({          showCancel: false,          title: '提示',          content: res.data        })      }    };    http.request(params);  },  /**   * 唤起微信支付   */  calWeixinPay: function (orderNumbers) {    wx.showLoading({      mask: true    });    var params = {      url: "/p/order/pay",      method: "POST",      data: {        payType: 1, //支付方式 (1:微信小程序支付 2:支付宝 3微信扫码支付 4 微信h5支付)        orderNumbers: orderNumbers      },      callBack: (res) => {        wx.hideLoading();        if (this.data.isPurePoints) {          wx.redirectTo({            url: `/pages/pay-result/pay-result?sts=1&orderNumbers=${orderNumbers}&orderType=${this.data.orderType}`,          })          return        }        wx.requestPayment({          timeStamp: res.timeStamp,          nonceStr: res.nonceStr,          package: res.package,          signType: res.signType,          paySign: res.paySign,          success: e => {            console.log('成功');            wx.redirectTo({              url: `/pages/pay-result/pay-result?sts=1&orderNumbers=${orderNumbers}&orderType=${this.data.orderType}`,            })          },          fail: err => {            console.log('失败',err);            wx.redirectTo({              url: `/pages/pay-result/pay-result?sts=0&orderNumbers=${orderNumbers}&orderType=${this.data.orderType}`,            })          }        })      }    };    http.request(params);  },  /**   * 生命周期函数--监听页面初次渲染完成   */  onReady: function () {  },  /**   * 生命周期函数--监听页面显示   */  onShow: function () {    var pages = getCurrentPages();    var currPage = pages[pages.length - 1];    if (currPage.data.selAddress == "yes") {      this.setData({ //将携带的参数赋值        userAddr: currPage.data.item      });    }    //获取订单数据    this.loadOrderData();    setTimeout(() => {      this.getDeliveryAmount()    }, 500)  },  /**   * 生命周期函数--监听页面隐藏   */  onHide: function () {  },  /**   * 生命周期函数--监听页面卸载   */  onUnload: function () {  },  /**   * 页面相关事件处理函数--监听用户下拉动作   */  onPullDownRefresh: function () {  },  /**   * 页面上拉触底事件的处理函数   */  onReachBottom: function () {  },  /**   * 用户点击右上角分享   */  onShareAppMessage: function () {  },  // 店铺切换可用/不可用优惠券列表  changeCouponSts: function (e) {    this.setData({      couponSts: e.currentTarget.dataset.sts    });  },  // 店铺优惠券弹框  showCouponPopup: function (e) {    var index = e.currentTarget.dataset.index;    var shopCartOrders = this.data.shopCartOrders;    this.setData({      showCoupons: index + '' === '-1' ? this.data.platformCoupons : shopCartOrders[index].shopCoupons,      popupShow: true,    });  },  closePopup: function () {    this.setData({      popupShow: false,      // platPopupShow: false      showScorePop: false    });  },  /**   * 去地址页面   */  toAddrListPage: function () {    wx.navigateTo({      url: '/pages/delivery-address/delivery-address?order=0',    })  },  /**   * 确定选择好的优惠券   */  choosedCoupon: function () {    var couponIds = this.data.couponIds    if (!this.data.showCoupons) {      this.setData({        popupShow: false      })      return    }    // 店铺优惠券单选操作    var canUseCoupons = this.data.showCoupons.canUseCoupons;    var checkedCouponId = ''    for (var canUseCouponIndex in canUseCoupons) {      var coupon = canUseCoupons[canUseCouponIndex];      if (!coupon.choose && couponIds.indexOf(coupon.couponId) !== -1) {        couponIds.splice(couponIds.indexOf(coupon.couponId), 1)      }      if (coupon.choose) {        checkedCouponId = coupon.couponId      }    }    couponIds.push(checkedCouponId)    this.setData({      couponIds: couponIds,      popupShow: false    });    this.loadOrderData();  },  /**-   * 优惠券子组件发过来   */  checkCoupon: function (e) {    var showCoupons = this.data.showCoupons;    // 店铺优惠券单选操作    var canUseCoupons = showCoupons.canUseCoupons;    for (var canUseCouponIndex in canUseCoupons) {      if (e.detail.couponId === canUseCoupons[canUseCouponIndex].couponId && canUseCouponIndex == e.detail.index) {        canUseCoupons[canUseCouponIndex].choose = !canUseCoupons[canUseCouponIndex].choose      } else {        canUseCoupons[canUseCouponIndex].choose = false      }    }    this.setData({      showCoupons: showCoupons,      userChangeCoupon: 1    });  },  /**   * 输入备注   */  onRemarkIpt: function (e) {    var index = e.currentTarget.dataset.index;    var shopCartOrders = this.data.shopCartOrders;    shopCartOrders[index].remarks = e.detail.value;    this.setData({      shopCartOrders: shopCartOrders    });  },  /**   * 积分输入弹窗显示   */  handleScorePop() {    this.setData({      showScorePop: true    })  },})
 |