From 6a7761abbb8cdfadc891f00bf88c60476f7fd23b Mon Sep 17 00:00:00 2001 From: yueli Date: Mon, 21 Sep 2026 14:13:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(bom):=20=E8=8D=89=E7=A8=BF=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=E9=80=8F=E4=BC=A0=20BOM=20=E7=BA=A7=E5=A4=87=E6=B3=A8?= =?UTF-8?q?=EF=BC=8C=E5=8F=91=E5=B8=83=E5=90=8E=E4=B8=8D=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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级备注-测试' 草稿 → 发布 → 正式表 读回 '草稿备注-发布后应保留' --- inventory-backend/app/api/v1/bom.py | 9 ++++++++- inventory-backend/app/services/bom_draft_service.py | 9 +++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/inventory-backend/app/api/v1/bom.py b/inventory-backend/app/api/v1/bom.py index e3898f3..561ee40 100644 --- a/inventory-backend/app/api/v1/bom.py +++ b/inventory-backend/app/api/v1/bom.py @@ -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}}) diff --git a/inventory-backend/app/services/bom_draft_service.py b/inventory-backend/app/services/bom_draft_service.py index d48d861..a1c860d 100644 --- a/inventory-backend/app/services/bom_draft_service.py +++ b/inventory-backend/app/services/bom_draft_service.py @@ -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'],