# 战略地图配置器增强 — 技术方案 v1.0 ## 1. 概述 在现有 StrategicMap 模型的基础上,补全 Epic 1 战略地图配置器的 6 个 Feature 缺口。 本次开发覆盖 P0(因果连线 + 组织层级)+ P1(目标优化 + 版本管理)+ P2(模板加载 + 拖拽关联)。 ## 2. 现有系统基础(不改动) - `strategic_maps` 表:id, title, version, status, dimensions(JSON), canvas_data(JSON), created_at, updated_at - `kpi_definitions` 表:id, map_id(FK), kpi_code, kpi_name, dimension, objective, target_value ... - `MapList.vue` / `MapCanvas.vue` ## 3. 各 Feature 详细方案 --- ### Feature 1.3 因果连线 (P0 RED) #### 后端变更 **现状**:canvas_data.connections 字段存 JSON,但无独立 API **方案**:不新增表,沿用 canvas_data.connections,但新增独立 CRUD API 来操作连线 ``` POST /api/cma/maps/{map_id}/connections body: {from_objective_id, to_objective_id} DELETE /api/cma/maps/{map_id}/connections/{idx} ``` **连线数据模型**: ```json { "connections": [ { "from": "learning-0", "to": "process-0", "style": "solid" }, { "from": "process-0", "to": "customer-1", "style": "solid" } ] } ``` #### 前端变更 1. **集成 @vue-flow/core**(推荐) - 每个目标卡片作为 Flow 节点 - 拖拽手柄生成连线 - 支持 hover 高亮、右键删除 2. **备选:自建 SVG 交互层** - 点击目标A 进入连线模式 - 点击目标B 生成连线 - hover 连线上出现删除按钮 --- ### Feature 1.5 组织层级配置 (P0 RED) #### 后端 — 新表 ```sql CREATE TABLE org_nodes ( id INT AUTO_INCREMENT PRIMARY KEY, parent_id INT DEFAULT NULL, name VARCHAR(100) NOT NULL, code VARCHAR(50) UNIQUE, level TINYINT NOT NULL, -- 1=集团 2=事业部 3=区域 4=部门 5=班组 sort_order INT DEFAULT 0, enabled TINYINT(1) DEFAULT 1, path VARCHAR(500), remark VARCHAR(200), created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (parent_id) REFERENCES org_nodes(id) ); ``` #### API ``` GET /api/cma/org/tree # 全量树结构 GET /api/cma/org/nodes # 平铺列表 POST /api/cma/org/nodes # 新增节点 PUT /api/cma/org/nodes/{id} # 修改节点 DELETE /api/cma/org/nodes/{id} # 删除节点 PUT /api/cma/org/nodes/{id}/toggle # 切换启用/禁用 ``` #### 前端 - Element Plus `` 组件展示树 - 右键菜单:添加子节点 / 编辑 / 启用禁用 / 删除 - 拖拽排序 --- ### Feature 1.2 战略目标管理增强 (P1 YELLOW) 新建 map_objectives 表: ```sql CREATE TABLE map_objectives ( id INT AUTO_INCREMENT PRIMARY KEY, map_id INT NOT NULL, dimension_key VARCHAR(50) NOT NULL, name VARCHAR(200) NOT NULL, description TEXT, icon VARCHAR(50) DEFAULT 'target', sort_order INT DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (map_id) REFERENCES strategic_maps(id) ON DELETE CASCADE ); ``` API:GET/POST/PUT/DELETE /api/cma/maps/{map_id}/objectives 前端:弹窗增加描述字段 + 图标选择器 + 拖拽排序 --- ### Feature 1.6 版本管理 (P1 YELLOW) ```sql CREATE TABLE strategic_map_versions ( id INT AUTO_INCREMENT PRIMARY KEY, map_id INT NOT NULL, version VARCHAR(20) NOT NULL, dimensions JSON NOT NULL, canvas_data JSON NOT NULL, comment VARCHAR(500), created_by INT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (map_id) REFERENCES strategic_maps(id) ON DELETE CASCADE ); ``` API:版本列表 + 创建快照 + 回滚 前端:MapList 页增加版本历史按钮 + VersionListDialog --- ## 4. 开发顺序与依赖关系 ``` P0a: 因果连线 —— 无依赖 P0b: 组织层级 —— 完全独立 => 两个P0可并行 P1a: 目标管理增强 —— 依赖新 objectives 表 P1b: 版本管理 —— 依赖 StrategicMap 已有结构 P2: KPI拖拽关联 —— 依赖 objectives 模型 ``` 推荐执行:P0a+P0b(并行) → P1a+P1b(并行) → P2 ## 5. 风险 | 风险 | 应对 | |------|------| | @vue-flow/core 样式冲突 | 隔离CSS / 使用自建SVG | | 组织树 >500节点性能 | 后端懒加载 + el-tree lazy | | 版本快照膨胀 | 保留最近50版本 | | 回滚后画布状态不一致 | 回滚后强制刷新页面 |