mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-01-21 08:28:14 +00:00
394 lines
14 KiB
JavaScript
394 lines
14 KiB
JavaScript
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;
|
||
}
|
||
});
|
||
|
||
}
|
||
}) |