You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
shengxian/pages/user/wallet/withdraw.vue

564 lines
15 KiB

2 years ago
<!-- 提现 -->
<template>
<view class="draw-money-wrap">
<view class="head-box">
<shopro-navbar :background="{ background: 'none' }" :backTextStyle="{ color: '#fff' }" backText="提现" backIconColor="#fff"></shopro-navbar>
<!-- 可提现 -->
<view class="wallet-num-box u-flex u-col-center u-row-between">
<view class="">
<view class="num-title">可提现金额</view>
<view class="wallet-num">{{ userInfo.money || '0.00' }}</view>
</view>
<button class="u-reset-button log-btn" @tap="$Router.push({ path: '/pages/user/wallet/withdraw-log' })">提现记录</button>
</view>
</view>
<!-- 提现输入卡片-->
<view class="draw-card">
<view class="card-title">提现金额</view>
<view class="input-box u-flex u-col-center">
<view calss="unit"></view>
<input class="u-flex-1 u-p-l-10" type="number" @input="onWithdrawInput" v-model="money" :placeholder-style="placeholderStyle" placeholder="请输入提现金额" />
</view>
<view class="bank-box u-flex u-col-center u-row-between u-m-b-30">
<view class="name">提现至</view>
<view class="bank-list u-flex" @tap="showWithdrawList = true">
<view class="empty-text" v-if="!withdrawType">请选择提现方式</view>
<view class="sel-box u-flex u-col-center" v-else>
<image class="item-img" :src="withdrawList[withdrawType].icon" mode=""></image>
<view class="item-title u-m-l-20">{{ withdrawList[withdrawType].title }}</view>
</view>
<text class="u-iconfont uicon-arrow-right" style="#C4C4C4;"></text>
</view>
</view>
<!-- 提现信息 -->
<view class="bank-info u-m-b-80">
<view class="u-flex u-row-between u-col-center" v-if="withdrawType">
<block v-if="withdrawType === 'wechat'">
<view class="bank-info-title">
{{ !withdrawInfo ? '暂无微信授权信息' : `${withdrawInfo.bank_name || ''} [${withdrawInfo.card_no || ''}] ${withdrawInfo.real_name || ''}` }}
</view>
<button v-if="!withdrawInfo" class="u-reset-button bind-btn u-m-l-20" @tap="bindThirdOauth()">绑定</button>
</block>
<block v-else>
<view class="bank-info-title">
{{
!withdrawInfo
? `暂无${withdrawList[withdrawType].title}信息`
: `${withdrawInfo.bank_name || ''} [${withdrawInfo.card_no || ''}] ${withdrawInfo.real_name || ''}`
}}
</view>
<button class="u-reset-button bind-btn u-m-l-20" @tap="toBind">{{ withdrawInfo ? '修改' : '添加' }}</button>
</block>
</view>
</view>
<button class="u-reset-button save-btn" @tap="withdraw">确认提现</button>
</view>
<!-- 提现说明 -->
<view class="draw-notice">
<view class="title">提现说明</view>
<view class="draw-list">1.单次最低提现 {{ ruleInfo.min }} 最高提现 {{ ruleInfo.max }} </view>
<view class="draw-list">
2.每日最多可提现次数: {{ ruleInfo.perday_num ? ruleInfo.perday_num : '不限' }}每日最多提现金额():
{{ ruleInfo.perday_amount ? ruleInfo.perday_amount : '不限' }}
</view>
<view class="draw-list">3.每笔收取提现手续费 {{ ruleInfo.service_fee }}%</view>
<view class="draw-list">4.提现结果请查收对应渠道服务通知</view>
<view class="draw-list">5.如有疑问请及时联系客服</view>
</view>
<!-- 提现方式 -->
<u-popup v-if="ruleInfo && ruleInfo.methods.length" v-model="showWithdrawList" mode="bottom" safe-area-inset-bottom :closeable="false" border-radius="30">
<view class="page_box withdraw-modal">
<view class="modal-head u-flex u-row-center u-col-center">选择提现方式</view>
<view class="content_box modal-content">
<u-radio-group v-model="selectedWithdrawType" activeColor="#A36FFF" wrap>
<view class="type-item u-p-x-24 u-p-y-30" v-if="ruleInfo.methods.includes(item.value)" v-for="(item, index) in withdrawList" :key="index">
<u-radio shape="circle" iconSize="30" :name="item.value" labelWidth="100%">
<view class="item-left u-flex u-col-center u-m-l-30">
<image class="item-img" :src="item.icon" mode=""></image>
<view class="item-title u-m-l-20">{{ item.title }}</view>
</view>
</u-radio>
</view>
</u-radio-group>
</view>
<view class="modal-bottom"><button class="u-reset-button modal-save-btn" @tap="onSaveWithdrawType">确定</button></view>
</view>
</u-popup>
<!-- 绑定修改银行信息 -->
<u-popup v-model="showBindForm" mode="bottom" safe-area-inset-bottom @close="initForm" :closeable="false" border-radius="30">
<!-- 标题 -->
<view class="form-box u-p-20">
<view class="head-title u-flex u-col-center u-row-center">{{ formTitle }}</view>
<!-- 绑定银行卡 -->
<u-form v-if="withdrawType === 'bank'" :model="form.data" :rules="form.bankRules" ref="bank" :errorType="errorType">
<u-form-item :labelStyle="labelStyle" label-width="150" label-position="left" label="持卡人:" prop="real_name">
<u-input placeholder="请输入持卡人" :placeholderStyle="placeholderStyle" v-model="form.data.real_name" type="text"></u-input>
</u-form-item>
<u-form-item :labelStyle="labelStyle" label-width="150" label-position="left" label="开户行:" prop="bank_name">
<u-input placeholder="请输入开户行" :placeholderStyle="placeholderStyle" v-model="form.data.bank_name" type="text"></u-input>
</u-form-item>
<u-form-item :labelStyle="labelStyle" label-position="left" label="银行卡号:" prop="card_no" label-width="150">
<u-input placeholder="请输入银行卡号" :placeholderStyle="placeholderStyle" v-model="form.data.card_no" type="number"></u-input>
</u-form-item>
</u-form>
<!-- 绑定支付宝 -->
<u-form v-if="withdrawType === 'alipay'" :model="form.data" :rules="form.aliPayRules" ref="alipay" :errorType="errorType">
<u-form-item :labelStyle="labelStyle" label-width="150" label-position="left" label="真实姓名:" prop="real_name">
<u-input placeholder="请输入真实姓名" :placeholderStyle="placeholderStyle" v-model="form.data.real_name" type="text"></u-input>
</u-form-item>
<u-form-item :labelStyle="labelStyle" label-position="left" label="支付宝账号:" prop="card_no" label-width="170">
<u-input placeholder="请输入支付宝账号" :placeholderStyle="placeholderStyle" v-model="form.data.card_no" type="text"></u-input>
</u-form-item>
</u-form>
<view class="u-flex u-col-center u-row-between">
<button class="u-reset-button form-cancel-btn u-m-y-40" @tap="showBindForm = false">取消</button>
<button class="u-reset-button form-save-btn u-m-y-40" @tap="saveForm">确定</button>
</view>
</view>
</u-popup>
<!-- modal -->
<u-modal
ref="uModal"
v-model="showModal"
:show-cancel-button="true"
confirm-color="#7063D2"
cancel-color="#666666"
@confirm="$Router.push('/pages/user/wallet/withdraw-log')"
confirm-text="查看记录"
cancel-text="继续提现"
content="您的申请提现已提交"
title="申请成功"
></u-modal>
</view>
</template>
<script>
import { mapState, mapActions, mapGetters } from 'vuex';
import FormValidate from '@/shopro/validate/form';
import wechat from '@/shopro/wechat/wechat';
export default {
components: {},
data() {
return {
showModal: false,
money: '', //提现金额
ruleInfo: '', //提现规则
formTitle: '',
withdrawType: '',
showBindForm: false,
selectedWithdrawType: '',
withdrawInfo: {}, //提现信息
showWithdrawList: false,
withdrawList: {
bank: {
icon: this.$IMG_URL + '/imgs/wallet/bank_type.png',
title: '银行卡转账',
value: 'bank'
},
wechat: {
icon: this.$IMG_URL + '/imgs/wallet/wx_type.png',
title: '微信零钱',
value: 'wechat'
},
alipay: {
icon: this.$IMG_URL + '/imgs/wallet/ali_type.png',
title: '支付宝账户',
value: 'alipay'
}
},
// 表单样式
errorType: ['message'],
labelStyle: {
'font-size': '30rpx',
'font-weight': '500',
color: '#333'
},
placeholderStyle: 'font-size: 30rpx; font-weight: 500;color:#C2C7CF;',
form: {
data: {
real_name: '',
bank_name: '',
card_no: ''
},
bankRules: {
real_name: FormValidate.realName,
bank_name: FormValidate.bankName,
card_no: FormValidate.bankCode
},
alipayRules: {
real_name: FormValidate.realName,
card_no: FormValidate.alipayAccount
}
}
};
},
computed: {
...mapGetters(['userInfo','initRecharge'])
},
async onLoad() {
this.getWithdrawRules();
},
methods: {
// 确认提现方式
onSaveWithdrawType() {
this.withdrawType = this.selectedWithdrawType;
this.showWithdrawList = false;
this.getWithdrawInfo();
},
async bindThirdOauth() {
let that = this;
wechat.bind();
that.getWithdrawInfo();
},
// 提现检验
onWithdrawInput(e) {
let sVal = String(e.detail.value);
sVal = sVal.replace(/\b(0+)/gi, '');
sVal = sVal.replace(/[^\d]/g, '');
this.money = sVal;
},
// 提现
withdraw() {
const that = this;
if (!this.withdrawType) {
this.$u.toast('请选择提现方式');
return;
}
if (this.money <= 0) {
this.$u.toast('请输入提现金额');
return;
}
that.$http(
'money.walletApply',
{
type: that.withdrawType,
money: that.money
},
'申请中...',
false
).then(res => {
if (res.code === 1) {
that.money = '';
that.showModal = true;
// #ifdef MP-WEIXIN
this.$store.commit('subscribeMessage', 'wallet');
// #endif
that.$store.dispatch('getUserInfo');
} else {
2 years ago
// that.$u.toast(res.msg);
setTimeout(() => {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
2 years ago
}
});
},
initForm() {
this.form.data = {
real_name: '',
bank_name: '',
card_no: ''
};
},
// 绑定,修改
toBind() {
this.showBindForm = true;
this.form.data = {
...this.form.data,
...this.withdrawInfo
};
switch (this.withdrawType) {
case 'bank':
this.formTitle = this.withdrawInfo ? '修改银行卡' : '添加银行卡';
this.$nextTick(() => {
this.$refs.bank.setRules(this.form.bankRules);
});
break;
case 'alipay':
this.formTitle = this.withdrawInfo ? '修改支付宝' : '添加支付宝';
this.$nextTick(() => {
this.$refs.alipay.setRules(this.form.alipayRules);
});
break;
default:
break;
}
},
// 确认提交表单
saveForm() {
let that = this;
this.$refs[this.withdrawType].validate().then(res => {
if (res) {
that.$http(
'money.bankEdit',
{
type: that.withdrawType,
...that.form.data
},
'提交中...'
).then(res => {
if (res.code === 1) {
that.showBindForm = false;
2 years ago
// that.$u.toast(res.msg);
setTimeout(() => {
uni.showToast({
title: res.msg,
icon: "none",
duration: 2000,
success: (res) => {
setTimeout(() => {
uni.hideToast();
}, 2000)
}
});
}, 200);
2 years ago
that.initForm();
that.getWithdrawInfo();
}
});
}
});
},
// 提现规则
getWithdrawRules() {
let that = this;
that.$http('money.walletRule').then(res => {
if (res.code === 1) {
that.ruleInfo = res.data;
that.selectedWithdrawType = that.ruleInfo.methods[0];
}
});
},
// 获取提现信息
getWithdrawInfo() {
let that = this;
that.$http(
'money.bankInfo',
{
type: that.withdrawType
},
'',
false
).then(res => {
that.withdrawInfo = res.code === 1 ? res.data : null;
});
}
}
};
</script>
<style lang="scss">
.head-box {
background: url($IMG_URL+'/imgs/user/draw_money_head_bg.png') no-repeat;
background-size: 100% auto;
min-height: 400rpx;
padding-bottom: var(--status-bar-height);
// 可提现
.wallet-num-box {
padding: 20rpx 40rpx 0;
.num-title {
font-size: 26rpx;
font-weight: 500;
color: #ffffff;
margin-bottom: 20rpx;
}
.wallet-num {
font-size: 60rpx;
font-weight: 500;
color: #ffffff;
}
.log-btn {
width: 170rpx;
height: 60rpx;
line-height: 60rpx;
background: rgba(255, 255, 255, 0.1);
border: 1rpx solid #eeeeee;
border-radius: 30rpx;
padding: 0;
font-size: 26rpx;
font-weight: 500;
color: #ffffff;
}
}
}
// 提现输入卡片
.draw-card {
background-color: #fff;
border-radius: 20rpx;
width: 690rpx;
min-height: 530rpx;
margin: -70rpx auto 0;
padding: 30rpx;
.card-title {
font-size: 30rpx;
font-weight: 500;
color: #333333;
margin-bottom: 30rpx;
}
.input-box {
width: 624rpx;
border-bottom: 1rpx solid #eee;
height: 100rpx;
margin-bottom: 40rpx;
.unit {
font-size: 48rpx;
color: #333;
}
}
.bank-box {
.name {
font-size: 28rpx;
font-weight: 500;
color: #333333;
}
.bank-list {
.empty-text {
font-size: 28rpx;
font-weight: 400;
color: #999999;
}
.sel-box {
.item-img {
width: 36rpx;
height: 36rpx;
}
.item-title {
font-size: 28rpx;
color: #333333;
}
}
}
}
.bank-info {
height: 50rpx;
font-size: 28rpx;
font-weight: 400;
color: #999999;
.bank-info-title {
width: 500rpx;
}
.bind-btn {
padding: 0 20rpx;
line-height: 50rpx;
background: #f5f6f8;
border-radius: 20rpx;
color: #999;
}
}
.save-btn {
width: 616rpx;
height: 86rpx;
line-height: 86rpx;
background: linear-gradient(-90deg, #a36fff, #5336ff);
box-shadow: 0px 7rpx 11rpx 2rpx rgba(124, 103, 214, 0.34);
border-radius: 43rpx;
font-size: 30rpx;
font-weight: 500;
color: #ffffff;
}
}
// 提现说明
.draw-notice {
width: 684rpx;
min-height: 327rpx;
background: #ffffff;
border-radius: 20rpx;
padding: 30rpx 35rpx;
margin: 20rpx auto;
.title {
font-size: 30rpx;
font-weight: 500;
color: #333333;
margin-bottom: 30rpx;
}
.draw-list {
font-size: 24rpx;
font-weight: 400;
color: #999999;
margin-bottom: 10rpx;
}
}
// 提现费方式
.withdraw-modal {
min-height: 600rpx;
background-color: #fff;
.modal-head {
height: 80rpx;
font-size: 30rpx;
font-weight: 600;
color: #333333;
border-bottom: 1rpx solid rgba(#dfdfdf, 0.5);
}
.modal-content {
.type-item {
height: 100rpx;
border-bottom: 1rpx solid rgba(#dfdfdf, 0.5);
width: 750rpx;
.item-img {
width: 36rpx;
height: 36rpx;
}
.item-title {
font-size: 28rpx;
color: #333333;
}
}
}
.modal-bottom {
padding: 30rpx;
.modal-save-btn {
width: 690rpx;
height: 80rpx;
line-height: 80rpx;
background: linear-gradient(90deg, #a36fff, #5336ff);
box-shadow: 0 7rpx 11rpx 2rpx rgba(124, 103, 214, 0.34);
border-radius: 40rpx;
font-weight: 500;
color: #ffffff;
}
}
}
// 绑定
.form-box {
.head-title {
height: 100rpx;
font-size: 34rpx;
font-weight: 600;
}
.form-save-btn {
width: 340rpx;
height: 80rpx;
line-height: 80rpx;
background: linear-gradient(90deg, #a36fff, #5336ff);
box-shadow: 0 7rpx 11rpx 2rpx rgba(124, 103, 214, 0.34);
border-radius: 40rpx;
font-weight: 500;
color: #ffffff;
}
.form-cancel-btn {
width: 340rpx;
height: 80rpx;
line-height: 80rpx;
border: 1rpx solid #999;
border-radius: 40rpx;
font-weight: 500;
color: #999;
}
}
</style>