# Statistics 模块业务逻辑 ## 模块职责 Statistics 模块负责登录后的数据 Tab,展示当前景区下的订单统计看板。 当前同步旧工程数据页的主要能力:时间段切换、统计汇总卡、每日明细、分页加载和下拉刷新。 ## 核心对象 - `StatisticsViewController`:数据 Tab 根页面,使用 `UICollectionView` + Diffable Data Source 展示多 section 看板。 - `StatisticsViewModel`:管理时间段、汇总数据、每日明细、分页状态和加载状态。 - `StatisticsAPI`:封装摄影师和景区管理员两套统计接口。 - `StatisticsPeriod`:表示今日、昨日、7日、本月四个快捷时间段。 ## 数据流程 页面从 `AccountContext.currentScenic` 获取当前景区 ID。缺少景区时显示空状态,不请求接口。 切换时间段时同时请求汇总接口和第一页日数据接口。汇总接口使用 `range` 参数,日数据接口使用 `start_time`、`end_time`、`page` 和 `page_size`。 `roleId == 53` 时使用景区管理员接口,其他角色使用摄影师接口。日数据响应使用 `DataListPayload` 解码,兼容后端返回 `data` 或 `list` 字段。 ## 分页规则 每日明细第一页随刷新或时间段切换加载。列表滚动到底部后,如果当前数量小于 total,则继续加载下一页。加载更多失败时保留已有数据和当前页状态。 ## 列表实现 - Section:`empty`(无景区)、`period`(周期切换)、`summary`(汇总卡)、`daily`(每日明细,带 section 头「每日明细」) - 使用 `UICollectionViewDiffableDataSource` + `NSDiffableDataSourceSnapshot` 驱动刷新,分页追加时保留插入动画 - 布局复用 `CollectionDiffableLayout` 全宽 section;最后一项日明细 `willDisplay` 时触发 `loadMore`