Files
t/pages2/withdraw/withdraw.vue
T

371 lines
8.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="ithui-content">
<view class="withdraw">
<view class="withdraw-head">
<view class="withdraw-head-to">到账渠道</view>
<view class="withdraw-head-way">
<view class="withdraw-head-way-1">
<image class="way-icon" src="/static/money.png"></image>
<text class="way-text">微信零钱</text>
</view>
<view class="withdraw-head-way-2">仅支持整数,72小时内到账</view>
</view>
</view>
<view class="withdraw-body">
<text>提现金额</text>
<view class="input-money">
<text class="rmb">¥</text>
<input v-model.number="extract" type="text" @focus.prevent="stopKeyborad" class="t-input" />
</view>
<view class="info-money">
<view v-if="is_out">
<text class="info-money-num" style="color: #ff1e0f;">输入金额超过可提现余额,账户余额{{ pool }}元</text>
</view>
<view v-else-if="is_lowest">
<text class="info-money-num" style="color: #ff1e0f;">最低{{ lowest }}元起提现,账户余额{{ pool }}元</text>
</view>
<view v-else>
<text class="info-money-num">当前可提现余额{{ pool }}元,</text>
<text class="info-money-all" @click="getAll">全部提现</text>
</view>
</view>
<view :class="'tx' + (is_post ? '-active' : '')"><button @click="handleShowModel">提现</button></view>
</view>
<view :class="['keyboard', keyboradShow ? '' : 'active', isIphoneX ? 'isIphone' : '']">
<block v-for="(item, index) in 9" :key="index">
<view class="keyboard-item" @tap="keyboradKey(index + 1)">{{ index + 1 }}</view>
</block>
<view class="keyboard-item hide"></view>
<view class="keyboard-item" @tap="keyboradKey(0)"><text>0</text></view>
<view class="keyboard-item delte" @tap="keyboradDel()">
<image class="img" src="/static/del.png" mode="aspectFill" :lazy-load="true"></image>
</view>
</view>
<u-modal :show="showModal" title="提现确认" showCancelButton cancelText="我再想想" confirmColor="#ff1e0f"
confirmText="确认提现" @confirm="getMoney" @cancel="showModal = false">
<view class="slot-content">
<rich-text :nodes="content"></rich-text>
</view>
</u-modal>
</view>
</view>
</template>
<script>
import { ref, onMounted, onPullDownRefresh } from 'vue'
import { store } from '@/pages3/uni_modules/uni-id-pages/common/store.js'
export default {
setup() {
const pool = ref(0)
const extract = ref('')
const service_fee = ref(0.0)
const showModal = ref(false)
const is_out = ref(false)
const is_lowest = ref(false)
const is_post = ref(false)
const lowest = ref(1)
const fee = ref(0)
const money = ref('')
const real_money = ref('')
const keyboradShow = ref(true)
const isIphoneX = ref(false)
const isRefuse = ref(false)
const content = ref("")
onMounted(() => {
uni.showLoading({ title: '加载中' })
initData()
setTimeout(() => {
uni.hideLoading()
}, 500)
})
onPullDownRefresh(() => {
extract.value = ''
is_out.value = false
is_lowest.value = false
is_post.value = false
initData()
setTimeout(() => {
uni.stopPullDownRefresh()
}, 500)
})
function initData() {
const info = store.userInfo || {}
pool.value = Number(info.available) || 0
lowest.value = 1
fee.value = 0
keyboradShow.value = true
}
function stopKeyborad() {
uni.hideKeyboard()
}
function keyboradKey(key) {
extract.value = extract.value * 10 + key
checkMoney()
}
function keyboradDel() {
if (extract.value && extract.value > 0) {
let val = parseInt(extract.value / 10)
if (val === 0) val = ''
extract.value = val
checkMoney()
}
}
function getAll() {
extract.value = parseInt(pool.value)
checkMoney()
}
function checkMoney() {
if (!extract.value || extract.value < lowest.value) {
is_lowest.value = true
is_post.value = false
} else if (extract.value > pool.value) {
is_out.value = true
is_lowest.value = false
is_post.value = false
} else {
is_out.value = false
is_lowest.value = false
is_post.value = true
}
if (parseFloat(extract.value).toString() === 'NaN') {
is_post.value = false
}
}
function handleShowModel() {
if (isRefuse.value) return
checkMoney()
if (!is_post.value) return
money.value = extract.value
service_fee.value = Number((extract.value * (fee.value / 100)).toString().match(/^\d+(?:\.\d{0,2})?/))
real_money.value = Number((extract.value - service_fee.value).toString().match(/^\d+(?:\.\d{0,2})?/))
content.value = `<p>提现金额:<em style="font-style:normal;color:#ff1e0f">${money.value} 元</p>
<p>实际到账:<em style="font-style:normal;color:#ff1e0f">${real_money.value} 元</em></p>
<p>服务费用:<em style="font-style:normal;color:#ff1e0f">${service_fee.value} 元</em></p>
<p>服务费率:<em style="font-style:normal;color:#ff1e0f">${fee.value}%</em></p>
`
showModal.value = true
}
function getMoney() {
showModal.value = false
if (isRefuse.value) return
isRefuse.value = true
setTimeout(() => {
uni.showToast({
title: "提现申请已提交,等待审核",
mask: false,
icon: 'none'
})
}, 500)
setTimeout(() => {
uni.navigateBack()
}, 1000)
}
return {
pool,
extract,
service_fee,
showModal,
is_out,
is_lowest,
is_post,
lowest,
fee,
money,
real_money,
keyboradShow,
isIphoneX,
isRefuse,
content,
initData,
stopKeyborad,
keyboradKey,
keyboradDel,
getAll,
checkMoney,
handleShowModel,
getMoney
}
}
}
</script>
<style>
page {
background-color: #ededed;
}
</style>
<style lang="scss" scoped>
::v-deep .u-modal__content {
justify-content: flex-start;
}
.ithui {
&-content {
.withdraw {
padding: 40rpx;
&-head {
background-color: #f7f7f7;
display: flex;
align-content: center;
padding: 40rpx 60rpx;
font-size: 28rpx;
&-to {}
&-way {
display: flex;
flex-direction: column;
align-content: center;
margin-left: 40rpx;
&-1 {
color: #576b95;
margin-bottom: 20rpx;
.way-icon {
width: 36rpx;
height: 36rpx;
margin-right: 10rpx;
top: 4rpx;
}
}
&-2 {
color: #acacac;
font-size: 26rpx;
}
}
}
&-body {
background-color: #fff;
padding: 40rpx 60rpx;
font-size: 28rpx;
.input-money {
display: flex;
align-content: center;
font-weight: 600;
border-bottom: 1rpx solid #eaeef1;
.rmb {
font-size: 2em;
top: 20rpx;
position: relative;
}
.t-input {
height: 1.9em;
font-size: 2.5em;
border: none;
position: relative;
left: 3.5%;
outline: none;
}
}
.info-money {
margin-top: 20rpx;
font-size: 24rpx;
margin-bottom: 40rpx;
&-num {
color: #b2b2b2;
}
&-all {
color: #576b95;
}
}
.tx {
button {
color: #b2b2b2;
}
}
.tx-active {
button {
color: #fff;
background: #07c160;
}
}
}
.keyboard {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background: #ebebeb;
display: flex;
justify-content: center;
z-index: 2;
flex-wrap: wrap;
transition: all 0.2s ease-in 0.2s;
}
.active {
bottom: -400rpx;
}
.keyboard-item {
box-sizing: border-box;
width: 250rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: #fff;
font-size: 40rpx;
color: #333;
height: 99rpx;
border: 1rpx solid #ebebeb;
border-top: none;
border-left: none;
}
.hide {
opacity: 0;
}
.delte {
background: none;
box-shadow: none;
}
.delte image {
width: 60rpx;
height: 60rpx;
}
.isIphone {
padding-bottom: 68rpx !important;
}
.fee {
em {
font-size: 0.5rem;
font-style: normal;
}
}
}
}
}
</style>