Parcourir la source

前端删除缺陷时,后端不保存该数据,直接剔除

袁威 il y a 2 semaines
Parent
commit
f2867609eb
1 fichiers modifiés avec 9 ajouts et 2 suppressions
  1. 9 2
      app/api/formate_xy.py

+ 9 - 2
app/api/formate_xy.py

@@ -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")