提交 deef9285 authored 作者: kxjia's avatar kxjia

修改tb2

上级 16a71347
......@@ -75,7 +75,7 @@ export const tableFormData = [
{ type: 'br' },
{ type: 'br' },
{ type: 'text', value: '基础设施灾备模式-备注' },
{ type: 'text', value: '备注' },
{ type: 'textarea', field: 'COL5', width: '500px' },
],
},
......
......@@ -375,66 +375,151 @@ async function setData() {
await setTplItemMap();
const recordData = await queryRecord({ taskid: taskId, tplid: tplid });
const valueObj = {};
for (const data of recordData) {
const key = `${data.itempid}_${data.itemid}_${data.rind}`;
valueObj[key] = data.content;
const valueMap = recordData.reduce((acc, data) => {
const key = `${data.itempid}_${data.itemid}_${data.rind}_${data.tplcode}`;
acc[key] = data.content;
return acc;
}, {});
await fillTableData(valueMap);
} catch (error) {
console.error('加载数据失败:', error);
VxeUI.modal.message({
content: `加载数据失败: ${error instanceof Error ? error.message : String(error)}`,
status: 'error'
});
} finally {
loading.value = false;
}
}
async function fillTableData(valueMap) {
for (const row of tableFormData) {
if(!row.type&&row.content) {
for (const cdata of row.content) {
if(cdata.field&&cdata.field.length>0) {
const strKey = `${row.code}_${cdata.field}`;
const item = tplItemMap.value[strKey];
if (!item) continue;
const { pid, itemid, formTp } = item;
const dataVal = valueObj[`${pid}_${itemid}_1`];
if (!row.type && row.content) {
await fillSimpleFields(row, valueMap);
} else if (row.type === 'MultiColumnTable' && row.content) {
await fillMultiColumnTable(row, valueMap);
}
}
}
async function fillSimpleFields(row, valueMap) {
if (!row.content || !Array.isArray(row.content)) return;
for (const item of row.content) {
if (!item.field || item.field.length === 0) continue;
const fieldKey = getFieldKey(row.code, item.field);
const tplItem = tplItemMap.value[fieldKey];
if (!tplItem) continue;
const { pid, itemid, formTp, code } = tplItem;
const dataKey = `${pid}_${itemid}_1_${code}`;
const dataVal = valueMap[dataKey];
if (!dataVal) continue;
if (formTp === 'checkbox') {
formData[strKey] = dataVal?.split(",") || [];
formData[fieldKey] = dataVal.split(',').filter(Boolean);
} else {
formData[strKey] = dataVal || "";
formData[fieldKey] = dataVal;
}
if (item.type === 'radio-group-extraFields') {
await fillExtraFields(row, item, valueMap);
}
}
} else if(row.type=="MultiColumnTable"&& row.content) {
const curMultiTable = childMultiTableRefs.value[row.code];
}
async function fillExtraFields(row, item, valueMap) {
const options = item.options || [];
for (const opt of options) {
if (!opt.extraField || opt.extraField.length === 0) continue;
const fieldKey = getFieldKey(row.code, opt.extraField);
const tplItem = tplItemMap.value[fieldKey];
if (!tplItem) continue;
const { pid, itemid, code } = tplItem;
const dataKey = `${pid}_${itemid}_1_${code}`;
formData[fieldKey] = valueMap[dataKey] || '';
}
}
async function fillMultiColumnTable(row, valueMap) {
const child = childMultiTableRefs.value[row.code];
if (!child || !Array.isArray(row.content)) return;
const rowsMap = {};
for (const cdata of row.content) {
if(cdata.field&&cdata.field.length>0) {
const strKey = `${row.code}_${cdata.field}`;
const tmpData = tplItemMap.value[strKey];
if (!tmpData) continue;
const { pid, itemid, code } = tmpData;
const valKeys = Object.keys(valueObj).filter(k =>
const allFields = collectAllFields(row.content);
for (const fieldInfo of allFields) {
const fieldKey = getFieldKey(row.code, fieldInfo.field);
const tplItem = tplItemMap.value[fieldKey];
if (!tplItem) continue;
const { pid, itemid, code, formTp } = tplItem;
const valueKeys = Object.keys(valueMap).filter(k =>
k.startsWith(`${pid}_${itemid}_`)
);
for (const valKey of valKeys) {
const parts = valKey.split('_');
for (const valueKey of valueKeys) {
const parts = valueKey.split('_');
const rind = parts[2];
if (!rowsMap[rind]) {
rowsMap[rind] = {};
}
rowsMap[rind][code] = valueObj[valKey];
let value = valueMap[valueKey];
if (formTp === 'checkbox' && value) {
value = value.split(',').filter(Boolean);
}
rowsMap[rind][code] = value;
}
}
const tableDatas = Object.values(rowsMap);
curMultiTable.setFormData(tableDatas);
if (child && tableDatas.length > 0) {
child.setFormData(tableDatas);
}
}
function collectAllFields(content, fields = []) {
for (const item of content) {
if (item.field) {
fields.push({ field: item.field, formType: item.formType });
}
if (item.otherField) {
fields.push({ field: item.otherField, formType: 'input' });
}
if (item.formType === 'combinaform' && item.childs) {
collectAllFields(item.childs, fields);
}
if (item.formType === 'select' && item.options) {
for (const opt of item.options) {
if (opt.extraFields) {
collectAllFields(opt.extraFields, fields);
}
if (opt.otherOption && opt.extraField) {
fields.push({ field: opt.extraField, formType: 'input' });
}
}
}
if (item.formType === 'radio-group-extraFields' && item.extraFields) {
for (const key in item.extraFields) {
collectAllFields(item.extraFields[key], fields);
}
}
} catch (error) {
console.log(error)
VxeUI.modal.message({
content: `加载数据失败:`,
status: 'error'
});
} finally {
loading.value = false;
}
return fields;
}
async function setTplItemMap() {
......
......@@ -9,13 +9,13 @@
@click="safeAddNewRecord"
style="margin: 0 5px;"
>新增记录</vxe-button>
<vxe-button
<!-- <vxe-button
type="text"
icon="vxe-icon-fullscreen"
@click="toggleFullscreen"
style="margin: 0 5px;"
>{{ isFullscreen ? '退出全屏' : '全屏' }}
</vxe-button>
</vxe-button> -->
<a-radio-group v-model:value="curColnum" style="margin-left: 20px;">
<template v-for="i in 6" :key="i">
......@@ -175,6 +175,7 @@
</template>
<template v-else-if="field.formType === 'combinaform'">
<div v-for="(item,itemInd) in field.childs" :key="itemInd">
<span class="extra-label">{{ item.label }}</span>
<component
......@@ -527,22 +528,29 @@ const getFormData = () => {
}
const setFormData = (dataVale) => {
tableData.value = dataVale
dataVale.forEach((row, rowIndex) => {
tableData.value = dataVale.map(row => {
const newRow = { ...row }
props.fields.forEach(field => {
if(field.formType === 'table') {
field.gridOptions.data= JSON.parse(row[field.field])
field.gridOptions.data = JSON.parse(row[field.field])
} else if(field.formType === 'AttachTable') {
const key = `${field.field}_${rowIndex}`;
const key = `${field.field}_${dataVale.indexOf(row)}`;
const child = attchTableRefs.value[key];
if (child && child.setFormData) {
child.setFormData(dataVale)
}
} else if (field.formType === 'combinaform') {
if (field.childs && Array.isArray(field.childs)) {
field.childs.forEach(child => {
if (child.formType === 'checkbox' && !Array.isArray(newRow[child.field])) {
newRow[child.field] = []
}
})
});
}
}
})
return newRow
})
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论