46 lines
4.8 KiB
Markdown
46 lines
4.8 KiB
Markdown
# 用户端 App 工单详情与操作日志
|
||
|
||
操作时间:2026-09-07。操作类型:扩展、修复。影响模块:Flutter 用户端、Go 用户工单 API。
|
||
|
||
## 操作前后
|
||
|
||
原报修标签只有只读记录,确认和取消虽已有接口但未接入页面,重复提交动作返回错误,归档记录没有被动作查询排除。
|
||
|
||
新增 `/tickets/:identity` 独立页面,由订单的报修标签进入。详情重新查询本人列表,展示编号、中文状态、服务类型、描述、地址快照、预约时间、开始处理时间、结果和完成时间。只展示已存在的时间,不生成受理或工程师到达记录。返回后列表刷新。
|
||
|
||
用户先确认,再调用取消或完成接口。失败保留详情并允许重试;成功重新读取状态和许可动作。后端事务锁定本人工单;取消沿用既有32/18/11/21/34范围,22重复成功;确认仅允许34,23重复成功并保留首次完成时间。归档、越权及其他状态拒绝。列表增加 `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原图和跨端工单字段,扩展上传必须保护证据所有权和访问权限;不能把设计中的样例照片当作用户提交证据。
|