// // PaymentCollectionRecordViewModel.swift // suixinkan // import Foundation /// 收款记录 ViewModel,拉取近 7 天记录并按日分组展示。 final class PaymentCollectionRecordViewModel { private(set) var loading = false private(set) var groups: [RepaymentCollectionRecordGroup] = [] var onStateChange: (() -> Void)? private let appStore: AppStore init(appStore: AppStore = .shared) { self.appStore = appStore } func loadRecord(api: PaymentAPI) async { guard !loading else { return } loading = true notifyStateChange() defer { loading = false notifyStateChange() } let scenicId = appStore.session.currentScenicId guard scenicId > 0 else { groups = [] return } do { let response = try await api.collectionRecord(scenicId: scenicId) groups = PaymentRecordGrouper.group(response: response) } catch { groups = [] } } private func notifyStateChange() { onStateChange?() } } /// 收款记录分组逻辑,对齐 Android `PaymentCollectionRecordViewModel.getRecord`。 enum PaymentRecordGrouper { static func group(response: RepaymentCollectionRecordResponse) -> [RepaymentCollectionRecordGroup] { let mapByDate = Dictionary(grouping: response.list, by: \.createDate) return response.analyse.map { analyseItem in RepaymentCollectionRecordGroup( analyse: analyseItem, items: mapByDate[analyseItem.date] ?? [] ) } } }