持久化服务端 expired 过期时间戳以正确恢复倒计时,切换在线/离线与上报时展示定位 Loading,移除重复的成功 Alert,并将 Toast 调整为居中半透明样式。 Co-authored-by: Cursor <cursoragent@cursor.com>
2.1 KiB
2.1 KiB
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 提交。
- 页面进入时请求一次前台定位。
- 用户可以立即上报当前位置,也可以把当前位置设为标记点后上报。
- 切换在线时提交
type=1立即上报;切换离线时提交type=3离线上报。 - 上报成功后按服务端
expired(过期 Unix 时间戳)重置倒计时,并持久化到本地;下次启动优先用本地过期时间戳计算剩余时间。服务端未返回时兜底为 2 小时。
历史流程
LocationReportHistoryViewModel 管理类型筛选、日期筛选、分页和错误状态。
历史记录支持 全部、立即上报、标记点、离线上报 四类筛选。分页失败只保留错误提示,不影响登录态和其他模块。
定位边界
当前只做前台手动定位和页面内倒计时。本轮不做后台持续定位、后台定时上报、离线持久化队列或推送提醒。
在线状态、过期时间戳、上次上报时间和提醒分钟通过 LocationStateStore 持久化;坐标表单仍只在页面内维护。
测试要求
新增位置上报逻辑时,需要同步补充 API、ViewModel 和路由测试。测试失败时先修复问题,再继续迁移后续功能。