@@ -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([])