From 58e8a9f5b30b3397d8e4c7999ca2d7a9f3cc3762 Mon Sep 17 00:00:00 2001 From: Hermes CI Fix Date: Mon, 17 Aug 2026 09:49:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A9=BA=E7=99=BD=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=A4=B1=E8=B4=A5=20=E2=80=94=20dimensions?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=9B=9B=E5=B1=82=E7=A9=BA=E7=BB=93=E6=9E=84?= =?UTF-8?q?+review=20NULL=E5=AE=B9=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/maps.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/backend/app/api/maps.py b/backend/app/api/maps.py index 04043a50..e9e6703a 100644 --- a/backend/app/api/maps.py +++ b/backend/app/api/maps.py @@ -66,6 +66,16 @@ def list_maps(db: Session = Depends(get_db)): @router.post("") def create_map(data: dict, db: Session = Depends(get_db)): + # 空白地图默认四层空结构(避免dimensions=NULL导致加载报错) + if "dimensions" not in data or data.get("dimensions") is None: + data = {**data, "dimensions": [ + {"key": "finance", "name": "财务层", "icon": "💰", "color": "#F56C6C", "objectives": []}, + {"key": "customer", "name": "客户层", "icon": "👥", "color": "#409EFF", "objectives": []}, + {"key": "process", "name": "流程层", "icon": "⚙️", "color": "#67C23A", "objectives": []}, + {"key": "learning", "name": "学习层", "icon": "📚", "color": "#E6A23C", "objectives": []}, + ]} + if "canvas_data" not in data or data.get("canvas_data") is None: + data = {**data, "canvas_data": {"connections": []}} m = StrategicMap(**data) db.add(m) db.commit() @@ -283,6 +293,7 @@ def _sync_map_objectives(m, db): dims = m.dimensions if isinstance(dims, str): dims = json.loads(dims) + dims = dims or [] for dim in dims: for i, obj in enumerate(dim.get("objectives", [])): mo = MapObjective( @@ -306,6 +317,7 @@ def _merge_map_objectives(m, db): dims = m.dimensions if isinstance(dims, str): dims = json.loads(dims) + dims = dims or [] # 按dimension_key分组 from collections import defaultdict grouped = defaultdict(list) @@ -347,6 +359,7 @@ def get_map_review(map_id: int, level: Optional[str] = None, db: Session = Depen dims = m.dimensions if isinstance(dims, str): dims = json.loads(dims) + dims = dims or [] # NULL容错 # 收集所有KPI code all_kpi_codes = set()