# Shipment 驳回逻辑更新说明（给前端）

本文档用于同步 2026-04-17 起 `Shipment` 驳回逻辑的最新行为。

## 结论

- 出货单状态从 `已发布` 改为 `已驳回` 时，系统会自动解绑该出货单当前绑定的所有销售品
- 被解绑的销售品会重新回到“待分配/待出货”池
- 因此这些销售品会重新出现在默认的销售品查询接口中
- 后端会保留一份驳回前销售品 ID 快照用于审计，但这个字段当前不对前端返回

## 对前端的影响

### 1. 出货单详情页

- 如果一个出货单被驳回，再次查询该出货单详情时，`sales_items` 通常会变成空数组
- `items_count` 也会随之变为 `0`
- 这不是数据丢失，而是因为销售品已经被退回待分配池

### 2. 销售品选择页 / 待分配列表

- 原先属于该出货单的销售品，在驳回后会重新出现在默认查询结果里
- 包括这些接口的默认结果：
  - `GET /api/v1/shipment/sales-items/customers/`
  - `GET /api/v1/shipment/sales-items/by-customer/{customer_id}/`
  - `GET /api/v1/shipment/sales-items/by-printing-order/{printing_order_id}/`

### 3. 状态流转按钮

- `已驳回 -> 已审核` 这条路径已临时关闭
- 前端如果有“驳回后再次审核”的按钮或操作入口，需要先隐藏或禁用
- 当前 `已驳回` 状态只允许继续走 `已取消`

## 当前不变的地方

- 驳回接口本身没有新增请求参数
- 驳回接口当前也没有新增响应字段
- 审计字段 `rejected_sales_item_ids` 仅在后端内部使用，前端暂时拿不到

## 建议前端处理方式

- 当用户把出货单驳回成功后，前端应刷新：
  - 当前出货单详情
  - 销售品待分配列表
  - 客户待出货统计
- 如果页面存在“已驳回后继续审核”的操作，需要立即下线或禁用

## 可直接复制的简版说明

```md
出货单驳回逻辑已更新：

1. 出货单从“已发布”改成“已驳回”后，系统会自动解绑该出货单当前绑定的所有销售品。
2. 被解绑的销售品会重新回到待分配池，所以会重新出现在默认的销售品查询结果里。
3. 驳回后的出货单详情中，`sales_items` 通常会变成空数组，`items_count` 也会变成 0，这是预期行为。
4. 后端会保留一份驳回前绑定销售品 ID 的审计快照，但这个字段当前不对前端返回。
5. `已驳回 -> 已审核` 已临时关闭，前端如有对应按钮请隐藏或禁用。
```