web-base-h5/pages/pay/treePay.vue

732 lines
23 KiB
Vue
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.

<!--
* @Descripttion:
* @version:
* @Author: kBank
* @Date: 2022-11-21 15:11:22
-->
<template>
<view class="content">
<view class="index_header">
</view>
<view class="contxt">
<view class="tit">{{$t('w_0331')}}</view>
<view class="tit1">
{{ userInfo.currencyIcon }}{{ objTree.amount | numberToCurrency }}
</view>
<view class="kuang">
<u-collapse :value="activeNames" ref="collapse" @open="change" @close="close" accordion :border="false">
<u-collapse-item name="1" v-if="userInfo.memberCode!='CN68880628'">
<view slot="title" class="pf"> <img src="@/static/images/yhkzf.jpg" alt="" />
<view>{{$t('w_0216')}}</view>
</view>
<view class="quan_i" v-show="account.consumeBalance == 0||account.consumeDeduct > 0">
<view class="tTit">{{$t('w_0217')}}</view>
<view class="lan">
<view>
{{ account.consumeBalance | numberToCurrency | isLocal }}
</view>
<view>
-{{ account.consumeDeduct | numberToCurrency | isLocal }}
</view>
</view>
</view>
<view class="quan_i" v-show="account.bonusBalance==0||account.bonusDeduct > 0">
<view class="tTit">{{$t('w_0220')}}</view>
<view class="lan">
<view>
{{ account.bonusBalance | numberToCurrency | isLocal}}
</view>
<view>
-{{ account.bonusDeduct | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="payDetail.payAccount3 > 0">
<view class="tTit">{{$t('w_0219')}}</view>
<view class="lan">
<view>
{{ payDetail.account3 | numberToCurrency | isLocal}}
</view>
<view>
-{{ payDetail.payAccount3 | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="account.cashBalance==0||account.cashDeduct > 0">
<view class="tTit">{{$t('w_0218')}}</view>
<view class="lan">
<view>
{{ account.cashBalance | numberToCurrency | isLocal}}
</view>
<view>
-{{ account.cashDeduct | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="payDetail.payAccount5 > 0">
<view class="tTit">{{$t('w_0221')}}</view>
<view class="lan">
<view>
{{ payDetail.account5 | numberToCurrency | isLocal}}
</view>
<view>
-{{ payDetail.payAccount5 | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="payDetail.payAccount6 > 0">
<view class="tTit">{{$t('w_0222')}}</view>
<view class="lan">
<view>
{{ payDetail.account6 | numberToCurrency | isLocal }}
</view>
<view>
-{{ payDetail.payAccount6 | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="payDetail.payAccount7 > 0">
<view class="tTit">{{$t('w_0223')}}</view>
<view class="lan">
<view>
{{ payDetail.account7 | numberToCurrency | isLocal}}
</view>
<view>
-{{ payDetail.payAccount7 | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="payDetail.payAccount8 > 0">
<view class="tTit">{{$t('w_0224')}}</view>
<view class="lan">
<view>
{{ payDetail.account8 | numberToCurrency | isLocal}}
</view>
<view>
-{{ payDetail.payAccount8 | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="payDetail.payAccount9 > 0">
<view class="tTit">{{$t('ENU_ACCOUNT_9')}}</view>
<view class="lan">
<view>
{{ payDetail.account9 | numberToCurrency | isLocal}}
</view>
<view>
-{{ payDetail.payAccount9 | numberToCurrency | isLocal}}
</view>
</view>
</view>
<view class="quan_i" v-show="payDetail.payAccount10 > 0">
<view class="tTit">{{$t('ENU_ACCOUNT_10')}}</view>
<view class="lan">
<view>
{{ payDetail.account10 | numberToCurrency | isLocal}}
</view>
<view>
-{{ payDetail.payAccount10 | numberToCurrency | isLocal}}
</view>
</view>
</view>
</u-collapse-item>
</u-collapse>
</view>
</view>
<!-- 输入验证码,密码 -->
<u-popup :show="isPw" mode="center" closeable @close="closePw">
<view class="t_tit">{{$t('w_0251')}}</view>
<view class="box">
<view class="c_tit" v-if="isBank">{{$t('w_0250')}}</view>
<view class="c_tit" v-else>{{$t('w_0332')}}</view>
<u--input v-if="isBank" border="surround" v-model="codeValue"></u--input>
<u--input v-else border="surround" type="password" v-model="codeValue"></u--input>
<u-button type="success" class="uBtn" shape="circle" :loading="isLoading" loadingText="支付中" @tap="payPw()" color="linear-gradient(to right, #fb3024, #fb3024 )">{{$t('w_0248')}} </u-button>
</view>
</u-popup>
<!-- 底部 -->
<view class="footer_f">
<view class="footer">
<view class="footer_r">
<u-button type="success" class="uBtn" shape="circle" :loading="isLoading" loadingText="支付中" @tap="quickPay(ifcz)" color="linear-gradient(to right, #fb3024, #fb3024 )">{{$t('w_0248')}} </u-button>
</view>
</view>
</view>
<!-- 成功 -->
<u-modal :show="showSucce" showConfirmButton :content='content' confirmColor='#DE3932' @confirm="reset" ref="uModal" :asyncClose="true"></u-modal>
<!-- 二维码 -->
<u-popup :show="wxPopup" mode="center" closeable @close="closewxPopup">
<view class="t_tit">{{$t('w_0226')}}</view>
<view class="pay_code">
<div ref="qrCodeUrlWx" class="qrcode"></div>
</view>
</u-popup>
<successDialog @successClose="successClose" ref="successDialog"></successDialog>
</view>
</template>
<script>
import * as api from '@/config/pay.js'
import QRCode from 'qrcodejs2'
import successDialog from '@/components/successDialog.vue'
import * as act from '@/config/activity.js'
var payStatus
export default {
components: {
successDialog,
},
data() {
return {
payList: {},
isLoading: false,
clockTime: '',
specialArea: '',
orderCode: '',
orderData: {
orderAmount: ""
},
countDown: '',
payDetail: {
payAccount1: 1,
},
paramsPost: '',
isShare: false, //分享用户第一次爆单
userInfo: '',
activeNames: 1,
whatPay: '',
hfList: [],
jdList: [],
businessType: '',
isBank: '',
isPw: false,
codeValue: '',
bindCode: '',
showSucce: false, //
sucPay: 0,
content: this.$t('w_0335'),
wxPopup: false,
luckydrawData: {},
ifcz: false,
czJe: '',
objTree: {},
account: {}
}
},
onLoad(options) {
uni.setNavigationBarTitle({
title: this.$t('w_0333')
});
// this.paramsPost = JSON.parse(options.paramsPost)
// if (this.paramsPost.ifcz) {
// this.ifcz = this.paramsPost.ifcz
// this.businessType = 3
// uni.setNavigationBarTitle({
// title: this.$t('MY_WAL_4')
// });
// // this.businessType =
// } else {
// uni.setNavigationBarTitle({
// title: this.$t('w_0333')
// });
// this.ifcz = false
// if (JSON.parse(options.paramsPost).orderType == 4) {
// this.orderCode = this.paramsPost.orderCode
// this.luckydrawData = this.paramsPost.luckydrawData
// // 抽奖支付处理(查询订单支付信息以及显示等)
// this.businessType = 4 //抽奖
// this.specialArea = this.paramsPost.specialArea
// this.getLuckdrawDetail()
// } else {
// this.userInfo = uni.getStorageSync('User')
// if (
// this.userInfo.registerFans == 0 ||
// this.userInfo.registerShare == 0
// ) {
// this.isShare = true
// }
// this.specialArea =
// this.paramsPost.specialArea || this.paramsPost.orderType
// this.orderCode = this.paramsPost.orderCode
// this.businessType = options.businessType
// // this.getInfo()
// // 获取订单信息
// this.getOrderInfo()
// if (!this.isShare) {
// // 获取消费信息
// this.getSpendInfo()
// }
// }
// }
// // 获取支付配置
// this.getPayConfig()
// clearInterval(this.clockTime)
this.objTree = JSON.parse(options.treeObj)
this.getAccount()
},
onShow() {
// 获取银行卡
// this.getBankList()
},
methods: {
getAccount() {
api.deductionAccount({
pkBaseId: this.objTree.pkBaseId,
pkTreeRule: this.objTree.pkTreeRule,
shopQuantity: this.objTree.quantity
}).then(res => {
this.account = res.data
this.$nextTick(() => {
this.$refs.collapse.init()
})
this.$forceUpdate()
})
},
//查询充值抽奖次数
getLuckdrawDetail() {
// 抽奖支付处理(查询订单支付信息以及显示等)
act
.getLuckdrawDetail({
pkBaseId: this.luckydrawData.pkBaseId,
payNum: this.luckydrawData.payNum,
})
.then((res) => {
if (res.code == 200) {
this.orderData.orderAmount = res.data.toBePaidMoney
this.payDetail = res.data
// this.downTime()
}
})
},
closewxPopup() {
this.wxPopup = false
this.$refs.qrCodeUrlWx.innerHTML = ''
clearInterval(payStatus)
},
// 绑定银行卡
bindBank(val) {
uni.navigateTo({
url: '/pages/pay/bindBank?bank=' + val,
})
},
selPayRadio(val, e) {
if (e) {
e.stopPropagation()
}
this.whatPay = val
},
closePw() {
this.isPw = false
},
successClose() {
uni.redirectTo({
url: '/pages/mine/order/index',
})
},
payPw() {
let obj = {
pkBaseId: this.objTree.pkBaseId,
pkTreeRule: this.objTree.pkTreeRule,
shopQuantity: this.objTree.quantity,
payPwd: this.codeValue,
}
api.shoppingTree(obj).then((res) => {
if (res.code == 200) {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1500,
})
this.isPw = false
setTimeout(() => {
uni.switchTab({ url: '/pages/index/index' })
}, 1500)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1500,
})
}
})
},
quickPay(cz) {
this.isPw = true
},
scanPayBfWx(val) {
let params
if (this.ifcz) {
params = {
businessType: 3, //订单类型充值
businessCode: this.orderCode,
payChannel: val,
payType: 2,
}
} else {
params = {
businessType: this.businessType, //订单类型充值
businessCode: this.orderCode,
payChannel: val,
payType: 2,
}
}
api.unifiedorder(params).then((res) => {
this.wxPopup = true
this.$nextTick(() => {
new QRCode(
this.$refs.qrCodeUrlWx, {
width: 280,
height: 280,
text: res.data,
colorDark: '#000000',
colorLight: '#ffffff',
correctLevel: QRCode.CorrectLevel.Q,
textAlign: 'center',
},
1000
)
})
})
this.checkPayStatus(params)
},
change(e) {
this.activeNames = e
},
close(e) {
if (e == 1) {
this.activeNames = 2
} else {
this.activeNames = 1
}
},
getPayConfig() {
api.payConfig().then((res) => {
this.payList = res.data
})
},
getBankList() {
api.jdBankList().then((res) => {
this.jdList = res.data
})
api.hfBankList().then((res) => {
this.hfList = res.data
})
this.$nextTick(() => {
this.$refs.collapse.init()
})
this.$forceUpdate()
},
getOrderInfo() {
api
.orderInfo({
specialArea: this.specialArea,
orderCode: this.orderCode,
})
.then((res) => {
this.orderData = res.data
this.downTime()
})
},
downTime() {
let that = this
this.clockTime = setInterval(() => {
if (that.orderData.payTime && that.orderData.payTime > 0) {
that.countDown = this.getTime(this.orderData.payTime--)
} else {
that.countDown = '00:00:00'
}
}, 1000)
},
getSpendInfo() {
api
.spendDetails({
specialArea: this.specialArea,
orderCode: this.orderCode,
})
.then((res) => {
// this.payDetail = res.data
this.$set(this, 'payDetail', res.data)
this.$nextTick(() => {
this.$refs.collapse.init()
})
this.$forceUpdate()
})
},
reset() {
this.$store.dispatch('GetInfo').then((res) => {
uni.reLaunch({
url: '/pages/index/index',
})
})
},
// 查询订单状态
checkPayStatus(data) {
let that = this
// 定时器
payStatus = setInterval(() => {
if (that.sucPay == 1) {
// 清除定时器
clearInterval(payStatus)
this.wxPopup = false
this.showSucce = true
} else {
api.payStatus(data).then((res) => {
that.sucPay = res.data
})
}
}, 2000)
},
getTime(time) {
// 转换为式分秒
let h = parseInt((time / 60 / 60) % 24)
h = h < 10 ? '0' + h : h
let m = parseInt((time / 60) % 60)
m = m < 10 ? '0' + m : m
let s = parseInt(time % 60)
s = s < 10 ? '0' + s : s
// 作为返回值返回
return h + ':' + m + ':' + s
},
},
}
</script>
<style lang="scss" scoped>
.content {
background: #f9f9f9;
min-height: calc(100vh - 44px);
}
.index_header {
background: #f9f9f9;;
height: 330rpx;
}
.contxt {
margin-top: -220rpx;
padding: 0 26rpx;
padding-bottom: 300rpx;
height: 75vh;
}
.tit {
font-size: 24px;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
text-align: center;
color: #333333;
margin-bottom: 20rpx;
}
.tit1 {
font-size: 24px;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
color: #e02b26;
text-align: center;
margin-bottom: 20rpx;
}
.tit2 {
font-size: 11px;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
display: flex;
justify-content: center;
align-items: center;
}
.tit3 {
font-size: 14px;
font-weight: 400;
color: #f33030;
margin: 0 5px;
}
.kuang {
margin-top: 20rpx; // padding: 20rpx;
background: #fff;
box-shadow: 0px 2px 10px 0px rgba(204, 204, 204, 0.5);
border-radius: 10px 10px 10px 10px;
}
.pf {
display: flex;
align-items: center;
font-size: 12px;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
color: #333333;
img {
width: 20px;
height: 20px;
margin-right: 10px;
}
}
::v-deep .u-radio-group {
flex: none;
}
.flex_ac {
display: flex;
align-items: center;
width: 100%;
justify-content: space-between;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
padding: 18rpx 0;
}
.flex_ac1 {
display: flex;
flex-direction: column; // align-items: center;
width: 100%;
justify-content: space-between;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
padding: 18rpx 0;
}
.flex_ac_i {
display: flex;
align-items: center;
font-size: 12px;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
img {
width: 16px;
height: 16px;
margin-right: 20rpx;
}
}
::v-deep .u-collapse-item__content__text {
padding: 0px 15px;
}
.pad {
width: 100%;
display: flex;
flex-direction: column;
}
.pay_flax {
display: flex;
align-items: center;
margin-top: 15px;
font-size: 12px;
font-weight: 400;
color: #666666;
cursor: pointer;
}
.flax_i {
flex: 1;
margin-left: 36rpx;
}
.flex_bet {
justify-content: space-between;
}
.img1 {
width: 16px;
height: 16px;
margin-right: 10px;
}
.footer_f {
position: fixed;
bottom: 0;
width: 100%;
z-index: 10;
box-shadow: 0px -2px 20px 0px rgba(204, 204, 204, 0.5);
}
.footer {
display: flex;
justify-content: space-between;
padding: 20rpx 24rpx 40rpx 20rpx;
background: #fff;
.footer_l {}
.footer_r {
flex: 1;
display: flex;
align-items: center;
font-size: 20rpx;
font-weight: 500;
color: #333333;
}
}
::v-deep .u-popup__content {
width: 80%;
}
.t_tit {
text-align: center;
margin-top: 20px;
}
.c_tit {
margin-bottom: 20px;
}
.box {
padding: 40px;
text-align: center;
}
.uBtn {
margin-top: 20px;
}
.pay_code {
text-align: center;
margin-top: 20px;
padding: 20rpx;
.qrcodeWx {}
}
.qrcode {
display: inline-block;
img {
width: 132px;
height: 132px;
background-color: #fff; //设置白色背景色
padding: 6px; // 利用padding的特性挤出白边
box-sizing: border-box;
}
}
.lan {
display: flex;
align-items: center;
justify-content: space-between;
color: #666;
font-size: 12px;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
color: #999;
}
.tTit {
font-size: 12px;
font-family: PingFang SC-Semibold, PingFang SC;
font-weight: 600;
color: #666;
}
</style>