|
|
@@ -79,6 +79,7 @@ def _prepare_recalculate_payload(edited_json: dict, source_json: dict) -> dict:
|
|
|
"""
|
|
|
以数据库里的原始 JSON 为底稿,合并前端编辑结果,得到更稳定的重算入参。
|
|
|
当前仅明确覆盖 defects;center_result 只有在前端传了非空 shapes 时才覆盖。
|
|
|
+ 对前端标记为删除(edit_type=del)的缺陷,在这里直接过滤,避免重算后再次写回 modified_json。
|
|
|
"""
|
|
|
base = copy.deepcopy(source_json) if isinstance(source_json, dict) else {}
|
|
|
incoming = edited_json if isinstance(edited_json, dict) else {}
|
|
|
@@ -95,14 +96,20 @@ def _prepare_recalculate_payload(edited_json: dict, source_json: dict) -> dict:
|
|
|
if not isinstance(incoming_result, dict):
|
|
|
incoming_result = {}
|
|
|
|
|
|
- # defects 使用前端编辑结果覆盖
|
|
|
+ # defects 使用前端编辑结果覆盖;前端标记删除的项不参与重算,也不写回 modified_json
|
|
|
incoming_defects = (
|
|
|
incoming_result.get("defect_result", {}).get("defects", [])
|
|
|
if isinstance(incoming_result.get("defect_result", {}), dict)
|
|
|
else []
|
|
|
)
|
|
|
base["result"].setdefault("defect_result", {})
|
|
|
- base["result"]["defect_result"]["defects"] = incoming_defects if isinstance(incoming_defects, list) else []
|
|
|
+ filtered_defects = []
|
|
|
+ if isinstance(incoming_defects, list):
|
|
|
+ filtered_defects = [
|
|
|
+ defect for defect in incoming_defects
|
|
|
+ if not (isinstance(defect, dict) and defect.get("edit_type") == "del")
|
|
|
+ ]
|
|
|
+ base["result"]["defect_result"]["defects"] = filtered_defects
|
|
|
|
|
|
# center_result 仅在前端有有效 shapes 时覆盖;否则沿用底稿
|
|
|
incoming_center = incoming_result.get("center_result")
|