4.8 KiB
4.8 KiB
用户端 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原图和跨端工单字段,扩展上传必须保护证据所有权和访问权限;不能把设计中的样例照片当作用户提交证据。