Files
2025-12-30 18:17:59 +08:00

481 lines
15 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.

<template>
<view class="">
<navbar title="充值"></navbar>
<view class="recharge-box">
<view class="r-desc">
<view class="r-desc1">请选择充值金额</view>
<view class="r-desc2">充值金额只能消费不能提现</view>
</view>
<view class="bg-white card">
<view>
<view class="card-item" :class="currentType == i + 1 ? 'active' : ''" v-for="i in 5" :key="i"
@click="selectCard(i + 1)">
<view class="d-f a-i-c">
<view class="icon-box d-c-c card-checkout"><span class="icon iconfont icon-xuanze"></span>
</view>
<view class="card-balance">充值{{ balance['balance' + (i + 1)] }}</view>
</view>
<view class="d-f a-i-c">
<view class="d-f a-i-c">
<view class="sale">
<text>预存享</text>
<text class="discount">{{ balance['discount' + (i + 1)] }}</text>
<text></text>
</view>
</view>
</view>
</view>
</view>
<view>
<!-- <checkbox-group @change="checkboxChange">
<text class="" style="margin-right: 20rpx;" @click="see">我已阅读并同意充值协议</text>
<checkbox value="true" :checked="yxChekced"/>
</checkbox-group> -->
<!-- <text class="" style="margin-right: 20rpx;">我已阅读并同意充值协议</text>
<checkbox value="cb" class="checkbox" :checked="yxChekced" @change="yxChekced = !yxChekced" /> -->
</view>
</view>
<view class="r-desc">
<view class="r-desc1">充值说明</view>
<view class="r-desc2">a.账户充值仅限在线方式支付充值金额实时到账</view>
<view class="r-desc2">b.有问题请联系客服</view>
<view class="r-desc2">c.充值前请先查看本协议<text style="color: #FF5951;" @click="see">充值协议</text></view>
</view>
<view class="card-btn" @click="openXieYi">确定</view>
</view>
<!-- 会员卡选择弹窗 -->
<!-- <Popup :show="cardPopup" :width='750' :padding="0" type="bottom" backgroundColor="#fff" radius="32rpx 32rpx 0 0">
<view class="notice-popup">
<view class="title">提示</view>
<view class="desc">
<view class="rule">是否充值该</view>
</view>
<view class="btn">
<view class="btn1" @click="cancelReservePopup = false">取消</view>
<view class="btn2" @click="cancelReserveOrder">确定</view>
</view>
</view>
</Popup> -->
<Popup :show="cardPopup" :width='680' :padding="0" backgroundColor="#fff" radius="16rpx">
<view class="notice-popup">
<view class="title" style="font-size: 36rpx; color: #303133; line-height: 50rpx;margin-top: 20rpx;">充值说明
</view>
<view class="desc" style="text-align: left; padding: 0 30rpx;">
<view class="r-desc2" style="margin-bottom: 10rpx;">a.账户充值仅限在线方式支付充值金额实时到账</view>
<view class="r-desc2" style="margin-bottom: 10rpx;">b.有问题请联系客服</view>
<!-- <view class="r-desc2" style="margin-bottom: 10rpx;">c.充值前请先查看本协议<text style="color: #FF5951;" @click="see">充值协议</text></view> -->
<view class="r-desc2 xy" style="margin-bottom: 10rpx;display: flex; align-items: center; flex-wrap: wrap;" @click="yxChekced = !yxChekced">
<view style="margin-right: 10rpx;" :class="yxChekced ? 'active' : ''">
<view class="icon-box d-c-c card-checkout"><span class="icon iconfont icon-xuanze" style="font-size: 46rpx;"></span>
</view>
</view>
<view class="" style="font-size: 30rpx;">
我已认真阅读并查看此协议<text style="color: #FF5951;" @click="see">充值协议</text>
</view>
</view>
</view>
<view class="btn">
<view class="btn1" @click="cardPopup = false">取消</view>
<view class="btn2" @click="confirmCard">确定</view>
</view>
</view>
</Popup>
</view>
</template>
<script>
import navbar from '@/components/navbar.vue';
import Popup from '@/components/uni-popup.vue';
export default {
components: {
navbar,
Popup
},
data() {
return {
cardPopup: false,
currentType: -1,
balance: {},
yxChekced: false
}
},
onLoad() {
let self = this;
// 获取充值卡
self._post(
'ground.ground/groundSetting',
{
app_id: self.getAppId(),
},
function (res) {
self.balance = res.data.lists.balance;
console.log("🚀 ~ res:", self.balance)
}
)
},
methods: {
// 选择会员卡
selectCard(index) {
this.currentType = index;
},
checkboxChange(e) {
console.log("🚀 ~ e:", e)
this.yxChekced = e.detail.value[0]
console.log("🚀 ~ e:", this.yxChekced)
},
openXieYi() {
this.cardPopup = true;
},
// 确认选择
confirmCard() {
let self = this;
if (!self.yxChekced) {
uni.showToast({
title: '请认真阅读并查看此协议',
icon: 'none'
});
return;
}
self.cardPopup = false;
uni.showLoading({
title: '加载中'
});
self._post('user.index/detail', {
source: self.getPlatform()
}, function (res) {
uni.hideLoading();
console.log("🚀 ~ res:", res)
if (res.data.userInfo.mobile == '') {
uni.showModal({
title: '提示',
content: '请先绑定手机号',
success: function (sm) {
if (sm.confirm) {
uni.switchTab({
url: '/pages/user/index/index'
});
}
}
});
} else {
if (self.currentType == -1) {
uni.showToast({
title: '请选择充值金额',
icon: 'none'
});
return;
}
self.wxPay()
}
});
},
// 微信支付
wxPay() {
let self = this;
uni.showLoading({
title: '加载中'
});
try {
self._post(
'user.groundOrder/recharge',
{
app_id: self.getAppId(),
type: this.currentType
},
function (res) {
if (res.code) {
const data = res.data
console.log("🚀 ~ pay data:", data)
uni.requestPayment({
provider: 'wxpay',
timeStamp: data.payment.timeStamp,
nonceStr: data.payment.nonceStr,
package: 'prepay_id=' + data.payment.prepay_id,
signType: 'MD5',
paySign: data.payment.paySign,
success: res => {
self.result = 'success'
console.log("🚀 ~ pay success res:", res)
uni.showToast({
title: '支付成功',
icon: 'none'
});
self.loadding = false;
setTimeout(() => {
uni.redirectTo({
url: '/bundle/recharge/card'
});
}, 500);
},
fail: res => {
console.log("🚀 ~ pay error res:", res)
self.result = 'fail'
self.loadding = false;
uni.showToast({
title: '支付失败',
icon: 'none'
});
},
});
} else {
self.loadding = false;
uni.showToast({
title: '创建订单失败',
icon: 'none'
});
return
}
}
)
} catch (error) {
console.log("🚀 ~ pay error res:", res)
self.result = 'fail'
self.loadding = false;
uni.showToast({
title: '支付失败',
icon: 'none'
});
setTimeout(() => {
uni.navigateBack({ delta: 1 })
}, 500);
}
},
see() {
uni.showLoading({
title: '加载中'
});
// 1. 协议文件地址(可替换为实际后端返回的 word 文件 url
const url = 'https://xh.stnav.com/czxy.doc';
// 2. 下载 word 文件
uni.downloadFile({
url,
success: (res) => {
if (res.statusCode === 200) {
// 3. 预览 word 文件
uni.openDocument({
filePath: res.tempFilePath,
fileType: 'doc',
success: () => {
// 预览成功
uni.hideLoading();
},
fail: (err) => {
uni.hideLoading();
setTimeout(() => {
uni.showToast({ title: '无法预览文件', icon: 'none' });
}, 1000);
}
});
} else {
uni.hideLoading();
// setTimeout(() => {
// uni.showToast({ title: '下载失败', icon: 'none' });
// }, 1000);
}
},
fail: () => {
uni.hideLoading();
// setTimeout(() => {
// uni.showToast({ title: '下载失败', icon: 'none' });
// }, 1000);
}
});
}
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.recharge-box {
margin: 0 30rpx;
margin-top: 24rpx;
.r-desc {
.r-desc1 {
font-size: 32rpx;
color: #303133;
line-height: 44rpx;
}
.r-desc2 {
margin-top: 12rpx;
font-size: 26rpx;
color: #909399;
line-height: 36rpx;
}
}
.card {
margin-top: 28rpx;
padding-bottom: 64rpx;
.card-item {
width: 690rpx;
height: 104rpx;
background: #FFFFFF;
box-shadow: 0rpx 0rpx 16rpx 2rpx rgba(0, 0, 0, 0.04);
border-radius: 16rpx;
border: 2rpx solid #fff;
margin: 0 0 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 30rpx;
box-sizing: border-box;
.card-title {
font-size: 30rpx;
color: #121212;
margin-right: 24rpx;
}
.sale {
font-size: 28rpx;
.discount {
color: #FF5951;
}
}
.card-balance {
font-size: 30rpx;
color: #303133;
line-height: 42rpx;
margin-left: 26rpx;
}
}
.active {
border: 2rpx solid #FF5951;
background: #FFF4F4;
.card-checkout {
.iconfont {
color: #365A9A;
}
}
}
}
.card-btn {
position: fixed;
left: 50%;
transform: translateX(-50%);
bottom: 22rpx;
width: 630rpx;
height: 90rpx;
background: #365A9A;
border-radius: 8rpx;
font-weight: bold;
font-size: 30rpx;
color: #FFFFFF;
line-height: 90rpx;
text-align: center;
}
}
.notice-popup {
padding: 20rpx 0;
width: 100%;
.title {
font-size: 36rpx;
color: #303133;
line-height: 50rpx;
text-align: center;
}
.desc {
margin-top: 48rpx;
font-weight: 400;
font-size: 32rpx;
color: #303133;
line-height: 52rpx;
text-align: center;
}
.rule {
margin-bottom: 18rpx;
text-align: left;
}
.rule1 {
font-weight: 400;
font-size: 32rpx;
color: #303133;
line-height: 44rpx;
text-align: left;
margin-bottom: 10rpx;
}
}
.btn {
margin-top: 40rpx;
display: flex;
justify-content: space-around;
padding-bottom: 20rpx;
}
.btn1 {
width: 280rpx;
height: 80rpx;
text-align: center;
line-height: 80rpx;
font-size: 32rpx;
color: #121212;
background-color: #F6F7F8;
border-radius: 8rpx;
}
.btn2 {
width: 280rpx;
height: 80rpx;
text-align: center;
line-height: 80rpx;
font-size: 32rpx;
color: #fff;
background-color: #365A9A;
border-radius: 8rpx;
}
.xy {
.active {
.card-checkout {
.iconfont {
color: #365A9A;
}
}
}
}
</style>