From 9e6a9ecdfff2634cc2685d4ea9b60ff7a88abefe Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Fri, 21 Jun 2024 15:37:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=EF=BC=9A=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E4=B9=B0=E5=8D=95=20-=20=E5=A2=9E=E5=8A=A0=E9=A4=90=E8=B4=B9?= =?UTF-8?q?=E7=A7=AF=E5=88=86=E6=8A=B5=E6=89=A3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/users/online_payment/payment/index.vue | 538 +++++++++++-------- 1 file changed, 327 insertions(+), 211 deletions(-) diff --git a/pages/users/online_payment/payment/index.vue b/pages/users/online_payment/payment/index.vue index c756bb6..4673977 100644 --- a/pages/users/online_payment/payment/index.vue +++ b/pages/users/online_payment/payment/index.vue @@ -22,6 +22,21 @@ + + + 餐费积分抵扣 + + + + 使用餐费积分 + + + + 剩余餐费积分:{{ integral_surplus || '0.00' }} + 餐费积分抵扣:{{ integral_use || '0.00' }}元 + + + 支付方式 @@ -91,7 +106,8 @@ import {mapGetters} from "vuex"; import authorize from '@/components/Authorize'; import emptyPage from '@/components/emptyPage.vue'; import spread from "@/libs/spread"; -import {getUserInfo} from "@/api/user"; +import {getUserInfo,merShareholdersIntegralStatistics} from "@/api/user"; + const app = getApp(); export default { @@ -157,21 +173,25 @@ export default { }, ], now_money: 0, - + // 餐费积分 + integral_surplus: 0, + integral_use: '', }; }, computed: { ...mapGetters(['isLogin', 'userInfo', 'viewColor']) }, onLoad(options) { + let mer_id = options.mer_id || 0; // 二维码参数接收 if(options.scene){ // console.log("接收参数 - 未转义",options.scene) var scene = this.$util.getUrlParams(decodeURIComponent(options.scene)); // console.log("接收参数 - 转义后",scene) - this.default_mer_id = scene.mer_id || 0; - this.mer_search.mer_id = scene.mer_id || 0; + mer_id = scene.mer_id || 0; } + this.default_mer_id = mer_id || 0; + this.mer_search.mer_id = mer_id || 0; // 判断:是否登录 if (!this.isLogin) { // 未登录 授权登录 @@ -185,6 +205,22 @@ export default { if(options.spread) spread(options.spread, this.isLogin) }, onReachBottom: function () {}, + watch: { + // 买单金额改变 + 'pay_info.money': { + handler() { + this.computeUseIntegral(); + }, + immediate: true + }, + // 使用积分改变 + 'integral_use': { + handler() { + this.computeUseIntegral(); + }, + immediate: true + } + }, methods: { // 授权回调 onLoadFun() { @@ -207,6 +243,8 @@ export default { getUserInfo().then(res => { _this.now_money = res.data.now_money }); + // 获取用户餐费信息 + _this.shareholdersIntegralInfo(); }, // 门店选择 - 显示弹框 merShowPopup(){ @@ -248,7 +286,8 @@ export default { let _this = this; let payInfo = Object.assign({},_this.pay_info); payInfo.mer_id = _this.mer_info.mer_id; - console.log('支付类型',payInfo.pay_type) + payInfo.integral_use = _this.integral_use || 0; + console.log('支付类型', payInfo) if (payInfo.pay_type == 'weixin') { // #ifdef H5 payInfo.pay_type = _this.$wechat.isWeixin() ? 'weixin' : 'h5' @@ -264,221 +303,219 @@ export default { title: '订单处理中...', mask: true }); - onlinePayment(payInfo) - .then(res => { - let status = res.data.status, - orderId = res.data.result.order_id, - callback_key = res.data.result.pay_key, - jsConfig = res.data.result.config, - goPages = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=' + res.message; - _this.orderPay = true; - uni.hideLoading(); - switch (status) { - case 'ORDER_EXIST': - case 'EXTEND_ORDER': - case 'PAY_ERROR': - case 'error': - return _this.$util.Tips({ - title: res.message - }, { - tab: 5, - url: goPages - }); - break; - case 'success': + onlinePayment(payInfo).then(res => { + if (res.status == 200) { + let backUrl = `/pages/users/online_payment/payment/index?mer_id=${_this.mer_search.mer_id}`; + let backTab = 5; + let status = res.data.status, + orderId = res.data.result.order_id, + callback_key = res.data.result.pay_key, + jsConfig = res.data.result.config; + // let goPages = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=' + res.message; + let goPages = backUrl; + switch (status) { + case 'ORDER_EXIST': + case 'EXTEND_ORDER': + case 'PAY_ERROR': + case 'error': + return _this.$util.Tips({ + title: res.message + }, { + tab: backTab, + url: goPages + }); + break; + case 'success': + return _this.$util.Tips({ + title: res.message, + icon: 'success' + }, { + tab: backTab, + url: goPages + }); + break; + case 'alipay': + case "alipayQr": + uni.navigateTo({ + url: '/pages/order_pay_back/index?keyCode=' + callback_key + '&url=' + + jsConfig + }) + return; + break; + // #ifndef MP + case "wechat": + case "weixin": + case "weixinApp": + jsConfig.timeStamp = jsConfig.timestamp; + // #ifndef APP-PLUS + this.$wechat.pay(jsConfig).then(res => { return _this.$util.Tips({ title: res.message, icon: 'success' }, { - tab: 5, + tab: backTab, url: goPages }); - break; - case 'alipay': - case "alipayQr": - uni.navigateTo({ - url: '/pages/order_pay_back/index?keyCode=' + callback_key + '&url=' + - jsConfig - }) - return; - break; - // #ifndef MP - case "wechat": - case "weixin": - case "weixinApp": - jsConfig.timeStamp = jsConfig.timestamp; - // #ifndef APP-PLUS - this.$wechat.pay(jsConfig).then(res => { - return _this.$util.Tips({ - title: res.message, - icon: 'success' - }, { - tab: 4, - url: goPages - }); - }).catch(res => { - if (res.errMsg == 'chooseWXPay:cancel') return _this.$util.Tips({ - title: '取消支付' - }, { - tab: 5, - url: goPages + '&status=0' - }); - }) - // #endif - // #ifdef APP-PLUS - let mp_pay_name='' - if(uni.requestOrderPayment){ - mp_pay_name='requestOrderPayment' - }else{ - mp_pay_name='requestPayment' - } - uni[mp_pay_name]({ - provider: 'wxpay', - orderInfo: jsConfig, - success: (e) => { - let url = '/pages/order_pay_status/index?order_id=' + orderId + - '&msg=支付成功'; - return _this.$util.Tips({ - title: '支付成功', - icon: 'success' - }, { - tab: 4, - url: url - }); - }, - fail: (e) => { - let url = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=取消支付'; - return _this.$util.Tips({ - title: '取消支付', - }, { - tab: 4, - url: url - }); - }, - complete: () => { - let url = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=取消支付'; - return _this.$util.Tips({ - title: '', - }, { - tab: 4, - url: url - }); - }, - }); - // #endif - break; - // #endif - // #ifdef MP - case "routine": - jsConfig.timeStamp = jsConfig.timestamp; - _this.toPay = true; - let mp_pay_name='' - if(uni.requestOrderPayment){ - mp_pay_name='requestOrderPayment' - }else{ - mp_pay_name='requestPayment' - } - uni[mp_pay_name]({ - ...jsConfig, - success: function(res) { - uni.hideLoading(); - return _this.$util.Tips({ - title: '支付成功', - icon: 'success' - }, { - tab: 5, - url: goPages - }); - }, - fail: function(e) { - let pages = '/pages/order_pay_status/index?order_id=' + - orderId + '&msg=取消支付' - return _this.$util.Tips({ - title: '取消支付' - }, { - tab: 5, - url: pages + '&status=0' - }); - }, - }) - break; - // #endif - case "balance": - //余额 - return _this.$util.Tips({ - title: res.msg - }, { - tab: 5, - url: goPages + '&status=1' - }); - break; - // #ifdef H5 - case 'h5': - let host = window.location.protocol + "//" + window.location.host; - let url = `${host}/pages/order_pay_status/index?order_id=${orderId}&msg=${res.message}` - let eUrl = encodeURIComponent(url) - let jsurl = jsConfig.mweb_url || jsConfig.h5_url - let locations = `${jsurl}&redirect_url=${eUrl}` - setTimeout(() => { - location.href = locations; - }, 100); - break; - // #endif - // #ifdef APP-PLUS - case 'alipayApp': - uni.requestPayment({ - provider: 'alipay', - orderInfo: jsConfig, - success: (e) => { - return _this.$util.Tips({ - title: '支付成功', - icon: 'success' - }, { - tab: 5, - url: goPages - }); - }, - fail: (e) => { - let pages = '/pages/order_pay_status/index?order_id=' + - orderId + '&msg=支付失败' - return _this.$util.Tips({ - title: '支付失败' - }, { - tab: 5, - url: pages - }); - }, - complete: () => { - uni.hideLoading(); - let pages = '/pages/order_pay_status/index?order_id=' + - orderId + '&msg=取消支付' - return _this.$util.Tips({ - title: '' - }, { - tab: 5, - url: pages - }); - }, - }); - break; - // #endif - default: - let pages = '/pages/order_pay_status/index?order_id=' + - orderId + '&msg=取消支付' - return _this.$util.Tips({ + }).catch(res => { + if (res.errMsg == 'chooseWXPay:cancel') return _this.$util.Tips({ title: '取消支付' }, { - tab: 5, - url: pages + '&status=0' + tab: backTab, + url: goPages + '&status=0' }); - } - }) - .catch(err => { - uni.hideLoading(); - this.$util.Tips({ - title: err - }); - }); + }) + // #endif + // #ifdef APP-PLUS + let mp_pay_name='' + if(uni.requestOrderPayment){ + mp_pay_name='requestOrderPayment' + }else{ + mp_pay_name='requestPayment' + } + uni[mp_pay_name]({ + provider: 'wxpay', + orderInfo: jsConfig, + success: (e) => { + // let url = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=支付成功'; + return _this.$util.Tips({ + title: '支付成功', + icon: 'success' + }, { + tab: backTab, + url: backUrl + }); + }, + fail: (e) => { + // let url = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=取消支付'; + return _this.$util.Tips({ + title: '取消支付', + }, { + tab: backTab, + url: backUrl + }); + }, + complete: () => { + // let url = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=取消支付'; + return _this.$util.Tips({ + title: '', + }, { + tab: backTab, + url: backUrl + }); + }, + }); + // #endif + break; + // #endif + // #ifdef MP + case "routine": + jsConfig.timeStamp = jsConfig.timestamp; + _this.toPay = true; + let mp_pay_name='' + if(uni.requestOrderPayment){ + mp_pay_name='requestOrderPayment' + }else{ + mp_pay_name='requestPayment' + } + uni[mp_pay_name]({ + ...jsConfig, + success: function(res) { + uni.hideLoading(); + return _this.$util.Tips({ + title: '支付成功', + icon: 'success' + }, { + tab: backTab, + url: goPages + }); + }, + fail: function(e) { + // let pages = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=取消支付' + return _this.$util.Tips({ + title: '取消支付' + }, { + tab: backTab, + // url: pages + '&status=0' + url: backUrl + }); + }, + }) + break; + // #endif + case "balance": + //余额 + return _this.$util.Tips({ + title: res.msg + }, { + tab: backTab, + url: goPages + '&status=1' + }); + break; + // #ifdef H5 + case 'h5': + let host = window.location.protocol + "//" + window.location.host; + // let url = `${host}/pages/order_pay_status/index?order_id=${orderId}&msg=${res.message}` + let eUrl = encodeURIComponent(backUrl) + let jsurl = jsConfig.mweb_url || jsConfig.h5_url + let locations = `${jsurl}&redirect_url=${eUrl}` + setTimeout(() => { + location.href = locations; + }, 100); + break; + // #endif + // #ifdef APP-PLUS + case 'alipayApp': + uni.requestPayment({ + provider: 'alipay', + orderInfo: jsConfig, + success: (e) => { + return _this.$util.Tips({ + title: '支付成功', + icon: 'success' + }, { + tab: backTab, + url: goPages + }); + }, + fail: (e) => { + // let pages = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=支付失败' + return _this.$util.Tips({ + title: '支付失败' + }, { + tab: backTab, + url: backUrl + }); + }, + complete: () => { + uni.hideLoading(); + // let pages = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=取消支付' + return _this.$util.Tips({ + title: '' + }, { + tab: backTab, + url: backUrl + }); + }, + }); + break; + // #endif + default: + // let pages = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=取消支付' + return _this.$util.Tips({ + title: '取消支付' + }, { + tab: backTab, + // url: pages + '&status=0' + url: backUrl + }); + } + } + }).catch(err => { + uni.hideLoading(); + this.$util.Tips({ + title: err + }); + }); }, // 跳转 goMenuPage(url) { @@ -491,7 +528,27 @@ export default { this.openAuto() } }, + // 餐费积分 - 获取当前用户可用餐费积分 + shareholdersIntegralInfo(){ + let _this = this; + merShareholdersIntegralStatistics({mer_id: _this.mer_search.mer_id}).then(res => { + _this.integral_surplus = res.data.sum_used_surplus || 0; + }).catch(err => { + this.$util.Tips({title: err}); + }); + }, + // 餐费积分 - 计算使用的积分 + computeUseIntegral(){ + let money = this.pay_info.money || 0; + let integralUse = this.integral_use || 0; + let integralSurplus = this.integral_surplus || 0; + // 判断:使用积分不能超过买单金额 + let useIntegral = Number(integralUse) > Number(money) ? Number(money) : Number(integralUse); + // 判断:使用积分不能超过剩余可用积分 + useIntegral = Number(useIntegral) > Number(integralSurplus) ? Number(integralSurplus) : Number(useIntegral); + this.$set(this, 'integral_use', useIntegral); + } }, // #ifdef MP // 分享给好友 @@ -653,6 +710,65 @@ export default { } } } + // 积分抵扣 + .integral{ + width: 100%; + .box-content{ + width: 100%; + background-color: #ffffff; + padding: 20rpx; + border-radius: 15rpx; + .use-info{ + width: 100%; + display: inline-flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + justify-content: flex-start; + height: 70rpx; + padding-bottom: 20rpx; + border-bottom: 2rpx solid #fafafa; + .icon-pc-jifen{ + background-color: #f4b00d; + color: #ffffff; + height: 40rpx; + width: 40rpx; + line-height: 40rpx; + text-align: center; + font-size: 28rpx; + } + .title{ + font-size: 28rpx; + font-weight: bold; + width: 150rpx; + text-align: center; + } + .use-input{ + width: calc(100% - 40rpx - 150rpx); + height: 45rpx; + line-height: 45rpx; + } + } + .hold-info{ + width: 100%; + height: 70rpx; + padding-top: 20rpx; + display: inline-flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + flex-wrap: nowrap; + .left{ + color: #aeaeae; + font-size: 26rpx; + } + .right{ + color: #f4564f; + font-size: 26rpx; + } + } + } + } // 支付方式 .pay-type{