前端【新增】完善用户提现前端领取金额的处理。

This commit is contained in:
jianweie code
2025-07-29 17:55:49 +08:00
parent c8b4bbd78d
commit 820d1a85cb
14 changed files with 373 additions and 219 deletions

View File

@@ -80,4 +80,17 @@ export enum ServiceCardStatusEnum {
nullify = 2,
/** 已核销 */
verified = 3,
}
export enum UserTocashType {
/** 银行线下转账 */
offlineBankTransfer = 0,
/** 企业付款到零钱 */
enterprisePaymentToChange = 1,
/** 企业付款到银行卡 */
enterprisePaymentTobankcard = 2,
/** 商家转账到零钱 */
merchantsTransferMoneyToChange = 3,
/** 商家转账 */
merchantTransfer = 4,
}

View File

@@ -47,4 +47,5 @@ export interface CashType {
userId ?: number;
userNickName ?: string;
withdrawals ?: number;
needUserGet?:boolean;
}

View File

@@ -57,6 +57,13 @@
.date {
margin-top: 10rpx;
}
.btn{
padding: 10rpx 20rpx;
font-size: 27rpx;
color: #fff;
background-color: #d33123;
border-radius: 10rpx;
}
}
}
}

View File

@@ -1,115 +1,174 @@
<template>
<coreshop-page title="提现明细" mode="left">
<view class="box">
<view class="select-box" :style="{'top':`${statusBarHeight}px`}" @click="onSelectFilterType">
<view class="name">筛选类型:</view>
<view class="selected">
<text class="tit">{{state.selectFilterType}}</text>
<uv-icon name="arrow-down"></uv-icon>
</view>
</view>
<coreshop-page title="提现明细" mode="left">
<view class="box">
<view class="select-box" :style="{'top':`${statusBarHeight}px`}" @click="onSelectFilterType">
<view class="name">筛选类型:</view>
<view class="selected">
<text class="tit">{{state.selectFilterType}}</text>
<uv-icon name="arrow-down"></uv-icon>
</view>
</view>
<uv-picker ref="balanceFilterTypePickerRef" confirmColor="#D33123" :columns="state.balanceFilterTypes"
@confirm="onConfirm"></uv-picker>
<uv-picker ref="balanceFilterTypePickerRef" confirmColor="#D33123" :columns="state.balanceFilterTypes"
@confirm="onConfirm"></uv-picker>
<view class="list" v-if="state.list.length > 0">
<view class="item" v-for="item in state.list" :key="item.id">
<view class="header">
<view class="type">{{item.statusName}}</view>
<view class="remain">提现金额{{item.money}}</view>
</view>
<view class="withdraw_box">
<view class="withdraw">
<view class="money">提现卡号</view>
<view class="date">{{item.cardNumber}}</view>
</view>
<view class="date">
<view class="money">提现时间</view>
<view class="date">{{item.createTime}}</view>
</view>
</view>
</view>
<view class="no-data" v-if="state.page === state.totalPages">没有更多了</view>
</view>
<view v-else class="layout-empty-box">
<coreshop-empty :mode="EmptyEnum.history" text="暂无数据"></coreshop-empty>
</view>
<view class="list" v-if="state.list.length > 0">
<view class="item" v-for="item in state.list" :key="item.id">
<view class="header">
<view class="type">{{item.statusName}}</view>
<view class="remain">提现金额{{item.money}}</view>
</view>
<view class="withdraw_box">
<view class="withdraw">
<view class="money">提现卡号</view>
<view class="date">{{item.cardNumber}}</view>
</view>
<view class="date">
<view class="money">提现时间</view>
<view class="date">{{item.createTime}}</view>
</view>
<view class="date">
<view class="money">提现方式</view>
<view class="date">
{{ getUserTocashType(item.type) }}
</view>
</view>
<view class="date" v-if="item.needUserGet && item.type == UserTocashType.merchantTransfer">
<view>
<!-- 您已领取到微信余额 -->
</view>
<view class="btn" @click="handlerReceiveWeChat(item)">领取到微信零钱</view>
</view>
</view>
</view>
<view class="no-data" v-if="state.page === state.totalPages">没有更多了</view>
</view>
<view v-else class="layout-empty-box">
<coreshop-empty :mode="EmptyEnum.history" text="暂无数据"></coreshop-empty>
</view>
</view>
</coreshop-page>
</view>
</coreshop-page>
</template>
<script setup lang="ts">
import { reactive, ref } from "vue";
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
import { queryCashList } from '@/core/api';
import type { Response, CashType } from '@/core/models';
import { handleShowToast } from '@/core/utils';
import { EmptyEnum } from '@/core/enum';
import { useSystemInfo } from '@/core/hooks';
import { reactive, ref } from "vue";
import { onLoad, onReachBottom } from '@dcloudio/uni-app';
import { queryCashList } from '@/core/api';
import type { Response, CashType } from '@/core/models';
import { handleShowToast } from '@/core/utils';
import { EmptyEnum, UserTocashType } from '@/core/enum';
import { useSystemInfo } from '@/core/hooks';
// 获取自定义导航栏高度
const { statusBarHeight } = useSystemInfo();
// 获取自定义导航栏高度
const { statusBarHeight } = useSystemInfo();
const balanceFilterTypePickerRef = ref();
const balanceFilterTypePickerRef = ref();
const state = reactive<{
balanceFilterTypes : Array<Array<string>>;
selectFilterType : string;
id : number;
page : number;
limit : number;
list : Array<CashType>;
totalPages : number;
}>({
balanceFilterTypes: [['全部', '待审核', '提现成功', '提现失败']],
selectFilterType: '全部',
id: 0,
page: 1,
limit: 10,
list: [],
totalPages: 1,
})
const state = reactive<{
balanceFilterTypes : Array<Array<string>>;
selectFilterType : string;
id : number;
page : number;
limit : number;
list : Array<CashType>;
totalPages : number;
}>({
balanceFilterTypes: [['全部', '待审核', '提现成功', '提现失败']],
selectFilterType: '全部',
id: 0,
page: 1,
limit: 10,
list: [],
totalPages: 1,
})
onLoad(() => {
getCashList();
});
onLoad(() => {
getCashList();
});
onReachBottom(() => {
if (state.totalPages > state.page) {
state.page++;
getCashList();
}
});
onReachBottom(() => {
if (state.totalPages > state.page) {
state.page++;
getCashList();
}
});
/** 用户提现列表 */
const getCashList = async () => {
const cashList : Response<Array<CashType>> = await queryCashList({
id: state.id,
page: state.page,
limit: state.limit,
});
if (cashList.status) {
state.totalPages = cashList?.otherData?.totalPages;
state.list = state.list.concat(cashList.data);
} else {
handleShowToast(cashList.msg)
}
}
/** 用户提现列表 */
const getCashList = async () => {
const cashList : Response<Array<CashType>> = await queryCashList({
id: state.id,
page: state.page,
limit: state.limit,
});
if (cashList.status) {
state.totalPages = cashList?.otherData?.totalPages;
state.list = state.list.concat(cashList.data);
} else {
handleShowToast(cashList.msg)
}
}
const onSelectFilterType = () => {
balanceFilterTypePickerRef.value?.open();
}
const onConfirm = ({ indexs, value }) => {
state.id = indexs[0];
state.selectFilterType = value?.[0];
state.list = [];
state.page = 1;
getCashList();
}
const onSelectFilterType = () => {
balanceFilterTypePickerRef.value?.open();
}
const onConfirm = ({ indexs, value }) => {
state.id = indexs[0];
state.selectFilterType = value?.[0];
state.list = [];
state.page = 1;
getCashList();
}
/* 提现方式 */
const getUserTocashType = (type : number) => {
switch (type) {
case UserTocashType.offlineBankTransfer:
return '银行线下转账';
case UserTocashType.enterprisePaymentToChange:
return '企业付款到零钱';
case UserTocashType.enterprisePaymentTobankcard:
return '企业付款到银行卡';
case UserTocashType.merchantsTransferMoneyToChange:
return '商家转账到零钱';
case UserTocashType.merchantTransfer:
return '商家转账';
default:
break;
}
}
const handlerReceiveWeChat = (item:any) => {
// #ifdef MP-WEIXIN
let message = JSON.parse(item.message);
if(message.response.state != 'WAIT_USER_CONFIRM'){
return ;
}
if (wx.canIUse('requestMerchantTransfer')) {
wx.requestMerchantTransfer({
mchId: item.merchantTransferData.mchId,
appId: item.merchantTransferData.appId,
package: message.response.package_info,
success: () => {
state.page = 1;
state.list = [];
getCashList();
},
fail: (res) => {
console.log('fail:', res);
},
});
} else {
wx.showModal({
content: '你的微信版本过低,请更新至最新版本。',
showCancel: false,
});
}
// #endif
}
</script>
<style scoped lang="scss">
@import './index.scss';
@import './index.scss';
</style>