From 8c518de358e22b5611d3873d50a550998e5f2194 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 08 九月 2026 15:59:27 +0800
Subject: [PATCH] 保留来源详情合列与曲线范围独立显隐

---
 src/views/ReportCompareForm.vue |   15 ++++++---------
 1 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/views/ReportCompareForm.vue b/src/views/ReportCompareForm.vue
index 45df85a..b2e1d7e 100644
--- a/src/views/ReportCompareForm.vue
+++ b/src/views/ReportCompareForm.vue
@@ -150,12 +150,8 @@
     const key = detailKey(item)
     // 未填写才读取当前预览或保存快照的业务值,显式清空不被后续预览覆盖。
     if (detailFieldValues[field][key] === undefined) {
-      const source = sourceItems.value.find(value => compareSelectionKey(value.source.selection) === key)
-      const sourceDetail = source?.source.consoleDetail
-      const sourceValue = sourceDetail?.fieldValues?.[field]?.[item.batteryNo]
-      detailFieldValues[field][key] = sourceValue !== undefined
-        ? sourceValue
-        : compareBusinessFieldValue(fieldDescriptor(field), source)
+      const source = sourceItems.value.find(value => detailKey(toSelectedTest(value.source)) === key)
+      detailFieldValues[field][key] = compareBusinessFieldValue(fieldDescriptor(field), source)
     }
   })
 }
@@ -193,7 +189,8 @@
 
 function toggleSeries(item: SelectedTest) {
   if (readonly.value) return
-  const key = detailKey(item)
+  // 详情按来源合列,曲线显隐仍按完整循环和工步范围独立保存。
+  const key = compareSelectionKey(item.selection)
   hiddenSeriesKeys.value = hiddenSeriesKeys.value.includes(key)
     ? hiddenSeriesKeys.value.filter(value => value !== key) : [...hiddenSeriesKeys.value, key]
 }
@@ -388,7 +385,7 @@
     return
   }
   const index = selectedTests.value.indexOf(itemToRemove)
-  hiddenSeriesKeys.value = hiddenSeriesKeys.value.filter(key => key !== detailKey(itemToRemove))
+  hiddenSeriesKeys.value = hiddenSeriesKeys.value.filter(key => key !== compareSelectionKey(itemToRemove.selection))
   if (index >= 0) { selectedTests.value.splice(index, 1); seriesColors.value.splice(index, 1) }
   await refreshPreview()
 }
@@ -630,7 +627,7 @@
 
     <section class="metrics-panel">
       <div v-if="!readonly" class="metric-switches"><label v-for="metric in metricDefinitions" :key="metric.key"><span>{{ metric.title }}</span><el-switch v-model="metricVisible[metric.key]" inline-prompt active-text="显" inactive-text="隐" /></label></div>
-      <div v-if="chartSeries.length" class="chart-legend-bar"><strong>对比图例</strong><div v-for="(item, index) in chartSeries" :key="detailKey(item)" class="chart-legend-item"><el-color-picker v-if="!readonly" class="legend-color-picker" :model-value="seriesColors[index]" :show-alpha="false" popper-class="legend-color-popper" :aria-label="`修改${item.name}颜色`" @change="updateSeriesColor(index, $event)" /><i v-else class="series-swatch" :style="{ background: seriesColors[index] }" /><button type="button" class="legend-name" :class="{ 'is-hidden': hiddenSeriesKeys.includes(detailKey(item)) }" :aria-pressed="!hiddenSeriesKeys.includes(detailKey(item))" :disabled="readonly" @click="toggleSeries(item)">{{ item.name }} (#{{ item.id }}) · {{ item.batteryGroup }} · {{ item.batteryNo }} · 循环{{ item.cycle }} · {{ item.process }}</button></div></div>
+      <div v-if="chartSeries.length" class="chart-legend-bar"><strong>对比图例</strong><div v-for="(item, index) in chartSeries" :key="compareSelectionKey(item.selection)" class="chart-legend-item"><el-color-picker v-if="!readonly" class="legend-color-picker" :model-value="seriesColors[index]" :show-alpha="false" popper-class="legend-color-popper" :aria-label="`修改${item.name}颜色`" @change="updateSeriesColor(index, $event)" /><i v-else class="series-swatch" :style="{ background: seriesColors[index] }" /><button type="button" class="legend-name" :class="{ 'is-hidden': hiddenSeriesKeys.includes(compareSelectionKey(item.selection)) }" :aria-pressed="!hiddenSeriesKeys.includes(compareSelectionKey(item.selection))" :disabled="readonly" @click="toggleSeries(item)">{{ item.name }} (#{{ item.id }}) · {{ item.batteryGroup }} · {{ item.batteryNo }} · 循环{{ item.cycle }} · {{ item.process }}</button></div></div>
       <!-- 报表切换和比对项移除时完整替换配置,避免图表库将颜色数组缩短误判为组件合并。 -->
       <div v-if="!visibleMetrics.length" class="chart-empty">当前未启用曲线指标</div>
       <div class="charts-grid"><article v-for="metric in visibleMetrics" :key="metric.key" class="chart-card"><header><strong>{{ metric.title }}</strong></header><VChart class="metric-chart" :option="compareChartOption(metric, sourceItems, seriesColors, hiddenSeriesKeys)" :update-options="{ notMerge: true }" autoresize /><div v-if="!sourceItems.some(item => !hiddenSeriesKeys.includes(compareSelectionKey(item.source.selection)) && item.records.some(row => (metric.key === 'voltage' || metric.key === 'current' ? row.deviceTime : row.collectorDeviceTime) != null && (metric.key === 'positiveVoltage' ? row.positivePotential : metric.key === 'negativeVoltage' ? row.negativePotential : row[metric.key]) != null))" class="chart-empty">{{ sourceItems.length && hiddenSeriesKeys.length === sourceItems.length ? '当前全部曲线已隐藏' : '所选范围暂无该指标数据' }}</div></article></div>

--
Gitblit v1.7.1