|
@@ -54,6 +54,7 @@
|
|
|
"
|
|
"
|
|
|
:catalog-id="catalogId"
|
|
:catalog-id="catalogId"
|
|
|
:task-id="taskId"
|
|
:task-id="taskId"
|
|
|
|
|
+ :cross-table-info="crossTableInfo"
|
|
|
@save="handleFixedTableSave"
|
|
@save="handleFixedTableSave"
|
|
|
@refresh="handleRefresh"
|
|
@refresh="handleRefresh"
|
|
|
/>
|
|
/>
|
|
@@ -359,6 +360,7 @@
|
|
|
:upload-id="(currentTemplateRow && currentTemplateRow.uploadId) || ''"
|
|
:upload-id="(currentTemplateRow && currentTemplateRow.uploadId) || ''"
|
|
|
:survey-template-id="getSurveyTemplateId(currentTemplateRow)"
|
|
:survey-template-id="getSurveyTemplateId(currentTemplateRow)"
|
|
|
:catalog-id="(currentTemplateRow && currentTemplateRow.catalogId) || ''"
|
|
:catalog-id="(currentTemplateRow && currentTemplateRow.catalogId) || ''"
|
|
|
|
|
+ :cross-table-info="crossTableInfo"
|
|
|
/>
|
|
/>
|
|
|
|
|
|
|
|
<!-- 动态表弹窗(查看模式) -->
|
|
<!-- 动态表弹窗(查看模式) -->
|
|
@@ -382,6 +384,7 @@
|
|
|
getDynamicTableData,
|
|
getDynamicTableData,
|
|
|
downloadTemplate,
|
|
downloadTemplate,
|
|
|
importData,
|
|
importData,
|
|
|
|
|
+ getCrossTableData,
|
|
|
} from '@/api/audit/survey'
|
|
} from '@/api/audit/survey'
|
|
|
import { getListBySurveyTemplateIdAndVersion } from '@/api/costSurveyTemplateHeaders'
|
|
import { getListBySurveyTemplateIdAndVersion } from '@/api/costSurveyTemplateHeaders'
|
|
|
import SurveyFormDialog from '@/views/EntDeclaration/auditTaskManagement/components/SurveyFormDialog.vue'
|
|
import SurveyFormDialog from '@/views/EntDeclaration/auditTaskManagement/components/SurveyFormDialog.vue'
|
|
@@ -473,6 +476,14 @@
|
|
|
fixedFieldids: '',
|
|
fixedFieldids: '',
|
|
|
columnsMeta: [],
|
|
columnsMeta: [],
|
|
|
uploadStatusMap: {},
|
|
uploadStatusMap: {},
|
|
|
|
|
+ // 跨表引用数据(与 CostSurveyTab 对齐:按年份分组)
|
|
|
|
|
+ crossTableInfo: {
|
|
|
|
|
+ isCrossTable: false,
|
|
|
|
|
+ crossTableName: '',
|
|
|
|
|
+ data: {},
|
|
|
|
|
+ years: [],
|
|
|
|
|
+ getValue: () => undefined,
|
|
|
|
|
+ },
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
// ...
|
|
// ...
|
|
@@ -589,6 +600,104 @@
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ // 加载跨表引用数据(固定表/动态表使用,type=2=报送资料)
|
|
|
|
|
+ async loadCrossTableInfo(row) {
|
|
|
|
|
+ const surveyTemplateId = this.getSurveyTemplateId(row)
|
|
|
|
|
+ const taskId = (row && (row.taskId || row.taskID)) || this.taskId || ''
|
|
|
|
|
+
|
|
|
|
|
+ if (!surveyTemplateId || !taskId) {
|
|
|
|
|
+ this.crossTableInfo = {
|
|
|
|
|
+ isCrossTable: false,
|
|
|
|
|
+ crossTableName: '',
|
|
|
|
|
+ data: {},
|
|
|
|
|
+ years: [],
|
|
|
|
|
+ getValue: () => undefined,
|
|
|
|
|
+ }
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await getCrossTableData({
|
|
|
|
|
+ taskId,
|
|
|
|
|
+ surveyTemplateId,
|
|
|
|
|
+ type: 2,
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ const wrapper = res || {}
|
|
|
|
|
+ const wrappedValue = wrapper.value || wrapper.data || wrapper
|
|
|
|
|
+ const code =
|
|
|
|
|
+ wrapper.code !== undefined && wrapper.code !== null
|
|
|
|
|
+ ? wrapper.code
|
|
|
|
|
+ : wrappedValue && wrappedValue.code
|
|
|
|
|
+
|
|
|
|
|
+ if (!(code === 0 || code === 200)) {
|
|
|
|
|
+ this.crossTableInfo = {
|
|
|
|
|
+ isCrossTable: false,
|
|
|
|
|
+ crossTableName: '',
|
|
|
|
|
+ data: {},
|
|
|
|
|
+ years: [],
|
|
|
|
|
+ getValue: () => undefined,
|
|
|
|
|
+ }
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const d = wrappedValue || {}
|
|
|
|
|
+ const dataByYearRaw = d && d.data
|
|
|
|
|
+ const isEmptyArray =
|
|
|
|
|
+ Array.isArray(dataByYearRaw) && dataByYearRaw.length === 0
|
|
|
|
|
+ const dataByYear =
|
|
|
|
|
+ !dataByYearRaw || Array.isArray(dataByYearRaw) ? {} : dataByYearRaw
|
|
|
|
|
+ const years = Object.keys(dataByYear)
|
|
|
|
|
+ .map((y) => String(y))
|
|
|
|
|
+ .filter(Boolean)
|
|
|
|
|
+ .sort()
|
|
|
|
|
+
|
|
|
|
|
+ // 若标记为跨表但未返回任何跨表数据:提示 + 阻止打开弹窗
|
|
|
|
|
+ if (d && d.isCrossTable && (isEmptyArray || years.length === 0)) {
|
|
|
|
|
+ this.$message &&
|
|
|
|
|
+ this.$message.warning &&
|
|
|
|
|
+ this.$message.warning(
|
|
|
|
|
+ `跨表引用数据为空,请先完善【${
|
|
|
|
|
+ d.crossTableName || '跨表'
|
|
|
|
|
+ }】后再试`
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ this.crossTableInfo = {
|
|
|
|
|
+ isCrossTable: !!d.isCrossTable,
|
|
|
|
|
+ crossTableName: d.crossTableName || '',
|
|
|
|
|
+ data: {},
|
|
|
|
|
+ years: [],
|
|
|
|
|
+ getValue: () => undefined,
|
|
|
|
|
+ }
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ this.crossTableInfo = {
|
|
|
|
|
+ isCrossTable: !!d.isCrossTable,
|
|
|
|
|
+ crossTableName: d.crossTableName || '',
|
|
|
|
|
+ data: dataByYear,
|
|
|
|
|
+ years,
|
|
|
|
|
+ getValue: (year, key) => {
|
|
|
|
|
+ const y = year === undefined || year === null ? '' : String(year)
|
|
|
|
|
+ const k = key === undefined || key === null ? '' : String(key)
|
|
|
|
|
+ if (!y || !k) return undefined
|
|
|
|
|
+ return dataByYear && dataByYear[y] ? dataByYear[y][k] : undefined
|
|
|
|
|
+ },
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.error('获取跨表引用数据失败:', e)
|
|
|
|
|
+ this.crossTableInfo = {
|
|
|
|
|
+ isCrossTable: false,
|
|
|
|
|
+ crossTableName: '',
|
|
|
|
|
+ data: {},
|
|
|
|
|
+ years: [],
|
|
|
|
|
+ getValue: () => undefined,
|
|
|
|
|
+ }
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
// 在线填报入口:与 CostSurveyTab 一致
|
|
// 在线填报入口:与 CostSurveyTab 一致
|
|
|
async handleOnlineSubmission(row) {
|
|
async handleOnlineSubmission(row) {
|
|
|
if (!row) return
|
|
if (!row) return
|
|
@@ -630,6 +739,8 @@
|
|
|
}
|
|
}
|
|
|
await this.initFormFields()
|
|
await this.initFormFields()
|
|
|
} else if (t === '2') {
|
|
} else if (t === '2') {
|
|
|
|
|
+ const ok = await this.loadCrossTableInfo(row)
|
|
|
|
|
+ if (!ok) return
|
|
|
await this.initFixedTableData()
|
|
await this.initFixedTableData()
|
|
|
} else if (t === '3') {
|
|
} else if (t === '3') {
|
|
|
this.resetDynamicDialogState()
|
|
this.resetDynamicDialogState()
|
|
@@ -736,6 +847,8 @@
|
|
|
}
|
|
}
|
|
|
await this.initFormFields()
|
|
await this.initFormFields()
|
|
|
} else if (t === '2') {
|
|
} else if (t === '2') {
|
|
|
|
|
+ const ok = await this.loadCrossTableInfo(row)
|
|
|
|
|
+ if (!ok) return
|
|
|
await this.initFixedTableData()
|
|
await this.initFixedTableData()
|
|
|
} else if (t === '3') {
|
|
} else if (t === '3') {
|
|
|
this.resetDynamicDialogState()
|
|
this.resetDynamicDialogState()
|