From 479d2fbf4dca85eadda72b886a24422ba64b6e46 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 08 九月 2026 13:51:55 +0800
Subject: [PATCH] 修正控制台详情保存与字段读回

---
 src/components/ConsoleChartPanel.vue |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/components/ConsoleChartPanel.vue b/src/components/ConsoleChartPanel.vue
index dca28c8..c005c64 100644
--- a/src/components/ConsoleChartPanel.vue
+++ b/src/components/ConsoleChartPanel.vue
@@ -172,8 +172,9 @@
 
 ensureDetailFieldValues()
 
+// 测试名称只用于初始占位;详情已读回后不能覆盖用户保存的实验名称。
 watch(() => props.testName, value => {
-  if (value) experimentName.value = value
+  if (value && !props.consoleDetail && !experimentName.value) experimentName.value = value
 })
 
 watch(() => props.consoleDetail, value => applyConsoleDetail(value), { immediate: true, deep: true })
@@ -234,6 +235,13 @@
   delete detailFieldValues[field]
 }
 
+function pruneDetailValues() {
+  const allowed = new Set(detailFields.value)
+  Object.keys(detailFieldValues).forEach(field => {
+    if (!allowed.has(field)) delete detailFieldValues[field]
+  })
+}
+
 async function saveConsoleDetail() {
   detailSaving.value = true
   try {
@@ -241,7 +249,9 @@
       experimentName: experimentName.value.trim() || null,
       batteryFields: [...batteryFields.value],
       specialFields: [...specialFields.value],
-      fieldValues: JSON.parse(JSON.stringify(detailFieldValues)) as Record<string, Record<string, string>>,
+      fieldValues: Object.fromEntries(detailFields.value
+        .filter(field => detailFieldValues[field] != null)
+        .map(field => [field, { ...detailFieldValues[field] }])) as Record<string, Record<string, string>>,
     }
     const saved = await saveTestConsoleDetail(props.testId, detail)
     applyConsoleDetail(saved.consoleDetail)
@@ -264,6 +274,7 @@
   } else {
     specialFields.value = [...specialTemplates[selectedSpecialTemplate.value]].filter(field => !batteryFields.value.includes(field))
   }
+  pruneDetailValues()
   ensureDetailFieldValues()
   templateDialogVisible.value = false
   ElMessage.success('字段模板已应用')

--
Gitblit v1.7.1