Files
platforms/docs/操作日志_用户端APP_工单操作_20260907.md
czl231 3ef33b531d 已完成用户APP首期功能开发
交付用户端首期页面、配套接口、后台资源及测试文档。用户APP构建、静态分析和三个管理后台构建通过;完整测试仍有2项失败,后端模型注释检查未通过,详见交付记录。
2026-09-13 00:57:32 +08:00

46 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 用户端 App 工单详情与操作日志
操作时间2026-09-07。操作类型扩展、修复。影响模块Flutter 用户端、Go 用户工单 API。
## 操作前后
原报修标签只有只读记录,确认和取消虽已有接口但未接入页面,重复提交动作返回错误,归档记录没有被动作查询排除。
新增 `/tickets/:identity` 独立页面,由订单的报修标签进入。详情重新查询本人列表,展示编号、中文状态、服务类型、描述、地址快照、预约时间、开始处理时间、结果和完成时间。只展示已存在的时间,不生成受理或工程师到达记录。返回后列表刷新。
用户先确认再调用取消或完成接口。失败保留详情并允许重试成功重新读取状态和许可动作。后端事务锁定本人工单取消沿用既有32/18/11/21/34范围22重复成功确认仅允许3423重复成功并保留首次完成时间。归档、越权及其他状态拒绝。列表增加 `status_name``allowed_actions`,兼容原字段并移除内部主键。
## 核心文件
| 文件 | 关键位置及职责 |
| --- | --- |
| backend/api/internal/logic/client/user/address_ticket.go | 第80行 ListTickets 增加展示契约第100行 ticketState 集中已有许可第128行 changeTicketState 处理事务、所有权、状态和幂等 |
| backend/api/internal/logic/client/user/ticket_actions_test.go | 新增10种动作边界、终态许可、列表归属和内部ID剥离测试 |
| apps/user_app/lib/domain/models/service_ticket.dart | 第5行 ServiceTicket 适配真实字段与本地时间,未知状态不自行授权 |
| apps/user_app/lib/data/repositories/client_repository.dart | 第115行 ticket 兼容列表读取详情第124/128行取消与确认请求 |
| apps/user_app/lib/ui/features/tickets/ticket_detail_page.dart | 新增详情第24行 _act 控制确认、失败和刷新第185行 _field 对齐原稿左右字段布局 |
| apps/user_app/lib/app/router.dart | 增加受已有登录守卫保护的工单路由 |
| apps/user_app/lib/ui/features/orders/orders_page.dart | 报修记录可点击,详情返回刷新 |
| apps/user_app/lib/ui/core/widgets.dart | RecordCard 优先使用服务端中文状态,保留旧状态回退 |
| apps/user_app/test/ui/ticket_detail_page_test.dart | 取消确认不写、失败不丢详情、重试成功刷新、终态动作消失 |
| apps/user_app/test/support/a1_fixture.dart、tool/a1_visual_test.dart | 独立测试工单图42八组截图不作为运行时数据 |
| scripts/compare-user-app-a1.ps1 | 纳入图42并排对照 |
没有新增运行依赖、后端路由或数据库字段,本阶段无需迁移。后续照片、人员与预约能力仍应沿用既有工单模型和服务端权限边界,不将前端演示数据写入业务表。
## 验证结果
- `go test ./...``go vet ./...`、API构建通过追加列表契约测试后`go test ./internal/logic/client/user -run Ticket -count=1` 通过。
- Flutter 全部57项测试通过布局调整后两个工单动作测试再次通过。`flutter analyze --no-pub` 无问题Web release构建通过。
- 图42在320/360/390/430宽度和1.0/1.3文字缩放共8项截图与滚动溢出检查通过。已实际打开原图和390截图不能解释为1:1通过。
- 本地 API 连接原配置的远程 PostgreSQL、Redis未启动或使用本机数据库/缓存,未执行迁移、清库、种子或容器操作。
- 远程测试账号创建临时工单 `TK1788792440299487600`初态待受理、许可cancel。浏览器从报修列表进入查看真实描述确认取消详情变为已取消、按钮消失返回列表也为已取消。只操作本次临时工单未改原MOCK-TICKET-001。临时记录保留为取消状态不物理删除。
- 浏览器 error/warn 控制台为空。真实完成确认没有通过篡改工作人员工单状态来制造测试数据当前证据为SQLMock与Widget测试。
- 测试期间修复确认弹窗背后的多余加载动画;发送请求时才显示进度。调整初版字段上下布局为左右布局,长地址自然换行。
## 视觉与功能差距
图42仍缺现场照片、工程师资料与受控电话、完整历史进度、预约改期、补充资料、紧急联系链路。图05仍是旧文字报修弹窗未实现三步表单、照片及采集时间/定位、语音和草稿;创建接口的完整幂等与表单快照也待该阶段处理。此次只是详情和已有动作闭环,不能算完整报修功能或严格还原。
当前58图统计更新为9张部分实现、49张尚无对应完整页面、0张严格全功能与1:1通过。维护时先核对05/42原图和跨端工单字段扩展上传必须保护证据所有权和访问权限不能把设计中的样例照片当作用户提交证据。