> **先读** [`shb-warehouse-bom-mutation-common.md`](shb-warehouse-bom-mutation-common.md)（本域全部变更安全规则的唯一出处，含组件「全量替换式 diff」与 fetch-then-merge、禁带 `children`、`edit status` 翻转包装语义）。

# shb-cli warehouse bom edit（编辑物料服务BOM与启停用）

覆盖 `bom edit`（编辑 BOM 头/组件）与 `bom edit status`（启停用）。

## 编辑 BOM（`bom edit`）

```bash
# 只改备注，组件和产品目录关联自动保持不变
shb-cli warehouse bom edit --id <bomId> --remark "改一下备注"

# 改主物料关联（会重新触发"一物料一BOM"唯一性校验）
shb-cli warehouse bom edit --id <bomId> --material-id <新主物料id>
```

- `--id` 必填，是 BOM 自身的 `id`（不是物料 id）。
- BOM 头字段本身是选择性更新（漏传的字段不受影响），但组件物料是"全量替换式 diff"——快捷 flag 模式已自动 fetch-then-merge 处理（机制见 mutation-common 安全规则第 2 条）。
- **`--data`/`--file` 模式需要自己先查后改**：先用 `bom materials --bom-id <id>`（见 [`shb-warehouse-bom-detail.md`](shb-warehouse-bom-detail.md)）或 `bom search --data '{"ids":[<id>],"componentFlag":true}'` 拿到当前完整组件列表，再在此基础上只改要改的部分提交；任何一项都**绝不能带 `children` 字段**（原因见 mutation-common 安全规则第 3 条）。

## 启用/禁用 BOM（`bom edit status`）

```bash
shb-cli warehouse bom edit status --id <bomId> --status true    # 设为启用
shb-cli warehouse bom edit status --id <bomId> --status false   # 设为禁用
```

`--status` 必填。命令内部会先查当前状态再决定是否调用接口（机制见 mutation-common 安全规则第 5 条），重复执行同一目标状态是安全的、不会误翻转。
