import SwiftUI /// 比价记录列表(游标分页),对齐安卓 CompareRecordsViewModel。 @MainActor @Observable final class CompareRecordsViewModel { private(set) var records: [ComparisonRecordDTO] = [] private(set) var isLoading = false private(set) var isLoadingMore = false private(set) var hasMore = false private(set) var loaded = false private(set) var errorMessage: String? private var cursor: Int? private let service = CompareService() func loadFirst() async { guard !isLoading else { return } isLoading = true errorMessage = nil defer { isLoading = false; loaded = true } do { let page = try await service.records(cursor: nil) records = page.items cursor = page.nextCursor hasMore = page.nextCursor != nil } catch { errorMessage = (error as? LocalizedError)?.errorDescription ?? "加载失败,请下拉重试" } } func loadMore() async { guard hasMore, !isLoading, !isLoadingMore, let cursor else { return } isLoadingMore = true defer { isLoadingMore = false } do { let page = try await service.records(cursor: cursor) records += page.items self.cursor = page.nextCursor hasMore = page.nextCursor != nil } catch { // 加载更多失败静默 } } }