|
|
|
@ -144,7 +144,7 @@ const tableDataList = ref([]); // 表格行数据 |
|
|
|
const currentAsfTableDataList = ref([]); //当前点击的关联表单数据 |
|
|
|
const openTaskDrawer = ref(false); //新增数据 |
|
|
|
|
|
|
|
//导出操作父元素 |
|
|
|
//导出窗口的父元素 |
|
|
|
const dynamicVNode = ref<VNode | null>(null) //组件的父组件 |
|
|
|
|
|
|
|
const state = reactive({ |
|
|
|
@ -858,6 +858,21 @@ const columnsFilter = computed(() => { |
|
|
|
} |
|
|
|
console.log("获取表格头内容", props.data.columns); |
|
|
|
}); |
|
|
|
|
|
|
|
const subTableFieldsFilter=computed(()=>{ |
|
|
|
const arr:{table:string,field:string,label:string}[]=[] |
|
|
|
const names:string[]=[] |
|
|
|
props.fieldsDetailList.forEach((item:any) => { |
|
|
|
if(item.type==="table"){ |
|
|
|
names.push(item.name) |
|
|
|
item.list.forEach((sub: any) => { |
|
|
|
arr.push({table:item.name, field: sub.name, label: sub.item.label}) |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
return {tables:names,fields:arr} |
|
|
|
}) |
|
|
|
|
|
|
|
/** |
|
|
|
@ 作者: 秦东 |
|
|
|
@ 时间: 2024-04-01 14:14:36 |
|
|
|
@ -976,7 +991,8 @@ const getPageData = () => { |
|
|
|
|
|
|
|
//表格导出 |
|
|
|
function doExportTableData(){ |
|
|
|
function exportFunc(fields:{field:string,label:string}[]){ |
|
|
|
//fields表示主表单的导出字段,subs表示主表单包含的子表格的导出字段 |
|
|
|
function exportFunc(fields:{field:string,label:string}[],subs:{table:string,field:string,label:string}[]){ |
|
|
|
let sendData = { |
|
|
|
formId: props.formId, |
|
|
|
page: 1, |
|
|
|
@ -991,14 +1007,60 @@ function doExportTableData(){ |
|
|
|
for (let val of fields){ |
|
|
|
title.push(val.label) |
|
|
|
} |
|
|
|
for (let val of subs){ |
|
|
|
title.push(val.label) |
|
|
|
} |
|
|
|
array.push(title.join(",")) |
|
|
|
|
|
|
|
//写入数据行 |
|
|
|
datas.list.forEach((item)=>{ |
|
|
|
const line=[]; |
|
|
|
let maxline=0; |
|
|
|
//写主表列 |
|
|
|
for (let val of fields){ |
|
|
|
line.push((item[val.field] as string).replaceAll(",",",")) |
|
|
|
} |
|
|
|
|
|
|
|
//写子表列 |
|
|
|
if (subs.length>0){ |
|
|
|
//计算所有子列表的最大行数 |
|
|
|
for (let tab of subTableFieldsFilter.value.tables){ |
|
|
|
if(item[tab] && item[tab].length>maxline) maxline=item[tab].length |
|
|
|
} |
|
|
|
//全都是空的 |
|
|
|
if(maxline===0){ |
|
|
|
array.push(line.join(",")+","+Array(subs.length).fill("")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
//除第一行数据包含子表数据外,其他行都省略主表字段数据,用spaceprefix填充,避免重复 |
|
|
|
const spacePrefix=Array(line.length).fill("") |
|
|
|
|
|
|
|
for(let i=0;i<maxline;i++){ |
|
|
|
const row:any[]=[] |
|
|
|
subTableFieldsFilter.value.tables.forEach(name => { |
|
|
|
if(item[name] && item[name].length-1>=i){ |
|
|
|
//添加实际数据 |
|
|
|
subs.filter(v=>v.table===name).forEach(f=>{ |
|
|
|
row.push(item[name][i][f.field]) |
|
|
|
}) |
|
|
|
}else{ |
|
|
|
//添加字段长度的N个空列 |
|
|
|
row.push(...(Array(subs.filter(v=>v.table===name).length).fill(""))) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
//写入总csv数组 |
|
|
|
if(i===0){ |
|
|
|
array.push(line.join(",")+","+row.join(",")) |
|
|
|
}else{ |
|
|
|
array.push(spacePrefix+","+row.join(",")) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return |
|
|
|
} |
|
|
|
//没有子表 |
|
|
|
array.push(line.join(",")) |
|
|
|
}) |
|
|
|
|
|
|
|
@ -1024,6 +1086,7 @@ function doExportTableData(){ |
|
|
|
|
|
|
|
dynamicVNode.value=h(exportPanel,{ |
|
|
|
fields:columnsFilter.value, |
|
|
|
subFields:subTableFieldsFilter.value.fields, |
|
|
|
commitFunc:exportFunc, |
|
|
|
closeFunc:()=>dynamicVNode.value=null |
|
|
|
}) |
|
|
|
@ -1032,9 +1095,6 @@ function doExportTableData(){ |
|
|
|
async function doGainFormPageListCont(sendData:any){ |
|
|
|
const data =await gainFormPageListCont(sendData) |
|
|
|
// console.log("获取列表详细信息----------------->",data) |
|
|
|
|
|
|
|
//liwenxuan 关联表单数据获取 start |
|
|
|
let dataList = data; |
|
|
|
//console.log(dataList) |
|
|
|
asfDetails = props.data.columns.filter((item: any) => { |
|
|
|
return item.fieldClass == "associatedForms"; |
|
|
|
@ -1074,6 +1134,8 @@ async function doGainFormPageListCont(sendData:any){ |
|
|
|
} |
|
|
|
//console.log(asfQueryParams) |
|
|
|
if (queryCount > 0) { |
|
|
|
//liwenxuan 关联表单数据获取 start |
|
|
|
let dataList = data; |
|
|
|
//-------------------直接return 异步结果---------------------- |
|
|
|
return await getAsfDataTitlesByIds(asfQueryParams).then(({ data }) => { |
|
|
|
//console.log(data) |
|
|
|
|