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表
This commit is contained in:
Hermes CI Fix
2026-08-27 10:59:56 +08:00
parent 87cb9e7db2
commit 61936302b2
11 changed files with 1030 additions and 123 deletions
+8
View File
@@ -93,6 +93,14 @@ export const okrApi = {
api.put(`/okr/${okrId}/decomposition/milestones/${krId}`, { milestones }),
generateMilestones: (okrId: number, krId: number) =>
api.post(`/okr/${okrId}/decomposition/milestones/generate`, { kr_id: krId }),
// KR完整修复(2026-08-27): krs表CRUD
createKr: (objectiveId: number, data: any) => api.post(`/okr/${objectiveId}/krs`, data),
updateKr: (objectiveId: number, krId: number, data: any) =>
api.put(`/okr/${objectiveId}/krs/${krId}`, data),
deleteKr: (objectiveId: number, krId: number) =>
api.delete(`/okr/${objectiveId}/krs/${krId}`),
syncKrs: (objectiveId: number, krs: any[]) =>
api.put(`/okr/${objectiveId}/krs/sync`, { krs }),
}
// ── 本体三支柱追溯链 (科目↔KPI↔OKR) ──