diff --git a/frontend/src/views/tools/mmsMapping/components/MappingConfirmDialog.vue b/frontend/src/views/tools/mmsMapping/components/MappingConfirmDialog.vue index 44a13e2..7345e1c 100644 --- a/frontend/src/views/tools/mmsMapping/components/MappingConfirmDialog.vue +++ b/frontend/src/views/tools/mmsMapping/components/MappingConfirmDialog.vue @@ -26,7 +26,7 @@
-
+
@@ -86,7 +86,7 @@ />
-
+
{{ target.reportDesc || target.reportName || '--' }} {{ target.reportName || '--' }} / {{ target.dataSetName || '--' }} @@ -135,6 +135,7 @@ defineOptions({ }) interface ConfirmDialogDraftTarget { + targetKey: string reportName: string dataSetName: string reportDesc: string @@ -142,6 +143,7 @@ interface ConfirmDialogDraftTarget { } interface ConfirmDialogDraftLabelItem { + itemKey: string label: string required: boolean configurableOnce: boolean @@ -158,9 +160,11 @@ interface ConfirmDialogDraftGroup { } interface PreparedConfirmDialogDraftLabelItem { + itemKey: string label: string required: boolean configurableOnce: boolean + defaultLnInst: string commonLnInstValues: string[] targets: ConfirmDialogDraftTarget[] } @@ -222,15 +226,20 @@ const buildInitialDraftGroups = (groups: MmsMapping.IndexConfirmGroup[]): Confir groups .map(group => { const preparedItems = (group.labelItems || []) - .map(item => { + .map((item, itemIndex) => { const commonLnInstValues = sortLnInstValues(normalizeStringArray(item.commonLnInstValues)) + const defaultLnInst = resolveDefaultLnInst(commonLnInstValues, item.defaultLnInst?.trim() || '') + const itemKey = `${group.groupKey?.trim() || 'group'}-${itemIndex}-${item.label?.trim() || 'label'}` return { + itemKey, label: item.label?.trim() || '', required: Boolean(item.required), configurableOnce: Boolean(item.configurableOnce), + defaultLnInst, commonLnInstValues, - targets: (item.targets || []).map(target => ({ + targets: (item.targets || []).map((target, targetIndex) => ({ + targetKey: `${itemKey}-target-${targetIndex}-${target.reportName?.trim() || ''}-${target.dataSetName?.trim() || ''}`, reportName: target.reportName?.trim() || '', dataSetName: target.dataSetName?.trim() || '', reportDesc: target.reportDesc?.trim() || '', @@ -256,10 +265,10 @@ const buildInitialDraftGroups = (groups: MmsMapping.IndexConfirmGroup[]): Confir cluster.forEach((item, index) => { const expectedLnInst = index < clusterValues.length ? clusterValues[index] : '' - const defaultLnInst = resolveDefaultLnInst(item.commonLnInstValues, expectedLnInst) - const enabled = Boolean(defaultLnInst) + const defaultLnInst = item.defaultLnInst || resolveDefaultLnInst(item.commonLnInstValues, expectedLnInst) + const enabled = item.required || Boolean(defaultLnInst) - defaultStateMap.set(item.label, { + defaultStateMap.set(item.itemKey, { enabled, lnInst: defaultLnInst }) @@ -270,12 +279,13 @@ const buildInitialDraftGroups = (groups: MmsMapping.IndexConfirmGroup[]): Confir groupKey: group.groupKey?.trim() || '', groupDesc: group.groupDesc?.trim() || '', labelItems: preparedItems.map(item => { - const defaultState = defaultStateMap.get(item.label) || { - enabled: false, + const defaultState = defaultStateMap.get(item.itemKey) || { + enabled: item.required, lnInst: '' } return { + itemKey: item.itemKey, label: item.label, required: item.required, configurableOnce: item.configurableOnce, diff --git a/frontend/src/views/tools/mmsMapping/index.vue b/frontend/src/views/tools/mmsMapping/index.vue index 4977f8e..998f533 100644 --- a/frontend/src/views/tools/mmsMapping/index.vue +++ b/frontend/src/views/tools/mmsMapping/index.vue @@ -111,6 +111,52 @@ const getErrorMessage = (error: unknown) => { return '接口调用失败,请检查后端服务和请求参数' } +const logConfirmDataDiagnostics = (groups: MmsMapping.IndexConfirmGroup[]) => { + const interharmonicGroups = groups + .map(group => ({ + groupKey: group.groupKey?.trim() || '', + groupDesc: group.groupDesc?.trim() || '', + labelItems: (group.labelItems || []) + .map(item => ({ + label: item.label?.trim() || '', + defaultLnInst: item.defaultLnInst?.trim() || '', + commonLnInstValues: item.commonLnInstValues || [], + targets: (item.targets || []).map(target => ({ + reportName: target.reportName?.trim() || '', + dataSetName: target.dataSetName?.trim() || '', + availableLnInstValues: target.availableLnInstValues || [] + })) + })) + .filter(item => + [item.label, ...item.commonLnInstValues, ...item.targets.map(target => target.dataSetName)].some(value => + String(value || '').includes('间谐波') + ) + ) + })) + .filter(group => group.labelItems.length) + + // 关键业务节点:人工确认弹窗是否缺少某个 lnInst,首先取决于 build-index-confirm-data 的返回内容,这里保留诊断日志便于核对接口是否漏数。 + console.info('[mmsMapping] build-index-confirm-data result', { + groupCount: groups.length, + interharmonicGroups + }) + + const missingFiveItems = interharmonicGroups.flatMap(group => + group.labelItems + .filter(item => item.commonLnInstValues.length && !item.commonLnInstValues.includes('5')) + .map(item => ({ + groupKey: group.groupKey, + label: item.label, + defaultLnInst: item.defaultLnInst, + commonLnInstValues: item.commonLnInstValues + })) + ) + + if (missingFiveItems.length) { + console.warn('[mmsMapping] interharmonic lnInst missing "5"', missingFiveItems) + } +} + const getFileExtension = (fileName: string) => fileName.split('.').pop()?.toLowerCase() || '' const isSupportedIcdFile = (fileName: string) => ['icd', 'cid', 'scd', 'xml'].includes(getFileExtension(fileName)) @@ -297,6 +343,7 @@ const handleParseIcd = async () => { const confirmGroups = unwrapApiPayload(confirmResponse) || [] confirmData.value = confirmGroups + logConfirmDataDiagnostics(confirmGroups) if (!confirmGroups.length) { indexSelectionJsonText.value = formatIndexSelectionJson([])