feat(KR): 行动挂KR完成 — action_plans.kr_id字段+API+前端目标/KR选择+KR中文名自动填+地图krs端点
- action_plans表加kr_id字段(关联krs.id),create/update/list支持kr_id读写
- 创建行动选KR时自动继承objective_id;列表附kr_title
- 前端行动方案库加'所属目标/KR'两级联动选择,选中KR自动带出KPI
- OKR详情页KR卡片下显示达成行动列表(O→KR→行动三层)
- MapCanvasDialogs onKpiChange选中KPI自动填kr.name=kpi.kpi_name(中文)
- 编辑回填英文code KR名转中文显示兜底
- maps.py 新增GET /{map_id}/krs端点(MapReview战略回顾会KR进度)
- 数据修复: krs表9条英文code title→中文名(按kpi_definitions映射)
- 数据迁移: 高置信行动挂KR(费用率→kr10,应收→kr14); 地图32空KR清理
- okr list的kr_summary补metric_kpi_id(前端联动用)
- 新增6个kr_id测试(test_action_plans),全量547通过
This commit is contained in:
@@ -649,19 +649,28 @@ function autoDivideWeights() {
|
||||
ElMessage.success(`已自动平分: ${form.value.krs.map(k => k.weight).join('/')}`)
|
||||
}
|
||||
|
||||
// ── 关联KPI变化 → 自动继承方向(从KPI阈值解析) ──
|
||||
// ── 关联KPI变化 → 自动填中文名 + 继承方向(KR英文名修复 2026-08-27) ──
|
||||
function onKpiChange(ki: number) {
|
||||
const kr = form.value.krs[ki]
|
||||
if (!kr) return
|
||||
const kpi = kpiOptions.value.find((k: any) => k.kpi_code === kr.kpi_code)
|
||||
if (!kpi) return
|
||||
const kpiName = kpi.kpi_name || kpi.kpi_code
|
||||
// 选中KPI自动填中文名:名称空 / 还是英文code时替换(用户已手填中文则保留)
|
||||
const curName = (kr.name || "").trim()
|
||||
if (!curName || curName === kpi.kpi_code || (curName === curName.toUpperCase() && curName.includes("_"))) {
|
||||
kr.name = kpiName
|
||||
}
|
||||
// 从KPI阈值解析方向/目标值并继承(仅当用户未手动设置时)
|
||||
const threshold = kpi.threshold_green || kpi.threshold_yellow || ""
|
||||
if (!threshold) return
|
||||
if (!threshold) {
|
||||
ElMessage.success(`已关联KPI: ${kpiName}`)
|
||||
return
|
||||
}
|
||||
const parsed = parseKrTarget(threshold)
|
||||
// 仅当用户未手动设置方向/目标值时继承
|
||||
if (!kr.operator || kr.operator === ">=") kr.operator = parsed.operator
|
||||
if (kr.target_value == null) kr.target_value = parsed.value
|
||||
ElMessage.success(`已继承KPI方向: ${kr.operator} ${kr.target_value}`)
|
||||
ElMessage.success(`已关联KPI: ${kpiName}(方向 ${kr.operator} ${kr.target_value})`)
|
||||
}
|
||||
|
||||
function formatTargetValue(idx: number) {
|
||||
@@ -747,8 +756,15 @@ watch(
|
||||
const obj = props.editingObj
|
||||
const existingKrs = (obj.krs || []).map((kr: any) => {
|
||||
const parsed = parseKrTarget(kr.target_value)
|
||||
// 显示兜底: 旧数据KR名是英文code → 转中文(KR英文名修复 2026-08-27)
|
||||
let krName = kr.name || ""
|
||||
const curName = String(krName).trim()
|
||||
if (curName && curName === curName.toUpperCase() && curName.includes("_")) {
|
||||
const hit = kpiOptions.value.find((k: any) => k.kpi_code === curName)
|
||||
if (hit) krName = hit.kpi_name || hit.kpi_code
|
||||
}
|
||||
return {
|
||||
name: kr.name || "",
|
||||
name: krName || "",
|
||||
operator: kr.operator || parsed.operator,
|
||||
target_value: kr.target_value != null && typeof kr.target_value === "number"
|
||||
? kr.target_value : parsed.value,
|
||||
|
||||
Reference in New Issue
Block a user