|
|
- <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>
|