diff --git a/src/executor/tools/workForm/detail.tsx b/src/executor/tools/workForm/detail.tsx index 3603cd34566e509e1cc164c05a84ddca638d5656..3352f6f3d60896691da81562f8b10524a94eca88 100644 --- a/src/executor/tools/workForm/detail.tsx +++ b/src/executor/tools/workForm/detail.tsx @@ -877,13 +877,28 @@ const DetailTable: React.FC = (props) => { var ins = new Instance(detail, props.service.belong); const billsField = instance[detailToDetailRule.detailToDetail!.billsField!.id]; const data = await ins.loadData(); - const newDetails = data.node.detailForms.flatMap((detailForm: schema.XForm) => - data.data[detailForm.id][0].after.map((item: any) => ({ - [detailToDetailRule.detailToDetail!.detailField!.id]: billsField, - ...item, - })), + const detailPromises = data.node.detailForms.map( + async (detailForm: schema.XForm) => { + if ( + data.data[detailForm.id][0].after.length === 0 && + data.data[detailForm.id][0].afterTempId + ) { + const after = await ins.loadTempData( + data.data[detailForm.id][0].afterTempId, + ); + return after.map((item: any) => ({ + [detailToDetailRule.detailToDetail!.detailField!.id]: billsField, + ...item, + })); + } + return data.data[detailForm.id][0].after.map((item: any) => ({ + [detailToDetailRule.detailToDetail!.detailField!.id]: billsField, + ...item, + })); + }, ); - details.push(...newDetails); + const resolvedNewDetails = (await Promise.all(detailPromises)).flat(); + details.push(...resolvedNewDetails); } }); await Promise.all(instanceDetails); diff --git a/src/ts/core/work/instance.ts b/src/ts/core/work/instance.ts index 9fe03253db1dd67dce506d3e7314e96d0a2ed952..54ddc750e75627410bf48217e8aa535004af3527 100644 --- a/src/ts/core/work/instance.ts +++ b/src/ts/core/work/instance.ts @@ -16,6 +16,8 @@ export interface IInstance { loadTasks(reload?: boolean): Promise; // 加载数据 loadData(reload?: boolean): Promise; + // 加载临时数据 + loadTempData(tempId: string): Promise; // 审批前处理数据 dealInstanceData(data: model.InstanceDataModel): Promise; } @@ -88,6 +90,43 @@ export class Instance implements IInstance { return this.data; } + async loadTempData(tempId: string): Promise { + var skip = 0; + var result: schema.XThing[] = []; + let hasMore = true; + while (hasMore) { + var ret = await kernel.collectionLoad( + this.instance!.shareId, + this.instance!.belongId, + this.target.relations, + '-work-temp-data', + { + take: 200, + skip: skip, + options: { + match: { + tempId: tempId, + }, + sort: { + id: 1, + }, + }, + }, + ); + if (ret.success) { + if (ret.data.length > 0) { + skip += ret.data.length; + result.push(...ret.data); + } else { + hasMore = false; + } + } else { + hasMore = false; + } + } + return result; + } + async dealInstanceData(data: model.InstanceDataModel): Promise { var json = ''; FillChangedFields(data);