new_app/pages/me/withdraw/index.vue

599 lines
13 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="container">
<up-navbar title="申请提现"
:autoBack="true"
bgColor="rgb(255, 117, 129)"
leftIconColor="#FFF"
:titleStyle ="{color:'#FFF'}" >
<template #right>
<view class="u-p-r-30 u-flex u-col-center" style="color: #fff;">
<text class="rule-btn" @click="showRule">规则</text>
</view>
</template>
</up-navbar>
<view class="content">
<view class="title">可提现总额</view>
<view class="mayMoney">¥ {{ data.mayMoney }}</view>
<view class="val" style="">
<view style="display: flex;flex-direction: row;padding: 20upx;">
<view style="font-size: 32upx;color: #333333;">提现金额</view>
</view>
<view class="input" style="">
<view style="display: flex;align-items: center;">
<view style="font-size: 40upx;color: #333333;">¥</view>
<input type="digit" v-model="data.money" placeholder="请输入金额" @input="moneyInput" style="font-size: 32rpx;color: #333333;text-align: left;margin-left: 10rpx;width: 80%;" />
</view>
<view class="allbtn" @click="setAllMoney">
全部
</view>
</view>
</view>
<view class="witBtn" @click="goWithdraw"> {{data.isWithdraw?'立即提现':'观看广告提现'}} </view>
<view class="tab" style="">
<view @click="linkTo('/pages/me/withdraw/realName')">实名认证</view>
<!-- <view @click="linkTo('/pages/me/withdraw/alipay')">提现账号</view> -->
<view @click="linkTo('/pages/me/withdraw/moneyList?moneyType=1&viewType=2')">红包明细</view>
</view>
<view class="moneyList u-p-b-30">
<view v-if="data.list.length" v-for="(item, index) in data.list" :key="index" class="item">
<view>
<view style="margin-bottom: 8upx;text-align: right;">
<text style="margin-bottom: 8upx;color: green" v-if="item.state===1"> 提现成功</text>
<text style="margin-bottom: 8upx;color: green" v-if="item.state===0||item.state==3">
提现中</text>
<text style="margin-bottom: 8upx;color: #FD6416" v-if="item.state===-1||item.state===2">
提现失败
</text>
</view>
<view style="color: #999999;font-size: 28upx;">
<view style="margin-bottom: 8upx"> 收款人账号:{{ item.zhifubao }}</view>
<view style="margin-bottom: 8upx"> 收款人姓名:{{ item.zhifubaoName }}</view>
<view style="margin-bottom: 8upx"> 发起时间:{{ item.createAt }}</view>
<view style="margin-bottom: 8upx" v-if="item.state===1">成功时间 {{ item.outAt }}</view>
<view style="margin-bottom: 8upx;color: #FD6416" v-if="item.state===-1||item.state===2">
失败原因:{{ item.refund }}
</view>
<view style="margin-bottom: 8upx;text-align: right;">
<!-- 提现金额: -->
<text style="color: #FD6416;font-size: 32upx;font-weight: 600"> ¥{{ item.money }}</text>
</view>
</view>
</view>
</view>
<emprty-card v-if="!data.list.length" />
</view>
</view>
<up-modal :show="data.ruleShow" confirm-text="知道了" title="规则说明" :title="data.rule_title" :title-style="{fontWeight:'700'}" @confirm="ruleConfirm" confirm-color="rgb(255, 117, 129)">
<view class="u-p-30 u-text-left">
<scroll-view scroll-y="true" style="max-height: 50vh;" >
<rich-text style="text-align: justify;font-size: 18px;color: #666;" :nodes="data.rule_content"></rich-text>
</scroll-view>
</view>
</up-modal>
<view style="width: 0;height: 0;overflow: hidden;">
<!-- 激励视频广告 -->
<ad-rewarded-video ref="adRewardedw" :adpid="data.adpid" :loadnext="true"
:url-callback="data.urlCallback" @load="onadload" @close="onadclose" @error="onaderror">
</ad-rewarded-video>
</view>
</view>
</template>
<script setup>
import { reactive, nextTick, ref } from 'vue';
import { onReady,onLoad,onShow,onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
import { selectUserMoney, selectPayDetails, canCash, state, withdraw } from '@/api/me/withdraw.js';
import { selectUserById } from '@/api/user/user.js';
import { announcement } from '@/api/index/index.js';
import { commonType } from '@/api/init.js';
import { linkTo } from '@/utils/app.js';
let data = reactive({
ruleShow: true,
rule_title: "",
rule_content: "",
money: '',
mayMoney: '0',
list: [],
page: 1,
limit: 10,
totalCount: 0,
cashMoney: 0,
urlCallback: {},
adpid: null,
adRewardedShow: false,
adRewardedVideoloadNum: 0,
isWithdraw: false,
userInfo: null,
ruleIndex: 0,
ruleList: []
})
const adRewardedw = ref(null);
onLoad(() => {
// if ( uni.getSystemInfoSync().platform == 'android' ) {
// data.adpid = 1531580352
// }
// if ( uni.getSystemInfoSync().platform == 'ios' ) {
data.adpid = 1373604770
// }
getExtractFei();
getMoneyDetail();
})
onShow(() => {
getcashMoney()
getUserInfo();
announcement({type: 1}).then(res=>{
data.ruleList = res
ruleInit()
data.ruleShow = true
})
})
onReady(() => {
nextTick(()=>{
data.adRewardedVideoloadNum = 0
adRewardedw.value.load();
})
getCanCash()
})
onReachBottom(() => {
if (data.page * data.limit < data.totalCount) {
data.page = data.page + 1;
getMoneyDetail();
}
})
onPullDownRefresh(() => {
data.page = 1;
data.list = []
getMoneyDetail();
})
function ruleInit(){
data.rule_title = data.ruleList[data.ruleIndex].title
data.rule_content = data.ruleList[data.ruleIndex].content
}
/**
* 规则弹窗打开
*/
function showRule() {
if( data.ruleList.length <= 0) {
uni.showToast({
title: "暂未配置规则",
icon: 'none'
})
return
}
ruleInit()
data.ruleShow = true
}
/**
* 规则确认
*/
function ruleConfirm() {
data.ruleShow = false
data.ruleIndex++
console.log(data.ruleIndex >= data.ruleList.length)
if( data.ruleIndex >= data.ruleList.length) {
data.ruleIndex = 0
return
}
setTimeout(res=>{
ruleInit()
data.ruleShow = true
},300)
}
function getUserInfo() {
selectUserById().then(res=>{
data.userInfo = res;
})
}
function back() {
uni.navigateBack()
}
/**
* 获取看广告状态
*/
async function getCanCash() {
canCash().then(res => {
data.isWithdraw = !res;
})
}
/**
* 广告数据加载成功回调
* @param {Object} e
*/
function onadload(e) {
data.adRewardedShow = true;
console.log('广告数据加载成功');
}
/**
* 广告加载失败回调
* @param {Object} e
*/
function onaderror(e) {
if ( data.adRewardedVideoloadNum >=3 ) {
return
}
data.adRewardedVideoloadNum++
setTimeout(() => {
adRewardedw.value.load();
}, 1000); // 10
console.log("广告加载失败",e)
}
/**
* 广告播放成功回调
* @param {Object} e
*/
async function onadclose(e) {
const detail = e.detail
if (detail && detail.isEnded) {
// 正常播放结束
let res = await state({
extraKey: data.urlCallback.extra
})
getCanCash()
} else {
// 播放中途退出
}
}
function onNavigationBarButtonTap() {
console.log(1)
data.ruleShow = true
}
/**
* 提现触发
*/
function goWithdraw() {
if ( !data.isWithdraw ) {
if(!data.adRewardedShow){
uni.showToast({
icon: 'none',
title: '广告加载失败,请稍后重试'
});
return
}
data.urlCallback = {
userId: uni.getStorageSync('userInfo').userId,
extra: 'cash:'+uni.getStorageSync('userInfo').userId + "" + new Date().getTime(),
}
adRewardedw.value.show();
} else {
getOut()
}
}
function moneyInput(e) {
data.money = e.detail.value.match(/^\d*(\.?\d{0,2})/g)[0] || null;
}
/**
* 全部提现赋值
*/
function setAllMoney() {
data.money = data.mayMoney.toFixed(2)
}
/**
* 获取提现记录
*/
function getMoneyDetail() {
selectPayDetails({
page: data.page,
limit: data.limit
}).then(res => {
data.totalCount = res.totalCount;
if (res.list.length > 0) {
data.list = [...data.list, ...res.list];
}
setTimeout(() => {
uni.stopPullDownRefresh();
}, 500);
})
}
/**
* 获取最低提现金额
*/
function getExtractFei() {
commonType(112).then(res => {
if (res && res.value) {
data.cashMoney = res.value;
}
});
}
/**
* 可提现金额
*/
function getcashMoney() {
selectUserMoney().then(res => {
data.mayMoney = res.amount || 0
})
}
/**
* 跳转
* @param {Object} url
*/
function navTo(url) {
uni.navigateTo({
url: url
});
}
function getMoney() {
let data =
uni.showLoading({
title: '提现中'
});
withdraw({
amount: data.money
}).then(res => {
data.money = ''
setTimeout(function() {
getcashMoney()
}, 1500)
}).catch(res =>{
if (res.code == 9991) {
uni.showToast({
title: res.msg,
icon: 'none'
})
setTimeout(function() {
linkTo('/pages/me/withdraw/alipay')
}, 1500)
}
})
}
function getOut() {
if (!/^\d+(\.\d{1,2})?$/.test(data.money)) {
uni.showToast({
icon: 'none',
title: '请输入正确金额,不能包含中文,英文,特殊字符和小数'
});
return;
}
if (!data.userInfo.accountNo) {
uni.showToast({ icon: 'none', title: "请先实名认证" });
setTimeout(()=>{
linkTo('/pages/me/withdraw/realName')
},1500)
return;
}
if (parseFloat(data.mayMoney).toFixed(2) >= parseFloat(data.money)) {
if (parseFloat(data.money).toFixed(2) >= parseFloat(data.cashMoney)) {
uni.showModal({
title: "提现申请提示",
content: '每日只可提现一次',
success: (e) => {
if (e.confirm) {
setTimeout(()=>{
uni.showModal({
title: "提现申请提示",
content: '请仔细确认收款人信息\n\n收款人姓名:' + data.userInfo.certName + '\n\n提现金额:' + data
.money + '元\n\n收款人账号' + data.userInfo.accountNo + '',
success: (e) => {
if (e.confirm) {
getMoney();
getMoneyDetail();
}
}
});
},200)
}
}
});
} else {
uni.showToast({
icon: 'none',
title: "提现金额必须大于或等于" + data.cashMoney + "元才可提现"
});
}
} else {
uni.showToast({
icon: 'none',
title: "您的余额不足"
});
}
}
</script>
<style lang="scss" scoped>
.container {
text-align: center;
background: white;
position: absolute;
width: 100%;
.nav{
width: 100%;
position: fixed;
background-color: #ff7581;
left: 0;
top: 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 100rpx 30rpx 15rpx 30rpx;
.navTitle{
color: #fff;
font-size: 32rpx;
font-weight: bold;
}
.ruleBtn{
font-size: 30rpx;
color: #fff;
}
}
.content{
background-color: #ff7581;
height: 500rpx;
border-bottom-right-radius: 40rpx;
border-bottom-left-radius: 40rpx;
.title{
font-size: 32rpx;
color: #FFFFFF;
padding-top: 230rpx;
}
.mayMoney{
font-size: 40rpx;
color: #FFFFFF;
padding-top: 20rpx;
}
.val{
width: 90%;
height: max-content
;margin-left: 40rpx;
background-color: #FFFFFF;
box-shadow: rgba(183, 183, 183, 0.3) 0px 1px 10px;
margin-top: 50rpx;
border-radius: 20rpx;
.input{
display: flex;
padding: 20rpx;
justify-content: space-between;
align-items: center;
}
.allbtn{
font-size: 28rpx;
color: #333333;
background: #ff7581;
color: white;
border-radius: 10rpx;
padding: 7rpx 15rpx;
flex-shrink: 0;
}
}
.witBtn{
margin: 32rpx;
font-size: 36rpx;
background: #ff7581;
color: white;
border-radius: 20rpx;
height: 80rpx;
line-height: 80rpx;
}
.tab{
width: 100%;
display: flex;
width: 100%;
justify-content: space-around;
>view{
font-size: 28rpx;
color: #666;
padding-bottom: 60rpx;
padding-top: 20rpx;
}
}
.moneyList{
text-align: left
}
}
.cash-top {
padding: 32upx 32upx 50upx 32upx;
/* border-bottom: 1px solid gainsboro; */
background: #5074FF;
}
.leiji {
font-size: 14px;
color: #ffffff;
margin-bottom: 10px;
}
}
.rule-btn {
font-size: 16px;
// padding: 2rpx 10rpx;
// border: 1px solid rgba(255, 255, 255, .8);
// border-radius: 4rpx;
}
.view2-view-text {
font-size: 14px;
color: #000000;
margin-left: 20upx;
width: 80%;
}
.view2-view-image-right {
width: 18upx;
height: 30upx;
margin-left: 50upx;
}
.moneyList {
.item {
background: white;
padding: 32rpx;
margin: 32rpx;
font-size: 28rpx;
box-shadow: 7px 9px 34px rgba(0, 0, 0, 0.1);
border-radius: 16upx;
}
.item:first-child {
margin-top: 0;
}
}
.centre {
text-align: center;
padding: 200rpx 0;
font-size: 32rpx;
box-sizing: border-box;
image {
width: 360rpx;
height: 360rpx;
// margin-bottom: 20rpx;
margin: 0 auto 20rpx;
// border: 1px dotted #000000;
}
.tips {
font-size: 34rpx;
color: #999999;
margin-top: 20rpx;
}
.btn {
margin: 80rpx auto;
width: 600rpx;
border-radius: 32rpx;
line-height: 90rpx;
color: #ffffff;
font-size: 34rpx;
background: #ff7581;
}
}
</style>