feat: KPI多粒度目标值补提交 — dashboard API + 前端3视图(目标值月/季/年)

已上线未提交的历史功能(2026-08-17): kpi_target_by_frequency + target_monthly/quarterly/yearly 字段透传
This commit is contained in:
Hermes CI Fix
2026-08-20 06:57:13 +08:00
parent bd9c70ea05
commit dd53212bcc
5 changed files with 244 additions and 7 deletions
+15 -2
View File
@@ -35,7 +35,9 @@
<el-tag v-else type="warning" size="small">{{ kpi.data_owner || '缺失' }}</el-tag>
</el-descriptions-item>
<el-descriptions-item label="单位">{{ kpi.unit || '-' }}</el-descriptions-item>
<el-descriptions-item label="目标值">{{ kpi.target_value ?? '-' }}</el-descriptions-item>
<el-descriptions-item label="目标值(月)">{{ kpi.target_monthly ?? '-' }}</el-descriptions-item>
<el-descriptions-item label="目标值(季)">{{ kpi.target_quarterly ?? '-' }}</el-descriptions-item>
<el-descriptions-item label="目标值(年)">{{ kpi.target_yearly ?? '-' }}</el-descriptions-item>
<el-descriptions-item label="数据源类型">{{ kpi.data_source_type || '-' }}</el-descriptions-item>
<el-descriptions-item label="维度">{{ dimLabel(kpi.dimension) }}</el-descriptions-item>
<el-descriptions-item label="频率">{{ kpi.frequency || '-' }}</el-descriptions-item>
@@ -63,12 +65,16 @@
<el-option v-for="c in categoryOptions" :key="c.value" :label="c.label" :value="c.value" />
</el-select>
</el-form-item>
<el-form-item label="目标值"><el-input-number v-model="kpi.target_value" :min="0" style="width:100%" /></el-form-item>
<el-form-item label="目标值(月度)"><el-input-number v-model="kpi.target_monthly" :min="0" style="width:100%" /></el-form-item>
<el-form-item label="目标值(季度)"><el-input-number v-model="kpi.target_quarterly" :min="0" style="width:100%" /></el-form-item>
<el-form-item label="目标值(年度)"><el-input-number v-model="kpi.target_yearly" :min="0" style="width:100%" /></el-form-item>
<el-form-item label="单位"><el-input v-model="kpi.unit" /></el-form-item>
<el-form-item label="频率">
<el-select v-model="kpi.frequency" style="width:100%">
<el-option label="月度" value="monthly" />
<el-option label="周度" value="weekly" />
<el-option label="季度" value="quarterly" />
<el-option label="半年" value="half_year" />
<el-option label="年度" value="yearly" />
</el-select>
</el-form-item>
@@ -543,6 +549,13 @@ async function save() {
if (saving.value) return
saving.value = true
try {
// 多粒度目标同步:按frequency将对应周期目标写入target_value(兼容评分/阈值等旧逻辑)
const freq = kpi.value.frequency || 'monthly'
let tv: any = null
if (freq === 'quarterly' || freq === 'half_year') tv = kpi.value.target_quarterly
else if (freq === 'yearly') tv = kpi.value.target_yearly
else tv = kpi.value.target_monthly
if (tv != null) kpi.value.target_value = tv
await kpiApi.update(kpi.value.id, kpi.value)
ElMessage.success('保存成功')
isDirty.value = false