3
0
Fork 0

feat(withDrawal): 提现添加弹窗提示

This commit is contained in:
woody 2025-07-15 15:51:03 +08:00
parent f98ce3fc08
commit 507b621bd3
4 changed files with 343 additions and 160 deletions

View File

@ -0,0 +1,156 @@
<template>
<u-modal
:show="show"
:showConfirmButton="true"
:showCancelButton="false"
confirmText="我知道了"
@confirm="handleConfirm"
:closeOnClickOverlay="false"
width="640rpx"
:customStyle="{ 'border-radius': '16rpx' }"
>
<view class="withdrawal-guide-content">
<view class="guide-title">提现绑定操作指南</view>
<view class="guide-text">
<text>尊敬的经销商伙伴们</text>
<text
>为了让大家顺利快捷地提现符合法律法规的要求现需完成提现绑定操作步骤如下按序操作即可</text
>
</view>
<view class="guide-steps">
<view class="step-item">
<text class="step-number">1.</text>
<text class="step-text"
>微信扫码后用实际收款人本人手机号登录</text
>
</view>
<view class="step-item">
<text class="step-number">2.</text>
<text class="step-text"
>点击 "继续签约"上传本人身份证照片完成实名认证</text
>
</view>
<view class="step-item">
<text class="step-number">3.</text>
<text class="step-text"
>进入合同页面选择 "默认印章"输入收到的验证码完成签约</text
>
</view>
<view class="step-item">
<text class="step-number">4.</text>
<text class="step-text"
>返回首页点击 "提现"若显示 "开户"下拉刷新页面即可</text
>
</view>
<view class="step-item">
<text class="step-number">5.</text>
<text class="step-text"
>进入绑卡页面完成银行卡绑定后即可操作提现</text
>
</view>
</view>
<view class="guide-footer">
<text>请大家尽快办理有疑问可随时联系我们感谢配合</text>
</view>
<view class="qr-code-section">
<image
class="qr-code-image"
src="/static/images/with-drawal-mini-code.png"
mode="aspectFit"
/>
</view>
</view>
</u-modal>
</template>
<script>
export default {
name: 'WithdrawalGuide',
props: {
show: {
type: Boolean,
default: false,
},
},
methods: {
handleConfirm() {
this.$emit('confirm')
},
},
}
</script>
<style lang="scss" scoped>
.withdrawal-guide-content {
padding: 0rpx 32rpx 32rpx;
.guide-title {
font-size: 32rpx;
font-weight: bold;
color: #333333;
text-align: center;
margin-bottom: 32rpx;
}
.guide-text {
font-size: 26rpx;
color: #666666;
line-height: 40rpx;
margin-bottom: 24rpx;
text {
display: block;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
}
}
.guide-steps {
margin-bottom: 24rpx;
.step-item {
display: flex;
align-items: flex-start;
margin-bottom: 16rpx;
.step-number {
color: #005bac;
font-size: 26rpx;
font-weight: bold;
width: 32rpx;
flex-shrink: 0;
}
.step-text {
font-size: 26rpx;
color: #666666;
line-height: 40rpx;
flex: 1;
}
}
}
.guide-footer {
font-size: 26rpx;
color: #666666;
line-height: 40rpx;
margin-bottom: 32rpx;
text-align: center;
}
.qr-code-section {
display: flex;
justify-content: center;
align-items: center;
.qr-code-image {
width: 200rpx;
height: 200rpx;
border-radius: 8rpx;
}
}
}
</style>

View File

@ -7,7 +7,7 @@
:rules="rules" :rules="rules"
ref="uForm" ref="uForm"
> >
<u-form-item <!-- <u-form-item
label-width="200rpx" label-width="200rpx"
:label="'银行卡号'" :label="'银行卡号'"
prop="cardNumber" prop="cardNumber"
@ -24,7 +24,7 @@
<view v-else style="color: red" @click="goBindbank"> <view v-else style="color: red" @click="goBindbank">
{{ '请先绑定银行卡' }} {{ '请先绑定银行卡' }}
</view> </view>
</u-form-item> </u-form-item> -->
<u-form-item <u-form-item
label-width="200rpx" label-width="200rpx"
:label="`${'提现金额'}(${isLocaled()})`" :label="`${'提现金额'}(${isLocaled()})`"
@ -131,18 +131,27 @@
</view> </view>
</view> </view>
<view class="btnbox"> <view class="btnbox">
<u-button :disabled="canbind" class="subbtn" @click="submit">{{ <u-button class="subbtn" @click="submit">{{ '提现' }}</u-button>
'提现'
}}</u-button>
</view> </view>
<u-toast ref="uToast"></u-toast> <u-toast ref="uToast"></u-toast>
<!-- 提现引导弹窗 -->
<WithdrawalGuide
:show="showWithdrawalGuide"
@confirm="onWithdrawalGuideConfirm"
/>
</view> </view>
</template> </template>
<script> <script>
import * as bal from '@/config/balance.js' import * as bal from '@/config/balance.js'
import { isLocaled } from '@/util/numberToCurrency' import { isLocaled } from '@/util/numberToCurrency'
import WithdrawalGuide from '@/components/withdrawalGuide/index.vue'
export default { export default {
components: {
WithdrawalGuide,
},
data() { data() {
return { return {
showAmount: false, showAmount: false,
@ -182,22 +191,14 @@ export default {
], ],
}, },
bankData: {}, bankData: {},
widthDrwaData: { widthDrwaData: {},
amount: 0,
balance: 0,
srviceCharge: 0,
minAmount: 0,
},
ifeye: false, ifeye: false,
canbind: false, canbind: false,
showWithdrawalGuide: false,
} }
}, },
watch: { watch: {
'dataForm.cashAmount': { 'dataForm.cashAmount': 'checkAccount',
handler(newVal) {
this.checkAccount(newVal || 0, this.dataForm.pkAccount)
},
},
}, },
onNavigationBarButtonTap() { onNavigationBarButtonTap() {
uni.navigateTo({ uni.navigateTo({
@ -229,7 +230,6 @@ export default {
if (this.pkBdAccountList.length > 0) { if (this.pkBdAccountList.length > 0) {
this.dataForm.pkAccountName = res.data[0].accountName this.dataForm.pkAccountName = res.data[0].accountName
this.dataForm.pkAccount = res.data[0].pkId this.dataForm.pkAccount = res.data[0].pkId
this.checkAccount(0, this.dataForm.pkAccount)
} }
}) })
bal.getDefaultBank().then(res => { bal.getDefaultBank().then(res => {
@ -255,9 +255,10 @@ export default {
message: res.msg, message: res.msg,
type: 'success', type: 'success',
}) })
//
setTimeout(() => { setTimeout(() => {
uni.navigateBack() this.showWithdrawalGuide = true
}, 1000) }, 300)
} }
}) })
}) })
@ -269,25 +270,30 @@ export default {
this.dataForm.pkAccountName = e.value[0].accountName this.dataForm.pkAccountName = e.value[0].accountName
this.dataForm.pkAccount = e.value[0].pkId this.dataForm.pkAccount = e.value[0].pkId
this.showAmount = false this.showAmount = false
this.checkAccount(this.dataForm.cashAmount, this.dataForm.pkAccount) this.checkAccount()
}, },
checkAccount(cashAmount, pkAccount) { checkAccount() {
if (!cashAmount && cashAmount !== 0) { if (!this.dataForm.cashAmount) {
uni.$u.toast('请先输入金额') uni.$u.toast('请先输入金额')
return return
} else if (!pkAccount) { } else if (!this.dataForm.pkAccount) {
uni.$u.toast('请先选择账户') uni.$u.toast('请先选择账户')
return return
} }
bal bal
.getWidthdrawShow({ .getWidthdrawShow({
pkAccount, pkAccount: this.dataForm.pkAccount,
cashAmount, cashAmount: this.dataForm.cashAmount,
}) })
.then(res => { .then(res => {
this.widthDrwaData = res.data this.widthDrwaData = res.data
}) })
}, },
//
onWithdrawalGuideConfirm() {
this.showWithdrawalGuide = false
uni.navigateBack()
},
}, },
} }
</script> </script>

View File

@ -1,150 +1,171 @@
<template> <template>
<view class="content"> <view class="content">
<view class="contentList" v-for="item,index in tableList" :key="index"> <view class="contentList" v-for="(item, index) in tableList" :key="index">
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'钱包类型'}}</view> <view class="line_title">{{ '钱包类型' }}</view>
<view class="line_content ">{{item.pkAccountVal}}</view> <view class="line_content">{{ item.pkAccountVal }}</view>
</view> </view>
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'提现金额'}}</view> <view class="line_title">{{ '提现金额' }}</view>
<view class="line_content">{{item.cashAmount| toThousandthAndKeepDecimal}}</view> <view class="line_content">{{
</view> item.cashAmount | toThousandthAndKeepDecimal
<view class="linebox"> }}</view>
<view class="line_title">{{'手续费'}}</view> </view>
<view class="line_content">{{item.serviceCharge| toThousandthAndKeepDecimal}}</view> <view class="linebox">
</view> <view class="line_title">{{ '手续费' }}</view>
<view class="linebox"> <view class="line_content">{{
<view class="line_title">{{'个税'}}</view> item.serviceCharge | toThousandthAndKeepDecimal
<view class="line_content">{{item.incomeTax| toThousandthAndKeepDecimal}}</view> }}</view>
</view> </view>
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'实发金额'}}</view> <view class="line_title">{{ '个税' }}</view>
<view class="line_content">{{item.issuedAmount| toThousandthAndKeepDecimal}}</view> <view class="line_content">{{
</view> item.incomeTax | toThousandthAndKeepDecimal
<view class="linebox"> }}</view>
<view class="line_title">{{'银行名称'}}</view> </view>
<view class="line_content">{{item.bankName}}</view> <view class="linebox">
</view> <view class="line_title">{{ '实发金额' }}</view>
<view class="linebox"> <view class="line_content">{{
<view class="line_title">{{'银行账户'}}</view> item.issuedAmount | toThousandthAndKeepDecimal
<view class="line_content">{{item.cardNumber}}</view> }}</view>
</view> </view>
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'开户姓名'}}</view> <view class="line_title">{{ '银行名称' }}</view>
<view class="line_content">{{item.accountName}}</view> <view class="line_content">{{ item.bankName }}</view>
</view> </view>
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'审核状态'}}</view> <view class="line_title">{{ '银行账户' }}</view>
<view class="line_content">{{item.approveStateVal}}</view> <view class="line_content">{{ item.cardNumber }}</view>
</view> </view>
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'申请日期'}}</view> <view class="line_title">{{ '开户姓名' }}</view>
<view class="line_content">{{item.creationTime}}</view> <view class="line_content">{{ item.accountName }}</view>
</view> </view>
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'备注'}}</view> <view class="line_title">{{ '审核状态' }}</view>
<view class="line_content">{{item.remarks}}</view> <view class="line_content">{{ item.approveStateVal }}</view>
</view> </view>
<view class="linebox"> <view class="linebox">
<view class="line_title">{{'状态'}}</view> <view class="line_title">{{ '申请日期' }}</view>
<view class="line_content">{{item.statusVal}}</view> <view class="line_content">{{ item.creationTime }}</view>
</view> </view>
<view class="linebox">
<view class="line_title">{{ '备注' }}</view>
<view class="line_content">{{ item.remarks }}</view>
</view>
<view class="linebox">
<view class="line_title">{{ '状态' }}</view>
<view class="line_content">{{ item.statusVal }}</view>
</view>
<view v-if="item.approveState == 4" class="linebox">
<view class="line_title">驳回原因</view>
<view class="line_content">{{ item.approveRemarks }}</view>
</view>
<view class="linebox" style="border-bottom: none;"> <view class="linebox" style="border-bottom: none">
<view class="line_title">{{'操作'}}</view> <view class="line_title">{{ '操作' }}</view>
<view class="line_content thesuccess" v-if="item.status==0&&item.approveState==1" @click="revoke(item)">{{'撤销'}}</view> <view
</view> class="line_content thesuccess"
</view> v-if="item.status == 0 && item.approveState == 1"
<u-modal :show="revokeShow" showCancelButton @cancel="revokeShow = false" cancelText="取消" @click="revoke(item)"
confirmText="确定" @confirm='confirmRevoke' :content='content'></u-modal> >{{ '撤销' }}</view
</view> >
</view>
</view>
<u-modal
:show="revokeShow"
showCancelButton
@cancel="revokeShow = false"
cancelText="取消"
confirmText="确定"
@confirm="confirmRevoke"
:content="content"
></u-modal>
</view>
</template> </template>
<script> <script>
import * as bal from "@/config/balance.js" import * as bal from '@/config/balance.js'
export default { export default {
data() { data() {
return { return {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 50, pageSize: 50,
},
tableList: [],
revokeShow: false,
content: '是否确认操作?',
thepkId: '',
}
},
onLoad() {
this.getSearch()
},
}, methods: {
tableList: [], //
revokeShow: false, revoke(row) {
content:'是否确认操作?', this.thepkId = row.pkId
thepkId:"" this.revokeShow = true
} },
}, confirmRevoke() {
onLoad() { bal.cancelWithdraw({ pkId: this.thepkId }).then(res => {
this.getSearch() if (res.code == 200) {
}, uni.showToast({
title: res.msg,
methods: { })
// this.revokeShow = false
revoke(row) { this.getSearch()
this.thepkId = row.pkId }
this.revokeShow = true })
}, },
confirmRevoke(){ getSearch() {
bal.cancelWithdraw({pkId:this.thepkId}).then(res=>{ bal.getWithdrawList(this.queryParams).then(res => {
if(res.code==200){ this.tableList = res.rows
uni.showToast({ })
title: res.msg },
}) },
this.revokeShow=false }
this.getSearch()
}
})
},
getSearch() {
bal.getWithdrawList(this.queryParams).then(res => {
this.tableList = res.rows
})
}
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .u-popup__content { ::v-deep .u-popup__content {
overflow: auto; overflow: auto;
} }
.content { .content {
background: #F2F2F2; background: #f2f2f2;
padding: 10rpx 24rpx; padding: 10rpx 24rpx;
.contentList { .contentList {
background-color: #fff; background-color: #fff;
margin: 10rpx 0; margin: 10rpx 0;
box-shadow: 0rpx 2rpx 10rpx 0rpx rgba(204, 204, 204, 0.4); box-shadow: 0rpx 2rpx 10rpx 0rpx rgba(204, 204, 204, 0.4);
border-radius: 10rpx; border-radius: 10rpx;
.linebox { .linebox {
padding: 20rpx; padding: 20rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
border-bottom: 1rpx solid rgba(0, 0, 0, 0.1); border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
font-size: 26rpx; font-size: 26rpx;
.line_title { .line_title {
min-width: 150rpx; min-width: 150rpx;
color: #666666; color: #666666;
} }
.line_content { .line_content {
font-weight: bold; font-weight: bold;
color: #333333; color: #333333;
} }
.thesuccess { .thesuccess {
color: #005BAC; color: #005bac;
} }
} }
} }
}
</style>
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB