| | |
| | | // pages/cart/paymentPage/index.js |
| | | import Toast from 'tdesign-miniprogram/toast/index'; |
| | | |
| | | const app = getApp() |
| | | import { getPublicImage } from '../../../assets/js/middleGround/tool'; |
| | | import drawQrcode from './js/weapp.qrcode' |
| | | import { |
| | | getPublicImage |
| | | } from '../../../assets/js/middleGround/tool'; |
| | | |
| | | Page({ |
| | | |
| | | /** |
| | | * 页面的初始数据 |
| | | */ |
| | | data: { |
| | | loading: true, |
| | | hidden: true, |
| | | myOrderOrderNumber: [], |
| | | orderNumber: null, |
| | | navBarHeight: '', |
| | | barHeight: '', |
| | | selectedIds: '', |
| | | purchasedIds: [], |
| | | productList: [], |
| | | price: '', |
| | | payPrice: '', |
| | | drawQrcodeText: 'https://www.baidu.com/', |
| | | orderGoods: '', |
| | | |
| | | |
| | | confirmBtn: { content: '确定', variant: 'base' }, |
| | | dialogKey: 'false', |
| | | isPaySuccess: false, |
| | | isPayComplete: false, |
| | | type: '', |
| | | onNorderSaleMethod: '', |
| | | integral: 0, |
| | | defaultVal: false, |
| | | deductioRate: 0, |
| | | currentBalance: 0, |
| | | showIntegral: false |
| | | |
| | | }, |
| | | |
| | |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad(options) { |
| | | |
| | | wx.setNavigationBarTitle({ |
| | | title: '提交订单' |
| | | }); |
| | | const systInfo = wx.getSystemInfoSync(); |
| | | const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息 |
| | | const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度 |
| | |
| | | orderNumber: options.orderNumber, |
| | | navBarHeight: navBarHeight, |
| | | barHeight: systInfo.statusBarHeight, |
| | | selectedIds: options.selectedIds |
| | | selectedIds: options.selectedIds, |
| | | onNorderSaleMethod: options.onNorderSaleMethod |
| | | }) |
| | | console.log('接收到的订单号:', this.data.orderNumber); |
| | | |
| | | |
| | | this.getOrderByOrderNum() |
| | | |
| | | |
| | | |
| | | |
| | | drawQrcode({ |
| | | |
| | | width: 200, // 必须,二维码宽度,与canvas的width保持一致 |
| | | |
| | | height: 200, // 必须,二维码高度,与canvas的height保持一致 |
| | | |
| | | canvasId: 'myQrcode', |
| | | |
| | | background: '#ffffff', // 非必须,二维码背景颜色,默认值白色 |
| | | |
| | | foreground: '#2bb15e', // 非必须,二维码前景色,默认值黑色 '#000000' |
| | | |
| | | // ctx: wx.createCanvasContext('myQrcode'), // 非必须,绘图上下文,可通过 wx.createCanvasContext('canvasId') 获取,v1.0.0+版本支持 |
| | | |
| | | text: this.data.drawQrcodeText, // 必须,二维码内容 |
| | | // v1.0.0+版本支持在二维码上绘制图片 |
| | | |
| | | image: { |
| | | // imageResource: '../../images/icon.png', // 指定二维码小图标 |
| | | dx: 70, |
| | | dy: 70, |
| | | dWidth: 60, |
| | | dHeight: 60 |
| | | } |
| | | }) |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | this.getIntegral() |
| | | this.getOrderByOrderNumData() |
| | | this.getDataList() |
| | | }, |
| | | |
| | | getIntegral() { |
| | | app.MG.store |
| | | .getUserWallet({ |
| | | type: 'integral' |
| | | }) |
| | | .then((res) => { |
| | | this.setData({ |
| | | integral: res.balance, |
| | | deductioRate: res.exchangeRate |
| | | }); |
| | | }) |
| | | }, |
| | | /** |
| | | * 生命周期函数--监听页面初次渲染完成 |
| | | */ |
| | |
| | | wx.navigateBack(); |
| | | }, |
| | | |
| | | |
| | | getOrderByOrderNum() { |
| | | // 金额显示.00格式 |
| | | numFormat(value) { |
| | | if (!value) return "0.00"; |
| | | value = Number(value).toFixed(2); |
| | | var intPart = Math.trunc(value); // 获取整数部分 |
| | | var intPartFormat = intPart |
| | | .toString() |
| | | .replace(/(\d)(?=(?:\d{3})+$)/g, "$1,"); // 将整数部分逢三一断 |
| | | var floatPart = ".00"; // 预定义小数部分 |
| | | var value2Array = value.split("."); |
| | | // =2表示数据有小数位 |
| | | if (value2Array.length === 2) { |
| | | floatPart = value2Array[1].toString(); // 拿到小数部分 |
| | | if (floatPart.length === 1) { |
| | | return `${intPartFormat}.${floatPart}0`; |
| | | } |
| | | return `${intPartFormat}.${floatPart}`; |
| | | } |
| | | return intPartFormat + floatPart; |
| | | }, |
| | | getOrderByOrderNumData() { |
| | | let query = { |
| | | orderNum: this.data.orderNumber, |
| | | fields: { |
| | | content: [], |
| | | subtitle: [], |
| | | |
| | | |
| | | } |
| | | } |
| | | app.MG.store.getOrderByOrderNum(query).then(res => { |
| | | console.log(res, 'res'); |
| | | this.setData({ |
| | | orderGoods: res.orderNumber |
| | | orderGoods: res.orderNumber, |
| | | price: res.totalPrice.toFixed(2), |
| | | payPrice: res.payPrice.toFixed(2), |
| | | }) |
| | | console.log(this.data.orderGoods, 'res.orderNumber'); |
| | | |
| | | console.log(res.payPrice); |
| | | this.setData({ |
| | | payPrice: res.payPrice.toFixed(2) |
| | | }) |
| | | if (Number(this.data.payPrice) < Number(this.data.price)) { |
| | | this.handleChange() |
| | | } |
| | | res.saleMethodLinks.forEach(item => { |
| | | |
| | | const type = item.orderSaleMethod.type == 'createProductItemSaleMethod' ? 'item' : 'product'; |
| | | item.type = type; // 将type设置为item对象的属性,而不是使用setData |
| | | item.paymentIcon = getPublicImage(item.orderSaleMethod.product.icon) |
| | | console.log(item.orderSaleMethod.type); |
| | | if (item.orderSaleMethod.product.cmsTypeRefCode == 'jsek_digitalTextbooks') { |
| | | item.typeTxt = '数字教材' |
| | | item.productType = "数字教材" |
| | | } else if (item.orderSaleMethod.product.cmsTypeRefCode == 'jsek_digitalCourses') { |
| | | item.typeTxt = '数字课程' |
| | | item.productType = "数字课程" |
| | | } else { |
| | | item.typeTxt = '电子书' |
| | | item.productType = "图书服务-电子书" |
| | | |
| | | this.setData({ |
| | | productList: res.saleMethodLinks, |
| | | type: item.orderSaleMethod.type == 'createProductItemSaleMethod' ? 'item' : 'product' |
| | | }) |
| | | |
| | | if (item.orderSaleMethod.type == 'createProductItemSaleMethod') { |
| | | item.typeTxt = '云学习' |
| | | item.productType = "图书服务-云学习" |
| | | } |
| | | } |
| | | }) |
| | | this.setData({ |
| | | productList: res.saleMethodLinks, |
| | | loading: false, |
| | | hidden: false, |
| | | }) |
| | | }) |
| | | }, |
| | | getDataList() { |
| | | let data = { |
| | | start: 0, |
| | | size: 999, |
| | | filterList: [{ |
| | | field: 'State', |
| | | value: 'WaitPay' |
| | | }], |
| | | sort: { |
| | | type: 'Desc', |
| | | field: 'CreateDate' |
| | | } |
| | | } |
| | | app.MG.store.getUserOrderList(data).then((res) => { |
| | | res.datas.forEach((item) => { |
| | | this.data.myOrderOrderNumber.push(item.saleMethodLinks[0].orderSaleMethod.id) |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | handleChange(e) { |
| | | if (e) { |
| | | this.setData({ |
| | | defaultVal: e.detail.value, |
| | | }); |
| | | } else { |
| | | this.setData({ |
| | | defaultVal: true, |
| | | }); |
| | | } |
| | | |
| | | if (this.data.defaultVal) { |
| | | let useBalance = Math.round(Number(this.data.payPrice) * Number(this.data.deductioRate)); |
| | | if (useBalance >= this.data.integral) { |
| | | this.setData({ |
| | | currentBalance: this.data.integral, |
| | | }); |
| | | } else { |
| | | this.setData({ |
| | | currentBalance: useBalance, |
| | | }); |
| | | } |
| | | const data = { |
| | | orderNumber: this.data.orderNumber, |
| | | payMethod: "Wallet", |
| | | type: "integral", |
| | | payValue: this.data.currentBalance |
| | | } |
| | | app.MG.store.newOrderPay(data).then(res => { |
| | | if (res) { |
| | | this.setData({ |
| | | payId: res.payList[0].id, |
| | | payPrice: res.payPrice.toFixed(2), |
| | | deduct: (this.data.currentBalance / 100).toFixed(2), |
| | | integral: this.data.integral - this.data.currentBalance, |
| | | showIntegral: true |
| | | }); |
| | | } |
| | | }) |
| | | } else { |
| | | const data = { |
| | | orderNumber: this.data.orderNumber, |
| | | payId: this.data.payId, |
| | | } |
| | | app.MG.store.delOrderPay(data).then(res => { |
| | | if (res) { |
| | | this.setData({ |
| | | payPrice: res.payPrice.toFixed(2), |
| | | showIntegral: false |
| | | }); |
| | | this.getIntegral() |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | |
| | | confirmOrderGet() { |
| | | if (this.data.myOrderOrderNumber.includes(parseInt(this.data.onNorderSaleMethod))) { |
| | | Toast({ |
| | | context: this, |
| | | selector: '#t-toast', |
| | | message: '已经在订单中', |
| | | theme: 'warning', |
| | | direction: 'column', |
| | | }); |
| | | } else { |
| | | var that = this; |
| | | let query = { |
| | | orderNum: this.data.orderGoods |
| | | } |
| | | app.MG.store.confirmOrder(query).then(res => { |
| | | if (res.orderNumber) { |
| | | let resOrderNum = { |
| | | orderNum: res.orderNumber, |
| | | platform: "WeChatAppCustom" |
| | | }; |
| | | // 用户未绑定微信 报500 |
| | | app.MG.store.makeWeChatPay(resOrderNum).then(payRes => { |
| | | if (payRes) { |
| | | const payVal = JSON.parse(payRes); |
| | | wx.requestPayment({ |
| | | "appId": payVal.appId, |
| | | "timeStamp": payVal.timeStamp, |
| | | "nonceStr": payVal.nonceStr, |
| | | "package": payVal.package, |
| | | "signType": payVal.signType, |
| | | "paySign": payVal.paySign, |
| | | success: function (res) { |
| | | if (res.errMsg == 'requestPayment:ok') { |
| | | that.setData({ |
| | | isPaySuccess: true |
| | | }) |
| | | } |
| | | }, |
| | | fail: function (res) { |
| | | console.log('支付失败'); |
| | | }, |
| | | // 无论支付成功失败都会调用 |
| | | "complete": function (res) { |
| | | if (res.errMsg == 'requestPayment:ok') { |
| | | that.setData({ |
| | | isPayComplete: true |
| | | }) |
| | | } |
| | | if (that.data.isPaySuccess && that.data.isPayComplete) { |
| | | that.navToBack() |
| | | } |
| | | } |
| | | }); |
| | | } else { |
| | | Toast({ |
| | | context: this, |
| | | selector: '#t-toast', |
| | | message: '支付失败', |
| | | theme: 'warning', |
| | | direction: 'column', |
| | | }); |
| | | } |
| | | |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | }, |
| | | // 页面返回 |
| | | navToBack() { |
| | | this.getOrderByOrderNumData() |
| | | // 返回 |
| | | wx.navigateBack() |
| | | }, |
| | | onReceive() { |
| | | let query = { |
| | | orderNum: this.data.orderGoods |
| | | } |
| | | app.MG.store.confirmOrder(query).then(res => { |
| | | this.makeWeChatQrPayGet() |
| | | Toast({ |
| | | context: this, |
| | | selector: '#t-toast', |
| | | message: '领取成功', |
| | | theme: 'success', |
| | | direction: 'column', |
| | | }); |
| | | wx.navigateBack() |
| | | }) |
| | | // 调取微信二维码支付 |
| | | |
| | | }, |
| | | // 调取微信二维码支付 |
| | | makeWeChatQrPayGet() { |
| | | let query = { |
| | | orderNum: this.data.orderGoods |
| | | } |
| | | app.MG.store.makeWeChatQrPay(query).then((res) => { |
| | | |
| | | this.setData({ |
| | | drawQrcodeText: res |
| | | }) |
| | | this.data.dialogKey = true |
| | | console.log(this.data.drawQrcodeText, 'drawQrcodeText'); |
| | | }) |
| | | }, |
| | | showDialog(e) { |
| | | const { key } = e.currentTarget.dataset; |
| | | this.setData({ [key]: true, dialogKey: key }); |
| | | }, |
| | | closeDialog() { |
| | | const { dialogKey } = this.data; |
| | | this.setData({ [dialogKey]: false }); |
| | | }, |
| | | |
| | | } |
| | | }) |