# LocationReport 模块业务逻辑

## 模块职责

LocationReport 模块负责首页 `location_report` 和 `location_report_history` 入口。

本模块包含当前位置获取、标记点、在线状态、立即上报、提醒设置、历史记录、类型筛选、日期筛选和分页。在线状态、倒计时和提醒设置与首页共享 `HomeLocationViewModel`。

## 数据来源

- 当前景区 ID 从 `AccountContext.currentScenic` 读取。
- 上报人员 ID 从 `AccountSnapshotStore.load()?.businessUserId` 读取，避免把业务账号 ID 复制进页面全局状态。
- 提交接口使用旧工程拼写 `/api/yf-handset-app/photog/loacation/report`。
- 历史接口使用 `/api/yf-handset-app/photog/loacation/list`。
- 超时检查接口使用 `/api/yf-handset-app/photog/loacation/detail`。

## 上报流程

`LocationReportViewModel` 管理当前位置、标记点和提交表单；`HomeLocationViewModel` 管理在线状态、倒计时、提醒和 API 提交。

1. 页面进入时请求一次前台定位。
2. 用户可以立即上报当前位置，也可以把当前位置设为标记点后上报。
3. 切换在线时提交 `type=1` 立即上报；切换离线时提交 `type=3` 离线上报。
4. 上报成功后按服务端 `expired`（过期 Unix 时间戳）重置倒计时，并持久化到本地；下次启动优先用本地过期时间戳计算剩余时间。服务端未返回时兜底为 2 小时。

## 历史流程

`LocationReportHistoryViewModel` 管理类型筛选、日期筛选、分页和错误状态。

历史记录支持 `全部`、`立即上报`、`标记点`、`离线上报` 四类筛选。分页失败只保留错误提示，不影响登录态和其他模块。

## 定位边界

当前只做前台手动定位和页面内倒计时。本轮不做后台持续定位、后台定时上报、离线持久化队列或推送提醒。

在线状态、过期时间戳、上次上报时间和提醒分钟通过 `LocationStateStore` 持久化；坐标表单仍只在页面内维护。

## 测试要求

新增位置上报逻辑时，需要同步补充 API、ViewModel 和路由测试。测试失败时先修复问题，再继续迁移后续功能。
