Просмотр исходного кода

fix: TASK #5573 + 多sheet导出 合并 + 支持流水表

Tony Kang 15 часов назад
Родитель
Сommit
9f80745959
2 измененных файлов с 38 добавлено и 14 удалено
  1. 27 13
      app/public/report/js/rpt_main.js
  2. 11 1
      app/reports/rpt_component/jpc_ex.js

+ 27 - 13
app/public/report/js/rpt_main.js

@@ -823,12 +823,12 @@ let rptControlObj = {
             var start = new Date().getTime();
             while(true)  if(new Date().getTime()-start > n) break;
         }
-        const _splitMasterDetailPageData = (pageData) => {
+        const _splitMasterDetailPageData = (pageData, propStr = 'excelExportOptions') => {
             // 这个专门服务于TASK 5565:导出Excel报表时,根据主从关系分多个sheet导出。
             const newPageDatas = [];
             const sheetNames = [];
-            for (let segIdx = 0; segIdx < pageData.excelExportOptions.segsAmt; segIdx++) {
-                const splitSeg = pageData.excelExportOptions.segs[`_${segIdx}`];
+            for (let segIdx = 0; segIdx < pageData[propStr].segsAmt; segIdx++) {
+                const splitSeg = pageData[propStr].segs[`_${segIdx}`];
                 const newPageData = {};
                 const newContrl = {};
                 const newFont = {};
@@ -841,7 +841,7 @@ let rptControlObj = {
                 newPageData[JV.NODE_FONT_COLLECTION] = newFont;
                 newPageData[JV.NODE_STYLE_COLLECTION] = newStyle;
                 newPageData[JV.NODE_PAGE_INFO] = JSON.parse(JSON.stringify(pageData[JV.NODE_PAGE_INFO]));
-                sheetNames.push(splitSeg.sheetName || `${segIdx + 1}`);
+                sheetNames.push(splitSeg.sheetName || splitSeg.fileName || `${segIdx + 1}`);
                 newPageData[JV.BAND_PROP_MERGE_BAND] = pageData[JV.BAND_PROP_MERGE_BAND];
                 newPageData.items = [];
                 for (let piIdx = 0; piIdx < pageData.items.length; piIdx++) {
@@ -857,18 +857,32 @@ let rptControlObj = {
             if (currentIndex < pageDataArr.length) {
                 //这里的数据应该在调用前己处理
                 const rptName = rpt_names[currentIndex];
-                if (pageDataArr[currentIndex].excelExportOptions) {
-                    // 拆分当前报表数据,然后以AllInOneBook的方式导出
-                    const {sheetNames, newPageDatas} = _splitMasterDetailPageData(pageDataArr[currentIndex]);
-                    const subSignatureRelArr = [];
-                    subSignatureRelArr.push(signatureRelArr[currentIndex]);
-                    for (let ssrIdx = 1; ssrIdx < newPageDatas.length; ssrIdx++) {
-                        subSignatureRelArr.push([]);
+                if (pageDataArr[currentIndex].excelExportOptions || pageDataArr[currentIndex].excelFileExportOptions) {
+                    if (pageDataArr[currentIndex].excelExportOptions) {
+                        // 拆分当前报表数据,然后以AllInOneBook的方式导出
+                        const {sheetNames, newPageDatas} = _splitMasterDetailPageData(pageDataArr[currentIndex]);
+                        const subSignatureRelArr = [];
+                        subSignatureRelArr.push(signatureRelArr[currentIndex]);
+                        for (let ssrIdx = 1; ssrIdx < newPageDatas.length; ssrIdx++) {
+                            subSignatureRelArr.push([]);
+                        }
+                        await rptControlObj.downloadExcelReportInOneBook(newPageDatas, pageSize, subSignatureRelArr, sheetNames, rptName);
+                    } 
+                    if (pageDataArr[currentIndex].excelFileExportOptions) {
+                        const singlePage = true;
+                        const {sheetNames, newPageDatas} = _splitMasterDetailPageData(pageDataArr[currentIndex], 'excelFileExportOptions');
+                        const role_rel_list = signatureRelArr[currentIndex];
+                        const dtlSignCells = [];
+                        filterSignCells(pageDataArr[currentIndex], dtlSignCells, null, null, PAGE_SHOW.isTextSignature, false);
+                        for (let fIdx = 0; fIdx < newPageDatas.length; fIdx++) {
+                            // const rptName = fileNames[fIdx];
+                            await excelExportUtil.exportExcel(newPageDatas[fIdx], pageSize, sheetNames[fIdx], singlePage, null, null, role_rel_list, null, getStageStatus() !== 3);
+                        }
+                        restoreSignCells(pageDataArr[currentIndex], dtlSignCells, null, null, PAGE_SHOW.isTextSignature, false);
                     }
-                    await rptControlObj.downloadExcelReportInOneBook(newPageDatas, pageSize, subSignatureRelArr, sheetNames, rptName);
                 } else {
                     const singlePage = true;
-                    let role_rel_list = signatureRelArr[currentIndex];
+                    const role_rel_list = signatureRelArr[currentIndex];
                     // await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, rptName, singlePage, null, null, ROLE_REL_LIST, null);
                     const dtlSignCells = [];
                     filterSignCells(pageDataArr[currentIndex], dtlSignCells, null, null, PAGE_SHOW.isTextSignature, false);

+ 11 - 1
app/reports/rpt_component/jpc_ex.js

@@ -402,6 +402,7 @@ JpcExSrv.prototype.createNew = function() {
                                 const fileNameVals = $JE.getFieldValueArray(subTab.excelFileExportOptions.fileNameField, dataObj);
                                 subTab.excelFileExportOptions.fileNameFieldValues = fileNameVals;
                             }
+                            subTab.excelFileExportOptions.segsAmt = dupVals.length;
                             for (let mstVIdx = 0; mstVIdx < dupVals.length; mstVIdx++) {
                                 const orgVIdx = masterVals.indexOf(dupVals[mstVIdx]);
                                 let fName = `${mstVIdx + 1}`;
@@ -409,6 +410,7 @@ JpcExSrv.prototype.createNew = function() {
                                     fName = subTab.excelFileExportOptions.fileNameFieldValues[orgVIdx];
                                 }
                                 subTab.excelFileExportOptions.segs[`${dupVals[mstVIdx]}`] = { pages: [], fileName: fName };
+                                // subTab.excelFileExportOptions.segs[`_${mstVIdx}`] = { pages: [], fileName: fName };
                             }
                         }
                     }
@@ -437,7 +439,15 @@ JpcExSrv.prototype.createNew = function() {
         if (subTab) {
             // 加料
             if (subTab.excelExportOptions) rst.excelExportOptions = subTab.excelExportOptions;
-            if (subTab.excelFileExportOptions) rst.excelFileExportOptions = subTab.excelFileExportOptions;
+            if (subTab.excelFileExportOptions) {
+                let propAmt = 0;
+                for (const propStr in subTab.excelFileExportOptions.segs) {
+                    subTab.excelFileExportOptions.segs[`_${propAmt}`] = subTab.excelFileExportOptions.segs[propStr];
+                    delete subTab.excelFileExportOptions.segs[propStr];
+                    propAmt++;
+                }
+                rst.excelFileExportOptions = subTab.excelFileExportOptions;
+            }
         }
         return rst;
     };