From b13d873f64ebf4f328aec70e21ad3dcfefdb7489 Mon Sep 17 00:00:00 2001 From: hailin Date: Sun, 1 Mar 2026 09:15:18 -0800 Subject: [PATCH] =?UTF-8?q?feat(mobile):=20=E6=B5=81=E6=B0=B4=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E4=B8=AD=20REWARD=5FPENDING=20=E6=A0=87=E6=B3=A8"?= =?UTF-8?q?=E5=B7=B2=E8=BD=AC=E5=8F=AF=E7=BB=93=E7=AE=97"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户购买预种后 hasPlanted=true,所有 PENDING 奖励转为 SETTLED, 此时流水中历史的 REWARD_PENDING 条目追加"(已转可结算)"标注, 避免用户误以为还有未领取的奖励。仅在 pendingUsdt=0 时显示。 Co-Authored-By: Claude Opus 4.6 --- .../mobile-app/lib/core/services/wallet_service.dart | 12 ++++++++++++ .../presentation/pages/ledger_detail_page.dart | 10 ++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/frontend/mobile-app/lib/core/services/wallet_service.dart b/frontend/mobile-app/lib/core/services/wallet_service.dart index 115fb992..ee87072f 100644 --- a/frontend/mobile-app/lib/core/services/wallet_service.dart +++ b/frontend/mobile-app/lib/core/services/wallet_service.dart @@ -1507,6 +1507,18 @@ class LedgerEntry { return allocationTypeName ?? entryTypeName; } + /// [2026-03-01] 获取带状态标注的显示名称 + /// 当用户已无待领取奖励时,REWARD_PENDING 流水追加"(已转可结算)"标注 + String displayNameWithStatus({bool userHasNoPending = false}) { + final baseName = allocationTypeName ?? entryTypeName; + + if (entryType == 'REWARD_PENDING' && userHasNoPending) { + return '$baseName (已转可结算)'; + } + + return baseName; + } + /// 是否为收入 bool get isIncome => amount > 0; } diff --git a/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart b/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart index ecb3439e..c185b033 100644 --- a/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart +++ b/frontend/mobile-app/lib/features/trading/presentation/pages/ledger_detail_page.dart @@ -37,6 +37,9 @@ class _LedgerDetailPageState extends ConsumerState int _currentPage = 1; static const int _pageSize = 20; + // [2026-03-01] 用户是否已无待领取奖励(用于标注 REWARD_PENDING 流水) + bool _userHasNoPending = false; + // 流水类型选项 final List> _entryTypes = [ {'value': '', 'label': '全部'}, @@ -76,7 +79,7 @@ class _LedgerDetailPageState extends ConsumerState try { final walletService = ref.read(walletServiceProvider); - // 并行加载统计和趋势 + // 并行加载统计、趋势和钱包信息 final results = await Future.wait([ walletService.getLedgerStatistics(), walletService.getLedgerTrend(days: 30), @@ -85,10 +88,12 @@ class _LedgerDetailPageState extends ConsumerState pageSize: _pageSize, entryType: _selectedEntryType, ), + walletService.getMyWallet(), // [2026-03-01] 获取 pendingUsdt 判断是否还有待领取 ]); if (mounted) { final ledgerData = results[2] as PaginatedLedger; + final walletInfo = results[3] as WalletResponse; // 调试:打印加载的流水数据 debugPrint('[LedgerDetailPage] ======== 加载流水数据 ========'); @@ -103,6 +108,7 @@ class _LedgerDetailPageState extends ConsumerState _statistics = results[0] as LedgerStatistics; _trend = results[1] as LedgerTrend; _ledger = ledgerData; + _userHasNoPending = walletInfo.rewards.pendingUsdt <= 0; _isLoading = false; }); } @@ -989,7 +995,7 @@ class _LedgerDetailPageState extends ConsumerState crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - entry.displayName, + entry.displayNameWithStatus(userHasNoPending: _userHasNoPending), style: const TextStyle( fontSize: 14, fontWeight: FontWeight.w500,