--- 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: "verified" frontend_owner: "mmg" frontend_ref: "e15dd73bd36a1d27374f9206797243f8a5e4326c" target_release: "" verified_at: "2026-09-23" 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,后端放开后即刻生效。 | 2026-09-23 mmg 交付:canConfigureSupplies 四态管三写入口,isMaterialPreparing 保留仅管确认物资" 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`