new-mshop-view/pages/users/user_cash/index.vue

544 lines
16 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 :style="viewColor">
<view class='cash-withdrawal'>
<!--顶部账号选择-->
<view class='nav acea-row row-between-wrapper'>
<view class='name'>提现至</view>
<view class='input'>
<view class="more-content" @click="selectAccount()">
<view class="more-content-left">
<template v-if="use_account.extract_type == 0">
<view class="type-icon" :style="[{backgroundColor: '#FE960F'}]">
<view class="iconfont bankicon icon-yinhangqia"></view>
</view>
<text>银行卡</text>
</template>
<template v-else-if="use_account.extract_type == 1">
<view class="type-icon" :style="[{backgroundColor: '#41B035'}]">
<view class="iconfont bankicon icon-weixin2"></view>
</view>
<text>微信</text>
</template>
<template v-else-if="use_account.extract_type == 2">
<view class="type-icon" :style="[{backgroundColor: '#00A9F2'}]">
<view class="iconfont bankicon icon-icon34"></view>
</view>
<text>支付宝</text>
</template>
<template v-else-if="use_account.extract_type == 3">
<view class="type-icon" :style="[{backgroundColor: '#41B035'}]">
<view class="iconfont bankicon icon-weixin2"></view>
</view>
<text>微信零钱</text>
</template>
<template v-else="use_account.extract_type == 3">
<text>请选择提现账号</text>
</template>
</view>
<view class="moreicon">
<view class='iconfont icon-jiantou'></view>
</view>
</view>
</view>
</view>
<!--账号信息 提现金额-->
<view class='wrapper' v-if="use_account">
<view class='list bank-list'>
<form @submit="subCash" report-submit='true'>
<!-- 提现账号信息 -->
<template v-if="use_account.extract_type == 0">
<view class='item acea-row row-between-wrapper'>
<view class='name'>账户类型</view>
<view class='input'>{{ use_account.bank_type == 1 ? '企业账户' : '个人账户'}}</view>
</view>
<template v-if="use_account.bank_type == 0">
<view class='item acea-row row-between-wrapper'>
<view class='name'>持卡人</view>
<view class='input'>{{ use_account.real_name }}</view>
</view>
<view class='item acea-row row-between-wrapper'>
<view class='name'>卡号</view>
<view class='input'>{{ use_account.bank_code }}</view>
</view>
<view class='item acea-row row-between-wrapper' v-if="use_account.bank_name">
<view class='name'>银行</view>
<view class='input'>{{ use_account.bank_name }}</view>
</view>
<view class='item acea-row row-between-wrapper'>
<view class='name'>支行信息</view>
<view class='input'>{{ use_account.bank_address }}</view>
</view>
</template>
<template v-if="use_account.bank_type == 1">
<view class='item acea-row row-between-wrapper'>
<view class='name'>开户名称</view>
<view class='input'>{{ use_account.real_name }}</view>
</view>
<view class='item acea-row row-between-wrapper'>
<view class='name'>开户行</view>
<view class='input'>{{ use_account.bank_address }}</view>
</view>
<view class='item acea-row row-between-wrapper'>
<view class='name'>账号</view>
<view class='input'>{{ use_account.bank_code }}</view>
</view>
</template>
</template>
<template v-if="use_account.extract_type == 1">
<view v-if="!sys_extension_type" class="">
<view class='item acea-row row-between-wrapper'>
<view class='name'>账号</view>
<view class='input'>{{ use_account.wechat }}</view>
</view>
<view class='item acea-row row-between-wrapper uploadItem'>
<view class='name'>收款码</view>
<view class='input upload acea-row row-middle'>
<view class='picture' v-if="use_account.extract_pic">
<image :src='use_account.extract_pic'></image>
</view>
</view>
</view>
</view>
<view v-else class="auto_arrival">
<!--微信零钱-->
</view>
</template>
<template v-if="use_account.extract_type == 2">
<view class='item acea-row row-between-wrapper'>
<view class='name'>账号</view>
<view class='input'>{{ use_account.alipay_code }}</view>
</view>
<view class='item acea-row row-between-wrapper uploadItem'>
<view class='name'>收款码</view>
<view class='input upload acea-row row-middle'>
<view class='picture' v-if="use_account.extract_pic">
<image :src='use_account.extract_pic'></image>
</view>
</view>
</view>
</template>
<!--公共内容-->
<view class='item acea-row row-between-wrapper'>
<view class='name'>提现</view>
<view class='input'>
<input :placeholder='"最低提现金额"+minPrice' name="extract_price" type='digit' v-model="extract_price" :max="userInfo.brokerage_price" />
</view>
</view>
<view class='tip mt25'>
当前可提现金额:<text class="price">¥{{userInfo.brokerage_price}},</text>
<text v-if="Number(userInfo.lock_brokerage)">冻结佣金:¥{{userInfo.lock_brokerage}}</text>
</view>
<view class='tip' v-if="Number(userInfo.broken_day) > 0">
说明: 每笔佣金的冻结期为{{userInfo.broken_day}}天,到期后可提现
</view>
<view class='tip mt25' v-if="Number(withdraw_commission) > 0">
提现手续费为: <text class="price">{{ withdraw_commission.toFixed(2) }}%</text>
</view>
<view class='tip mt25' v-if="Number(extract_price) > 0">
实际到账:<text class="price">{{ (extract_price - (extract_price * withdraw_commission / 100)).toFixed(2) }}</text>
手续费: <text class="price">{{ (extract_price * withdraw_commission / 100).toFixed(2) }}</text>
</view>
<!-- 提现提交按钮 -->
<view class="btn-submit">
<button formType="submit" :disabled="load" class='bnt b-color' :class="load ? 'disabled' : ''" >提现</button>
</view>
</form>
</view>
</view>
</view>
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authClose"></authorize>
<!--提现账号列表-->
<account-list ref="accountList" @use="useAccount"></account-list>
</view>
</template>
<script>
import {extractCash, spreadInfo } from '@/api/user.js';
import { mapGetters } from "vuex";
import authorize from '@/components/Authorize';
import { configMap } from '@/utils';
import accountList from './account_list';
export default {
components: {
authorize,
accountList
},
data() {
return {
use_account: {},// 使用的账号
userInfo: [],
isAuto: false, //没有授权的不会自动授权
isShowAuth: false, //是否隐藏授权
extract_price: '',
minPrice: 0.00, //最低提现金额
load: false,
withdraw_commission: 0,// 手续费比例
};
},
computed: {
...mapGetters(['isLogin','uid','viewColor']),
... configMap(['sys_extension_type', 'withdraw_type'])
},
onLoad(options) {
// 判断:是否登录
if (!this.isLogin) {
// 未登录 授权登录
this.isAuto = true;
this.isShowAuth = true
}else{
// 已登录 获取信息
this.init();
}
},
methods: {
// 授权回调
onLoadFun() {
if(this.isLogin){
this.isShowAuth = false;
this.init();
}
},
// 授权关闭
authClose(e) {
this.isShowAuth = e
},
// 授权成功 初始化
init () {
this.getUserInfo();
},
// 获取个人信息
getUserInfo() {
let that = this;
spreadInfo().then(res => {
that.userInfo = res.data;
that.withdraw_commission = res.data.withdraw_commission || 0;
that.minPrice = res.data.user_extract_min;
});
},
// 选择提现账号
selectAccount() {
this.$refs.accountList.accountStatusChange();
},
// 确认使用账号
useAccount(item){
this.$set(this, 'use_account', item);
},
// 提交申请
subCash(e) {
let that = this, value = e.detail.value, account = Object.assign({}, this.use_account);
// 判断:是否选择账号
if(Object.values(account).length <= 0){
that.$util.Tips({title: '请选择账号'});
return false;
}
// 信息合并
account.extract_price = value.extract_price || 0;
if(that.load) return;
if (account.extract_type == 0) {
//银行卡
if (account.real_name.length == 0) return this.$util.Tips({title: '请填写持卡人姓名'});
if (account.bank_code.length == 0) return this.$util.Tips({title: '请填写卡号'});
}
else if (account.extract_type == 1) {
//微信
if(!this.sys_extension_type){
if (account.wechat.length == 0) return this.$util.Tips({title: '请填写微信号'});
if (account.extract_pic.length == 0) return this.$util.Tips({title: '请上传收款码'});
}
}
else if (account.extract_type == 2) {
//支付宝
if (account.alipay_code.length == 0) return this.$util.Tips({title: '请填写账号'});
if (account.extract_pic.length == 0) return this.$util.Tips({title: '请上传收款码'});
}
if (account.extract_price.length == 0) return this.$util.Tips({title: '请填写提现金额'});
if (Number(account.extract_price) < that.minPrice) return this.$util.Tips({title: '提现金额不能低于' + that.minPrice});
that.load = true;
if(that.sys_extension_type && account.extract_type == 1){
account = {
extract_price: value.extract_price,
extract_type: 3
}
}
// 提交申请
extractCash(account).then(res => {
that.getUserInfo();
that.load = false;
uni.showModal({
title: '提示',
content: res.message,
success: function (res) {
uni.navigateTo({
url: '/pages/users/user_spread_user/index'
});
}
});
}).catch(err => {
that.load = false;
return that.$util.Tips({title: err});
});
},
},
}
</script>
<style lang="scss" scoped>
.bank-list{
padding-top: 30rpx!important;
.bank-tabs{
display: inline-flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
flex-wrap: nowrap;
width: 100%;
background: #f9f9f9;
border-radius: 15rpx;
.bank-tab{
width: 50%;
text-align: center;
height: 80rpx;
line-height: 80rpx;
font-size: 28rpx;
font-weight: bold
}
.bank-tab-active{
position: relative;
}
.bank-tab-active{
color: #87171c;
}
.bank-tab-active:after{
content: "";
position: absolute;
bottom: 8rpx;
left: calc((100% - 100rpx) / 2 );
background: #87171c;
width: 100rpx;
height: 6rpx;
}
}
}
page {
background-color: #F5F5F5 !important;
}
.mt25 {
margin-top: 25rpx;
}
.cash-withdrawal .nav {
height: 130rpx;
padding: 0 30rpx;
font-size: 30rpx;
margin-bottom: 20rpx;
background-color: #fff;
}
.b-color {
background-color: var(--view-theme);
}
.cash-withdrawal .nav .input {
width: 505rpx;
.more-content {
display: flex;
align-items: center;
.more-content-left {
width: 90%;
.type-icon {
display: inline-block;
width: 56rpx;
height: 56rpx;
text-align: center;
line-height: 56rpx;
background-color: #FE960F;
margin-right: 20rpx;
border-radius: 50%;
.bankicon {
font-size: 36rpx;
color: #FFFFFF;
}
}
}
.moreicon {
width: 10%;
text-align: right;
}
}
}
.cash-withdrawal .nav .item {
font-size: 26rpx;
flex: 1;
text-align: center;
}
.cash-withdrawal .nav .item ~ .item {
border-left: 1px solid #f0f0f0;
}
.cash-withdrawal .nav .item .iconfont {
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #e93323;
text-align: center;
line-height: 37rpx;
margin: 0 auto 6rpx auto;
font-size: 22rpx;
box-sizing: border-box;
}
.cash-withdrawal .nav .item .iconfont.on {
background-color: #e93323;
color: #fff;
border-color: #e93323;
}
.cash-withdrawal .nav .item .line {
width: 2rpx;
height: 20rpx;
margin: 0 auto;
transition: height 0.3s;
}
.cash-withdrawal .nav .item .line.on {
height: 39rpx;
}
.cash-withdrawal .wrapper .list {
padding: 0 30rpx;
background-color: #fff;
}
.cash-withdrawal .wrapper .list .item {
border-bottom: 1px solid #eee;
height: 107rpx;
font-size: 30rpx;
color: #333;
&.uploadItem {
border-bottom: none;
height: auto;
.name {
height: 107rpx;;
}
}
}
.picture {
width: 70px;
height: 70px;
margin: 0 0 17px 0;
position: relative;
font-size: 11px;
color: #bbb;
border: 0.5px solid #ddd;
box-sizing: border-box;
margin-top: 40rpx;
uni-image, image {
width: 100%;
height: 100%;
border-radius: 1px;
}
.icon-guanbi1 {
font-size: 22px;
position: absolute;
top: -10px;
right: -10px;
color: #fc4141;
}
}
.cash-withdrawal .wrapper .list .item .name {
width: 130rpx;
}
.cash-withdrawal .wrapper .list .item .input {
width: 505rpx;
}
.cash-withdrawal .wrapper .list .item .input .placeholder {
color: #bbb;
}
.cash-withdrawal .placeholder1 {
font-size: 46rpx;
}
.cash-withdrawal .wrapper .list .tip {
font-size: 26rpx;
color: #999;
margin-bottom: 25rpx;
}
.cash-withdrawal .wrapper .list .btn-submit {
background-color: #F5F5F5;
margin: 0 -30rpx;
padding: 64rpx 30rpx;
}
.cash-withdrawal .wrapper .list .bnt {
font-size: 32rpx;
color: #fff;
width: 690rpx;
height: 90rpx;
text-align: center;
border-radius: 50rpx;
line-height: 90rpx;
/deep/ &.disabled {
background: #E3E3E3 !important;
pointer-events: none;
}
}
.cash-withdrawal .wrapper .list .tip2 {
font-size: 26rpx;
color: #999;
text-align: center;
margin: 44rpx 0 20rpx 0;
}
.cash-withdrawal .wrapper .list .value {
height: 135rpx;
line-height: 135rpx;
border-bottom: 1px solid #eee;
width: 690rpx;
margin: 0 auto;
}
.cash-withdrawal .wrapper .list .value input {
font-size: 80rpx;
color: #282828;
height: 135rpx;
text-align: center;
}
.cash-withdrawal .wrapper .list .value .placeholder2 {
color: #bbb;
}
.price {
color: var(--view-priceColor);
}
.Bank {
display: block;
width: 100%;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.auto_arrival {
text-align: center;
padding: 20rpx 0 0 0;
.input {
width: 100%;
border-bottom: 1px solid #eee;
margin-top: 10rpx;
color: #999;
height: 120rpx;
/deep/ uni-input, input {
height: 120rpx;
font-size: 40rpx;
}
}
}
uni-toast.uni-mask {
background-color: rgba(0, 0, 0, 0.5) !important;
}
</style>