import React, { useState, useEffect } from 'react' import { View, Text, ScrollView } from '@tarojs/components' import Taro from '@tarojs/taro' import { useRequest } from '@/hooks/useRequest' import { pageUserBalanceLog, type UserBalanceLog } from '@/api/system/user/balance-log' definePageConfig({ navigationBarTitleText: '余额明细', }) // 场景类型映射 const SCENE_MAP: Record = { 0: '充值', 1: '消费', 2: '退款', 3: '提现', 4: '收入', 5: '支出', 6: '转账', 7: '收款', } const tabs = [ { label: '全部', value: -1 }, { label: '收入', value: 1 }, { label: '支出', value: 0 }, ] const BalanceLogPage: React.FC = () => { const [activeTab, setActiveTab] = useState(-1) const [page, setPage] = useState(1) const [logs, setLogs] = useState([]) const [hasMore, setHasMore] = useState(true) // 获取余额日志 const { run: fetchLogs, loading } = useRequest(pageUserBalanceLog, { manual: true, onSuccess: (data) => { if (data?.list) { if (page === 1) { setLogs(data.list) } else { setLogs(prev => [...prev, ...data.list]) } setHasMore(data.list.length >= 20) } }, onError: (err) => { Taro.showToast({ title: err.message || '加载失败', icon: 'none' }) } }) // 加载数据 const loadData = (pageNum: number = 1) => { const params: any = { page: pageNum, limit: 20 } if (activeTab === 1) { params.moneyGt = 0 // 收入 } else if (activeTab === 0) { params.moneyLt = 0 // 支出 } fetchLogs(params) } // 初始化加载 useEffect(() => { setPage(1) loadData(1) }, [activeTab]) // 加载更多 const loadMore = () => { if (loading || !hasMore) return const nextPage = page + 1 setPage(nextPage) loadData(nextPage) } // 格式化金额 const formatMoney = (money?: string) => { if (!money) return '0.00' const num = parseFloat(money) return num > 0 ? `+${num.toFixed(2)}` : num.toFixed(2) } // 获取场景描述 const getSceneText = (scene?: number) => { return SCENE_MAP[scene || 0] || '其他' } return ( {/* Tab 栏 */} {tabs.map(tab => ( setActiveTab(tab.value)} > {tab.label} {activeTab === tab.value && ( )} ))} {/* 日志列表 */} {logs.length === 0 && !loading ? ( 暂无余额明细 ) : ( {logs.map(log => ( {log.describe || getSceneText(log.scene)} {log.createTime} 0 ? 'text-green-600' : 'text-red-500' }`}> {formatMoney(log.money)} {log.balance !== undefined && ( 余额: ¥{parseFloat(String(log.balance)).toFixed(2)} )} ))} {/* 加载更多 */} {hasMore && ( {loading ? '加载中...' : '上拉加载更多'} )} {!hasMore && logs.length > 0 && ( 没有更多了 )} )} ) } export default BalanceLogPage