shop-applet/pages/withdrawal/add.vue

734 lines
19 KiB
Vue
Raw Permalink 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="shop_type">
<view class="shop_type-head">
<view style="height: var(--status-bar-height);"></view>
<view class="shop-type-navbar">
<u-icon name="arrow-left" size="18" color="#fff" @click="handleBack" />
<text class="shop-type-navbar-title">{{bindForm.id?'修改账户':'添加账户'}}</text>
<text></text>
</view>
</view>
<!-- 表单部分 -->
<view class="withdrawal-con">
<view class="withdrawal">
<view class="withdrawal-left">
<text class="withdrawal-left-to">提现至</text>
<text
class="withdrawal-left-empty">{{bindForm.is_own === 0 ? '法人账户' : bindForm.is_own === 1 ? '对公账户':'请选择账户类型'}}</text>
</view>
<view class="withdrawal-right" @click="handleShow">
<text class="withdrawal-right-add">{{bindForm.is_own === ''?'选择':'更换'}}账户</text>
<u-icon name="arrow-right" size="14" color="#40AE36"></u-icon>
</view>
</view>
<!-- 提现信息 法人账户-->
<view class="withdrawal-info" v-if="bindForm.is_own === 0">
<view class="withdrawal-form">
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">开户银行</view>
<view class="withdrawal-form-item-val" @click="changeBank">
<image :src="bindForm.icon" v-if="bindForm.icon"></image>
<text> {{bindForm.bank?bindForm.bank:'点击选择开户银行'}}</text>
</view>
<!-- <view class="withdrawal-change" v-if="!bindForm.bank" >
<text class="withdrawal-right-add">{{bindForm.bank?'更换':'选择'}}银行</text>
<u-icon name="arrow-right" size="14" color="#40AE36"></u-icon>
</view> -->
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">持卡人</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.name" type="text" placeholder="请输入持卡人姓名" :disabled="true"
placeholder-class="placeholderClass">
</view>
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">身份证</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.id_card" type="text" placeholder="请输入持卡人身份证号"
placeholder-class="placeholderClass">
</view>
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">银行帐号</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.bank_code" type="number" placeholder="请输入银行账号"
placeholder-class="placeholderClass">
</view>
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">开户网点</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.bank_branch" type="text" placeholder="请输入开户网点"
placeholder-class="placeholderClass">
</view>
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">手机号码</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.phone" type="number" placeholder="请输入手机号码"
placeholder-class="placeholderClass">
</view>
</view>
</view>
<!-- 相关凭证 -->
<view class="withdrawal-envidence" v-if="isCompany == 1">
<view class="withdrawal-envidence">
<text class="withdrawal-envidence-main">请上传相关凭证</text>
<text class="withdrawal-envidence-sub">(图片格式支持JPG、PNG、JPEG)</text>
</view>
<view class="withdrawal-envience-img">
<view class="image-wrap" v-for="(item,indx) in bindForm.temp" :key="indx">
<view class="icon" @click="delImg(indx)">
<u-icon name="close-circle-fill" size="24" color="#909399" />
</view>
<image :src="item"></image>
</view>
<view class="image-wrap placeholder-img" @click="handleUpload">
<u-icon name="camera" size="40"></u-icon>
<text>上传凭证</text>
</view>
</view>
</view>
<view style="color: #FE2121;font-size:24rpx;margin-top: 20rpx;line-height: 30rpx;">
锁定规则:错误输入超 3 次后锁定。<br>
恢复规则12 时后或次日 0 时恢复。<br>
温馨提示:锁定期间勿重复提交绑定,否则锁定时间延长。
</view>
</view>
<!-- 提现信息 对公账户-->
<view class="withdrawal-info" v-if="bindForm.is_own === 1">
<view class="withdrawal-form">
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">开户银行</view>
<view class="withdrawal-form-item-val" @click="changeBank">
<image :src="bindForm.icon" v-if="bindForm.icon"></image>
<text> {{bindForm.bank?bindForm.bank:'点击选择开户银行'}}</text>
</view>
<!-- <view class="withdrawal-change" v-if="!bindForm.bank" >
<text class="withdrawal-right-add">{{bindForm.bank?'更换':'选择'}}银行</text>
<u-icon name="arrow-right" size="14" color="#40AE36"></u-icon>
</view> -->
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">账户名称</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.name" type="text" placeholder="请输入账户名称" :disabled="true"
placeholder-class="placeholderClass">
</view>
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">银行账号</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.bank_code" type="number" placeholder="请输入银行账号"
placeholder-class="placeholderClass">
</view>
</view>
<view class="withdrawal-form-item">
<view class="withdrawal-form-item-label">开户网点</view>
<view class="withdrawal-form-item-val">
<input v-model="bindForm.bank_branch" type="text" placeholder="请输入开户网点"
placeholder-class="placeholderClass">
</view>
</view>
</view>
<view style="color: #FE2121;font-size:24rpx;margin-top: 20rpx;line-height: 30rpx;">
锁定规则:错误输入超 3 次后锁定。<br>
恢复规则12 时后或次日 0 时恢复。<br>
温馨提示:锁定期间勿重复提交绑定,否则锁定时间延长。
</view>
</view>
</view>
<!-- 提现btn -->
<view class="withdrawal-btn tapActive" v-if="bindForm.is_own !== ''" @click="handleBind">
<view class="withdrawal-btn-wrap">
<text>{{bindForm.id?'重新':''}}提交绑定</text>
</view>
</view>
<!-- 提现账户 -->
<u-action-sheet title="请选择提现账户" :show="show" round="15" @close="show = false">
<view class="actions" style="padding-bottom: 0;">
<view class="actions-wrap">
<block v-for="(item ,indx) in list" :key="indx">
<view class="actions-item" @click="handleSelected(item)">
<text :class="{'textactive':bindForm.bank == item.name}">{{item.name}}</text>
</view>
</block>
</view>
</view>
<!-- 底部安全范围 -->
<u-safe-bottom></u-safe-bottom>
</u-action-sheet>
<!-- 银行 -->
<u-action-sheet title="请选择银行" :show="bankShow" round="15" @close="bankShow = false">
<view class="actions">
<view class="actions-wrap">
<block v-for="(item ,indx) in bankList" :key="indx">
<view class="actions-item" @click="handleSelectedBank(item)">
<image :src="item.img"></image>
<text :class="{'textactive':bindForm.bank == item.name}">{{item.name}}</text>
</view>
</block>
</view>
<view class="actions-btn" @click="bankShow = false">
<text>确认</text>
</view>
</view>
</u-action-sheet>
<!-- 自定义弹框显示 -->
<u-transition :show="modalShow">
<view class="modal-wrap">
<view class="modal">
<view>认证失败</view>
<view>请检查姓名身份证银行卡手机号码是否正确</view>
<view>当日剩余认证次数({{errorCount}})</view>
</view>
</view>
</u-transition>
</view>
</template>
<script>
import {
extractBank,
addBank,
searchBank,
getById,
getUserInfo,
} from "@/api/user.js";
export default {
data() {
return {
modalShow: false,
list: [],
show: false,
bankList: [], //银行列表
bankShow: false,
bindForm: {
name: '', //姓名
bank: '', //银行
bank_code: '', //银行卡号
bank_branch: '', //开户行信息
financial_img: '', //凭证
id_card: '', //身份证号码
phone: '', //手机号
is_own: '', //转账类型(0个人1对公)
temp: [],
id: 0,
icon: ''
},
mer_id: '',
isCompany: '',
errorCount: 0
}
},
onLoad(opt) {
if (opt.id) {
this.bindForm.id = opt.id;
this.getBankById();
}
if (opt.mer_id) {
this.mer_id = opt.mer_id;
if (opt.hasOwnProperty('isOwn') && (opt.isOwn === 0 || opt.isOwn == '0')) {
this.list = [{
name: '对公账户'
}];
this.bindForm.is_own = 1;
//获取公司名称
this.bindForm.name = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.company_name;
} else if (opt.hasOwnProperty('isOwn') && opt.isOwn == 1) {
this.list = [{
name: '法人账户'
}];
this.bindForm.is_own = 0;
//获取法人真实姓名
this.bindForm.name = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.real_name;
} else {
this.bindForm.is_own = 1;
//获取公司名称
this.bindForm.name = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.company_name;
this.list = [{
name: '对公账户'
}, {
name: '法人账户'
}]
}
//如果绑定银行卡用户为个体户 则不能添加对公账户,只能添加法人账户 is_company = 0 个体户
const isCompany = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.is_company;
this.isCompany = isCompany;
if (isCompany != 1) {
this.bindForm.is_own = 0;
this.bindForm.name = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.real_name;
this.list = [{
name: '法人账户'
}];
}
}
},
methods: {
// 获取单条信息
getBankById() {
getById(this.bindForm.id).then(res => {
if (res.data && res.data.financial_account) {
Object.assign(this.bindForm, res.data.financial_account);
this.bindForm.id = res.data.id;
this.mer_id = this.bindForm.mer_id;
if (this.bindForm.is_own === 0 && this.bindForm.financial_img) {
this.$set(this.bindForm, 'temp', this.bindForm.financial_img.split(","));
}
}
})
},
// 账户类型
handleSelected(e) {
this.show = false;
this.bindForm.bank = '';
this.bindForm.icon = '';
if (e.name == '法人账户') {
this.bindForm.is_own = 0;
this.bindForm.name = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.real_name;
}
if (e.name == '对公账户') {
//获取法人真实姓名
this.bindForm.is_own = 1;
this.bindForm.name = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.company_name;
}
},
// 上传图片
handleUpload() {
this.$util.uploadImageOne('upload/image', res => {
this.bindForm.temp.push(res.data.path);
});
},
// 删除图片
delImg(index) {
this.bindForm.temp.splice(index, 1);
},
handleShow() {
this.show = true;
},
// 选择银行卡
handleSelectedBank(e) {
this.bindForm.bank = e.name;
this.bindForm.icon = e.img;
},
// 获取银行卡
changeBank() {
if (this.bankList.length > 0) {
this.bankShow = true;
} else {
extractBank().then(res => {
this.bankList = res.data;
this.bankShow = true;
})
}
},
// 绑定账号
handleBind() {
if (!this.bindForm.name) return this.$util.Tips({
title: this.bindForm.is_own === 0 ? '请输入法人姓名!' : '请输入账户名称!'
});
if (!this.bindForm.bank) return this.$util.Tips({
title: '请选择开户银行!'
});
if (!this.bindForm.bank_code) return this.$util.Tips({
title: this.bindForm.is_own === 0 ? '请输入银行帐号!' : '请输入银行账号!'
});
if (!this.bindForm.bank_branch) return this.$util.Tips({
title: '请输入开户网点!'
});
// 法人账号验证
if (this.bindForm.is_own === 0) {
const isCompany = JSON.parse(this.$Cache.get("USER_INFO")).mer_info.is_company;
if (!this.bindForm.temp.length > 0 && isCompany == 1) return this.$util.Tips({
title: '请上传凭证!'
});
this.bindForm.financial_img = this.bindForm.temp.join(",");
if (!uni.$u.test.idCard(this.bindForm.id_card)) return this.$util.Tips({
title: '请输入正确的身份证号!'
});
if (!uni.$u.test.mobile(this.bindForm.phone)) return this.$util.Tips({
title: '请输入正确的手机号!'
});
}
let that = this;
uni.showLoading({
title: "绑定中..."
})
addBank(this.mer_id, this.bindForm).then(res => {
uni.hideLoading()
this.$util.Tips({
title: '提交成功,请等待后台审核!'
}, () => {
uni.redirectTo({
url: "/pages/withdrawal/progress?mer_id=" + this.mer_id
})
});
}).catch(err => {
uni.hideLoading()
if (isNaN(err)) {
uni.showToast({
title: err,
icon: "none",
duration: 3000
})
} else {
this.errorCount = err;
that.modalShow = true;
setTimeout(() => {
that.modalShow = false;
}, 3000)
}
})
},
// 返回上一级
handleBack() {
uni.navigateBack()
}
}
}
</script>
<style lang="scss">
page {
background-color: #F8F9FA;
}
.shop_type {
padding-bottom: 184rpx;
.shop_type-head {
background-color: #40AE36;
margin-bottom: 30rpx;
.shop-type-navbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx;
height: 88rpx;
.shop-type-navbar-title {
font-size: 32rpx;
color: #FFFFFF;
}
}
}
}
.withdrawal-con {
height: calc(100vh - 88rpx - 184rpx - var(--status-bar-height) - 30rpx);
overflow: auto;
padding-bottom: 30rpx;
.withdrawal {
display: flex;
align-items: center;
justify-content: space-between;
background-color: #fff;
height: 102rpx;
border-radius: 20rpx;
margin: 0 30rpx 26rpx;
padding: 0 26rpx 0 30rpx;
.withdrawal-left {
display: flex;
.withdrawal-left-to {
margin-right: 42rpx;
font-size: 30rpx;
color: #333333;
}
.withdrawal-left-empty {
font-weight: bold;
font-size: 28rpx;
color: #333333;
}
}
.withdrawal-right {
display: flex;
align-items: center;
.withdrawal-right-add {
font-size: 28rpx;
color: #40AE36;
}
}
}
.withdrawal-info {
margin: 0 30rpx;
.withdrawal-form {
padding: 0 30rpx;
margin-bottom: 30rpx;
background-color: #fff;
border-radius: 20rpx;
.withdrawal-form-item {
position: relative;
display: flex;
align-items: center;
height: 102rpx;
border-bottom: 2rpx solid #FBFCFC;
.withdrawal-form-item-label {
width: 120rpx;
margin-right: 42rpx;
font-size: 30rpx;
color: #333333;
text-align: left;
}
.withdrawal-form-item-val {
display: flex;
align-items: center;
color: #333;
font-size: 30rpx;
image {
width: 40rpx;
height: 40rpx;
margin-right: 10rpx;
}
/deep/.uni-input-placeholder,
.placeholderClass {
font-size: 30rpx;
color: #999;
}
input {
font-size: 30rpx;
width: 460rpx;
}
text {
color: #40AE36;
}
}
.withdrawal-change {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
display: flex;
color: #40AE36;
align-items: center;
}
}
}
.withdrawal-envidence {
border-radius: 20rpx;
.withdrawal-envidence {
margin-bottom: 30rpx;
.withdrawal-envidence-main {
font-size: 30rpx;
color: #333333;
}
.withdrawal-envidence-sub {
font-size: 22rpx;
color: #666666;
}
}
.withdrawal-envience-img {
display: flex;
flex-wrap: wrap;
background-color: #fff;
padding: 24rpx 20rpx 16rpx;
border-radius: 20rpx;
.image-wrap {
position: relative;
width: 152rpx;
height: 152rpx;
background: #ccc;
margin: 0 12rpx 8rpx 0;
border-radius: 8rpx;
&:nth-child(4n) {
margin-right: 0;
}
.icon {
position: absolute;
right: -24rpx;
top: -24rpx;
z-index: 10;
}
image {
width: 152rpx;
height: 152rpx;
}
}
.placeholder-img {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
border: 2rpx dashed #9E9E9E;
border-radius: 8rpx;
background-color: #F5F5F5;
text {
font-size: 22rpx;
color: #666666;
}
}
}
}
}
}
.withdrawal-btn {
position: fixed;
bottom: 0;
left: 0;
height: 184rpx;
width: 100%;
padding-top: 32rpx;
box-sizing: border-box;
background-color: #f7f8f9;
z-index: 10;
.withdrawal-btn-wrap {
height: 88rpx;
background: linear-gradient(359deg, #72BE53 0%, #46B03A 100%);
border-radius: 88rpx;
margin: 0 30rpx;
line-height: 88rpx;
text-align: center;
text {
font-weight: bold;
font-size: 30rpx;
color: #F5F5F5;
}
}
}
.actions {
padding-bottom: 30rpx;
.actions-btn {
width: 650rpx;
height: 88rpx;
line-height: 88rpx;
background: linear-gradient(359deg, #72BE53 0%, #46B03A 100%);
border-radius: 88rpx;
margin: 0 auto;
text-align: center;
text {
font-weight: 600;
font-size: 30rpx;
color: #FFFFFF;
}
}
.actions-wrap {
max-height: 50vh;
overflow: auto;
margin-bottom: 30rpx;
.actions-item {
display: flex;
align-items: center;
justify-content: center;
height: 104rpx;
border-bottom: 2rpx solid #eeefef;
image {
width: 40rpx;
height: 40rpx;
margin-right: 12rpx;
}
text {
font-size: 32rpx;
color: #333;
}
}
.textactive {
font-weight: 600;
color: #40AE36 !important;
}
}
}
.modal-wrap {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
pointer-events: none;
.modal {
font-size: 28rpx;
color: #fff;
padding: 20rpx 30rpx;
background: rgba(0, 0, 0, .7);
max-width: 60%;
border-radius: 10rpx;
view {
line-height: 32rpx;
margin-bottom: 10rpx;
}
}
}
</style>