从 iOS 17 Observation 迁移至 iOS 16 兼容的 Combine 架构
将最低部署版本降至 iOS 16,以 ObservableObject 替换 @Observable,新增导航与 UI 兼容层,并补充登录冒烟 UI 测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Observation
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
/// 钱包实名认证服务协议,抽象实名认证状态读取能力以便测试替换。
|
||||
@ -34,25 +34,24 @@ enum WalletLedgerTab: String, CaseIterable, Identifiable {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 钱包首页 ViewModel,管理钱包汇总、收益明细、提现记录和提现资格流。
|
||||
final class WalletViewModel {
|
||||
var summary: WalletSummaryResponse?
|
||||
var pointsOverview: PointOverviewResponse?
|
||||
var selectedTab: WalletLedgerTab = .earnings
|
||||
var selectedFilter: WalletDateFilter = .last30
|
||||
var earningsGroups: [WalletEarningDetailGroup] = []
|
||||
var withdrawRecords: [WalletWithdrawRecord] = []
|
||||
var isLoadingSummary = false
|
||||
var isLoadingList = false
|
||||
var isCheckingWithdraw = false
|
||||
var errorMessage: String?
|
||||
final class WalletViewModel: ObservableObject {
|
||||
@Published var summary: WalletSummaryResponse?
|
||||
@Published var pointsOverview: PointOverviewResponse?
|
||||
@Published var selectedTab: WalletLedgerTab = .earnings
|
||||
@Published var selectedFilter: WalletDateFilter = .last30
|
||||
@Published var earningsGroups: [WalletEarningDetailGroup] = []
|
||||
@Published var withdrawRecords: [WalletWithdrawRecord] = []
|
||||
@Published var isLoadingSummary = false
|
||||
@Published var isLoadingList = false
|
||||
@Published var isCheckingWithdraw = false
|
||||
@Published var errorMessage: String?
|
||||
|
||||
private let pageSize = 20
|
||||
private var earningsPage = 1
|
||||
private var earningsTotal = 0
|
||||
private var withdrawPage = 1
|
||||
private var withdrawTotal = 0
|
||||
@Published private var earningsPage = 1
|
||||
@Published private var earningsTotal = 0
|
||||
@Published private var withdrawPage = 1
|
||||
@Published private var withdrawTotal = 0
|
||||
|
||||
/// 钱包可提现金额展示文本。
|
||||
var withdrawableText: String {
|
||||
@ -225,16 +224,15 @@ final class WalletViewModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 提现申请 ViewModel,管理提现信息、金额校验、短信验证码和提交。
|
||||
final class WithdrawApplyViewModel {
|
||||
var info: WithdrawInfoResponse?
|
||||
var amountText = ""
|
||||
var smsCode = ""
|
||||
var isLoading = false
|
||||
var isSubmitting = false
|
||||
var smsCountdown = 0
|
||||
var errorMessage: String?
|
||||
final class WithdrawApplyViewModel: ObservableObject {
|
||||
@Published var info: WithdrawInfoResponse?
|
||||
@Published var amountText = ""
|
||||
@Published var smsCode = ""
|
||||
@Published var isLoading = false
|
||||
@Published var isSubmitting = false
|
||||
@Published var smsCountdown = 0
|
||||
@Published var errorMessage: String?
|
||||
|
||||
/// 加载提现申请所需信息。
|
||||
func load(api: WalletServing) async {
|
||||
@ -294,28 +292,27 @@ final class WithdrawApplyViewModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 银行卡设置 ViewModel,管理银行卡表单、图片上传、短信验证码和提交。
|
||||
final class WithdrawalSettingsViewModel {
|
||||
var bankCard: WalletBankCardInfo?
|
||||
var banks: [String] = []
|
||||
var areas: [AreaNode] = []
|
||||
var realName = ""
|
||||
var cardNumber = ""
|
||||
var bankName = ""
|
||||
var branchName = ""
|
||||
var provinceCode = ""
|
||||
var cityCode = ""
|
||||
var smsCode = ""
|
||||
var frontImageData: Data?
|
||||
var backImageData: Data?
|
||||
var frontImageURL = ""
|
||||
var backImageURL = ""
|
||||
var uploadProgress = 0
|
||||
var isLoading = false
|
||||
var isSubmitting = false
|
||||
var smsCountdown = 0
|
||||
var errorMessage: String?
|
||||
final class WithdrawalSettingsViewModel: ObservableObject {
|
||||
@Published var bankCard: WalletBankCardInfo?
|
||||
@Published var banks: [String] = []
|
||||
@Published var areas: [AreaNode] = []
|
||||
@Published var realName = ""
|
||||
@Published var cardNumber = ""
|
||||
@Published var bankName = ""
|
||||
@Published var branchName = ""
|
||||
@Published var provinceCode = ""
|
||||
@Published var cityCode = ""
|
||||
@Published var smsCode = ""
|
||||
@Published var frontImageData: Data?
|
||||
@Published var backImageData: Data?
|
||||
@Published var frontImageURL = ""
|
||||
@Published var backImageURL = ""
|
||||
@Published var uploadProgress = 0
|
||||
@Published var isLoading = false
|
||||
@Published var isSubmitting = false
|
||||
@Published var smsCountdown = 0
|
||||
@Published var errorMessage: String?
|
||||
|
||||
/// 加载银行卡设置需要的银行、地区和已提交资料。
|
||||
func load(api: WalletServing) async {
|
||||
@ -440,19 +437,18 @@ final class WithdrawalSettingsViewModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 积分兑换 ViewModel,管理积分概览、兑换记录、兑换金额校验和提交。
|
||||
final class PointsRedemptionViewModel {
|
||||
var overview = PointOverviewResponse()
|
||||
var records: [PointWithdrawItem] = []
|
||||
var pointsText = ""
|
||||
var isLoading = false
|
||||
var isSubmitting = false
|
||||
var errorMessage: String?
|
||||
final class PointsRedemptionViewModel: ObservableObject {
|
||||
@Published var overview = PointOverviewResponse()
|
||||
@Published var records: [PointWithdrawItem] = []
|
||||
@Published var pointsText = ""
|
||||
@Published var isLoading = false
|
||||
@Published var isSubmitting = false
|
||||
@Published var errorMessage: String?
|
||||
|
||||
private let pageSize = 20
|
||||
private var page = 1
|
||||
private var total = 0
|
||||
@Published private var page = 1
|
||||
@Published private var total = 0
|
||||
|
||||
/// 是否还能继续加载兑换记录。
|
||||
var canLoadMore: Bool {
|
||||
|
||||
Reference in New Issue
Block a user