| | |
| | | |
| | | 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 }) |
| | |
| | | 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 { |
| | |
| | | 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) |
| | |
| | | } else { |
| | | specialFields.value = [...specialTemplates[selectedSpecialTemplate.value]].filter(field => !batteryFields.value.includes(field)) |
| | | } |
| | | pruneDetailValues() |
| | | ensureDetailFieldValues() |
| | | templateDialogVisible.value = false |
| | | ElMessage.success('字段模板已应用') |