|
|
|
@ -4,6 +4,7 @@ |
|
|
|
@ 备注: 属性 |
|
|
|
--> |
|
|
|
<script lang='ts' setup> |
|
|
|
import { reactive, computed, toRefs, ref, watch, inject, onBeforeMount, onMounted } from "vue"; |
|
|
|
import validateConfig from "@/components/DesignForm/validate"; |
|
|
|
import { useDesignFormStore } from "@/store/DesignForm/designForm"; |
|
|
|
import { getRequest, uploadUrl } from "@/api/DesignForm"; |
|
|
|
@ -162,6 +163,22 @@ watch(roleTreeFilterText, (val) => { |
|
|
|
|
|
|
|
const multipleSelection = ref<User[]>([]) |
|
|
|
|
|
|
|
/** |
|
|
|
@ 作者: 秦东 |
|
|
|
@ 时间: 2026-03-03 08:41:39 |
|
|
|
@ 功能: 原始选项数组(标题行=列,索引列=行),将空值选项放在末尾,键改为'未选择' |
|
|
|
*/ |
|
|
|
const titleOptions = computed(() => { |
|
|
|
const options = currentTitleColumnNode.value?.options || [] |
|
|
|
// 将空值选项放在正常选项后面,键改为'未选择' |
|
|
|
return [...options, { label: '未选择', value: 'notChosen' }] |
|
|
|
}) |
|
|
|
const indexOptions = computed(() => { |
|
|
|
const options = currentIndexColumnNode.value?.options || [] |
|
|
|
// 将空值选项放在正常选项后面,键改为'未选择' |
|
|
|
return [...options, { label: '未选择', value: 'notChosen' }] |
|
|
|
}) |
|
|
|
|
|
|
|
interface User { |
|
|
|
id: number |
|
|
|
name: string |
|
|
|
@ -4346,6 +4363,97 @@ const titleColumnLabel = computed(() => { |
|
|
|
const leftTopLabel = computed(() => { |
|
|
|
return `${indexColumnLabel.value}\\${titleColumnLabel.value}` |
|
|
|
}) |
|
|
|
|
|
|
|
// 监听标题行和索引列的变化,重新生成表格数据 |
|
|
|
watch([titleOptions, indexOptions], ([newTitleOptions, newIndexOptions]) => { |
|
|
|
|
|
|
|
// 如果都没有选择,清空表格数据 |
|
|
|
if (!newTitleOptions.length && !newIndexOptions.length) { |
|
|
|
console.log("如果都没有选择,清空表格数据") |
|
|
|
zdtcszTableData.value = [] |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// 从 controlData 中获取之前保存的数据,并兼容旧数据(空字符串键) |
|
|
|
const savedData = controlData.value?.control?.zdtcsz?.tableData || {} |
|
|
|
|
|
|
|
// 转换旧数据:将空字符串键转换为'未选择' |
|
|
|
const convertOldData = (data) => { |
|
|
|
const converted = {} |
|
|
|
Object.keys(data).forEach(rowKey => { |
|
|
|
const newRowKey = rowKey === '' ? 'notChosen' : rowKey |
|
|
|
converted[newRowKey] = {} |
|
|
|
Object.keys(data[rowKey]).forEach(colKey => { |
|
|
|
const newColKey = colKey === '' ? 'notChosen' : colKey |
|
|
|
converted[newRowKey][newColKey] = data[rowKey][colKey] |
|
|
|
}) |
|
|
|
}) |
|
|
|
return converted |
|
|
|
} |
|
|
|
|
|
|
|
const convertedSavedData = convertOldData(savedData) |
|
|
|
|
|
|
|
// 情况1:只有标题行,没有索引列 |
|
|
|
if (newTitleOptions.length && !newIndexOptions.length) { |
|
|
|
// 创建一行数据,键为'未选择' |
|
|
|
const rowKey = 'notChosen' |
|
|
|
const rowObj = { |
|
|
|
rowKey: rowKey, |
|
|
|
rowLabel: '未选择' // 第一列显示"未选择" |
|
|
|
} |
|
|
|
|
|
|
|
// 为每个标题列生成值,如果有保存的数据则使用保存的数据 |
|
|
|
newTitleOptions.forEach(colItem => { |
|
|
|
const colKey = colItem.value |
|
|
|
const savedValue = convertedSavedData[rowKey]?.[colKey] || '' |
|
|
|
rowObj[`col_${colKey}`] = savedValue |
|
|
|
}) |
|
|
|
|
|
|
|
zdtcszTableData.value = [rowObj] |
|
|
|
} |
|
|
|
// 情况2:只有索引列,没有标题行 |
|
|
|
else if (!newTitleOptions.length && newIndexOptions.length) { |
|
|
|
// 创建一个默认列 |
|
|
|
const newTableData = newIndexOptions.map(rowItem => { |
|
|
|
const rowKey = rowItem.value |
|
|
|
const rowObj = { |
|
|
|
rowKey: rowKey, |
|
|
|
rowLabel: rowItem.label |
|
|
|
} |
|
|
|
|
|
|
|
// 创建一个默认列 |
|
|
|
const defaultColKey = 'notChosen' |
|
|
|
const savedValue = convertedSavedData[rowKey]?.[defaultColKey] || '' |
|
|
|
rowObj[`col_${defaultColKey}`] = savedValue |
|
|
|
|
|
|
|
return rowObj |
|
|
|
}) |
|
|
|
|
|
|
|
zdtcszTableData.value = newTableData |
|
|
|
} |
|
|
|
// 情况3:标题行和索引列都有(包括空值选项) |
|
|
|
else if (newTitleOptions.length && newIndexOptions.length) { |
|
|
|
// 生成新的表格数据 |
|
|
|
const newTableData = newIndexOptions.map(rowItem => { |
|
|
|
const rowKey = rowItem.value |
|
|
|
const rowObj = { |
|
|
|
rowKey: rowKey, |
|
|
|
rowLabel: rowItem.label |
|
|
|
} |
|
|
|
|
|
|
|
// 为每个标题列生成值,如果有保存的数据则使用保存的数据 |
|
|
|
newTitleOptions.forEach(colItem => { |
|
|
|
const colKey = colItem.value |
|
|
|
const savedValue = convertedSavedData[rowKey]?.[colKey] || '' |
|
|
|
rowObj[`col_${colKey}`] = savedValue |
|
|
|
}) |
|
|
|
|
|
|
|
return rowObj |
|
|
|
}) |
|
|
|
|
|
|
|
zdtcszTableData.value = newTableData |
|
|
|
} |
|
|
|
}, { immediate: true }) |
|
|
|
/** |
|
|
|
@ 作者: 秦东 |
|
|
|
@ 时间: 2026-03-02 16:53:00 |
|
|
|
@ -4796,16 +4904,7 @@ const asfPropsData = computed(()=>{ |
|
|
|
}); |
|
|
|
return result |
|
|
|
}) |
|
|
|
/** |
|
|
|
@ 作者: 秦东 |
|
|
|
@ 时间: 2026-03-03 08:41:39 |
|
|
|
@ 功能: 原始选项数组(标题行=列,索引列=行),将空值选项放在末尾,键改为'未选择' |
|
|
|
*/ |
|
|
|
const titleOptions = computed(() => { |
|
|
|
const options = currentTitleColumnNode.value?.options || [] |
|
|
|
// 将空值选项放在正常选项后面,键改为'未选择' |
|
|
|
return [...options, { label: '未选择', value: 'notChosen' }] |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -8563,7 +8662,8 @@ const updataBase = (val: any) => { |
|
|
|
/> |
|
|
|
</div> |
|
|
|
<div style="width: 100%; padding: 20px; overflow-x: auto;"> |
|
|
|
{{zdtcszTableData}} <br> {{ currentComponentOptions }} |
|
|
|
zdtcszTableData--> {{zdtcszTableData}} <br/> <br/> currentComponentOptions --> {{ currentComponentOptions }} |
|
|
|
<br/> <br/>leftTopLabel ----> {{ leftTopLabel }}<br/><br/>titleOptions ----> {{ titleOptions }}<br/><br/>zdtcszTableData ----> {{ zdtcszTableData }} |
|
|
|
<el-table |
|
|
|
:data="zdtcszTableData" |
|
|
|
border |
|
|
|
|