<template>
|
|
<!-- <div>交易明细</div> -->
|
|
<view class="box">
|
|
<view class="top flex" :style="{ borderRadius: '31.5rpx' }">
|
|
<view @click="changeTab(0)" :class="{ active : type == 0 }" class="income flex element"
|
|
:style="{ borderRadius: '31.5rpx' }">
|
|
收入明细
|
|
</view>
|
|
<view @click="changeTab(1)" :class="{ active : type == 1 }" class="income flex element"
|
|
:style="{ borderRadius: '31.5rpx' }">
|
|
支出明细
|
|
</view>
|
|
</view>
|
|
|
|
<view v-for="(item,index) in list" :key="index" class="Recharge">
|
|
<view class="flex">
|
|
<image style="width: 80rpx;height: 80rpx" src="https://img1.baidu.com/it/u=3034232350,1041791648&fm=253&fmt=auto&app=138&f=PNG?w=500&h=500"
|
|
mode="aspectFill"></image>
|
|
<view class="text1">
|
|
<view class="text2">
|
|
{{ item.title }}
|
|
<!-- 金额类型标签 -->
|
|
<text v-if="item.moneyType !== undefined" class="money-type-tag" :class="getMoneyTypeClass(item.moneyType)">
|
|
{{ getMoneyTypeText(item.moneyType) }}
|
|
</text>
|
|
</view>
|
|
<view>
|
|
{{ item.createTime }}
|
|
</view>
|
|
<!-- 审核状态显示 - 只在支出明细中显示 -->
|
|
<view v-if="type === 1 && item.auditStatus !== undefined" class="audit-status">
|
|
<text v-if="item.auditStatus === 0" class="status-pending">待审核</text>
|
|
<text v-if="item.auditStatus === 1" class="status-approved">审核通过</text>
|
|
<text v-if="item.auditStatus === 2" class="status-rejected">审核不通过</text>
|
|
</view>
|
|
<!-- 审核不通过时显示备注 - 只在支出明细中显示 -->
|
|
<view v-if="type === 1 && item.auditStatus === 2 && item.remark" class="remark">
|
|
备注:{{ item.remark }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="right-content">
|
|
<view class="text3">
|
|
¥{{ item.amount }}
|
|
</view>
|
|
<!-- 审核通过的提现显示领取按钮 -->
|
|
<view v-if="item.auditStatus === 1 && type === 1 && item.state == 0" class="receive-btn" @click="receiveWithdrawal(item)">
|
|
领取
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script setup>
|
|
import {
|
|
ref
|
|
} from "vue"
|
|
import { useStore } from 'vuex'
|
|
import {
|
|
amountLogList
|
|
} from "@/api/amount/index.js"
|
|
import {
|
|
withdrawalSuccessful
|
|
} from "@/api/amount/index.js"
|
|
|
|
import {
|
|
onShow,
|
|
onLoad
|
|
} from "@dcloudio/uni-app"
|
|
|
|
onLoad((options) => {
|
|
// 如果有type参数,设置默认选中的tab
|
|
if (options.type) {
|
|
type.value = parseInt(options.type)
|
|
}
|
|
})
|
|
|
|
onShow(() => {
|
|
getRunningWater()
|
|
})
|
|
|
|
const store = useStore()
|
|
const list = ref([]);
|
|
const type = ref(0);
|
|
|
|
// 获取流水
|
|
const getRunningWater = async () => {
|
|
let response = await amountLogList({
|
|
type: type.value,
|
|
moneyType:1,
|
|
userId: store.state.user.userInfo.userId
|
|
});
|
|
if (response.code == 200) {
|
|
list.value = response.data
|
|
}
|
|
}
|
|
|
|
const changeTab = (index) => {
|
|
type.value = index;
|
|
getRunningWater();
|
|
}
|
|
|
|
// 获取金额类型文本
|
|
const getMoneyTypeText = (moneyType) => {
|
|
switch (moneyType) {
|
|
case 0:
|
|
return '合伙人余额'
|
|
case 1:
|
|
return '伴宠师余额'
|
|
case 2:
|
|
return '保证金余额'
|
|
default:
|
|
return ''
|
|
}
|
|
}
|
|
|
|
// 获取金额类型样式类名
|
|
const getMoneyTypeClass = (moneyType) => {
|
|
switch (moneyType) {
|
|
case 0:
|
|
return 'money-type-partner'
|
|
case 1:
|
|
return 'money-type-sitter'
|
|
case 2:
|
|
return 'money-type-deposit'
|
|
default:
|
|
return ''
|
|
}
|
|
}
|
|
|
|
// 领取提现
|
|
const receiveWithdrawal = async (item) => {
|
|
try {
|
|
console.log('开始领取提现,item:', item)
|
|
|
|
// 先确认是否要领取
|
|
const confirmResult = await new Promise((resolve) => {
|
|
uni.showModal({
|
|
title: '确认领取',
|
|
content: `确定要领取¥${item.amount}吗?`,
|
|
success: (res) => {
|
|
resolve(res.confirm)
|
|
}
|
|
})
|
|
})
|
|
|
|
if (!confirmResult) {
|
|
return
|
|
}
|
|
|
|
uni.showLoading({
|
|
title: '处理中...'
|
|
})
|
|
|
|
// 检查是否支持微信转账
|
|
if (typeof wx === 'undefined' || !wx.canIUse('requestMerchantTransfer')) {
|
|
console.log('微信API不可用,尝试直接调用后端接口')
|
|
// 如果微信API不可用,直接调用后端接口标记为已领取
|
|
const result = await withdrawalSuccessful({
|
|
id: item.id,
|
|
userId: store.state.user.userInfo.userId
|
|
})
|
|
console.log('withdrawalSuccessful result:', result)
|
|
|
|
uni.hideLoading()
|
|
|
|
if (result.code === 200) {
|
|
uni.showToast({
|
|
title: '领取成功',
|
|
icon: 'success',
|
|
duration: 1500,
|
|
success() {
|
|
// 刷新列表
|
|
getRunningWater()
|
|
}
|
|
})
|
|
} else {
|
|
uni.showToast({
|
|
title: result.msg || '领取失败',
|
|
icon: 'error',
|
|
duration: 2000
|
|
})
|
|
}
|
|
return
|
|
}
|
|
|
|
// 调用微信商户转账API
|
|
wx.requestMerchantTransfer({
|
|
mchId: '1665639691', // 商户ID
|
|
appId: wx.getAccountInfoSync().miniProgram.appId,
|
|
package: item.packageInfo || '', // 从后端获取的转账包信息
|
|
success: async (res) => {
|
|
console.log('微信转账成功:', res)
|
|
// 转账成功后调用成功接口
|
|
try {
|
|
const result = await withdrawalSuccessful({
|
|
id: item.id,
|
|
userId: store.state.user.userInfo.userId
|
|
})
|
|
console.log('withdrawalSuccessful result:', result)
|
|
|
|
uni.hideLoading()
|
|
|
|
if (result.code === 200) {
|
|
uni.showToast({
|
|
title: '领取成功',
|
|
icon: 'success',
|
|
duration: 1500,
|
|
success() {
|
|
// 刷新列表
|
|
getRunningWater()
|
|
}
|
|
})
|
|
} else {
|
|
uni.showToast({
|
|
title: result.msg || '领取失败',
|
|
icon: 'error',
|
|
duration: 2000
|
|
})
|
|
}
|
|
} catch (error) {
|
|
console.error('调用withdrawalSuccessful失败:', error)
|
|
uni.hideLoading()
|
|
uni.showToast({
|
|
title: '网络异常,请重试',
|
|
icon: 'error',
|
|
duration: 2000
|
|
})
|
|
}
|
|
},
|
|
fail: (res) => {
|
|
}
|
|
})
|
|
} catch (error) {
|
|
uni.hideLoading()
|
|
console.error('领取提现异常:', error)
|
|
uni.showToast({
|
|
title: '网络异常,请重试',
|
|
icon: 'error',
|
|
duration: 2000
|
|
})
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.box {
|
|
width: 750rpx;
|
|
min-height: 100vh;
|
|
background-color: #FFFFFF;
|
|
padding: 32rpx 24rpx 0 24rpx;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.top {
|
|
width: 722rpx;
|
|
height: 63rpx;
|
|
background-color: #F3F3F3;
|
|
}
|
|
|
|
.active {
|
|
background-color: #FFBF60;
|
|
color: white;
|
|
font-weight: 600;
|
|
box-shadow: 0 2rpx 8rpx rgba(255, 191, 96, 0.3);
|
|
}
|
|
|
|
.income {
|
|
width: 361rpx;
|
|
height: 63rpx;
|
|
line-height: 63rpx;
|
|
font-size: 28rpx;
|
|
font-weight: 500;
|
|
justify-content: center;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
|
|
|
|
.Recharge {
|
|
padding: 32rpx 24rpx;
|
|
box-sizing: border-box;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-start;
|
|
border-bottom: 1rpx solid #f5f5f5;
|
|
|
|
&:last-child {
|
|
border-bottom: none;
|
|
}
|
|
}
|
|
|
|
.flex {
|
|
display: flex;
|
|
}
|
|
|
|
.text1 {
|
|
font-size: 26rpx;
|
|
color: #666666;
|
|
line-height: 1.4;
|
|
margin-left: 20rpx;
|
|
}
|
|
|
|
.Recharge image {
|
|
width: 80rpx;
|
|
height: 80rpx;
|
|
border-radius: 8rpx;
|
|
margin-top: 0;
|
|
}
|
|
|
|
.text2 {
|
|
font-weight: 500;
|
|
color: #333333;
|
|
font-size: 28rpx;
|
|
line-height: 40rpx;
|
|
margin-bottom: 8rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.text3 {
|
|
color: #FF2A2A;
|
|
font-size: 30rpx;
|
|
font-weight: 600;
|
|
line-height: 44rpx;
|
|
}
|
|
|
|
.right-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
min-width: 120rpx;
|
|
}
|
|
|
|
.right-content > .text3 {
|
|
margin-bottom: 16rpx;
|
|
}
|
|
|
|
.audit-status {
|
|
margin-top: 12rpx;
|
|
font-size: 22rpx;
|
|
}
|
|
|
|
.status-pending {
|
|
color: #FF9800;
|
|
background-color: #FFF3E0;
|
|
padding: 6rpx 12rpx;
|
|
border-radius: 12rpx;
|
|
font-size: 20rpx;
|
|
font-weight: 500;
|
|
display: inline-block;
|
|
}
|
|
|
|
.status-approved {
|
|
color: #4CAF50;
|
|
background-color: #E8F5E8;
|
|
padding: 6rpx 12rpx;
|
|
border-radius: 12rpx;
|
|
font-size: 20rpx;
|
|
font-weight: 500;
|
|
display: inline-block;
|
|
}
|
|
|
|
.status-rejected {
|
|
color: #F44336;
|
|
background-color: #FFEBEE;
|
|
padding: 6rpx 12rpx;
|
|
border-radius: 12rpx;
|
|
font-size: 20rpx;
|
|
font-weight: 500;
|
|
display: inline-block;
|
|
}
|
|
|
|
.remark {
|
|
margin-top: 12rpx;
|
|
color: #666;
|
|
font-size: 24rpx;
|
|
line-height: 36rpx;
|
|
background-color: #f8f8f8;
|
|
padding: 12rpx;
|
|
border-radius: 8rpx;
|
|
border-left: 4rpx solid #F44336;
|
|
}
|
|
|
|
.receive-btn {
|
|
background-color: #FFBF60;
|
|
color: #FFFFFF;
|
|
padding: 12rpx 24rpx;
|
|
border-radius: 24rpx;
|
|
font-size: 26rpx;
|
|
font-weight: 500;
|
|
text-align: center;
|
|
min-width: 80rpx;
|
|
cursor: pointer;
|
|
box-shadow: 0 4rpx 12rpx rgba(255, 191, 96, 0.3);
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.receive-btn:active {
|
|
background-color: #E6A84D;
|
|
transform: translateY(2rpx);
|
|
box-shadow: 0 2rpx 8rpx rgba(255, 191, 96, 0.2);
|
|
}
|
|
|
|
/* 金额类型标签样式 */
|
|
.money-type-tag {
|
|
font-size: 20rpx;
|
|
font-weight: 500;
|
|
padding: 4rpx 8rpx;
|
|
border-radius: 8rpx;
|
|
margin-left: 12rpx;
|
|
display: inline-block;
|
|
line-height: 1;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.money-type-partner {
|
|
color: #1976D2;
|
|
background-color: #E3F2FD;
|
|
}
|
|
|
|
.money-type-sitter {
|
|
color: #388E3C;
|
|
background-color: #E8F5E8;
|
|
}
|
|
|
|
.money-type-deposit {
|
|
color: #F57C00;
|
|
background-color: #FFF3E0;
|
|
}
|
|
</style>
|