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

修改tb2

上级 16a71347
...@@ -75,7 +75,7 @@ export const tableFormData = [ ...@@ -75,7 +75,7 @@ export const tableFormData = [
{ type: 'br' }, { type: 'br' },
{ type: 'br' }, { type: 'br' },
{ type: 'text', value: '基础设施灾备模式-备注' }, { type: 'text', value: '备注' },
{ type: 'textarea', field: 'COL5', width: '500px' }, { type: 'textarea', field: 'COL5', width: '500px' },
], ],
}, },
......
...@@ -375,66 +375,151 @@ async function setData() { ...@@ -375,66 +375,151 @@ async function setData() {
await setTplItemMap(); await setTplItemMap();
const recordData = await queryRecord({ taskid: taskId, tplid: tplid }); const recordData = await queryRecord({ taskid: taskId, tplid: tplid });
const valueObj = {};
for (const data of recordData) { const valueMap = recordData.reduce((acc, data) => {
const key = `${data.itempid}_${data.itemid}_${data.rind}`; const key = `${data.itempid}_${data.itemid}_${data.rind}_${data.tplcode}`;
valueObj[key] = data.content; 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) { for (const row of tableFormData) {
if(!row.type&&row.content) { if (!row.type && row.content) {
for (const cdata of row.content) { await fillSimpleFields(row, valueMap);
if(cdata.field&&cdata.field.length>0) { } else if (row.type === 'MultiColumnTable' && row.content) {
const strKey = `${row.code}_${cdata.field}`; await fillMultiColumnTable(row, valueMap);
const item = tplItemMap.value[strKey]; }
if (!item) continue; }
const { pid, itemid, formTp } = item; }
const dataVal = valueObj[`${pid}_${itemid}_1`];
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 (!dataVal) continue;
if (formTp === 'checkbox') { if (formTp === 'checkbox') {
formData[strKey] = dataVal?.split(",") || []; formData[fieldKey] = dataVal.split(',').filter(Boolean);
} else { } 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 = {}; const rowsMap = {};
for (const cdata of row.content) { const allFields = collectAllFields(row.content);
if(cdata.field&&cdata.field.length>0) {
const strKey = `${row.code}_${cdata.field}`; for (const fieldInfo of allFields) {
const tmpData = tplItemMap.value[strKey]; const fieldKey = getFieldKey(row.code, fieldInfo.field);
if (!tmpData) continue; const tplItem = tplItemMap.value[fieldKey];
const { pid, itemid, code } = tmpData; if (!tplItem) continue;
const valKeys = Object.keys(valueObj).filter(k =>
const { pid, itemid, code, formTp } = tplItem;
const valueKeys = Object.keys(valueMap).filter(k =>
k.startsWith(`${pid}_${itemid}_`) k.startsWith(`${pid}_${itemid}_`)
); );
for (const valKey of valKeys) { for (const valueKey of valueKeys) {
const parts = valKey.split('_'); const parts = valueKey.split('_');
const rind = parts[2]; const rind = parts[2];
if (!rowsMap[rind]) { if (!rowsMap[rind]) {
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); 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() { async function setTplItemMap() {
......
...@@ -9,13 +9,13 @@ ...@@ -9,13 +9,13 @@
@click="safeAddNewRecord" @click="safeAddNewRecord"
style="margin: 0 5px;" style="margin: 0 5px;"
>新增记录</vxe-button> >新增记录</vxe-button>
<vxe-button <!-- <vxe-button
type="text" type="text"
icon="vxe-icon-fullscreen" icon="vxe-icon-fullscreen"
@click="toggleFullscreen" @click="toggleFullscreen"
style="margin: 0 5px;" style="margin: 0 5px;"
>{{ isFullscreen ? '退出全屏' : '全屏' }} >{{ isFullscreen ? '退出全屏' : '全屏' }}
</vxe-button> </vxe-button> -->
<a-radio-group v-model:value="curColnum" style="margin-left: 20px;"> <a-radio-group v-model:value="curColnum" style="margin-left: 20px;">
<template v-for="i in 6" :key="i"> <template v-for="i in 6" :key="i">
...@@ -175,6 +175,7 @@ ...@@ -175,6 +175,7 @@
</template> </template>
<template v-else-if="field.formType === 'combinaform'"> <template v-else-if="field.formType === 'combinaform'">
<div v-for="(item,itemInd) in field.childs" :key="itemInd"> <div v-for="(item,itemInd) in field.childs" :key="itemInd">
<span class="extra-label">{{ item.label }}</span> <span class="extra-label">{{ item.label }}</span>
<component <component
...@@ -527,22 +528,29 @@ const getFormData = () => { ...@@ -527,22 +528,29 @@ const getFormData = () => {
} }
const setFormData = (dataVale) => { const setFormData = (dataVale) => {
tableData.value = dataVale.map(row => {
tableData.value = dataVale const newRow = { ...row }
dataVale.forEach((row, rowIndex) => {
props.fields.forEach(field => { props.fields.forEach(field => {
if(field.formType === 'table') { 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') { } else if(field.formType === 'AttachTable') {
const key = `${field.field}_${rowIndex}`; const key = `${field.field}_${dataVale.indexOf(row)}`;
const child = attchTableRefs.value[key]; const child = attchTableRefs.value[key];
if (child && child.setFormData) { if (child && child.setFormData) {
child.setFormData(dataVale) 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论