Bladeren bron

导出excel feature - 连续导出

TonyKang 7 jaren geleden
bovenliggende
commit
010a8c9dfd

+ 15 - 10
modules/reports/controllers/rpt_controller.js

@@ -128,17 +128,22 @@ module.exports = {
         ;
         let dftOption = option||JV.PAGING_OPTION_NORMAL;
         getAllPagesCommonOrg(rpt_id, pageSize, dftOption, function(err, pageRst){
-            rpt_xl_util.exportExcel(pageRst, pageSize, rptName, isOneSheet, null, function(newName){
-                res.setHeader('Content-Type', 'application/vnd.openxmlformats');
-                res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
-                let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.xlsx');
-                filestream.on('data', function(chunk) {
-                    res.write(chunk);
-                });
-                filestream.on('end', function() {
-                    res.end();
+            fs.writeFileSync('D:/GitHome/ConstructionOperation/tmp/testRpt.js', JSON.stringify(pageRst));
+            try {
+                rpt_xl_util.exportExcel(pageRst, pageSize, rptName, isOneSheet, null, function(newName){
+                    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
+                    res.setHeader("Content-Disposition", "attachment; filename=" + strUtil.getPinYinCamelChars(rptName) + ".xlsx");
+                    let filestream = fs.createReadStream(__dirname.slice(0, __dirname.length - 28) + '/tmp/' + newName + '.xlsx');
+                    filestream.on('data', function(chunk) {
+                        res.write(chunk);
+                    });
+                    filestream.on('end', function() {
+                        res.end();
+                    });
                 });
-            });
+            } catch (e) {
+                console.log(e);
+            }
         })
     },
     getExcelInOneBook: function(req, res) {

+ 14 - 6
modules/reports/rpt_component/jpc_ex.js

@@ -166,9 +166,9 @@ JpcExSrv.prototype.createNew = function(){
     JpcResult.outputAsSimpleJSONPageArray = function(rptTpl, dataObj, startPage, endPage, defProperties) {
         let me = this, rst = {};
         if ((startPage > 0) && (startPage <= endPage) && (endPage <= me.totalPages)) {
-            rst[JV.NODE_CONTROL_COLLECTION] = private_buildDftControls(rptTpl, (defProperties == null)?null:defProperties.ctrls);
-            rst[JV.NODE_STYLE_COLLECTION] = private_buildDftStyles(rptTpl, (defProperties == null)?null:defProperties.styles);
-            rst[JV.NODE_FONT_COLLECTION] = private_buildDftFonts(rptTpl, (defProperties == null)?null:defProperties.fonts);
+            rst[JV.NODE_CONTROL_COLLECTION] = private_buildDftControls(rptTpl, (defProperties === null)?null:defProperties.ctrls);
+            rst[JV.NODE_STYLE_COLLECTION] = private_buildDftStyles(rptTpl, (defProperties === null)?null:defProperties.styles);
+            rst[JV.NODE_FONT_COLLECTION] = private_buildDftFonts(rptTpl, (defProperties === null)?null:defProperties.fonts);
             rst[JV.NODE_PAGE_INFO] = {};
             rst[JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME] = rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MAIN_INFO_RPT_NAME];
             rst[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE] = JpcCommonHelper.getPageSize(rptTpl);
@@ -204,11 +204,19 @@ JpcExSrv.prototype.createNew = function(){
             rst = {};
             rst[JV.PROP_PAGE_SEQ] = page;
             //rst.cells = [];
+            let adHocMergePos = null;
             if (me.flowTab) {
                 if (me.totalPages - me.exTotalPages >= page) {
-                    rst.cells = me.flowTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, me);
+                    if (me.flowTab.paging_option === JV.PAGING_OPTION_INFINITY_VERTICAL) {
+                        adHocMergePos = {};
+                    }
+                    rst.cells = me.flowTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, adHocMergePos, me);
+                    if (adHocMergePos) {
+                        adHocMergePos[JV.NODE_PAGE_SIZE] = JpcCommonHelper.getPageSize(rptTpl);
+                        rst[JV.PAGE_SPECIAL_MERGE_POS] = adHocMergePos;
+                    }
                 } else {
-                    rst.cells = me.flowTabEx.outputAsSimpleJSONPage(rptTpl, dataObj, page - (me.totalPages - me.exTotalPages), bands, controls, me);
+                    rst.cells = me.flowTabEx.outputAsSimpleJSONPage(rptTpl, dataObj, page - (me.totalPages - me.exTotalPages), bands, controls, adHocMergePos, me);
                 }
             } else if (me.crossTab) {
                 rst.cells = me.crossTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, me);
@@ -220,6 +228,6 @@ JpcExSrv.prototype.createNew = function(){
     };
     //JpcEx.rte.currentRptObj = JpcResult;
     return JpcResult;
-}
+};
 
 module.exports = new JpcExSrv();

+ 21 - 5
modules/reports/rpt_component/jpc_flow_tab.js

@@ -134,7 +134,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
         me.pagesAmt = rst;
         return rst;
     };
-    JpcFlowTabResult.outputAsSimpleJSONPage = function (rptTpl, dataObj, page, bands, controls, $CURRENT_RPT) {
+    JpcFlowTabResult.outputAsSimpleJSONPage = function (rptTpl, dataObj, page, bands, controls, adHocMergePos, $CURRENT_RPT) {
         let me = this, rst = [], tabRstLst = [];
         let FLOW_NODE_STR = me.isEx?JV.NODE_FLOW_INFO_EX:JV.NODE_FLOW_INFO;
         let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
@@ -150,13 +150,29 @@ JpcFlowTabSrv.prototype.createNew = function(){
             JpcBandHelper.resetBandPos(rptTpl[JV.NODE_BAND_COLLECTION], bands, flowContentBand, offsetY);
 
             tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, 0, $CURRENT_RPT));
-            //2.2 Column tab
+            // 2.2 Column tab
             tabRstLst.push(me.outputColumn(rptTpl, dataObj, page, segIdx, bands, unitFactor, controls, 0));
-            //2.3 Sum Seg
+            // 2.3 Sum Seg
             tabRstLst.push(me.outputSegSum(rptTpl, dataObj, page, segIdx, bands, unitFactor, controls));
-            //2.4 Sum Page
-            //2.5 Discrete
+            // 2.4 Sum Page
+            // 2.5 Discrete
             tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[FLOW_NODE_STR][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT));
+            //3. reset merge band position
+            if (bands[JV.BAND_PROP_MERGE_BAND] && adHocMergePos) {
+                let mergedBand = bands[JV.BAND_PROP_MERGE_BAND];
+                let arr = [];
+                arr.push(parseInt(mergedBand[JV.PROP_LEFT].toFixed(0)));
+                adHocMergePos[JV.PROP_LEFT] = arr;
+                arr = [];
+                arr.push(parseInt(mergedBand[JV.PROP_RIGHT].toFixed(0)));
+                adHocMergePos[JV.PROP_RIGHT] = arr;
+                arr = [];
+                arr.push(parseInt(mergedBand[JV.PROP_TOP].toFixed(0)));
+                adHocMergePos[JV.PROP_TOP] = arr;
+                arr = [];
+                arr.push(parseInt((mergedBand[JV.PROP_BOTTOM] + offsetY).toFixed(0)));
+                adHocMergePos[JV.PROP_BOTTOM] = arr;
+            }
         } else {
             let segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
             //1 calculate the band position

+ 9 - 2
modules/reports/util/rpt_excel_util.js

@@ -944,8 +944,15 @@ module.exports = {
 
                 for (let j = 0; j < pageDataArray[i].items.length; j++) {
                     let maxY = 0, minY = 100000;
-                    mergeBand[JV.PROP_TOP].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] + offsetY);
-                    mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
+                    if (pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS]) {
+                        let pos = pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_TOP][0] + offsetY;
+                        mergeBand[JV.PROP_TOP].push(pos);
+                        pos = pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_BOTTOM][0] + offsetY;
+                        mergeBand[JV.PROP_BOTTOM].push(pos);
+                    } else {
+                        mergeBand[JV.PROP_TOP].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] + offsetY);
+                        mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
+                    }
                     for (let k = 0; k < pageDataArray[i].items[j].cells.length; k++) {
                         if (maxY < pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_BOTTOM]) {
                             maxY = pageDataArray[i].items[j].cells[k][JV.PROP_AREA][JV.PROP_BOTTOM];

+ 2 - 1
web/maintain/report/rpt_test.html

@@ -141,7 +141,8 @@
         let rptIds = "2,3";
         let size = "A4";
         let rpt_name = 'OneBook';
-        let url =  "/report_api/getExcelInOneBook/" + rptIds + "/" + size + "/" + rpt_name + "/normal";
+        let optionChk = document.getElementById("outputOptionChk");
+        let url =  "/report_api/getExcelInOneBook/" + rptIds + "/" + size + "/" + rpt_name + "/" + (optionChk.checked?'infinity_vertical':'normal');
         window.location = url;//这里不能使用get方法跳转,否则下载不成功
     }