442 lines
12 KiB
Vue
442 lines
12 KiB
Vue
<template>
|
||
<page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
|
||
<view>
|
||
<Navbar title="余额/充值" :showRightText="true" :isBack="false" :text="'充值记录'" @clickIcon="handleRightText" />
|
||
<div class="content">
|
||
<div class="top-cont">
|
||
<div>总余额(元)</div>
|
||
<div class="acc-bal">{{ (balanceInfo.accAllBal/100).toFixed(2) }}</div>
|
||
<div class="money">
|
||
<div class="money-item">
|
||
<div>个人钱包</div>
|
||
<div class="item">
|
||
<span style="font-size: 11px">¥</span>
|
||
{{ (balanceInfo.walletBal/100).toFixed(2) }}
|
||
</div>
|
||
</div>
|
||
<div class="money-item" @click="goSubPage">
|
||
<div>补贴钱包</div>
|
||
<div class="item">
|
||
<span style="font-size: 11px">¥</span>
|
||
{{ (balanceInfo.subsidyBal/100).toFixed(2) }}
|
||
</div>
|
||
</div>
|
||
<div class="money-item">
|
||
<div>红包钱包</div>
|
||
<div class="item">
|
||
<span style="font-size: 11px">¥</span>
|
||
{{ (balanceInfo.redEnvelope/100).toFixed(2) }}
|
||
</div>
|
||
</div>
|
||
<div class="money-item">
|
||
<div>冻结钱包</div>
|
||
<div class="item">
|
||
<span style="font-size: 11px">¥</span>
|
||
{{ (balanceInfo.accFreezeBalTotal/100).toFixed(2) }}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="up">快捷充值</div>
|
||
<div class="box">
|
||
<div class="box-item" :class="{ active: active == 1 }" @click="handleRecharge(1)">
|
||
<span>¥</span>
|
||
<span>50.00</span>
|
||
<u-icon v-if="active == 1" class="icon" name="../../static/images/active.png" size="12" />
|
||
</div>
|
||
<div class="box-item" :class="{ active: active == 2 }" @click="handleRecharge(2)">
|
||
<span>¥</span>
|
||
<span>100.00</span>
|
||
<u-icon v-if="active == 2" class="icon" name="../../static/images/active.png" size="12" />
|
||
</div>
|
||
<div class="box-item" :class="{ active: active == 3 }" @click="handleRecharge(3)">
|
||
<span>¥</span>
|
||
<span>200.00</span>
|
||
<u-icon v-if="active == 3" class="icon" name="../../static/images/active.png" size="12" />
|
||
</div>
|
||
<div class="box-item" :class="{ active: active == 4 }" @click="handleRecharge(4)">
|
||
<span>¥</span>
|
||
<span>300.00</span>
|
||
<u-icon v-if="active == 4" class="icon" name="../../static/images/active.png" size="12" />
|
||
</div>
|
||
<div class="box-item" :class="{ active: active == 5 }" @click="handleRecharge(5)">
|
||
<span>¥</span>
|
||
<span>500.00</span>
|
||
<u-icon v-if="active == 5" class="icon" name="../../static/images/active.png" size="12" />
|
||
</div>
|
||
<div class="box-item" :class="{ active: active == 6 }" @click="handleRecharge(6)">
|
||
<span v-if="amount === ''" style="font-size: 18px">自定义</span>
|
||
<span v-else>
|
||
¥
|
||
<span style="font-size: 18px">{{ amount }}</span>
|
||
</span>
|
||
<u-icon v-if="active == 6" class="icon" name="../../static/images/active.png" size="12" />
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 充值 -->
|
||
<u-button shape="circle" color="#FF6816" @click="onRechargeNow" style="height: 48px; margin-top: 100px;font-size: 32rpx;">
|
||
立即充值
|
||
</u-button>
|
||
|
||
<u-popup :show="localShow" @close="closePopup" mode="center" round="12" :closeOnClickOverlay="false">
|
||
<view class="amount-popup">
|
||
<view class="popup-title">自定义金额</view>
|
||
|
||
<view class="input-box">
|
||
<u--input
|
||
v-model="amount"
|
||
placeholder="输入金额"
|
||
prefixIcon="¥"
|
||
@input="numberFn"
|
||
:prefixIconStyle="{
|
||
color: '#333',
|
||
fontSize: '32rpx',
|
||
fontWeight: 'bold'
|
||
}"
|
||
maxlength="6"
|
||
border="surround"
|
||
clearable
|
||
></u--input>
|
||
</view>
|
||
|
||
<view class="button-group">
|
||
<u-button
|
||
text="取消"
|
||
:customStyle="{
|
||
width: '240rpx',
|
||
height: '80rpx',
|
||
border: 'none',
|
||
background: '#f5f5f5',
|
||
color: '#666666'
|
||
}"
|
||
@click="closePopup"
|
||
></u-button>
|
||
<u-button
|
||
type="warning"
|
||
text="确认"
|
||
:customStyle="{
|
||
width: '240rpx',
|
||
height: '80rpx',
|
||
background: '#ff6633',
|
||
border: 'none'
|
||
}"
|
||
@click="confirm"
|
||
></u-button>
|
||
</view>
|
||
</view>
|
||
</u-popup>
|
||
|
||
|
||
<u-popup :show="chosenShow" @close="closeChosenShowPopup" mode="bottom" bgColor="transparent">
|
||
<view style="width: 100%;height: auto;background: transparent;">
|
||
<view class="chosen-btn" @click="confirmPay">支付宝支付</view>
|
||
<view class="chosen-btn" @click="closeChosenShowPopup">取消</view>
|
||
</view>
|
||
</u-popup>
|
||
</div>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import uIcon from '../../uni_modules/uview-ui/components/u-icon/u-icon.vue'
|
||
import UUpload from '../../uni_modules/uview-ui/components/u-upload/u-upload.vue'
|
||
import { getAccountInfoApi,personalRechargeForAppApi,listAvailPayTypeApi} from '../../api/index/index'
|
||
|
||
export default {
|
||
components: { UUpload },
|
||
data() {
|
||
return {
|
||
fontValue:uni.getStorageSync('fontSize') || 8,
|
||
timer:null,
|
||
// 余额
|
||
balance: {
|
||
accBal: '1.23', // 账户总余额
|
||
walletBal: '1.23', // 个人钱包
|
||
subsidyBal: '1.23' // 补贴钱包
|
||
},
|
||
custId: uni.getStorageSync('custId'), // 用户id
|
||
custThirdId: '', // 用户第三方id
|
||
active: 1,
|
||
accTradeType: 8, // 交易类型 8微信扫码充值 9支付宝扫码充值 10现金充值
|
||
accType: 1, // 钱包类型 1个人钱包 2补贴钱包
|
||
rechargeAmount: 5000, // 充值金额
|
||
payChannel: '', // 支付渠道
|
||
payType: '', // 支付方式
|
||
thirdRechargeNum: '', // 第三方充值流水号
|
||
localShow: false, // 自定义充值弹窗
|
||
amount: '',
|
||
chosenShow: false,
|
||
// 钱包信息
|
||
balanceInfo: {},
|
||
isSumbit: false
|
||
}
|
||
},
|
||
onShow() {
|
||
this.getWalletBalanceData()
|
||
},
|
||
onLoad() {
|
||
this.timer = setInterval(() => {
|
||
this.getWalletBalanceData()
|
||
}, 10000)
|
||
},
|
||
onUnload() {
|
||
clearInterval(this.timer)
|
||
this.timer = null
|
||
},
|
||
methods: {
|
||
// async getPayTypeList(){
|
||
// let param = {
|
||
// "custId": uni.getStorageSync('custId'),
|
||
// "openid": uni.getStorageSync('openId'),
|
||
// "sourceType": "7",
|
||
// }
|
||
// const res = await listAvailPayTypeApi(param)
|
||
// console.log('?? ~ getBalance ~ res', res)
|
||
// },
|
||
//跳转历史记录
|
||
handleRightText() {
|
||
console.log('?? ~ handleRightText ~ ')
|
||
uni.navigateTo({
|
||
url: '/pages/remainingSum/rechargeRecord'
|
||
})
|
||
},
|
||
// 获取钱包余额
|
||
async getWalletBalanceData(custId) {
|
||
const { data: res } = await getAccountInfoApi({ "custId":uni.getStorageSync('custId') })
|
||
this.balanceInfo = res
|
||
console.log(res, '余额信息--')
|
||
},
|
||
// 充值
|
||
handleRecharge(index) {
|
||
this.active = index
|
||
if (index == 1) {
|
||
this.rechargeAmount = 5000
|
||
} else if (index == 2) {
|
||
this.rechargeAmount = 10000
|
||
} else if (index == 3) {
|
||
this.rechargeAmount = 20000
|
||
} else if (index == 4) {
|
||
this.rechargeAmount = 30000
|
||
} else if (index == 5) {
|
||
this.rechargeAmount = 50000
|
||
} else if (index == 6) {
|
||
this.rechargeAmount = 0
|
||
this.openPopup()
|
||
}
|
||
},
|
||
openPopup() {
|
||
this.localShow = true
|
||
},
|
||
closePopup() {
|
||
this.localShow = false
|
||
},
|
||
confirm() {
|
||
if (!this.amount) {
|
||
uni.$u.toast('请输入金额')
|
||
return
|
||
} else if (/[^\d.]/g.test(this.amount)) {
|
||
this.amount = ''
|
||
this.rechargeAmount = 0
|
||
uni.$u.toast('金额必须为数字')
|
||
return
|
||
}
|
||
this.rechargeAmount = Number(this.amount)*100
|
||
// this.$emit('confirm', this.rechargeAmount)
|
||
this.closePopup()
|
||
},
|
||
//支付宝支付
|
||
closeChosenShowPopup() {
|
||
this.chosenShow = false
|
||
},
|
||
//确认支付宝支付
|
||
async confirmPay(){
|
||
if(!this.isSumbit){
|
||
this.isSumbit=true
|
||
let param = {
|
||
"custId": uni.getStorageSync('custId'),
|
||
"payType":"18",
|
||
"rechargeAmount":this.rechargeAmount,
|
||
"sourceType":"7",
|
||
"payPassword":"",
|
||
}
|
||
const res = await personalRechargeForAppApi(param)
|
||
this.isSumbit=false;
|
||
if(res.code==200){
|
||
console.log(res)
|
||
uni.setStorageSync('Form', res.data.payParamStr) //form表单
|
||
uni.setStorageSync('accTradeId', res.data.accTradeId)
|
||
uni.navigateTo({
|
||
url: `/pages/remainingSum/payLoding`
|
||
})
|
||
}
|
||
}
|
||
|
||
},
|
||
// 立即充值按钮
|
||
onRechargeNow() {
|
||
console.log(this.rechargeAmount)
|
||
if(this.balanceInfo.accAllBal>300000){
|
||
uni.showToast({
|
||
title: "总余额大于3000元无法继续充值!",
|
||
icon: 'none'
|
||
})
|
||
}else{
|
||
this.chosenShow = true
|
||
}
|
||
|
||
},
|
||
goSubPage(){
|
||
uni.navigateTo({
|
||
url: `/pages/remainingSum/subsidyList?subsidyBal=${this.balanceInfo.subsidyBal}`
|
||
})
|
||
},
|
||
numberFn(v){
|
||
this.amount = this.amount
|
||
.replace(/[^\d^\.]+/g, '')
|
||
.replace(/^0+(\d)/, '$1')
|
||
.replace(/^\./, '0.')
|
||
.match(/^\d*(\.?\d{0,2})/g)[0] || ''
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
page {
|
||
background: #fff;
|
||
}
|
||
|
||
.content {
|
||
padding: 16px;
|
||
|
||
.top-cont {
|
||
padding: 16px;
|
||
height: 190px;
|
||
color: #fff;
|
||
font-size: 28rpx;
|
||
background: linear-gradient(134deg, #ff6816 0%, rgba(255, 104, 22, 0.2) 99%), rgba(255, 104, 22, 0.6);
|
||
border-radius: 12px 12px 12px 12px;
|
||
position: relative;
|
||
box-sizing: border-box;
|
||
|
||
.acc-bal {
|
||
margin-top: 15px;
|
||
font-weight: 500;
|
||
font-size: 48px;
|
||
}
|
||
|
||
.money {
|
||
margin-top: 16px;
|
||
width: 100%;
|
||
display: flex;
|
||
// position: absolute;
|
||
justify-content: space-around;
|
||
// bottom: 16px;
|
||
|
||
.money-item {
|
||
// margin-right: 60px;
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: flex-start;
|
||
align-items: center;
|
||
|
||
.item {
|
||
margin-top: 10px;
|
||
font-size: 28rpx;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.up {
|
||
margin: 20px 0 10px;
|
||
font-weight: 500;
|
||
font-size: 28rpx;
|
||
color: #0f274b;
|
||
line-height: 16px;
|
||
}
|
||
|
||
.box {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
justify-content: space-between;
|
||
|
||
.box-item {
|
||
margin-bottom: 12px;
|
||
width: 30%;
|
||
height: 66px;
|
||
border-radius: 4px 4px 4px 4px;
|
||
border: 1px solid rgba(15, 39, 75, 0.4);
|
||
font-weight: 500;
|
||
font-size: 36rpx;
|
||
color: #0f274b;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
position: relative;
|
||
|
||
:first-child {
|
||
font-size: 24rpx;
|
||
}
|
||
|
||
.icon {
|
||
position: absolute;
|
||
right: 0;
|
||
bottom: 0;
|
||
}
|
||
}
|
||
|
||
.active {
|
||
background: rgba(255, 104, 22, 0.1);
|
||
border: 1px solid #ff6816;
|
||
}
|
||
}
|
||
}
|
||
|
||
.amount-popup {
|
||
width: 600rpx;
|
||
background-color: #ffffff;
|
||
border-radius: 24rpx;
|
||
padding: 40rpx 30rpx;
|
||
|
||
.popup-title {
|
||
text-align: center;
|
||
font-size: 32rpx;
|
||
color: #333333;
|
||
font-weight: 500;
|
||
margin-bottom: 30rpx;
|
||
}
|
||
|
||
.input-box {
|
||
margin-bottom: 40rpx;
|
||
}
|
||
|
||
.button-group {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
}
|
||
}
|
||
.chosen-btn{
|
||
width: 94%;height: 40px;line-height: 40px;margin: 10rpx auto;border-radius: 8px;background-color: #FFF;text-align: center;font-size: 36rpx;
|
||
}
|
||
::v-deep .u-input {
|
||
&__content {
|
||
height: 80rpx;
|
||
background-color: #ffffff;
|
||
|
||
&__prefix-icon {
|
||
margin-right: 10rpx;
|
||
padding-left: 10rpx;
|
||
}
|
||
|
||
&__field-wrapper {
|
||
&__field {
|
||
font-size: 28rpx;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|