yuminge-app/yun-min-program-plugin-master/packageC/cashier/cashier_pay/cashier_pay.js

1002 lines
27 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.

// pages/cashier_pay/cashier_pay.js
// var WxParse = require('../../../wxParse/wxParse.js');
var yz_pay = require("../../../mycomponent/yz_pay/yz_pay");
var app = getApp();
Page({
behaviors: [yz_pay],
/**
* 页面的初始数据
*/
data: {
language: "",
//是否显示支付协议
agreementPayData: "",
agreementPay: false,
agreementPayShow: false,
store_id: "",
confirmOrderStatus: false,
payMuch: "0",
realname: "", //收件人
mobile: "",
//优惠券
popupCouponSpecs: false,
checkCouponList: [],
coupon_size: 0,
use_coupon_size: 0,
coupons: [],
//支付
order_ids: "",
income: {
money_total: 0.0,
sure_withdraw_money: 0.0,
},
store_set: {
is_cash_pay: "",
is_open_cashier: "",
is_write_information: "",
},
payPrice: 0,
//积分抵扣 其他抵扣
checkDeductionList: [],
form: {
mobile: "",
realname: "",
},
allData: {},
order_data: "",
loadDiscount: false,
goods_price: 0.0,
dispatch_price: 0.0,
discount_price: 0,
price: 0.0,
deduction_price: 0,
payType: [],
typename: "",
show1: false,
clicktag: 0,
uid: "",
cashier_type: "",
hotel_id: "",
order_pay_id: "",
//消费红包
showPacket: false,
redirectData: {},
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var info_arr = [];
if (options.scene) {
let scene = decodeURIComponent(options.scene);
console.log(scene);
if (scene) {
info_arr = scene.split(",");
for (let i = 0; i < info_arr.length; i++) {
let chil_arr = [];
chil_arr = info_arr[i].split("=");
console.log(chil_arr);
if (chil_arr[0] == "store_id") {
this.setData({
store_id: chil_arr[1],
});
}
if (chil_arr[0] == "hotel_id") {
this.setData({
hotel_id: chil_arr[1],
});
}
if (chil_arr[0] == "mid") {
app._setMid(chil_arr[1]);
}
}
}
}
if (options.q) {
let qscen = decodeURIComponent(options.q);
console.log(qscen);
if (qscen) {
let scene = decodeURIComponent(options.q);
if (scene) {
if (scene.indexOf("?i=") == "-1") {
info_arr = scene.split(",");
} else {
let arr = scene.split("&");
info_arr = arr[1].split(",");
}
for (let i = 0; i < info_arr.length; i++) {
let chil_arr = [];
chil_arr = info_arr[i].split("=");
if (chil_arr[1] == "store_id") {
this.setData({
store_id: chil_arr[2],
});
}
if (chil_arr[0] == "mid") {
app._setMid(chil_arr[1]);
}
}
}
}
}
if (options.hotel_id) {
this.setData({
hotel_id: options.hotel_id,
});
}
if (app._isTextEmpty(this.data.hotel_id)) {
this.setData({
cashier_type: "store",
});
} else {
this.setData({
cashier_type: "hotel",
});
}
if (options.store_id) {
this.setData({
store_id: options.store_id,
});
}
if(options.cashier_type){
this.setData({
cashier_type:options.cashier_type
});
}
if(this.data.cashier_type == "scanning_payment"){
this.setData({
payMuch:options.price,
show1:true,
showPage:true
});
wx.setNavigationBarTitle({
title: '扫码下单',
});
this.preGoodsBuy();
}else {
this.getCenter();
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
let language = wx.getStorageSync("langIndex");
this.setData({
language: language.en,
});
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {},
onShareTimeline(){},
fromChild(e){
if(this.data.money=='0.00') {
// 0元
this.sureBtn();
}else {
let datas = e.detail.submitArr;
this.submit(datas);
}
},
onClickHide() {
this.setData({
showPacket: false,
});
this.toRedirect();
},
toPacket() {
wx.redirectTo({
url: "/packageE/ConsumePacket/ConsumePacketSuccess/ConsumePacketSuccess?order_id=" + this.data.order_ids.toString(),
});
},
// 消费红包
checkoutConsumePacket() {
this.getVoiceSet();
let basicinfo = wx.getStorageSync("yz_basic_info");
if (basicinfo && basicinfo.globalParameter.consume_red_packet_status == 1) {
let urlStr = app.getNetAddresss("plugin.consume-red-packet.Frontend.Modules.Packet.Controllers.has.index");
app._postNetWork({
url: urlStr,
data: {
order_id: this.data.order_ids.split(","),
},
success: (resdata) => {
var res = resdata.data;
if (res.result == 1) {
this.setData({
show1: false,
showPacket: true,
});
} else {
this.toRedirect();
}
},
fail: (res) => {
this.toRedirect();
console.log(res);
},
});
} else {
this.toRedirect();
}
},
toRedirect() {
wx.showToast({
icon: "none",
title: "支付成功",
duration: 2000,
});
if (this.data.order_sn) {
this.payCallBack();
}
// wx.showModal({
// title: "提示",
// content: "支付成功",
// showCancel: false,
// success: (res) => {
// if (res.confirm) {
// if (this.data.redirectData.cashPay) {
// wx.reLaunch({
// url: "/packageG/member_v2/member_v2",
// });
// } else if (!app._isTextEmpty(this.data.min_redirect_url)) {
// try {
// wx.redirectTo({
// url: this.data.min_redirect_url,
// });
// } catch (e) {
// console.log(e);
// }
// } else {
// wx.reLaunch({
// url: "/packageG/index/index",
// });
// }
// }
// },
// });
},
getVoiceSet() {
//判断是否开启语音播报
// let that = this;
let urlStr = app.getNetAddresss("plugin.store-cashier.frontend.cashier.voice.index");
app._postNetWork({
url: urlStr,
data: {
order_id: this.data.order_ids,
},
success: (resdata) => {
var res = resdata.data;
if (res.result == 1) {
// const bgMusic = wx.createInnerAudioContext();
const bgMusic = wx.getBackgroundAudioManager(); //音乐播放实例
// //bug ios 播放时必须加title 不然会报错导致音乐不播放
bgMusic.title = "支付成功语音提示";
bgMusic.src = res.data.url;
bgMusic.play();
// bgMusic.src = `data:audio/x-wav;base64,${res.data.speech}`;
// bgMusic.src = 'https://dev4.yunzmall.com/attachment/audios/0/2021/05/556f15b68d5d2c1886e2e470e6f1cda9.mp3'
} else {
console.log(res);
}
},
fail: function (res) {
console.log(res);
},
});
},
PayShowbtn() {
this.setData({
agreementPayShow: false,
});
},
initStore(data) {
this.setData({
confirmOrderStatus: false,
payMuch: "0",
realname: "",
mobile: "",
popupCouponSpecs: false,
order_ids: "",
});
if (this.data.cashier_type === "hotel") {
// 酒店没有用到,这是用来统计门店订单的 任务编号: 54992
// this.setData({
// store: data.hotel,
// store_set: data.hotel_set
// })
} else {
this.setData({
store: data.store,
store_set: data.store_set,
income: data.income,
});
if(data.store_set.is_open_cashier != 1) {
// 该门店没有开启收银台
app.confirm('该门店没有开启收银台',()=> {
wx.navigateBack({
delta: 1,
fail: ()=> {
wx.reLaunch({
url: '/packageG/index/index',
});
}
});
},false);
}
}
},
//处理按键
_handleKeyPress(e) {
let num = e.currentTarget.dataset.num;
//不同按键处理逻辑
// -1 代表无效按键,直接返回
if (num == -1) return false;
switch (String(num)) {
//小数点
case ".":
this._handleDecimalPoint();
break;
//删除键
case "D":
this._handleDeleteKey();
break;
//确认键
case "S":
this._handleConfirmKey();
break;
default:
this._handleNumberKey(num);
break;
}
},
//处理小数点函数
_handleDecimalPoint() {
//如果包含小数点,直接返回
if (this.data.payMuch.indexOf(".") > -1) {
return false;
}
//如果小数点是第一位补0
if (!this.data.payMuch.length) {
this.setData({
payMuch: "0.",
});
} else {
//如果不是,添加一个小数点
this.setData({
payMuch: this.data.payMuch + ".",
});
}
},
//处理删除键
_handleDeleteKey() {
let S = this.data.payMuch;
//如果没有输入,直接返回
if (S.length <= 1) {
this.setData({
payMuch: "0",
});
return;
}
//否则删除最后一个
this.setData({
payMuch: S.substring(0, S.length - 1),
});
},
_handleConfirmKey() {
let S = this.data.payMuch;
//未输入
if (!S.length || Number(S) === 0) {
wx.showToast({
icon: "none",
title: "您目前未输入!",
duration: 1500,
});
return false;
}
//将 8. 这种转换成 8.00
if (S.indexOf(".") > -1 && S.indexOf(".") === S.length - 1) {
S = Number(S.substring(0, S.length - 1)).toFixed(2);
}
//保留两位
S = Number(S).toFixed(2);
this.setData({
payMuch: S,
});
this.confirmOrder();
},
confirmOrder() {
var val = this.data.payMuch;
if (val && val > 0) {
this.setData({
payPrice: val,
confirmOrderStatus: true,
isdisabled: true,
});
this.preGoodsBuy();
} else {
wx.showToast({
icon: "none",
title: "请输入正确的付款金额!",
duration: 1500,
});
this.setData({
confirmOrderStatus: false,
isdisabled: false,
});
}
},
//处理数字
_handleNumberKey(num) {
let S = this.data.payMuch;
//如果有小数点且小数点位数不小于2
if (S.indexOf(".") > -1 && S.substring(S.indexOf(".") + 1).length < 2) {
this.setData({
payMuch: S + num,
});
}
//没有小数点
if (!(S.indexOf(".") > -1)) {
//如果第一位是0只能输入小数点
if (num == 0 && S.length == 0) {
this.setData({
payMuch: "0.",
});
} else {
if (S.length && Number(S.charAt(0)) === 0) {
this.setData({
payMuch: num,
});
return;
}
this.setData({
payMuch: S + num,
});
}
}
},
//直接购买
preGoodsBuy() {
let that = this;
let urlStr = "";
if (this.data.cashier_type == "hotel") {
urlStr += app.getNetAddresss("plugin.hotel.frontend.Order.goods-buy");
urlStr += "&price=" + this.data.payPrice;
urlStr += "&hotel_id=" + this.data.hotel_id;
urlStr += "&member_coupon_ids=" + this.assembleCoupons();
urlStr += "&orders=" + JSON.stringify(this.assembleDeduction());
urlStr += "&mobile=" + this.data.form.mobile;
urlStr += "&realname=" + this.data.form.realname;
} else if(this.data.cashier_type == "scanning_payment"){
urlStr += app.getNetAddresss("plugin.sweep-buy.frontend.controllers.goods-buy.index");
urlStr += "&member_coupon_ids=" + this.assembleCoupons();
urlStr += "&price=" + this.data.payMuch;
urlStr += "&goods_id=" + this.options.goods_id;
urlStr += "&orders=" + JSON.stringify(this.assembleDeduction());
}else {
urlStr += app.getNetAddresss("plugin.store-cashier.frontend.Order.goods-buy");
urlStr += "&price=" + this.data.payPrice;
urlStr += "&store_id=" + this.data.store_id;
urlStr += "&member_coupon_ids=" + this.assembleCoupons();
urlStr += "&orders=" + JSON.stringify(this.assembleDeduction());
urlStr += "&mobile=" + this.data.form.mobile;
urlStr += "&realname=" + this.data.form.realname;
}
if (this.data.clicktag == 0) {
this.setData({
clicktag: 1,
});
app._getNetWork({
url: urlStr,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
if(res.data.balance){
that.setData({
balanceNow:res.data.balance
});
}
that.setViewData(res.data); //设置界面
// if (that.data.cashier_type != "hotel") {
that.initCoupon(res.data.discount); //设置优惠券信息
// }
that.initPayType();
} else {
wx.showModal({
title: "提示",
content: res.msg,
showCancel: false,
success(res) {
if (res.confirm) {
wx.navigateBack({
delta: 1,
});
}
},
});
}
setTimeout(function () {
that.setData({
clicktag: 0,
});
}, 1000);
},
fail: function (res) {
console.log(res);
},
});
}
},
//组装优惠券json信息
assembleCoupons() {
let coupons = [];
for (let i = 0; i < this.data.checkCouponList.length; i++) {
coupons.push(this.data.checkCouponList[i].id);
}
return coupons;
},
//组装优惠抵扣信息
assembleDeduction() {
let deductions = [];
for (let i = 0; i < this.data.checkDeductionList.length; i++) {
deductions.push(this.data.checkDeductionList[i]);
}
return deductions;
},
//设置界面
setViewData(data) {
// console.log(data.orders, '55454');
this.setData({
allData: data,
order_data: data.orders,
loadDiscount: true,
goods_price: data.total_goods_price, //设置商品总价格
dispatch_price: data.total_dispatch_price, //设置总运费价格
deduction_price: data.total_deduction_price, //设置总抵扣价格
price: data.total_price, //设置总价格(合计)
// 服务费
service: data.orders[0].order_fees,
datas: data.orders[0],
});
if (this.data.cashier_type != "hotel") {
this.setData({
discount_price: data.total_discount_price, //设置总优惠价格
});
}
},
//初始化优惠券
initCoupon(data) {
this.setData({
isShowCoupon: data.whether_show_coupon == "1" ? true : false,
});
let coupon = data.member_coupons;
if (coupon != undefined && coupon != "" && coupon != null) {
this.setData({
coupon_size: coupon.length,
});
}
this.setData({
coupons: coupon,
});
},
initPayType() {
let that = this;
let urlStr = "";
if (this.data.cashier_type === "hotel") {
urlStr += app.getNetAddresss("plugin.hotel.frontend.payment.list");
urlStr += "&hotel_id=" + this.data.hotel_id;
urlStr += "&price=" + this.data.payMuch;
} else if(this.data.cashier_type == "scanning_payment"){
urlStr += app.getNetAddresss("plugin.sweep-buy.frontend.controllers.payment.list");
urlStr += "&price=" + this.data.payMuch;
} else {
urlStr += app.getNetAddresss("plugin.store-cashier.frontend.payment.list");
urlStr += "&store_id=" + this.data.store_id;
urlStr += "&price=" + this.data.payMuch;
}
app._getNetWork({
url: urlStr,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
let payTypeData = res.data;
let arr = {};
arr.buttons = res.data;
that.hanleIcon(arr);
that.setData({
payType: payTypeData,
typename: "支付",
show1: true,
});
} else {
wx.showToast({
title: res.msg,
icon: "none",
duration: 1500,
success: function () {
setTimeout(function () {
//要延时执行的代码
wx.navigateBack({
delta: 1,
});
}, 1500); //延迟时间
},
});
}
},
fail: function (res) {
console.log(res);
},
});
},
btnstyle(type) {
if (type == 1 || type == 6 || type == 9 || type == 12 || type == 20 || type == 22) {
return "#64b42e";
} else if (type == 2 || type == 7 || type == 10 || type == 15 || type == 21) {
return "#069ce7";
} else if (type == 3) {
return "#fc992c";
} else if (type == 14) {
return "#e36724";
} else if (type == 18) {
return "#dedede";
} else {
return "#fac337";
}
},
btnclass(type) {
if (type == 1 || type == 6 || type == 9 || type == 12 || type == 20 || type == 22) {
return "icon-pay_b";
} else if (type == 2 || type == 7 || type == 10 || type == 15 || type == 21) {
return "icon-pay_c";
} else if (type == 3) {
return "icon-pay_d";
} else if (type == 14) {
return "icon-pay_f";
} else if (type == 18) {
return "card";
} else {
return "icon-pay_a";
}
},
show1btn() {
this.setData({
show1: false,
});
},
//抵扣选择响应
discountHandle(e) {
let bol = e.detail;
let code = e.currentTarget.dataset.d.code;
let index = e.currentTarget.dataset.index;
console.log(this.data.order_data[0], this.data.order_data[0].order_deductions[index]);
//处理选择
this.screenDiscount(this.data.order_data[0], {
checked: bol,
code: code,
});
//重新计算
this.preGoodsBuy(); //直接购买
},
//筛选抵扣
screenDiscount(item, value) {
this.deductionListHandle(item, value);
},
deductionListHandle(item, value) {
let checkDeductionList = this.data.checkDeductionList;
// let service_fee = this.data.service_fee;
// let note = this.data.note;
let isHasPreId = false;
if (checkDeductionList.length > 0) {
checkDeductionList.forEach((deduction, index) => {
if (deduction && deduction.pre_id == item.pre_id) {
isHasPreId = true;
if (value && value.checked) {
// 选中的时候检查是否有对应的code
if (deduction.deduction_ids && deduction.deduction_ids.indexOf(value.code) == -1) {
deduction.deduction_ids.push(value.code);
}
} else if (value && !value.checked) {
// 取消选中的时候检查去掉对应的code
if (deduction.deduction_ids && deduction.deduction_ids.indexOf(value.code) > -1) {
deduction.deduction_ids.splice(deduction.deduction_ids.indexOf(value.code), 1);
}
}
// 留言和安装选项重新赋值
// deduction.note = note[item.pre_id];
// deduction.service_fee = service_fee[item.pre_id];
}
});
}
if (!isHasPreId) {
checkDeductionList.push({
deduction_ids: value && value.code ? [value.code] : [],
pre_id: item.pre_id,
});
}
this.setData({ checkDeductionList });
// console.log('checkDeductionList:', this.data.checkDeductionList)
},
//优惠券
showCoupon() {
if (this.data.coupon_size == 0) {
wx.showToast({
icon: "none",
title: "暂无优惠券使用",
duration: 1500,
});
return;
}
this.setData({
popupCouponSpecs: true,
});
},
//选择优惠券
selectCoupon(e) {
let couponBol = e.detail;
let index = e.currentTarget.dataset.index;
// let item = e.currentTarget.dataset.item;
this.setData({
["coupons[" + index + "].checked"]: couponBol,
});
//处理选择
//因为换了组件改调用方法
this.screenCoupon(couponBol, this.data.coupons[index]);
//设置view
this.setCouponView();
//重新计算
this.preGoodsBuy(); //直接购买
},
//筛选数据优惠券状态
screenCoupon(value, valObj) {
var tarValue = valObj;
if (value) {
//选中添加
if (this.data.checkCouponList.length > 0) {
for (let i = 0; i < this.data.checkCouponList.length; i++) {
if (this.data.checkCouponList[i].id == tarValue.id) {
this.data.checkCouponList.splice(i, 1);
}
}
let checkCouponList = this.data.checkCouponList;
checkCouponList.push(tarValue);
this.setData({
checkCouponList: checkCouponList,
});
} else {
let checkCouponList = this.data.checkCouponList;
checkCouponList.push(tarValue);
this.setData({
checkCouponList: checkCouponList,
});
}
} else {
//取消选中
if (this.data.checkCouponList.length > 0) {
for (let i = 0; i < this.data.checkCouponList.length; i++) {
if (this.data.checkCouponList[i].id == tarValue.id) {
let checkCouponList = this.data.checkCouponList;
checkCouponList.splice(i, 1);
this.setData({
checkCouponList: checkCouponList,
});
}
}
}
}
},
//设置view
setCouponView() {
this.setData({
use_coupon_size: this.data.checkCouponList.length,
});
},
//关闭优惠卷
couponclose() {
this.setData({
popupCouponSpecs: false,
});
},
realnameinp(e) {
let val = e.detail.value;
this.setData({
"form.realname": val,
});
},
mobileinp(e) {
let val = e.detail.value;
this.setData({
"form.mobile": val,
});
},
agreementPayinp(e) {
let bol = e.detail;
this.setData({
agreementPay: bol,
});
},
showPay() {
this.setData({
agreementPayShow: true,
});
},
//提交订单
submit(btn) {
let val = btn;
let that = this;
let urlStr = "";
if (this.data.cashier_type == "hotel") {
urlStr += app.getNetAddresss("plugin.hotel.frontend.Order.create");
urlStr += "&price=" + this.data.payMuch;
urlStr += "&hotel_id=" + this.data.hotel_id;
urlStr += "&member_coupon_ids=";
urlStr += "&orders=";
urlStr += "&mobile=" + this.data.form.mobile;
urlStr += "&realname=" + this.data.form.realname;
} else if(this.data.cashier_type == "scanning_payment"){
urlStr += app.getNetAddresss("plugin.sweep-buy.frontend.controllers.create.index");
urlStr += "&price=" + this.data.payMuch;
urlStr += "&goods_id=" + this.options.goods_id;
} else {
urlStr += app.getNetAddresss("plugin.store-cashier.frontend.Order.create");
urlStr += "&price=" + this.data.payMuch;
urlStr += "&store_id=" + this.data.store_id;
urlStr += "&member_coupon_ids=" + JSON.stringify(this.assembleCoupons());
urlStr += "&orders=" + JSON.stringify(this.assembleDeduction());
urlStr += "&mobile=" + this.data.form.mobile;
urlStr += "&realname=" + this.data.form.realname;
}
if (this.data.clicktag == 0) {
this.setData({
clicktag: 1,
});
if (this.data.agreementPayData) {
if (!this.data.agreementPay) {
this.setData({
clicktag: 0,
});
wx.showToast({
icon: "none",
title: "请先勾选支付协议",
duration: 1500,
});
return;
}
}
app._getNetWork({
url: urlStr,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
order_ids: res.data.order_ids,
});
that.getMultipleOrderInfo(val);
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
that.data.isPayClick = false;
}
setTimeout(function () {
that.setData({
clicktag: 0,
});
}, 1000);
},
fail: function (res) {
console.log(res);
},
});
}
},
//多订单合并支付获取信息接口方法
getMultipleOrderInfo(val) {
let urlStr = app.getNetAddresss("order.merge-pay");
urlStr += "&order_ids=" + this.data.order_ids;
urlStr += "&pid=" + this.data.uid;
app._getNetWork({
url: urlStr,
success: (resdata) => {
var res = resdata.data;
if (res.result == 1) {
this.setData({
order_sn: res.data.order_pay.pay_sn,
balance: res.data.member.credit2,
money: res.data.order_pay.amount,
uid: res.data.order_pay.uid,
order_pay_id: res.data.order_pay.id,
buttons: res.data.buttons,
min_redirect_url: res.data.min_redirect_url,
});
this.handlePay(val, val.value);
} else {
wx.showModal({
title: "提示",
content: res.msg,
success(res) {
if (res.confirm) {
wx.reLaunch({
url: "/packageG/index/index",
});
console.log("用户点击确定");
} else if (res.cancel) {
console.log("用户点击取消");
}
},
});
this.data.isPayClick = false;
}
},
fail: function (res) {
console.log(res);
},
});
},
getCenter() {
let that = this;
let urlStr = "";
let json = {};
console.log(this.data.store_id, "getCenter的store_id");
if (this.data.cashier_type === "hotel") {
json = {
hotel_id: this.data.hotel_id,
};
urlStr = app.getNetAddresss("plugin.hotel.frontend.cashier.center.index");
} else {
json = {
store_id: this.data.store_id,
};
urlStr = app.getNetAddresss("plugin.store-cashier.frontend.cashier.center.getPaySet");
}
app._getNetWork({
url: urlStr,
data: json,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
if (that.data.cashier_type === "hotel") {
that.initStore(res.data.get_hotel_info);
} else {
that.initStore(res.data.get_store_info);
}
that.setData({
agreementPayData: res.data.get_pay_protocol,
});
} else {
wx.showToast({
title: res.msg,
icon: "none",
duration: 1500,
});
}
},
fail: function (res) {
console.log(res);
},
});
},
});