--- schema: "hl-changelog/v2" ticket: "frontend" title: "团期物资清单补改数量删除与手工录入" consumer: "admin" author: "wx(GIT)" change_type: "前端优化" backend_status: "not_required" gateway_status: "not_required" frontend_status: "pending" frontend_owner: "mmg" frontend_ref: "" target_release: "" verified_at: "" status_note: "纯前端条目,后端零改动。SuppliesPanel.vue:76 注释「调整数量 / 删除行 / 手工录入待后端补契约后接入」已过时——三个能力后端均已上线(改数量 PUT、删除 DELETE、手工录入复用 POST 的 suppliesName 分支,#6986)。原型「物资清单」Tab 的添加 / 删除操作因此可直接接入。" updated_at: "2026-09-17" base: "dev-v3" --- # 团期物资清单补改数量删除与手工录入(前端优化) > **服务**: hl-order-service-v3(后端零改动) > **页面**: 管理后台 `/order-v2/batch` → 团期详情 → 物资 Tab > **组件**: `src/views/order-v2/batch/detail/components/SuppliesPanel.vue`、`SuppliesPickerModal.vue` > **原型**: `团期需求1/_verify/proto_local/batchDetail.jsx`「物资清单」Tab > **前端基线**: `mmg/hl-ui` v2.1 @ `15e3d7d` > **日期**: 2026-09-17 > **影响范围**: 仅前台;无端点、无出入参、无路由、无 DDL 变化 --- ## ⚠️ 关键变化 🔵 **组件注释已过时。** `SuppliesPanel.vue:76` 写着「调整数量 / 删除行 / 手工录入**待后端补契约**后接入」, 这三项后端都已上线,可以直接接。 --- ## 一、原型要求 vs 当前渲染 | 原型功能 | 当前前端 | 后端接口 | |---|---|---| | 物资清单表 | ✅ 已有(候选列表 `added` 标记) | `GET …/{groupBatchId}/supplies/candidates` | | 从备品库加入 | ✅ 已有 | `POST …/{groupBatchId}/supplies`(传 `suppliesResourceId`) | | **添加物资(名称 + 数量规格)手工录入** | ❌ 缺 | 同一个 `POST`,传 `suppliesName` 不传 `suppliesResourceId` | | **行内改数量** | ❌ 缺 | `PUT …/supplies/{batchSuppliesId}/quantity` | | **删除物资(行尾 ✕)** | ❌ 缺 | `DELETE …/supplies/{batchSuppliesId}` | | 确认物资清单 | ✅ 已有 | `POST …/{groupBatchId}/confirm-material` | 接口前缀均为 `/v3/admin/order/group-batch`。 --- ## 二、本次调整 ### 2.1 已选清单改用团期物资列表 改数量、删除都要行 ID。建议已选清单直接读: ```http GET /v3/admin/order/group-batch/{groupBatchId}/supplies ``` 每行字段:`id`(即 `batchSuppliesId`)、`suppliesResourceId`(手工录入行为 null)、`suppliesName`、`category`、`hasCost`、`billingType`、`unitPrice`、`quantity`、`sortOrder`、`remark`。 候选接口的 `batchSuppliesId` 也能用,但手工录入的行不在候选库里,只有这个列表能看到。 ### 2.2 手工录入 ```http POST /v3/admin/order/group-batch/{groupBatchId}/supplies Content-Type: application/json { "suppliesName": "急救包", "category": "…", "quantity": 2, "remark": "规格:大号" } ``` - `suppliesName` 与 `suppliesResourceId` **二选一**:不传库 ID 时名称必填,否则报「备品名称不能为空(未指定备品库 ID 时必填)」 - `quantity` 必填 - 可选:`category`(字典 `supplies_category`)、`hasCost`、`billingType`、`unitPrice`、`sortOrder`、`remark` - 原型「数量规格」一栏:数量进 `quantity`,规格文字进 `remark` ### 2.3 改数量 ```http PUT /v3/admin/order/group-batch/supplies/{batchSuppliesId}/quantity Content-Type: application/json { "quantity": 3 } ``` ⚠️ 路径里**没有** `groupBatchId`。 ### 2.4 删除 ```http DELETE /v3/admin/order/group-batch/supplies/{batchSuppliesId} ``` 软删,删除后重新拉 2.1 的列表。 ### 2.5 共同约束 - **阶段门**:三个写操作只在团期 `batchStatus = MATERIAL_PREPARING` 时放行,其他阶段返回 `589520`「物资清单只能在『准备物资』阶段配置」。按钮按同一条件显隐或置灰,与现有「确认物资」一致 - **权限**:写操作 `group-batch:manage`,列表 `group-batch:view`(团期管理员均已授) - 物资确认后是否仍允许改:后端只看阶段(jw 2026-09-02 / 09-03 两次确认「只要还在准备物资就放行」),**前端不要另加只读判断** --- ## 三、不在本条范围 - 物资确认、从备品库选择:已上线,不改 - 备品库本身的维护(资源 → 备品):另一模块 --- ## 四、验证建议 1. 在 TEST 物料准备中的团里手工录入「急救包 ×2」,列表出现该行,`suppliesResourceId` 为空 2. 改数量为 3,刷新后仍为 3;删除后该行消失 3. 找一个资源准备中的团,三个写按钮不可用;强行调用返回 `589520`