Dining_Hall/pages/remainingSum/index.vue

442 lines
12 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>
<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>