wecom-fullstack
03254bd4c7
fix(maps): 战略地图写通道乐观并发 + 画布自动保存仅脏时写
...
生产缺陷 cma-strategy-map-autosave-stale-overwrite(D4 批次 19 行 map_objectives 被过期快照覆写):
- 后端 update_map: 覆写 dimensions/canvas_data 须带 base_updated_at,与服务端 updated_at 不符 → 409;
校验在任何写入之前完成(校验不过时一行都不删/不改)
- 连线写通道(POST/DELETE connections)响应补 updated_at,供前端采纳新基准、避免自伤 409
- 前端 MapCanvas: 自动保存仅在 draft + isDirty 时触发;请求体带 base_updated_at;收到 409 停自动保存不重试
- 修复 async onMounted 竞态:await 期间被卸载后其续段仍注册定时器(清理钩子先跑完、无人回收)
→ 泄漏写者永久在后台用过期快照覆写(生产 referer=/maps 仍每 30–60s 写)。加 disposed 守卫 + stopAutoSave
- 测试: backend/tests/test_map_concurrency_20261012.py(8 例,改前 5 败);前端行为台架 11/11(改前 3/11)
任务: yanxue-20261012-cma-map-autosave-stale-overwrite-defect-fullstack
2026-10-12 11:42:56 +08:00
Hermes CI Fix
27d3e1cd73
feat(cma): strategy map lane KR delete entry (cma-map-kr-delete-entry-20260916)
...
- MapNode.vue: hover trash icon per KR row emitting delete-kr (inline SVG, no emoji)
- StrategyLayer.vue / MapCanvas.vue: passthrough + MyDialog second confirm + okrApi.deleteKr + whole-map save
- MapsDialog: single-KR policy hint (keep at least 1 KR per objective)
2026-09-16 15:26:38 +08:00
Hermes CI Fix
06c23927aa
fix(cma): KR 名称污染存量清理 + 透传点护栏 (cma-kr-name-pollution-cleanup-20260916)
...
ci/woodpecker/push/main Pipeline was canceled
- kr_name.py/krName.ts: sanitize_kr_name 判据(尾部≥/≤数字≠目标值→截断;==目标值→保留)
- maps.py/okr.py/okr_templates.py: 模板名/JSON→krs.title 透传点护栏
- test: 28 passed(独立复核)
- 原会话因迭代上限停手,本提交代收口(工作已复核完成)
2026-09-16 14:48:06 +08:00
Hermes CI Fix
aa81cee009
fix(maps): MapCanvas onMounted 忽略路由 :id 恒取第一张地图 — 修复 /maps/canvas/53 打开显示54空图、新增节点落错地图
2026-09-08 20:35:51 +08:00
Hermes CI Fix
2da4cfc42d
feat(mapcanvas): 田字格2x2布局+拖拽辅助(合法高亮/灰显/吸附)+连接管理面板+zoom transform缩放+连线rAF节流
2026-08-30 17:41:07 +08:00
Hermes CI Fix
61936302b2
feat(KR): KR完整修复 — krs表打通+方向符号operator+权重自由输入
...
- 后端okr.py: KR读取从ActionPlan改为krs表, 新增KR CRUD API(POST/PUT/DELETE /okr/{objective_id}/krs) + 批量sync
- operator方向符号: krs表加operator/tolerance/weight/sort_order/monthly_milestones列
- progress方向感知计算(>=/>: current/target, <=/<: target/current, =: 容差), 达成→status=achieved
- 关联KPI自动继承方向(threshold_green解析: F_COST_RATIO<=18等)
- maps.py: 保存地图时自动同步objectives+krs表, JSON→krs数据迁移脚本
- 前端: 权重下拉改自由数字输入(可小数33.33) + 方向选择器(≥/≤/>/</=) + 自动平分按钮 + KPI方向继承提示
- pytest: 10个新测试(krs CRUD/方向感知/权重校验/多租户隔离) + 更新旧KR测试
- 迁移: 现有strategic_maps JSON 12条KR已写入krs表
2026-08-27 10:59:56 +08:00
Hermes CI Fix
9b61c48051
fix: OpenCode审查16条修复 — 战略地图隔离/安全/逻辑漏洞
...
安全:
- ⑦ update_map 字段白名单(禁entity_id篡改, status限值域)
- ⑧ objectives 全端点补entity校验(原括号错位导致隔离失效) + update白名单
- ⑨ strategic_map_versions 加entity_id列+回填, list/snapshot/rollback过滤
- ⑩ get_map_review KPI查询加entity(同编码跨企业混入)
- ⑪ _sync_map_objectives 强制继承地图entity
逻辑:
- ③ MapCanvas 自动保存 currentMap.value 解包(30s自动保存修复)
- ④ 乐观锁字段 version_num→version 对齐
- ⑤ 红黄绿灯: 越低越好型反向 + 负值修正 + 月目标优先
- ⑥ review 补 action_plan_summary 字段
验证: 跨企业写目标404✓ entity_id注入被拒✓ pytest 531 passed✓
2026-08-26 23:25:44 +08:00
Hermes CI Fix
40d743fc96
feat: 表单保存交互规范P0 — 全局未保存离开守卫(useFormGuard)+MapCanvas接入
2026-08-16 11:39:26 +08:00
Hermes CI Fix
603d6ae5cf
feat: 战略地图贝塞尔因果链+节点KPI可视化(P0+P1)
2026-08-15 22:08:09 +08:00
Hermes CI Fix
5a196dc105
fix: 数据治理P0 规则4前端level过滤+数据清洗
2026-08-15 21:26:27 +08:00
Hermes CI Fix
0b191d278e
feat: OKR模板库改造 — 弹窗模板库联动+时间分解落库+制造业包6个
2026-08-11 00:11:25 +08:00
Hermes CI Fix
b593e0383f
feat: O→KR→KPI Phase 0 - KR sub-nodes on canvas, KR edit dialog, data migration
...
- MapNode.vue: Add collapsible KR sub-list with progress bars under each O node
- MapCanvasDialogs.vue: Add KPI selector per KR, editing mode (skip template step, pre-fill data), validation (max 5 KR, target value required)
- StrategyLayer.vue: Pass through edit-kr/add-kr events
- MapCanvas.vue: Data migration (old kpis[]→krs[]), KR add/edit handlers, pass editingObj/allKpis to dialog
2026-07-26 18:01:59 +08:00
Hermes CI Fix
c7ec8b2c99
fix: 画布节点删除去掉ElMessageBox确认
2026-07-23 17:59:32 +08:00
Hermes CI Fix
9c6c1614fb
Phase 1: OKR模板 — 两步弹窗(O+KR结构) + 14个CMA模板 + okr_templates表 + API
...
MapCanvasDialogs.vue:
- 节点编辑弹窗改为两步交互(模板选择→O+KR编辑)
- 第一步:按维度展示对应模板(财务4/客户3/流程4/学习3)
- 第二步:编辑O名称+描述+3个KR(名称/目标值/权重)
- 14个CMA标准模板硬编码在前端
- 支持添加/删除KR、自定义目标跳过模板
MapCanvas.vue:
- 传递 editingLayerKey 到弹窗
- onSaveDialog 适配新 O+KR 数据结构
- onNodeSave 存储 krs 和 template_name 字段
Backend:
- OKRTemplate 模型 (okr_templates 表)
- okr_templates API: GET(按维度筛选) + POST(用户自定义) + increment use_count
- seed_okr_templates.py 迁移脚本(建表+14条种子数据)
- 在 main.py 注册新路由
2026-07-21 17:22:43 +08:00
Hermes CI Fix
430d9f23fe
feat: CMA前端UI优化第三轮P2 — mc-dialog→el-dialog+按钮统一+MapCanvas拆组件+全局过渡动画
2026-07-18 17:29:38 +08:00
Hermes CI Fix
46fa811d52
fix: 反引号+data架构同步+因果链推荐
2026-07-14 17:34:53 +08:00
Hermes CI Fix
9afcea8f8d
feat: 战略地图收尾 — 自动保存+导出+表迁移+因果链推荐
2026-07-14 17:32:22 +08:00
Hermes CI Fix
fc40cb8a65
task 2: 导出图片 — 添加html2canvas依赖和导出图片按钮
2026-07-14 17:22:58 +08:00
Hermes CI Fix
4cfada967f
task 1: 自动保存(30s) — 新增autoSaveTimer每30秒静默保存草稿
2026-07-14 17:21:50 +08:00
Hermes CI Fix
1a08e801f4
fix: 级联/因果视角切换 — 跨层箭头方向+SVG三角+ConnectionLines联动
2026-07-14 16:22:29 +08:00
Hermes CI Fix
f821ee2c9d
fix: 视角切换el-radio-group换原生radio(同根因)
2026-07-14 16:17:04 +08:00
Hermes CI Fix
cc9398cdcc
fix: dialog内联+v-show替代v-if(绕过组件导入的v-if渲染bug)
2026-07-14 12:00:48 +08:00
Hermes CI Fix
1db0e76204
fix: dialog强制刷新(:key)+el-button去text属性+Props对齐
2026-07-14 11:46:31 +08:00
Hermes CI Fix
953be65948
fix: 对齐NodeEditDialog props + BSC分类多选过滤 + adoptedStyleSheets polyfill
2026-07-14 11:28:25 +08:00
Hermes CI Fix
5d31c16906
fix: 补全全栈Bot所有P0/P1/P2功能 — 视角切换/客户路由/菜单/部署脚本加固
2026-07-12 18:34:13 +08:00
Hermes CI Fix
d247804c28
fix: 恢复P0/P1/P2全部功能代码(Git Hooks部署曾覆盖本地修改)
2026-07-12 17:47:50 +08:00
Hermes CI Fix
3dddd36866
init: 管理会计OS初始代码
...
包含前后端完整代码:
- 前端:Vue3+Vite+ElementPlus
- 后端:FastAPI+SQLAlchemy
- 模块:驾驶舱/KPI/战略地图/预警/预算/成本/预测/改善行动
- 当前版本:v1.0.0
2026-05-28 17:32:22 +08:00