|
@@ -814,6 +814,11 @@ let rptControlObj = {
|
|
|
},
|
|
|
|
|
|
downloadExcelReport: async function(pageDataArr, pageSize, rpt_names, signatureRelArr) {
|
|
|
+ const MAX_BRK_PAGE = 300;
|
|
|
+ const __sleep = (n) => {
|
|
|
+ var start = new Date().getTime();
|
|
|
+ while(true) if(new Date().getTime()-start > n) break;
|
|
|
+ }
|
|
|
const private_download = async function(currentIndex) {
|
|
|
if (currentIndex < pageDataArr.length) {
|
|
|
//这里的数据应该在调用前己处理
|
|
@@ -824,8 +829,28 @@ let rptControlObj = {
|
|
|
await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, rptName, singlePage, null, null, role_rel_list, null, getStageStatus() !== 3);
|
|
|
}
|
|
|
};
|
|
|
+ const _splitDownload = async (currentIndex) => {
|
|
|
+ if (currentIndex < pageDataArr.length) {
|
|
|
+ const rptName = rpt_names[currentIndex];
|
|
|
+ const ttlPages = pageDataArr[currentIndex].items.length;
|
|
|
+ const splitAmt = Math.ceil(ttlPages / MAX_BRK_PAGE);
|
|
|
+ const singlePage = true;
|
|
|
+ let role_rel_list = signatureRelArr[currentIndex];
|
|
|
+ const bkItems = [].concat(pageDataArr[currentIndex].items);
|
|
|
+ for (let sIdx = 0; sIdx < splitAmt; sIdx++) {
|
|
|
+ let dlItems = bkItems.slice(sIdx * MAX_BRK_PAGE, (sIdx + 1) * MAX_BRK_PAGE);
|
|
|
+ pageDataArr[currentIndex].items = dlItems;
|
|
|
+ await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, `${rptName}${sIdx}`, singlePage, null, null, role_rel_list, null, getStageStatus() !== 3);
|
|
|
+ if (sIdx < splitAmt - 1) __sleep(10000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
for (let idx = 0; idx < pageDataArr.length; idx++) {
|
|
|
- await private_download(idx);
|
|
|
+ if (pageDataArr[idx].items.length > MAX_BRK_PAGE) {
|
|
|
+ await private_download(idx); // 应该用_splitDownload方法,只是目前的判断条件还不够理想,需要在qa上再仔细调整,在外网需要临时debug来分批导出
|
|
|
+ } else {
|
|
|
+ await private_download(idx);
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
|