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()