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

989 lines
25 KiB
Vue
Raw Normal View History

2025-03-23 09:29:40 +08:00
<!--
* @Descripttion:
* @version:
* @Author: kBank
* @Date: 2022-11-21 15:11:22
-->
<template>
<view class="content">
2025-07-03 09:40:07 +08:00
<view class="index_header"> </view>
2025-03-23 09:29:40 +08:00
<view class="contxt">
<template>
2025-07-03 09:40:07 +08:00
<view class="tit">{{ '待支付金额' }}</view>
2025-03-23 09:29:40 +08:00
<view class="tit1">
{{ paramsPost.orderAmount | numberToCurrency }}
</view>
2025-07-22 09:12:50 +08:00
<!-- <view class="tit2"
2025-07-03 09:40:07 +08:00
>{{ '请在' }} <view class="tit3">{{ countDown }}</view
>{{ '内完成支付,否则订单将会被自动取消' }}
2025-07-22 09:12:50 +08:00
</view> -->
2025-03-23 09:29:40 +08:00
</template>
2025-04-08 13:44:54 +08:00
<!-- 暂时隐藏 -->
2025-07-22 09:12:50 +08:00
<view class="kuang">
<view>
<view slot="title" class="pf">
<img src="@/static/images/under_pay.png" alt="" />
<view>{{ '在线支付' }}</view>
</view>
<view
class="flex_ac"
v-show="payList[PAY_AUTH[PAY_TYPE.BAO_FU_WECHAT]]"
>
<view class="flex_ac_i">
<img src="@/static/images/pay_i2.png" alt="" />
<view>{{ '宝付微信支付' }}</view>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.BAO_FU_WECHAT"
>
</u-radio>
</u-radio-group>
</view>
<view
class="flex_ac"
v-show="payList[PAY_AUTH[PAY_TYPE.BAO_FU_WECHAT_SCAN]]"
>
<view class="flex_ac_i">
<img src="@/static/images/pay_i2.png" alt="" />
<view>{{ '宝付微信扫码' }}</view>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.BAO_FU_WECHAT_SCAN"
>
</u-radio>
</u-radio-group>
</view>
<view
class="flex_ac"
v-show="payList[PAY_AUTH[PAY_TYPE.HUI_FU_WECHAT]]"
>
<view class="flex_ac_i">
<img src="@/static/images/pay_i2.png" alt="" />
<view>{{ '汇付微信支付' }}</view>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.HUI_FU_WECHAT"
>
</u-radio>
</u-radio-group>
</view>
<!-- 微信支付 -->
<view class="flex_ac" v-show="payList[PAY_AUTH[PAY_TYPE.WECHAT_PAY]]">
<view class="flex_ac_i">
<img src="@/static/images/pay_i2.png" alt="" />
<view>{{ '微信支付' }}</view>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.WECHAT_PAY"
>
</u-radio>
</u-radio-group>
</view>
<!-- 支付宝支付 -->
<view class="flex_ac" v-show="payList[PAY_AUTH[PAY_TYPE.ALI_PAY]]">
<view class="flex_ac_i">
<img src="@/static/images/pay_i3.png" alt="" />
<view>{{ '支付宝支付' }}</view>
</view>
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.ALI_PAY"
>
</u-radio>
</u-radio-group>
</view>
<view
class="flex_ac1"
v-show="payList[PAY_AUTH[PAY_TYPE.HUI_FU_BANK_CARD]]"
>
<view class="flex_ac_i">
<img src="@/static/images/jdBank.jpg" alt="" />
<view>{{ '汇付银行卡' }} </view>
</view>
<view class="pad">
<view
v-for="(item, index) in hfList"
:key="index"
class="pay_flax flex_bet"
@click.prevent="selPayRadio('hf' + index)"
>
<view class="flax_i">
<view>{{ item.bankName }} ({{ item.bankNo }})</view>
<view class="fixBind" @click="fixBind(item)">解绑</view>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.HUI_FU_BANK_CARD + index"
>
</u-radio>
</u-radio-group>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<view class="pay_flax flax_i" @click="bindBank('hf')">
<img class="img1" src="@/static/images/addto.png" alt="" />
<view>{{ '绑定银行卡' }}</view>
2025-03-23 09:29:40 +08:00
</view>
</view>
2025-07-22 09:12:50 +08:00
</view>
<view
class="flex_ac"
v-show="payList[PAY_AUTH[PAY_TYPE.TONG_LIAN_WECHAT]]"
>
<view class="flex_ac_i">
<img src="@/static/images/pay_i2.png" alt="" />
<view>通联微信支付</view>
</view>
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.TONG_LIAN_WECHAT"
>
</u-radio>
</u-radio-group>
</view>
<view
class="flex_ac1"
v-show="payList[PAY_AUTH[PAY_TYPE.JING_DONG_BANK_CARD]]"
>
<view class="flex_ac_i">
<img src="@/static/images/jdBank.jpg" alt="" />
<view>{{ '京东银行卡' }}</view>
</view>
<view class="pad">
<view
v-for="(item, index) in jdList"
:key="index"
class="pay_flax flex_bet"
@click.prevent="selPayRadio('jd' + index)"
>
<view class="flax_i">
{{ item.bankName }} ({{ item.bankNo }})
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.JING_DONG_BANK_CARD + index"
>
</u-radio>
</u-radio-group>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<view class="pay_flax flax_i" @click="bindBank('jd')">
<img class="img1" src="@/static/images/addto.png" alt="" />
<view>{{ '绑定银行卡' }}</view>
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
</view>
</view>
<view
class="flex_ac"
v-show="payList[PAY_AUTH[PAY_TYPE.JING_DONG_H5]]"
>
<view class="flex_ac_i">
<img src="@/static/images/jdBank.jpg" alt="" />
<view>京东收银台</view>
</view>
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.JING_DONG_H5"
>
</u-radio>
</u-radio-group>
</view>
<view
class="flex_ac1"
v-show="payList[PAY_AUTH[PAY_TYPE.TONG_LIAN_BANK_CARD]]"
>
<view class="flex_ac_i">
<img src="@/static/images/jdBank.jpg" alt="" />
<view>{{ '通联银行卡' }}</view>
</view>
<view class="pad">
<view
v-for="(item, index) in tlList"
:key="index"
class="pay_flax flex_bet"
@click.prevent="selPayRadio('tl' + index)"
>
<view class="flax_i">
{{ item.bankName }} ({{ item.bankNo }})
2025-03-23 09:29:40 +08:00
</view>
2025-07-22 09:12:50 +08:00
<u-radio-group v-model="whatPay">
<u-radio
activeColor="#005BAC"
size="18"
label=""
:name="PAY_TYPE.TONG_LIAN_BANK_CARD + index"
>
</u-radio>
</u-radio-group>
</view>
<view class="pay_flax flax_i" @click="bindBank('tl')">
<img class="img1" src="@/static/images/addto.png" alt="" />
<view>{{ '绑定银行卡' }}</view>
2025-03-23 09:29:40 +08:00
</view>
</view>
2025-07-22 09:12:50 +08:00
</view>
</view>
2025-03-23 09:29:40 +08:00
</view>
</view>
<!-- 底部 -->
<view class="footer_f">
<view class="footer">
<view class="footer_r">
2025-07-03 09:40:07 +08:00
<u-button
type="success"
class="uBtn"
shape="circle"
:loading="isLoading"
loadingText="支付中"
@tap="quickPay(isRecharge)"
color="linear-gradient(to right, #005BAC, #005BAC )"
>{{ '立即支付' }}
2025-03-23 09:29:40 +08:00
</u-button>
</view>
</view>
</view>
<!-- 输入验证码密码 -->
2025-07-03 09:40:07 +08:00
<u-popup :show="isPw" mode="center" closeable @close="closePw">
<view class="t_tit">{{ '支付验证' }}</view>
2025-03-23 09:29:40 +08:00
<view class="box">
2025-07-03 09:40:07 +08:00
<view class="c_tit">{{ '请输入短信验证码' }}</view>
<u--input border="surround" v-model="codeValue"></u--input>
<u-button
type="success"
class="uBtn"
shape="circle"
:loading="isLoading"
loadingText="支付中"
@tap="payPw()"
color="linear-gradient(to right, #005BAC, #005BAC )"
>{{ '立即支付' }}
</u-button>
2025-03-23 09:29:40 +08:00
</view>
</u-popup>
<!-- 成功 -->
2025-07-03 09:40:07 +08:00
<u-modal
:show="showSucce"
showConfirmButton
:content="content"
confirmColor="#DE3932"
@confirm="reset"
ref="uModal"
:asyncClose="true"
></u-modal>
2025-03-23 09:29:40 +08:00
<!-- 二维码 -->
2025-07-03 09:40:07 +08:00
<u-popup :show="wxPopup" mode="center" closeable @close="closewxPopup">
<view class="t_tit">{{ '微信支付' }}</view>
2025-03-23 09:29:40 +08:00
<view class="pay_code">
2025-07-03 09:40:07 +08:00
<div ref="qrCodeUrlWx" class="qrcode"></div>
2025-03-23 09:29:40 +08:00
</view>
</u-popup>
2025-07-22 09:12:50 +08:00
<successDialog
@successClose="successClose"
ref="successDialog"
></successDialog>
2025-03-23 09:29:40 +08:00
</view>
</template>
<script>
import * as api from '@/config/pay.js'
import QRCode from 'qrcodejs2'
import { removeToken } from '@/config/auth.js'
2025-07-22 09:12:50 +08:00
import successDialog from '@/components/successDialog.vue'
2025-03-23 09:29:40 +08:00
import * as act from '@/config/activity.js'
2025-07-22 09:12:50 +08:00
import {
PAY_REDIRECT_URL,
PAY_TYPE,
PAY_CHANEL,
PAY_AUTH,
} from '@/util/constant.js'
2025-03-23 09:29:40 +08:00
var payStatus
2025-07-22 15:28:02 +08:00
let getRegisterInfoTimeoutFlag = null
2025-03-23 09:29:40 +08:00
export default {
components: {
2025-07-22 09:12:50 +08:00
successDialog,
2025-03-23 09:29:40 +08:00
},
data() {
return {
2025-07-22 09:12:50 +08:00
PAY_TYPE,
PAY_AUTH,
2025-03-23 09:29:40 +08:00
payList: {},
isLoading: false,
clockTime: '',
specialArea: '',
orderCode: '',
orderData: {
orderAmount: '',
},
countDown: '',
payDetail: {
payAccount1: 1,
},
paramsPost: '',
isShare: false, //分享用户第一次爆单
2025-07-22 09:12:50 +08:00
userInfo: uni.getStorageSync('User'),
2025-03-23 09:29:40 +08:00
activeNames: 1,
whatPay: '',
hfList: [],
jdList: [],
2025-07-22 09:12:50 +08:00
businessType: 1,
2025-03-23 09:29:40 +08:00
isBank: '',
isPw: false,
codeValue: '',
bindCode: '',
showSucce: false, //
sucPay: 0,
content: '支付成功',
2025-03-23 09:29:40 +08:00
wxPopup: false,
2025-07-03 09:40:07 +08:00
isRecharge: false,
2025-03-23 09:29:40 +08:00
tlList: [],
}
},
onLoad(options) {
this.paramsPost = JSON.parse(options.paramsPost)
console.log(
'%c [ this.paramsPost ]-170',
'font-size:13px; background:#669153; color:#aad597;',
this.paramsPost
)
this.pkCountry = uni.getStorageSync('pkCountry')
2025-07-22 09:12:50 +08:00
2025-03-23 09:29:40 +08:00
this.orderCode = this.paramsPost.orderCode
// 获取支付配置
this.getPayConfig()
2025-07-22 09:12:50 +08:00
// this.downTime()
2025-03-23 09:29:40 +08:00
},
onShow() {
// 获取银行卡
2025-04-08 13:44:54 +08:00
// this.getBankList()
2025-03-23 09:29:40 +08:00
},
2025-07-22 15:28:02 +08:00
onUnload() {
clearTimeout(getRegisterInfoTimeoutFlag)
clearInterval(payStatus)
},
2025-03-23 09:29:40 +08:00
methods: {
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
clearInterval(payStatus)
},
successClose() {
removeToken()
uni.redirectTo({
url: '/pages/login/index',
})
},
fansOrder() {
2025-07-03 09:40:07 +08:00
api.fansOrder(this.orderCode).then(res => {
2025-07-22 15:28:02 +08:00
if (res.data) {
this.isLoading = false
this.isPw = false
removeToken()
this.$refs.successDialog.showSuccess(res.data)
} else {
getRegisterInfoTimeoutFlag = setTimeout(() => {
this.fansOrder()
}, 3000)
}
2025-03-23 09:29:40 +08:00
})
},
payPw() {
let url, obj
// 银行卡
if (this.isBank == 'hf') {
url = api.payConfirmHf
} else if (this.isBank == 'jd') {
url = api.payConfirmJd
} else if (this.isBank == 'tl') {
url = api.payConfirmTl
}
obj = {
orderCode: this.orderCode,
bindCode: this.bindCode,
specialArea: 7,
smsCode: this.codeValue,
pkSettleCountry: this.pkCountry,
}
this.isLoading = true
2025-07-03 09:40:07 +08:00
url(obj).then(res => {
2025-03-23 09:29:40 +08:00
if (res.code == 200) {
// this.isPw = false
2025-07-22 09:12:50 +08:00
// this.$refs.successDialog.showSuccess(res.data)
2025-03-23 09:29:40 +08:00
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1500,
})
// uni.redirectTo({
// url: '/pages/login/login',
// })
this.isLoading = false
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1500,
})
this.isLoading = false
}
})
},
2025-07-22 09:12:50 +08:00
async quickPay() {
if (
![
PAY_TYPE.HUI_FU_BANK_CARD,
PAY_TYPE.JING_DONG_BANK_CARD,
PAY_TYPE.TONG_LIAN_BANK_CARD,
].includes(this.whatPay.slice(0, 2))
) {
if ([PAY_TYPE.JING_DONG_H5].includes(this.whatPay)) {
this.redirectPay(PAY_CHANEL[this.whatPay])
} else if (
[PAY_TYPE.BAO_FU_WECHAT_SCAN, PAY_TYPE.HUI_FU_WECHAT].includes(
this.whatPay
)
) {
this.scanPayBfWx(PAY_CHANEL[this.whatPay])
} else if (this.whatPay == PAY_TYPE.WECHAT_PAY) {
this.scanPayWx(PAY_CHANEL[this.whatPay])
} else if (this.whatPay == PAY_TYPE.ALI_PAY) {
this.scanPayAl(PAY_CHANEL[this.whatPay])
2025-03-23 09:29:40 +08:00
}
} else {
2025-07-22 09:12:50 +08:00
const indexed = this.whatPay.slice(2, 4)
const payTypeEnum = this.whatPay.slice(0, 2)
const bankListMap = {
[PAY_TYPE.HUI_FU_BANK_CARD]: this.hfList[indexed].bindCode,
[PAY_TYPE.JING_DONG_BANK_CARD]: this.jdList[indexed].bindCode,
[PAY_TYPE.TONG_LIAN_BANK_CARD]: this.tlList[indexed].bindCode,
}
this.bindCode = bankListMap[payTypeEnum]
const params = {
businessType: this.businessType, //订单类型
payChannel: PAY_CHANEL[payTypeEnum],
payType: 3, //银行卡
bindCode: bankListMap[payTypeEnum],
}
if (!isRecharge) {
Object.assign(params, {
2025-03-23 09:29:40 +08:00
businessCode: this.orderCode,
})
}
2025-07-22 09:12:50 +08:00
api.unifiedorder(params).then(response => {
this.isBank = this.whatPay.slice(0, 2)
this.isPw = true
this.checkPayStatus(params)
})
2025-03-23 09:29:40 +08:00
}
},
// 宝付微信支付
scanPayBfWxJump(val) {
let params = {
businessType: 1,
businessCode: this.orderCode,
payChannel: val,
payType: 2,
appletFlag: 0,
}
2025-07-03 09:40:07 +08:00
api.unifiedorder(params).then(res => {
2025-03-23 09:29:40 +08:00
let url =
'https://cloud1-8gp1n6uofa17e2e2-1315820965.tcloudbaseapp.com/jump_mp.html?sign=8587800b05c859700944247c03eeae1c&t=1698224973&state=' +
res.data
window.open(url)
})
this.checkPayStatus(params)
},
// 通联微信支付
scanPayTlWxJump(val) {
let params = {
businessType: 1, //订单类型充值
businessCode: this.orderCode,
payChannel: val,
payType: 2,
appletFlag: 0,
}
2025-07-03 09:40:07 +08:00
api.unifiedorder(params).then(res => {
2025-03-23 09:29:40 +08:00
let url =
'https://cloud1-1gql8u3v1fe85a37-1322999719.tcloudbaseapp.com/jump_mp.html?sign=d77deffc9e8aecd2b721f8430c376370&t=1705374125&state=' +
res.data
window.open(url)
})
this.checkPayStatus(params)
},
2025-07-22 09:12:50 +08:00
redirectPay(payChannel) {
this.getPayAuthToken(payChannel).then(url => {
if (navigator.userAgent.includes('MicroMessenger')) {
window.location.href = url
} else {
window.open(url)
}
})
},
getPayAuthToken(payChannel) {
return new Promise((resolve, reject) => {
const extParam = {
isRecharge: false,
orderCode: this.orderCode,
specialArea: 1,
isSharePay: true,
}
// 将extParam对象转换为JSON字符串再转换为base64编码
const extParamBase64 = btoa(JSON.stringify(extParam))
const params = {
payChannel: payChannel,
payType: 2,
appletFlag: 0,
businessType: this.businessType,
businessCode: this.orderCode,
extParam: extParamBase64,
}
api.unifiedorder(params).then(res => {
if (res.code === 200) {
resolve(res.data)
this.checkPayStatus(params)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
})
reject(res.msg)
}
})
})
},
2025-03-23 09:29:40 +08:00
scanPayBfWx(val) {
let params = {
businessType: 1,
businessCode: this.orderCode,
payChannel: val,
payType: 2,
}
2025-07-03 09:40:07 +08:00
api.unifiedorder(params).then(res => {
2025-03-23 09:29:40 +08:00
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() {
2025-07-03 09:40:07 +08:00
api.payConfig().then(res => {
2025-03-23 09:29:40 +08:00
this.payList = res.data
2025-07-22 09:12:50 +08:00
2025-03-23 09:29:40 +08:00
this.$forceUpdate()
})
},
getBankList() {
2025-07-03 09:40:07 +08:00
api.jdBankList().then(res => {
2025-03-23 09:29:40 +08:00
this.jdList = res.data
})
2025-04-08 13:44:54 +08:00
// api.hfBankList().then((res) => {
// this.hfList = res.data
// })
// api.tlBankList().then((res) => {
// this.tlList = res.data
// })
2025-03-23 09:29:40 +08:00
this.$nextTick(() => {
this.$refs.collapse.init()
})
this.$forceUpdate()
},
getOrderInfo() {
api
.orderInfo({
specialArea: this.specialArea,
orderCode: this.orderCode,
pkSettleCountry: this.pkCountry,
})
2025-07-03 09:40:07 +08:00
.then(res => {
2025-03-23 09:29:40 +08:00
this.orderData = res.data
this.downTime()
})
},
downTime() {
let that = this
this.clockTime = setInterval(() => {
if (that.paramsPost.payTime && that.paramsPost.payTime > 0) {
that.countDown = this.getTime(this.paramsPost.payTime--)
} else {
that.countDown = '00:00:00'
}
}, 1000)
},
getSpendInfo() {
api
.spendDetails({
specialArea: this.specialArea,
orderCode: this.orderCode,
pkSettleCountry: this.pkCountry,
})
2025-07-03 09:40:07 +08:00
.then(res => {
2025-03-23 09:29:40 +08:00
// this.payDetail = res.data
this.$set(this, 'payDetail', res.data)
})
},
reset() {
2025-07-03 09:40:07 +08:00
this.$store.dispatch('GetInfo').then(res => {
2025-03-23 09:29:40 +08:00
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
2025-07-22 15:28:02 +08:00
uni.showLoading({
title: '正在获取注册信息,请不要关闭当前页面',
})
setTimeout(() => {
this.fansOrder()
}, 2000)
2025-03-23 09:29:40 +08:00
} else {
2025-07-03 09:40:07 +08:00
api.payStatus(data).then(res => {
2025-03-23 09:29:40 +08:00
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);
height: 100vh;
}
.index_header {
background: #f9f9f9;
height: 330rpx;
}
.contxt {
margin-top: -220rpx;
padding: 0 26rpx;
padding-bottom: 300rpx;
}
.tit {
font-size: 24px;
2025-07-03 09:40:07 +08:00
font-family:
PingFang SC-Semibold,
PingFang SC;
2025-03-23 09:29:40 +08:00
font-weight: 600;
text-align: center;
color: #333333;
margin-bottom: 20rpx;
}
.tit1 {
font-size: 24px;
2025-07-03 09:40:07 +08:00
font-family:
PingFang SC-Semibold,
PingFang SC;
2025-03-23 09:29:40 +08:00
font-weight: 600;
color: #e02b26;
text-align: center;
margin-bottom: 20rpx;
}
.tit2 {
font-size: 11px;
2025-07-03 09:40:07 +08:00
font-family:
PingFang SC-Regular,
PingFang SC;
2025-03-23 09:29:40 +08:00
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;
2025-07-03 09:40:07 +08:00
font-family:
PingFang SC-Semibold,
PingFang SC;
2025-03-23 09:29:40 +08:00
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;
justify-content: space-between;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
2025-07-22 09:12:50 +08:00
padding: 18rpx 20rpx;
2025-03-23 09:29:40 +08:00
}
.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);
2025-07-22 09:12:50 +08:00
// padding: 18rpx 0;
2025-03-23 09:29:40 +08:00
}
.flex_ac_i {
display: flex;
align-items: center;
font-size: 12px;
2025-07-03 09:40:07 +08:00
font-family:
PingFang SC-Regular,
PingFang SC;
2025-03-23 09:29:40 +08:00
font-weight: 400;
color: #333333;
img {
width: 16px;
height: 16px;
margin-right: 20rpx;
}
}
.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;
2025-07-03 09:40:07 +08:00
font-family:
PingFang SC-Semibold,
PingFang SC;
2025-03-23 09:29:40 +08:00
font-weight: 600;
color: #999;
}
.tTit {
font-size: 12px;
2025-07-03 09:40:07 +08:00
font-family:
PingFang SC-Semibold,
PingFang SC;
2025-03-23 09:29:40 +08:00
font-weight: 600;
color: #666;
}
</style>