Files
im/pages/user/service/wallet_pay.vue
T
2026-02-15 19:41:13 +08:00

252 lines
7.2 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="red-bag-page">
<u-navbar back-icon-name="close" :back-icon-size="36" back-icon-color="#333333" :border-bottom="false"
title="充值" title-color="#000000" :title-size="36" :title-bold="true">
<view slot="right">
<view class="u-m-r-20">
<u-icon name="more-dot-fill" color="#333333" :size="36"></u-icon>
</view>
</view>
</u-navbar>
<u-top-tips ref="uTips" :navbar-height="statusBarHeight + navbarHeight" type="error"></u-top-tips>
<view class="u-m-30" style="background-color: #ffffff;color: #000000;font-size: 34rpx;border-radius: 10rpx;">
<view class="u-flex u-row-between u-col-center u-p-20" :style="payValue>maxPayLimit?'color:#fa3534':''">
<view>
<text>金额</text>
</view>
<view>
<u-input input-align="right" v-model="payValue" :border="false"
@input="amountInputChange" type="digit"
:custom-style="{color:payValue>maxPayLimit?'#fa3534':'#000000',fontSize:'34rpx'}"
placeholder="¥0.00" placeholder-style="color:#cccccc;font-size:34rpx;" :clearable="false"/>
</view>
</view>
</view>
<view class="u-m-30" style="background-color: #ffffff;color: #000000;font-size: 34rpx;border-radius: 10rpx;">
<view class="u-flex u-row-between u-col-center"
style="width: 100%;padding: 30rpx 20rpx;" @click="selectPayWay">
<view>
<text>充值方式</text>
</view>
<view>
<u-icon color="#606266" name="arrow-right"
label-pos="left" label-color="#000000" label-size="32rpx"
:label="selectedPayWay.text"></u-icon>
</view>
</view>
</view>
<view :style="payValue>maxPayLimit?'color:#fa3534;text-align: center;margin-top: 120rpx;':'text-align: center;margin-top: 120rpx;'"
class="u-flex u-row-center u-col-center">
<view style="font-size:36px;margin-right: 10rpx;font-weight: 500;margin-bottom: 10rpx;">¥</view>
<view style="font-size:50px;font-weight: 400;">{{valueFormat()}}</view>
</view>
<view class="u-flex u-row-center u-col-center u-m-t-30">
<view @click="showPwdPop"
style="font-size: 36rpx; background-color:#19be6b;color:#ffffff;border-radius: 16rpx;text-align: center;padding: 26rpx 100rpx;">充值</view>
</view>
<!-- 支付方式 -->
<u-action-sheet :tips="tips" :list="payWaylist" @click="payWayClick" v-model="payWayshow"></u-action-sheet>
<u-popup v-model="passwordPopFlag" mode="bottom" border-radius="14" length="70%"
:mask-close-able="false">
<view class="u-p-30">
<view>
<view class="u-flex u-row-between">
<view style="width: 100rpx;" @click="closePwdPop">
<u-icon name="close"></u-icon>
</view>
<view v-if="pwdErrorTips.length>0"
style="text-align: center;color: #FC5531;font-size: 34rpx">
{{pwdErrorTips}}
</view>
<view v-else style="text-align: center;font-weight: bold;font-size: 32rpx;">
<text>请输入支付密码</text>
</view>
<view style="width: 100rpx;">
<text></text>
</view>
</view>
</view>
<view class="u-m-t-30 u-p-b-30 u-border-bottom" style="text-align: center;font-size: 18px;">
<view>充值到零钱</view>
<view style="font-weight: bold;">
<text style="margin-right: 6rpx;">¥</text><text style="font-size: 26px;">{{valueFormat()}}</text>
</view>
</view>
<view class="u-m-t-50">
<u-message-input :breathe="true" :maxlength="6" :dot-fill="true"
@change="inputChange" @finish="inputFinish" :focus="pwdFocus">
</u-message-input>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
payValue:"",
redBagRemark:"",
// 状态栏高度,H5中,此值为0,因为H5不可操作状态栏
statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
// 导航栏内容区域高度,不包括状态栏高度在内
navbarHeight: 44,
chatGroupId:'',
passwordPopFlag:false,
pwdFocus:false,
pwdErrorTips:'',
payWayshow:false,
maxPayLimit:100000,
payWaylist:[
{
text: '银行卡1',
color:'#19be6b',
fontSize:32,
subText:'推荐',
payID:1
},
{
text: '银行卡2',
color:'#2979ff',
fontSize:32,
payID:2
}
],
tips: {
text: '选择充值方式',
color: '#000000',
fontSize: 36
},
selectedPayWay:{
text: '请选择',
payID:0
}
};
},
onLoad:function(option){
this.chatGroupId=option.chatGroupId;
},
methods:{
valueFormat:function(){
if(this.payValue.length<1){
return "0.00"
}
if(this.payValue.toString().indexOf(".")==-1){
return this.payValue+'.00';
}else{
return this.payValue;
}
},
amountInputChange:function(e){
console.log(e);
if(Number(e)>this.maxPayLimit){
this.showTips("单次充值金额不可超过"+this.maxPayLimit+"元");
this.payValue="";
}
},
selectPayWay:function(){
let that=this;
that.payWayshow=true;
},
payWayClick:function(index){
//console.log(`点击了第${index + 1}项`,this.payWaylist[index]);
this.selectedPayWay=this.payWaylist[index];
},
showPwdPop:function(){
let that=this;
if(this.payValue.length<1||this.payValue<=0){
this.showTips("未填写[金额]");
return;
}
if(this.payValue>this.maxPayLimit){
this.showTips("单次充值金额不可超过"+this.maxPayLimit+"元");
return;
}
if(this.selectedPayWay.payID<1){
this.showTips("请选择充值方式");
return;
}
this.passwordPopFlag=true;
this.pwdErrorTips="";
setTimeout(function(){
that.pwdFocus=true;
},1000)
},
closePwdPop:function(){
this.pwdErrorTips="";
this.passwordPopFlag=false;
this.pwdFocus=false;
},
inputChange(e){
this.pwdErrorTips="";
},
inputFinish(e) {
//this.pwdFocus=fasle;
let that=this;
console.log('输入结束当前值为' + e);
let param={
accountBalance:this.payValue,
tradePwd:e
};
that.$u.api.imUser.validatePayTradePwd(param).then(res => {
console.log("交易密码校验结果",res);
if(res.code==200){
this.submit();
}else{
let message=res.message?res.message:'支付密码错误';
this.globalUtil.utilAlert(message);
this.pwdErrorTips=message;
return;
}
})
},
submit:function(){
let that=this;
let param={
payValue:Number(this.payValue).toFixed(2),
payWay:this.selectedPayWay.payID,
}
that.$u.api.imUser.toPayUserBalance(param).then(res =>{
if(res.code==200){
that.userAccount=res.data;
this.$u.vuex("vuex_userAccountInfo",that.userAccount);
this.closePwdPop();
this.globalUtil.utilAlert("充值成功!",3000);
setTimeout(function(){
uni.navigateBack();
},2000)
}
})
console.log("充值参数",param);
},
showTips(title) {
this.$refs.uTips.show({
title: title?title:'未填写[金额]',
type:'error'
});
}
}
}
</script>
<style lang="scss" scoped>
.red-bag-page{
background-color: #f1f1f1;
}
</style>
<style>
page{
background-color: #f1f1f1;
}
</style>