From 3f30e0c8d7c4586a9a0578b2a097c0d878d67ad7 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期二, 08 九月 2026 14:15:27 +0800
Subject: [PATCH] 依据隔离复现修正详情页签缓存并补齐验收
---
src/components/ConsoleChartPanel.vue | 22 +++++++++-------------
1 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/src/components/ConsoleChartPanel.vue b/src/components/ConsoleChartPanel.vue
index c005c64..11b3ba1 100644
--- a/src/components/ConsoleChartPanel.vue
+++ b/src/components/ConsoleChartPanel.vue
@@ -45,6 +45,8 @@
consoleDetail: null,
})
+const emit = defineEmits<{ detailSaved: [testId: number, detail: TestConsoleDetail] }>()
+
use([CanvasRenderer, LineChart, GridComponent, LegendComponent, TooltipComponent])
const palette = ['#3978f6', '#7d42d8', '#f08a3e', '#23a983', '#e15268', '#1b9ac8', '#b5892f', '#6957c8', '#4f8d44', '#d264a3', '#46748e', '#a95d37']
@@ -172,9 +174,8 @@
ensureDetailFieldValues()
-// 测试名称只用于初始占位;详情已读回后不能覆盖用户保存的实验名称。
watch(() => props.testName, value => {
- if (value && !props.consoleDetail && !experimentName.value) experimentName.value = value
+ if (value) experimentName.value = value
})
watch(() => props.consoleDetail, value => applyConsoleDetail(value), { immediate: true, deep: true })
@@ -235,13 +236,6 @@
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 {
@@ -249,12 +243,14 @@
experimentName: experimentName.value.trim() || null,
batteryFields: [...batteryFields.value],
specialFields: [...specialFields.value],
- fieldValues: Object.fromEntries(detailFields.value
- .filter(field => detailFieldValues[field] != null)
- .map(field => [field, { ...detailFieldValues[field] }])) as Record<string, Record<string, string>>,
+ // 模板移除的字段不再提交,仍选中的字段保留全部电池填写值和空字符串。
+ fieldValues: Object.fromEntries(detailFields.value.map(field => [field, { ...detailFieldValues[field] }])),
}
const saved = await saveTestConsoleDetail(props.testId, detail)
+ if (!saved.consoleDetail) throw new Error('保存后未能读取测试详情')
applyConsoleDetail(saved.consoleDetail)
+ // 父页持有正式详情缓存;切换页签重新挂载时必须使用这次保存结果。
+ emit('detailSaved', props.testId, saved.consoleDetail)
ElMessage.success('测试详情已保存')
} catch (error) {
ElMessage.error(error instanceof Error ? error.message : '测试详情保存失败')
@@ -274,7 +270,6 @@
} else {
specialFields.value = [...specialTemplates[selectedSpecialTemplate.value]].filter(field => !batteryFields.value.includes(field))
}
- pruneDetailValues()
ensureDetailFieldValues()
templateDialogVisible.value = false
ElMessage.success('字段模板已应用')
@@ -487,6 +482,7 @@
<div class="report-chart-page">
<section class="detail-panel">
<header class="panel-heading"><div><strong>测试详情</strong><el-icon><ArrowUp /></el-icon></div></header>
+ <p v-if="!consoleDetail" class="detail-meta" role="status">暂无已保存的测试详情</p>
<div class="detail-meta"><label><span>实验</span><el-input v-model="experimentName" /></label></div>
<div class="field-table-wrap">
<table class="field-table" :style="{ minWidth: `${Math.max(900, detailCells.length * 220 + 214)}px` }">
--
Gitblit v1.7.1