完善钱包提现状态展示与举报摄影师列表交互。
对齐 Android 提现进度与时间线映射,优化钱包与积分兑换页刷新逻辑,并补充相关单元测试与真机测试说明。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -173,6 +173,16 @@ final class WalletViewModel {
|
||||
await loadWithdraw(api: api, refresh: true)
|
||||
}
|
||||
|
||||
/// 仅刷新当前选中的钱包 Tab。
|
||||
func refreshSelectedTab(api: any WalletPageServing) async {
|
||||
switch selectedTab {
|
||||
case .withdraw:
|
||||
await refreshWithdraw(api: api)
|
||||
case .transaction:
|
||||
await refreshTransaction(api: api)
|
||||
}
|
||||
}
|
||||
|
||||
/// 滚动到底部时加载更多提现记录。
|
||||
func loadMoreWithdrawIfNeeded(currentIndex: Int, api: any WalletPageServing) async {
|
||||
guard currentIndex >= withdrawRecords.count - 2, withdrawCanLoadMore, !withdrawLoading else { return }
|
||||
@ -336,6 +346,85 @@ enum WalletTransactionEntry: Hashable {
|
||||
case item(EarningDetailItem)
|
||||
}
|
||||
|
||||
/// 钱包记录状态的语义色调,由页面映射为模块内固定色值。
|
||||
enum WalletStatusTone: Equatable {
|
||||
case info
|
||||
case success
|
||||
case warning
|
||||
case danger
|
||||
}
|
||||
|
||||
/// 银行卡提现记录的状态展示映射,对齐 Android 结算进度和时间线可见性。
|
||||
struct WalletWithdrawStatusDisplay: Equatable {
|
||||
let tone: WalletStatusTone
|
||||
let progress: Int
|
||||
let showsTimeline: Bool
|
||||
|
||||
/// 根据后端结算状态创建展示数据。
|
||||
init(status: Int) {
|
||||
switch status {
|
||||
case 20:
|
||||
tone = .success
|
||||
progress = 80
|
||||
showsTimeline = true
|
||||
case 30:
|
||||
tone = .danger
|
||||
progress = 100
|
||||
showsTimeline = true
|
||||
case 40:
|
||||
tone = .warning
|
||||
progress = 40
|
||||
showsTimeline = true
|
||||
case 50:
|
||||
tone = .success
|
||||
progress = 100
|
||||
showsTimeline = false
|
||||
case 60:
|
||||
tone = .danger
|
||||
progress = 0
|
||||
showsTimeline = true
|
||||
default:
|
||||
tone = .info
|
||||
progress = status == 10 ? 10 : 100
|
||||
showsTimeline = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 积分兑现记录的状态文案、进度与时间字段映射。
|
||||
struct PointWithdrawStatusDisplay: Equatable {
|
||||
let title: String
|
||||
let tone: WalletStatusTone
|
||||
let progress: Int
|
||||
let timeTitle: String
|
||||
|
||||
/// 根据后端积分提现状态创建展示数据。
|
||||
init(status: Int) {
|
||||
switch status {
|
||||
case 1:
|
||||
title = "提现中"
|
||||
tone = .warning
|
||||
progress = 40
|
||||
timeTitle = "预计到账时间:"
|
||||
case 2:
|
||||
title = "提现成功"
|
||||
tone = .success
|
||||
progress = 0
|
||||
timeTitle = "到账时间:"
|
||||
case 3:
|
||||
title = "提现失败"
|
||||
tone = .danger
|
||||
progress = 100
|
||||
timeTitle = "审核时间:"
|
||||
default:
|
||||
title = "未知"
|
||||
tone = .info
|
||||
progress = 0
|
||||
timeTitle = "预计到账时间:"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 提现申请 ViewModel,管理金额、短信验证码、倒计时和提交状态。
|
||||
final class WithdrawViewModel {
|
||||
private(set) var withdrawInfo: WithdrawInfoResponse?
|
||||
|
||||
@ -888,8 +888,7 @@ struct WildReportDetailData: Decodable, Equatable, Hashable {
|
||||
id: content.id > 0 ? String(content.id) : content.time,
|
||||
submitTime: content.time,
|
||||
text: content.desc,
|
||||
imageCount: content.imageCount,
|
||||
videoCount: content.videoCount
|
||||
evidences: content.evidences
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -956,8 +955,11 @@ struct WildReportSupplementaryEvidence: Hashable {
|
||||
let id: String
|
||||
let submitTime: String
|
||||
let text: String
|
||||
let imageCount: Int
|
||||
let videoCount: Int
|
||||
let evidences: [WildReportDetailEvidence]
|
||||
|
||||
var imageCount: Int { evidences.filter(\.isImage).count }
|
||||
var videoCount: Int { evidences.filter(\.isVideo).count }
|
||||
var hasMedia: Bool { imageCount > 0 || videoCount > 0 }
|
||||
|
||||
var summaryText: String {
|
||||
var parts: [String] = []
|
||||
|
||||
Reference in New Issue
Block a user