---
schema: "hl-changelog/v2"
ticket: "8231"
title: "物资 tab 的写入口仍按 MATERIAL_PREPARING 前置隐藏——后端已放开到出行前四态,前端不改则运营点不到入口"
consumer: "admin"
author: "jw(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: "#8231 后端已把物资三个写接口(新增行 / 改数量 / 软删行)的阶段门从单一 MATERIAL_PREPARING 放宽到出行前四态(RECRUITING / RESOURCE_PREPARING / MATERIAL_PREPARING / PENDING_DEPARTURE),2026-09-23 已部署 TEST 并四态逐一实测通过。但 SuppliesPanel.vue 里有一个 isMaterialPreparing 计算属性把手工录入按钮、操作列表头、数量行内编辑、删除按钮四处一并前置隐藏,非 MATERIAL_PREPARING 阶段物资 tab 仍是一张没有操作列的只读表,运营点不到任何入口——后端这次放开在界面上等于没发生。需要把这四处的判据从「等于 MATERIAL_PREPARING」改成「在出行前四态之内」。注意「确认物资」按钮(同文件 28 行)走的是另一个接口 confirm-material,#8231 没有放开它,那一处的阶段门要原样保留、不要跟着一起改。配导游 / 配摄影侧前端零改动:ChipItemsPanel.vue 的配置按钮条件只有 v-if=configRole,不看 batchStatus,后端放开后即刻生效。"
updated_at: "2026-09-23"
base: "dev-v3"
---
# 团期物资 tab: 写入口的阶段门需从单一阶段放宽到出行前四态(管理后台)
> **仓库 / 分支**: `mmg/hl-ui` @ `v2.1`
> **文件**: `src/views/order-v2/batch/detail/components/SuppliesPanel.vue`
> **Issue**: #8231
> **日期**: 2026-09-23
> **影响范围**: 团期详情页「物资」tab 的操作列与三个写入口
---
## ⚠️ 关键变化
后端已经放开,**前端不改则本次改动在界面上等于没发生**。
`RESOURCE_PREPARING`(资源准备中)是最典型的一态:团期要集齐四项 ready(房 / 车 / 导 / 摄)才推得进
`MATERIAL_PREPARING`,所以今天运营抱怨「物资配不了」,多数时候团期正停在 `RESOURCE_PREPARING`。
后端这次就是为这个场景放开的,而前端在这一态下连操作列都不渲染。
---
## 一、后端现状(已部署 TEST 并实测)
| 接口 | 方法 | 路径 | 改后可用状态 |
|---|---|---|---|
| 新增备品行 | POST | `/v3/admin/order/group-batch/{groupBatchId}/supplies` | 出行前四态 |
| 调整数量 | PUT | `/v3/admin/order/group-batch/supplies/{batchSuppliesId}/quantity` | 出行前四态 |
| 软删备品行 | DELETE | `/v3/admin/order/group-batch/supplies/{batchSuppliesId}` | 出行前四态 |
出行前四态 = `RECRUITING` / `RESOURCE_PREPARING` / `MATERIAL_PREPARING` / `PENDING_DEPARTURE`。
出行后(`TRAVELLING` / `TRIP_FINISHED` / `REVIEWING` / `SETTLED`)与 `CANCELLED` 仍拒,
**错误码从 589520 换成了 589598**,文案「出行后不可再配置导游 / 摄影 / 物资」。
TEST 实测(2026-09-23,`dev-v3` @ `fe752f16c`):四态各跑「增 → 改数量 → 删」三端点共 12 次调用全 200;
三个出行后态各返 589598 且零写入。
---
## 二、前端需要改的四处(行号按 `origin/v2.1` @ `f713b1c6`)
| # | 行 | 现状 | 期望 |
|---|---|---|---|
| 1 | 16 | `v-if="isMaterialPreparing"` —— 「手工录入」按钮 | 出行前四态可见 |
| 2 | 52 | `操作` —— 操作列表头 | 出行前四态可见 |
| 3 | 81 | `v-if="isMaterialPreparing"` —— 数量 `n-input-number` 行内编辑(否则走 `v-else` 的只读纯文本) | 出行前四态可编辑 |
| 4 | 94 | `` —— 整个删除按钮单元格 | 出行前四态可见 |
判据单源在 179 行:
```js
// #7528 阶段门:仅物料准备中可见三个写操作与确认入口(其余状态后端仍守,前端前置隐藏)
const isMaterialPreparing = computed(() => props.detail?.batchStatus === 'MATERIAL_PREPARING')
```
连带两处会自动跟着变,确认改后表现正常即可:
- 183 行 `gridColumns`:操作列出现与否决定列宽是 6 列还是 5 列
- 188 行 `emptyText`:空态文案分「可从备品库选择或手工录入」与「本期尚未配置物资」两种
---
## 三、⚠️ 不要一起改的两处
| 位置 | 原因 |
|---|---|
| 28 行「确认物资」按钮 | 它调的是 `POST /v3/admin/order/group-batch/{groupBatchId}/confirm-material`,属七项硬门准入链路,**#8231 没有放开它**。那一处的 `MATERIAL_PREPARING` 判据要原样保留 |
| 4 行「从备品库选择」按钮 | 它本来就没挂阶段门、一直可见。改前它在非 `MATERIAL_PREPARING` 下点了会被 589520 拒,改后四态内可正常落库——**不需要改代码,但回归时要覆盖它** |
因为 28 行与那四处不再同一个判据,建议把 179 行拆成两个计算属性(例如「可配置窗口」与「可确认物资」),
而不是把现有的 `isMaterialPreparing` 就地改语义——后者会把确认物资一起放开,那是另一件事。
---
## 四、配导游 / 配摄影侧:前端零改动
`ChipItemsPanel.vue` 的配置按钮条件只有 `v-if="configRole"`,不看 `batchStatus`;
弹窗只有 `:disabled="!rosterReady"`(名单加载态)。招募中按钮本来就渲染、点得下去,
只是改前后端回 589552 被拦截器透成 toast。后端放开后该路径即刻可用,无需前端配合。
---
## 五、错误文案
按 589520 做分支的地方需要改认 **589598**。589520 未退役(保留占位防号段复用),但物资三口不再抛它。
---
## 六、回归建议
在 `RESOURCE_PREPARING` 的团期上验:操作列出现 → 手工录入一行 → 改数量 → 删除 → 从备品库选择再加一行。
再在 `REVIEWING` 或 `TRIP_FINISHED` 的团期上验:操作列不出现,且即便直接打接口也返 589598。
---
## 关联 / 联系人
- 后端:jw(#8231,PR #8234 / #8237,已部署 TEST)
- 前端:mmg
- 同批后端条目:`23_8231_配导游配摄影物资放开到出行前四态-修改接口-管理后台.md`
- 前例:`17_frontend_团期物资清单补改数量删除与手工录入-前端优化-管理后台.md`