import SwiftUI /// 金币流水(游标分页)。 @MainActor @Observable final class CoinHistoryViewModel { private(set) var items: [CoinTransactionDTO] = [] private(set) var isLoading = false private(set) var isLoadingMore = false private(set) var hasMore = false private(set) var loaded = false private var cursor: Int? private let wallet = WalletService() func loadFirst() async { guard !isLoading else { return } isLoading = true defer { isLoading = false; loaded = true } if let page = try? await wallet.coinTransactions(cursor: nil) { items = page.items cursor = page.nextCursor hasMore = page.nextCursor != nil } else { hasMore = false } } func loadMore() async { guard hasMore, !isLoading, !isLoadingMore, let cursor else { return } isLoadingMore = true defer { isLoadingMore = false } if let page = try? await wallet.coinTransactions(cursor: cursor) { items += page.items self.cursor = page.nextCursor hasMore = page.nextCursor != nil } } }