@@ -935,6 +966,48 @@ async function exportImage() {
ElMessage.error('导出失败')
}
}
+// ── KPI因果链推荐 ──
+const showCausalityDialog = ref(false)
+const causalityRecommendations = ref
([])
+const causalityLoading = ref(false)
+
+async function showCausalityRecommendations() {
+ if (!currentMap.value) { ElMessage.warning('请先选择或创建战略地图'); return }
+ causalityLoading.value = true
+ showCausalityDialog.value = true
+ try {
+ const r: any = await api.get('/kpi-causality')
+ const items = r.data || r.items || r || []
+ causalityRecommendations.value = Array.isArray(items) ? items : []
+ } catch (e) {
+ ElMessage.error('加载因果链失败')
+ causalityRecommendations.value = []
+ }
+ causalityLoading.value = false
+}
+
+async function applyCausality(rec: any) {
+ try {
+ await api.post(\\`/maps/\\${currentMap.value?.id}/connections\\`, { from: rec.source_kpi_code, to: rec.target_kpi_code })
+ ElMessage.success('连线已添加')
+ showCausalityDialog.value = false
+ loadMap()
+ } catch { ElMessage.error('添加失败') }
+}
+
+async function applyAllCausality() {
+ let added = 0
+ for (const rec of causalityRecommendations.value) {
+ try {
+ await api.post(\\`/maps/\\${currentMap.value?.id}/connections\\`, { from: rec.source_kpi_code, to: rec.target_kpi_code })
+ added++
+ } catch {}
+ }
+ ElMessage.success(\\`已添加 \\${added}/\\${causalityRecommendations.value.length} 条因果链\\`)
+ showCausalityDialog.value = false
+ loadMap()
+}
+
onMounted(async () => {
const r: any = await mapApi.list()