2019-05-16 14:21:00 +08:00

394 lines
14 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var app = getApp();
const util = require('../../utils/util.js');
Page({
/**
* 页面的初始数据
*/
data: {
textareaStatus:true,
parameter: {
'navbar': '1',
'return': '1',
'title': '提交订单'
},
//支付方式
cartArr: [
{ "name": "余额支付", "icon": "icon-icon-test", value: 'yue',title:'可用余额:'},
{ "name": "微信支付", "icon": "icon-weixin2", value: 'weixin', title:'微信快捷支付'},
],
payType:'yue',//支付方式
openType:1,//优惠券打开方式 1=使用
active:0,//支付方式切换
coupon: { coupon: false, list: [], statusTile:'立即使用'},//优惠券组件
address: {address: false},//地址组件
addressInfo:{},//地址信息
pinkId:0,//拼团id
addressId:0,//地址id
couponId:0,//优惠券id
cartId:'',//购物车id
userInfo:{},//用户信息
mark:'',//备注信息
couponTitle:'请选择',//优惠券
coupon_price:0,//优惠券抵扣金额
useIntegral:false,//是否使用积分
integral_price:0,//积分抵扣金额
ChangePrice:0,//使用积分抵扣变动后的金额
formIds:[],//收集formid
status:0,
is_address:false,
isClose:false,
toPay:false,//修复进入支付时页面隐藏从新刷新页面
},
/**
* 授权回调事件
*
*/
onLoadFun:function(){
this.getaddressInfo();
this.getConfirm();
//调用子页面方法授权后执行获取地址列表
this.selectComponent('#address-window').getAddressList();
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.setData({ textareaStatus: true });
if (app.globalData.isLog && this.data.isClose && this.data.toPay==false) {
this.getaddressInfo();
this.selectComponent('#address-window').getAddressList();
}
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
this.setData({ isClose: true });
},
ChangCouponsClone:function(){
this.setData({'coupon.coupon':false});
},
changeTextareaStatus:function(){
for (var i = 0, len = this.data.coupon.list.length; i < len;i++){
this.data.coupon.list[i].use_title='';
this.data.coupon.list[i].is_use = 0;
}
this.setData({ textareaStatus: true, status: 0, "coupon.list": this.data.coupon.list});
},
/**
* 处理点击优惠券后的事件
*
*/
ChangCoupons:function(e){
var index = e.detail, list = this.data.coupon.list, couponTitle = '请选择', couponId = 0, coupon_price = 0, totalPrice = 0,
change_coupon_price=0;
for (var i = 0, len = list.length; i < len; i++) {
if(i != index){
list[i].use_title = '';
list[i].is_use = 0;
}
//获取当前优惠券抵扣金额
if (list[i].id == this.data.couponId) change_coupon_price = list[i].coupon_price;
}
if (this.data.totalPrice <= 0 && this.data.status != 1) return app.Tips({title:'支付金额为0无法使用优惠卷'});
if (this.data.status==1 || this.data.is_address) {
this.setData({ totalPrice: this.data.priceGroup.totalPrice });
}else{
//使用优惠券抵扣前先把之前的抵扣金额加回去
this.setData({ totalPrice: util.$h.Add(this.data.totalPrice, change_coupon_price) });
}
if (list[index].is_use) {
//不使用优惠券
list[index].use_title = '';
list[index].is_use = 0;
totalPrice = this.data.totalPrice;
//用户取消使用优惠卷但是使用了积分抵扣
if (totalPrice > 0 && this.data.useIntegral) totalPrice = this.changeCouponPrice(totalPrice, this.data.userInfo.integral);
this.data.status = 0;
} else {
//使用优惠券
list[index].use_title = '不使用';
list[index].is_use = 1;
couponTitle = list[index].coupon_title;
couponId = list[index].id;
coupon_price = list[index].coupon_price;
//使用积分抵扣,使用优惠券金额大于当前支付金额
if (this.data.totalPrice < coupon_price && this.data.useIntegral){
//超出金额
var changePrice = util.$h.Sub(coupon_price, this.data.totalPrice);
//超出回退积分
var changeIntegral = util.$h.Div(changePrice, this.data.integralRatio);
//回退积分和积分抵扣金额
this.setData({
integral: util.$h.Add(this.data.integral, changeIntegral),
integral_price: util.$h.Sub(this.data.integral_price, changePrice)
});
totalPrice=0;
this.data.status=0;
} else if (this.data.totalPrice < coupon_price && !this.data.useIntegral){
//使用优惠券金额大于当前支付金额
totalPrice=0;
this.data.status=1;
} else if (this.data.totalPrice > coupon_price && this.data.useIntegral){
//支付金额大于优惠券金额并且使用了积分
totalPrice = util.$h.Sub(this.data.totalPrice, list[index].coupon_price);
//当前优惠券大于0的时候再去减去可兑换的金额
if (this.data.integral > 0) totalPrice = this.changeCouponPrice(totalPrice, this.data.integral);
this.data.status = 0;
} else if (this.data.totalPrice > coupon_price && !this.data.useIntegral){
//支付金额大于优惠券金额没有使用积分
totalPrice = util.$h.Sub(this.data.totalPrice, list[index].coupon_price);
this.data.status = 0;
}
}
this.setData({
couponTitle: couponTitle,
couponId: couponId,
'coupon.coupon': false,
"coupon.list":list,
coupon_price: coupon_price,
totalPrice: totalPrice,
status: this.data.status,
});
},
/**
* 处理点击优惠券后支付金额和积分变动
* @param string | float totalPrice 当前支付金额
* @return float totalPrice 当前支付金额
*
*/
changeCouponPrice: function (totalPrice, integral){
var changePrice = util.$h.Mul(this.data.integralRatio,integral);
this.data.integral_price=0;
if (changePrice > totalPrice) {
//超出金额
var minParice = util.$h.Sub(changePrice, totalPrice);
//超出积分
var changeIntegral = util.$h.Div(minParice, this.data.integralRatio);
//抵扣金额需要原本的订单金额
this.setData({ integral: changeIntegral, integral_price: this.data.totalPrice });
//超出金额当前支付金额为0
totalPrice=0;
} else {
this.setData({ integral: 0, integral_price: util.$h.Add(this.data.integral_price, changePrice) });
totalPrice = util.$h.Sub(totalPrice, changePrice);
}
return totalPrice;
},
/**
* 使用积分抵扣
*/
ChangeIntegral:function(){
var integral=parseFloat(this.data.integral);
if (this.data.userInfo.integral <= 0) return app.Tips({ title: '您当前积分为较低不能使用抵扣' }, function () {
this.setData({ useIntegral:false });
}.bind(this));
if (this.data.totalPrice <= 0 && !this.data.useIntegral) return app.Tips({title:'当前支付金额不能在使用积分抵扣啦~'},function(){
this.setData({ useIntegral: false });
}.bind(this));
this.setData({useIntegral:!this.data.useIntegral});
//使用积分抵扣时
if (this.data.useIntegral){
var changePrice = util.$h.Mul(this.data.integralRatio, integral);
if (changePrice > this.data.totalPrice){
//超出金额
var minParice = util.$h.Sub(changePrice, this.data.totalPrice);
//超出积分
var changeIntegral = util.$h.Div(minParice, this.data.integralRatio);
//超出当前金额支付金额为0,积分抵扣金额为当前支付金额,积分剩余等于超出积分
this.setData({ integral: changeIntegral, integral_price:this.data.totalPrice,totalPrice:0});
}else{
this.setData({ integral: 0, integral_price: changePrice, totalPrice: util.$h.Sub(this.data.totalPrice, changePrice)});
}
}else{
var integral_price = this.data.integral_price;
//不使用积分返回原始数据
console.log(util.$h.Add(this.data.totalPrice, integral_price));
this.setData({ integral_price: 0, integral: this.data.userInfo.integral, totalPrice: util.$h.Add(this.data.totalPrice, integral_price.toString())});
}
},
/**
* 选择地址后改变事件
* @param object e
*/
OnChangeAddress:function(e){
this.setData({ textareaStatus:true,addressId: e.detail,'address.address':false});
this.getaddressInfo();
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
if (!options.cartId) return app.Tips({ title:'请选择要购买的商品'},{tab:3,url:1});
this.setData({
couponId: options.couponId || 0,
pinkId: options.pinkId ? parseInt(options.pinkId) : 0,
addressId: options.addressId || 0,
cartId: options.cartId,
is_address: options.is_address ? true : false,
});
},
bindHideKeyboard: function (e) {
this.setData({mark: e.detail.value});
},
/**
* 获取当前订单详细信息
*
*/
getConfirm:function(){
var that=this;
app.basePost(app.U({ c: 'auth_api', a: 'confirm_order' }), { cartId: this.data.cartId},function(res){
that.setData({
userInfo: res.data.userInfo,
integral: res.data.userInfo.integral,
cartInfo: res.data.cartInfo,
integralRatio: res.data.integralRatio,
offlinePostage: res.data.offlinePostage,
orderKey: res.data.orderKey,
priceGroup: res.data.priceGroup,
totalPrice: app.help().Add(parseFloat(res.data.priceGroup.totalPrice), parseFloat(res.data.priceGroup.storePostage)),
cartId: res.data.cartId,
seckillId: parseInt(res.data.seckill_id),
usableCoupon: res.data.usableCoupon
});
that.data.cartArr[0].title ='可用余额:'+ res.data.userInfo.now_money;
that.setData({ cartArr: that.data.cartArr, ChangePrice:that.data.totalPrice});
that.getBargainId();
that.getCouponList();
},function(res){
return app.Tips({title:res.msg},{tab:3,url:1});
});
},
/*
* 提取砍价和拼团id
*/
getBargainId: function () {
var that = this;
var cartINfo = that.data.cartInfo;
var BargainId = 0;
var combinationId = 0;
cartINfo.forEach(function (value, index, cartINfo) {
BargainId = cartINfo[index].bargain_id,
combinationId = cartINfo[index].combination_id
})
that.setData({ BargainId: parseInt(BargainId), combinationId: parseInt(combinationId)});
},
/**
* 获取当前金额可用优惠券
*
*/
getCouponList:function(){
var that=this;
app.baseGet(app.U({ c: "coupons_api", a: 'get_use_coupon_order', q: { totalPrice:this.data.totalPrice }}),function(res){
that.setData({ 'coupon.list': res.data, openType:1});
});
},
/*
* 获取默认收货地址或者获取某条地址信息
*/
getaddressInfo:function(){
var that=this;
var url = that.data.addressId ?
app.U({ c: 'user_api', a: 'get_user_address', q: { addressId: that.data.addressId } }) :
app.U({ c: 'user_api', a:'user_default_address'});
app.baseGet(url,function(res){
res.data.is_default = parseInt(res.data.is_default);
that.setData({ addressInfo: res.data || {}, addressId: res.data.id || 0, 'address.addressId': res.data.id || 0});
});
},
payItem:function(e){
var that = this;
var active = e.currentTarget.dataset.index;
that.setData({
active: active,
animated: true,
payType: that.data.cartArr[active].value,
})
setTimeout(function () {
that.car();
}, 500);
},
coupon: function () {
this.setData({
'coupon.coupon': true
})
},
car: function () {
var that = this;
that.setData({
animated: false
});
},
address:function(){
this.setData({
textareaStatus:false,
'address.address': true,
pagesUrl: '/pages/user_address_list/index?cartId=' + this.data.cartId + '&pinkId=' + this.data.pinkId + '&couponId=' + this.data.couponId
});
},
SubOrder:function(e){
var formId = e.detail.formId, that = this, data={};
if (!this.data.payType) return app.Tips({title:'请选择支付方式'});
if (!this.data.addressId) return app.Tips({ title:'请选择收货地址'});
data={
addressId: that.data.addressId,
formId: formId,
couponId: that.data.couponId,
payType: that.data.payType,
useIntegral: that.data.useIntegral,
bargainId: that.data.BargainId,
combinationId: that.data.combinationId,
pinkId: that.data.pinkId,
seckill_id: that.data.seckillId,
mark: that.data.mark
};
if (data.payType == 'yue' && parseFloat(that.data.userInfo.now_money) < parseFloat(that.data.totalPrice)) return app.Tips({title:'余额不足!'});
wx.showLoading({ title: '订单支付中'});
app.basePost(app.U({ c: 'auth_api', a:'create_order',q:{key:this.data.orderKey}}),data,function(res){
var status = res.data.status, orderId = res.data.result.orderId, jsConfig = res.data.result.jsConfig,
goPages = '/pages/order_pay_status/index?order_id=' + orderId+'&msg='+res.msg;
switch (status){
case 'ORDER_EXIST': case 'EXTEND_ORDER': case 'PAY_ERROR':
wx.hideLoading();
return app.Tips({ title: res.msg}, { tab: 5, url: goPages });
break;
case 'SUCCESS':
wx.hideLoading();
return app.Tips({ title: res.msg,icon: 'success' }, { tab: 5, url: goPages });
break;
case 'WECHAT_PAY':
that.setData({toPay:true});
wx.requestPayment({
timeStamp: jsConfig.timestamp,
nonceStr: jsConfig.nonceStr,
package: jsConfig.package,
signType: jsConfig.signType,
paySign: jsConfig.paySign,
success: function (res) {
wx.hideLoading();
return app.Tips({ title: '支付成功', icon:'success' }, { tab: 5, url: goPages });
},
fail:function(e){
wx.hideLoading();
return app.Tips({ title: '取消支付' }, { tab: 5, url: goPages +'&status=2'});
},
complete:function(e){
wx.hideLoading();
//关闭当前页面跳转至订单状态
if (res.errMsg == 'requestPayment:cancel') return app.Tips({ title: '取消支付' }, { tab: 5, url: goPages + '&status=2'});
},
})
break;
case 'PAY_DEFICIENCY':
wx.hideLoading();
//余额不足
return app.Tips({ title: res.msg}, { tab: 5, url: goPages+'&status=1' });
break;
}
});
}
})