Files
platforms/docs/操作日志_用户端APP_报修草稿_20260907.md

39 lines
3.9 KiB
Markdown
Raw Normal View History

# 用户端 App 报修草稿操作日志
操作时间2026-09-07开发环境时区。操作类型扩展。影响模块图05报修表单、本人照片读取。
## 操作前后
原先页面销毁会丢失表单和请求号。现在生产依赖注入 `SecureRepairDraftStore`,按 API 地址与认证账户隔离保存;照片先上传,草稿只保存 URI。点击暂存退出才离开失败保留表单。提交前持久化请求号与待确认标记未知结果恢复后复用原请求号恢复不自动提交成功才尝试清理草稿。
未发出的草稿恢复时重新查询本人地址,已删除地址回到选择步骤;未知提交保留首次地址快照。照片或草稿损坏不会自动删除,用户明确清除前提示先检查已有工单。
## 关键代码
- `apps/user_app/lib/data/services/repair_draft_store.dart`新建安全存储接口与实现schema=1只保留一个账户草稿。
- `apps/user_app/lib/ui/features/tickets/repair_page.dart``_loadDraft`49行`_persistDraft`173行`_saveAndExit`194行`_next`291行扩展恢复、保存、清理及发送顺序。
- `apps/user_app/lib/app/dependencies.dart``router.dart`:注入存储;测试可显式不持久化。
- `apps/user_app/lib/data/repositories/client_repository.dart`:认证草稿所属账户、受保护照片字节读取。
- `backend/api/internal/logic/upload/ticket_photo.go``ServeOwnedTicketPhoto`23行只构造当前账户目录。
- `backend/api/internal/logic/client/user/ticket_photo.go``UploadedTicketPhoto`34行先校验登录用户。
- `backend/api/internal/routers/client.go`新增第35行 GET `/ticket-photos/:name`。原有上传、工单照片和提交接口兼容。
- `test/data/repair_draft_store_test.dart``test/ui/repair_draft_test.dart`:隔离、恢复重试、写入失败、清理和损坏恢复覆盖。
- `tool/a1_visual_test.dart`:保留生产暂存入口的内存夹具。`scripts/compare-user-app-a1.ps1` 纳入图05并排核对。
仓库此前已有大量未提交变更,以上为本次职责范围;不把累积 Git 行数当作本次改动统计。没有新增依赖、数据库列、迁移或容器。
## 验证
- 用户端 analyze 无问题全量63项测试通过后新增损坏草稿案例草稿组件5项定向测试全部通过另有安全存储隔离1项通过。
- Go `test ./...``vet ./...` 通过新草稿图片读取测试覆盖本人200、他人404、路径穿越404、无效文件名404。`go build ./cmd/main` 通过。
- 平台契约同步与检查通过48个资源。
- 图05的8组宽度/文本缩放截图通过已实际打开设计源图及390像素实现图。步骤条、表单分区、照片占位和联系地址预览仍不同严格1:1未通过。
- Web Release 构建使用 `--dart-define=API_BASE_URL=http://127.0.0.1:12426`。首次遗漏该参数导致浏览器连接模拟器默认地址失败,已重新构建修正。
- 浏览器真实验证授权测试账户填写“草稿恢复浏览器验收只暂存不提交工单。”并选择既有蓝白验收图暂存返回个人中心。完整刷新后重新登录同一账户出现恢复提示选择恢复后文字与照片均正确显示。API运行日志记录一次草稿照片读取、零次工单创建请求。验收结束通过“不保存”删除本次草稿。
## 风险和维护
草稿保存在当前设备及浏览器存储,不跨设备同步;暂存照片需要网络。删除本地草稿不会删除可能已关联工单的照片,未关联文件的过期清理仍需独立实现。提交已成功但本地清理失败时保留原请求号,下次重试由后端返回原工单,避免重复创建。
继续使用原远程 PostgreSQL、Redis本机只运行 API 与 Web。语音、真实采集位置/时间、原生设备和完整设计还原仍未验收不能将本次草稿完成等同于图05或全部58图完成。