接入订单列表V4继续处理入口

This commit is contained in:
andy
2026-07-20 11:15:19 +07:00
parent dfafd2c095
commit d7b24cbef7
8 changed files with 245 additions and 13 deletions

View File

@@ -101,7 +101,7 @@
| 接口 | 本轮变化 | 前端接入注意 |
| --- | --- | --- |
| `GET /api/reservation/orders` | 补齐订单列表 V4 继续处理入口字段。 | `order_status` 不传时默认查询全部订单状态;`page_num` 从 1 开始;`page_size` 后端有最大值保护;`open_task_count` 排除 `COMPLETED``FAILED`;旧 `next_processable_task_id` 继续保留。V4 新增 `next_v4_order_task_id``next_v4_action_card_id``next_v4_action_type``next_v4_action_status``v4_open_order_task_count`;前端“继续处理”存在 `next_v4_order_task_id` 应优先`/reservation/order-tasks/{next_v4_order_task_id}`,否则回退旧 `/reservation/tasks/{next_processable_task_id}`。 |
| `GET /api/reservation/orders` | 补齐订单列表 V4 继续处理入口字段;前端已接入。 | `order_status` 不传时默认查询全部订单状态;`page_num` 从 1 开始;`page_size` 后端有最大值保护;`open_task_count` 排除 `COMPLETED``FAILED`;旧 `next_processable_task_id` 继续保留。V4 新增 `next_v4_order_task_id``next_v4_action_card_id``next_v4_action_type``next_v4_action_status``v4_open_order_task_count`;前端“继续处理”已按优先级实现:存在 `next_v4_order_task_id` `/reservation/order-tasks/{next_v4_order_task_id}`,否则回退旧 `/reservation/tasks/{next_processable_task_id}`;两者都没有时展示无待处理状态。 |
| `GET /api/reservation/tasks` | 补齐来源邮件会话摘要字段,并新增 `order_status` 查询参数。 | `order_status` 按任务所属订单状态过滤,支持 `TEMPORARY``ACTIVE``ENDED``LOGIC_DELETED`列表仍然只返回安全摘要不返回正文、HTML、附件 URL 或 AI 原始 payload点击邮件入口时使用 `source_message_id` 调会话详情。 |
| `GET /api/reservation/orders/{orderId}` | 补齐旧 `tasks[]` 来源邮件会话摘要字段,并新增 V4 `v4_order_tasks[]` 订单任务时间线。 | `include_tasks=false` 可只取订单摘要,此时 `tasks[]``v4_order_tasks[]` 都为空;旧 `tasks[]` 顺序由后端按订单队列返回V4 `v4_order_tasks[]``source_received_at``source_message_id``order_context_index``created_at`、数字 ID 正序返回;前端不要自行重排。`include_source_summary` 第一版不作为前端裁剪字段的强约束,前端暂不要依赖它减少返回字段。 |
| `GET /api/reservation/tasks/{taskId}` | 补齐顶层来源邮件字段,并扩展 `fields[]` 元数据。 | 顶层来源字段用于打开邮件会话;`fields[]` 中的 `result_type``task_type``task_subtype``default_value_source` 用于前端字段分组、调试和白名单对齐。 |
@@ -185,7 +185,7 @@ POST /api/auth/logout
- `next_processable_task_id` 是后端按同订单队列实时计算出的下一条可处理任务;前端可以用它做“继续处理”入口。
- V4 订单任务入口字段由后端实时派生:`v4_open_order_task_count` 统计当前订单下 `order_task_status!=COMPLETED` 的 V4 订单任务;`next_v4_order_task_id` 是同订单第一条仍需用户处理的 V4 订单任务;`next_v4_action_card_id` 是该订单任务下第一张待处理卡;`next_v4_action_type``CONFIRM` / `REVIEW` / `NONE``next_v4_action_status``PENDING_CONFIRM` / `REVIEW_REQUIRED` 或空。
- V4 派生规则Basic Information 必须优先于业务卡Basic 已确认后,业务卡中 `REVIEW_REQUIRED` 优先于普通 `PENDING_CONFIRM``COMPLETED` 的 V4 订单任务不计入 openS10/S99 来源通知不挂订单,不进入这些订单列表字段。
- 前端订单列表“继续处理”建议优先级:有 `next_v4_order_task_id` 时跳 V4 订单任务详情;否则有旧 `next_processable_task_id` 时跳旧任务详情;`next_v4_action_type=NONE` 且旧字段为空时展示查看详情或无待处理状态。
- 前端订单列表“继续处理”已按该优先级接入:有 `next_v4_order_task_id` 时跳 V4 订单任务详情;否则有旧 `next_processable_task_id` 时跳旧任务详情;`next_v4_action_type=NONE` 且旧字段为空时展示无待处理状态,查看详情仍固定进入订单详情
- `display_order_key` 是前端优先展示的订单业务号或临时订单号;`group_code``confirmation_number` 只有在当前订单业务号类型匹配时返回。
- 订单 ID、任务 ID、SourceMessage ID 在这些前端接口中按字符串返回,前端不要转换成 JavaScript number。
- 当前 V3 / 过渡实现中,源邮件只读通知卡背后有隐藏技术订单用于满足后端任务外键,但订单列表不会返回该订单;任务列表中该类任务的 `display_order_key``temporary_order_no``group_code``confirmation_number` 可能为空前端不要因此隐藏整条任务。V4 S10/S99 目标模型已改为独立来源通知,不再挂隐藏技术订单。

View File

@@ -279,7 +279,7 @@ GET /api/reservation/orders/{orderId}
GET /api/reservation/orders
```
当前状态:后端已完成第一版。默认查询全部订单状态;`open_task_count` 排除 `COMPLETED``FAILED``next_processable_task_id` 按旧 V2/V3 同订单队列可处理状态实时计算。M002 V4 CP14 已补齐 V4 继续处理入口字段,前端 `next_v4_order_task_id` 时应优先进入 V4 订单任务详情。
当前状态:后端已完成第一版。默认查询全部订单状态;`open_task_count` 排除 `COMPLETED``FAILED``next_processable_task_id` 按旧 V2/V3 同订单队列可处理状态实时计算。M002 V4 CP14 已补齐 V4 继续处理入口字段,前端已按 `next_v4_order_task_id` 优先进入 V4 订单任务详情,并在无 V4 入口时回退旧任务详情
默认排序:按后端维护的订单最近业务活动时间倒序返回,保证最近有业务活动的订单排在前面。后端当前使用 `workflow_reservation_order.latest_activity_at` 作为排序字段,并在订单创建、任务创建、草稿保存、最终确认、人工复核解阻、任务状态变更等写路径维护;前端不要再基于任务时间或更新时间自行重排。
@@ -337,7 +337,7 @@ V4 继续处理字段说明:
| `next_v4_action_status` | `PENDING_CONFIRM` / `REVIEW_REQUIRED``NONE` 时为空。 |
| `v4_open_order_task_count` | 当前订单下未完成 V4 订单任务数,`COMPLETED` 不计入。 |
前端“继续处理”入口建议优先级:优先使用 `next_v4_order_task_id` 跳转 V4 订单任务详情;没有 V4 待处理时再使用旧 `next_processable_task_id` 跳旧任务详情。S10/S99 来源通知不创建订单,不进入订单列表字段统计。
前端“继续处理”入口优先级:优先使用 `next_v4_order_task_id` 跳转 V4 订单任务详情;没有 V4 待处理时再使用旧 `next_processable_task_id` 跳旧任务详情;两者都没有时展示无待处理状态。S10/S99 来源通知不创建订单,不进入订单列表字段统计。
## 6. 前端联调演示数据 seed 接口

View File

@@ -0,0 +1,96 @@
# M002 V4 CP14 Order List Entrypoint Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 接入 `GET /api/reservation/orders` 的 CP14 V4 下一步字段,让订单列表“继续处理”优先进入 V4 订单任务详情,并保留旧 V2/V3 任务详情回退。
**Architecture:** 类型层扩展订单列表返回字段,页面层新增一个纯展示/路由解析函数,按 `next_v4_order_task_id``next_processable_task_id``next_v4_action_type` 的优先级输出继续处理链接和标签。服务层继续透传后端 JSON不引入前端伪造逻辑S10/S99 仍不进入订单列表。
**Tech Stack:** Vue 3, TypeScript, Vue Router, Vue I18n, Vitest, Vue Test Utils.
## Global Constraints
- 不改后端接口。
- 不改 V4 卡片确认 / 复核提交逻辑。
- 不做 S10/S99 订单列表展示。
- 不废弃旧 V2/V3 任务详情页面。
- 不做真实 OPERA / OHIP。
- 提交时不带入 `.idea``client/dist.zip` 或其他无关工作区改动。
---
### Task 1: Failing Tests For Entrypoint Priority
**Files:**
- Modify: `client/src/tests/reservationViews.spec.ts`
**Interfaces:**
- Consumes: `ReservationOrderListItem.next_v4_order_task_id`, `next_processable_task_id`, `next_v4_action_type`, `next_v4_action_status`
- Produces: 测试覆盖 V4 优先、旧任务回退、无待处理、查看详情不变
- [x] **Step 1: Add test cases**
Add order list fixtures with:
- V4 `next_v4_order_task_id='9001'` and legacy `next_processable_task_id='10002'`
- legacy-only `next_processable_task_id='10002'`
- no next task and `next_v4_action_type='NONE'`
- [x] **Step 2: Verify red**
Run `CI=true pnpm --dir client test -- reservationViews.spec.ts`.
Expected: V4 priority assertion fails because the current component still links “继续处理” to `/reservation/tasks/10002`.
### Task 2: Types And UI Logic
**Files:**
- Modify: `client/src/types/reservation.ts`
- Modify: `client/src/views/reservation/ReservationOrderListView.vue`
**Interfaces:**
- Produces: `ReservationV4OrderListActionType`, `ReservationV4OrderListActionStatus` unions and `resolveContinueTarget(order)` page helper
- [x] **Step 1: Extend types**
Add optional nullable CP14 fields to `ReservationOrderListItem`.
- [x] **Step 2: Implement route priority**
`resolveContinueTarget(order)` returns `/reservation/order-tasks/{id}` when V4 ID exists, otherwise `/reservation/tasks/{id}` when legacy ID exists, otherwise `null`.
- [x] **Step 3: Add label**
Show a compact V4 action tag for `CONFIRM` / `REVIEW`, reusing status text for `PENDING_CONFIRM` / `REVIEW_REQUIRED`.
- [x] **Step 4: Verify green**
Run `CI=true pnpm --dir client test -- reservationViews.spec.ts`.
### Task 3: Documentation And Final Verification
**Files:**
- Modify: `docs/project/frontend-backend/backend-to-frontend-notes.md`
- Modify: `docs/project/frontend-backend/frontend-to-backend-api-requests.md`
- Modify: `PROJECT_STATE.md`
**Interfaces:**
- Produces: 前端已接入 CP14 的说明
- [x] **Step 1: Update docs**
Record that the frontend order list now consumes CP14 V4 entry fields and keeps legacy fallback.
- [x] **Step 2: Run verification**
Run:
- `CI=true pnpm --dir client lint`
- `CI=true pnpm --dir client typecheck`
- `CI=true pnpm --dir client test`
- `CI=true pnpm --dir client build`
- [x] **Step 3: Code review**
Review routing, types, docs, tests, and unrelated workspace files.
- [x] **Step 4: Commit**
Stage only related files and commit with a Chinese message.