fix(bom): 草稿链路透传 BOM 级备注,发布后不丢失

save_draft / get_draft_detail / publish_draft 三处此前都不带 BOM 级备注,
暂存后再恢复、或草稿直接发布,备注都会丢。

同时给 /save 的权限清洗表补上顶级 remark(与子件级 remark 共用
bom_manage:remark 权限码)。

注意:运行时真正生效的草稿入口是 bom.py:521 的 /draft/save。
app/api/v1/bom_draft.py 里的 bom_draft_bp 从未在 app/__init__.py 注册,
是死代码(两份都调同一个 BomDraftService,本次两处都改以保持同步)。

实测(临时 BOM,验证后已清理):
  草稿暂存带备注 → 读回 '草稿BOM级备注-测试'
  草稿 → 发布 → 正式表 读回 '草稿备注-发布后应保留'
This commit is contained in:
yueli
2026-09-21 14:13:14 +08:00
parent 0abc5850d8
commit 6a7761abbb
2 changed files with 15 additions and 3 deletions

View File

@ -198,6 +198,8 @@ def save_bom():
'version': 'bom_manage:version',
'is_enabled': 'bom_manage:status',
'bom_no': 'bom_manage:bom_no',
# ★ 顶级 remark = BOM 级备注,与子件级 remark 共用同一权限码
'remark': 'bom_manage:remark',
}
# 清洗顶级字段
for field in list(req_data.keys()):
@ -531,7 +533,12 @@ def save_draft():
if not parent_id:
return jsonify({'code': 400, 'msg': 'parent_id 不能为空'}), 400
bom_draft_no = BomDraftService.save_draft(bom_no, version, parent_id, children)
# ★ 这是运行时真正生效的草稿入口bom_draft.py 的 bom_draft_bp 未在
# app/__init__.py 注册是死代码BOM 级备注必须在这里透传
bom_draft_no = BomDraftService.save_draft(
bom_no, version, parent_id, children,
bom_remark=data.get('remark', '') or ''
)
return jsonify({'code': 200, 'msg': '草稿暂存成功', 'data': {'bom_no': bom_draft_no}})

View File

@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
class BomDraftService:
@staticmethod
def save_draft(bom_no, version, parent_id, children):
def save_draft(bom_no, version, parent_id, children, bom_remark=''):
try:
# 1. 删除旧草稿
old = BomDraftTable.query.filter_by(bom_no=bom_no, version=version).all()
@ -22,7 +22,8 @@ class BomDraftService:
if not children:
dummy_draft = BomDraftTable(
bom_no=bom_no, version=version, parent_id=parent_id,
child_id=None, dosage=0, loss_rate=0, remark=''
child_id=None, dosage=0, loss_rate=0, remark='',
bom_remark=bom_remark
)
db.session.add(dummy_draft)
else:
@ -34,6 +35,7 @@ class BomDraftService:
dosage=child.get('dosage', 0),
loss_rate=child.get('loss_rate', 0),
remark=child.get('remark', ''),
bom_remark=bom_remark,
child_bom_no=child.get('child_bom_no') or None,
child_bom_version=child.get('child_bom_version') or None
)
@ -87,6 +89,7 @@ class BomDraftService:
'parent_id': parent_id,
'parent_name': parent_material.name if parent_material else '',
'parent_spec': parent_material.spec_model if parent_material else '',
'remark': first.bom_remark or '', # ★ BOM 级备注
'children': children,
}
@ -125,6 +128,8 @@ class BomDraftService:
'bom_no': bom_no,
'version': version,
'parent_id': draft['parent_id'],
# ★ 草稿的 BOM 级备注要带到正式表,否则发布即丢失
'remark': draft.get('remark', '') or '',
'children': [
{
'child_id': child['child_id'],