TonyKang 4 年之前
父節點
當前提交
959b383e75

+ 43 - 23
app/controller/report_controller.js

@@ -436,12 +436,14 @@ module.exports = app => {
             // const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_tpl_id)) : [];
             const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
             // console.log('params.stage_status: ' + params.stage_status);
+            fsUtil.writeObjToFile(pageRstArr, 'D:/GitHome/temp/testBuiltPageResult.js');
             for (const pageRst of pageRstArr) {
                 for (const page of pageRst.items) {
                     page[JV.PROP_WATERMARK_CELLS] = [];
                 }
             }
             if (params.stage_status !== 3 && params.closeWatermark === 0) {
+            // if (params.stage_status !== 3 && params.closeWatermark === 0 && params.option === JV.PAGING_OPTION_NORMAL) {
                 // 加水印(注意:还得看用户设置是否需要加水印)
                 fillWaterMark(pageRstArr);
             }
@@ -489,6 +491,7 @@ module.exports = app => {
                 }
             }
             if (params.stage_status !== 3 && params.closeWatermark === 0) {
+            // if (params.stage_status !== 3 && params.closeWatermark === 0 && params.option === JV.PAGING_OPTION_NORMAL) {
                 // 加水印
                 fillWaterMark(pageRstArr);
             }
@@ -1076,32 +1079,49 @@ function isFileExisted(file) {
 }
 
 function fillWaterMark(pageRstArray) {
+    const orgWaterMarkWidth = 600;
+    const orgWaterMarkHeight = 288;
+    const createWaterCell = function(area) {
+        const w = area[JV.PROP_RIGHT] - area[JV.PROP_LEFT];
+        const h = area[JV.PROP_BOTTOM] - area[JV.PROP_TOP];
+        const left = Math.round(area[JV.PROP_LEFT] + w / 2 - orgWaterMarkWidth / 2);
+        const right = left + orgWaterMarkWidth;
+        const top = Math.round(area[JV.PROP_TOP] + h / 2 - orgWaterMarkHeight / 2);
+        const bottom = top + orgWaterMarkHeight;
+        return {
+            signature_name: JV.SIGNATURE_NAME_DUMMY,
+            path: '/public/images/not_Approve.png',
+            sign_path: '/public/images/not_Approve.png',
+            pic: null,
+            control: 'Title',
+            style: 'Default_None',
+            area: {
+                Left: left,
+                Right: right,
+                Top: top,
+                Bottom: bottom,
+            },
+        };
+    };
     for (const pageRst of pageRstArray) {
-        const orgWaterMarkWidth = 600;
-        const orgWaterMarkHeight = 288;
         for (const page of pageRst.items) {
-            const w = page[JV.PROP_PAGE_MERGE_BORDER].Right - page[JV.PROP_PAGE_MERGE_BORDER].Left;
-            const h = page[JV.PROP_PAGE_MERGE_BORDER].Bottom - page[JV.PROP_PAGE_MERGE_BORDER].Top;
-            const left = Math.round(page[JV.PROP_PAGE_MERGE_BORDER].Left + w / 2 - orgWaterMarkWidth / 2);
-            const right = left + orgWaterMarkWidth;
-            const top = Math.round(page[JV.PROP_PAGE_MERGE_BORDER].Top + h / 2 - orgWaterMarkHeight / 2);
-            const bottom = top + orgWaterMarkHeight;
-            const warterCell = {
-                signature_name: JV.SIGNATURE_NAME_DUMMY,
-                path: '/public/images/not_Approve.png',
-                sign_path: '/public/images/not_Approve.png',
-                pic: null,
-                control: 'Title',
-                style: 'Default_None',
-                area: {
-                    Left: left,
-                    Right: right,
-                    Top: top,
-                    Bottom: bottom,
-                },
-            };
             page[JV.PROP_WATERMARK_CELLS] = [];
-            page[JV.PROP_WATERMARK_CELLS].push(warterCell);
+            if (page[JV.PROP_PAGE_MERGE_BORDER]) {
+                const wmCell = createWaterCell(page[JV.PROP_PAGE_MERGE_BORDER]);
+                page[JV.PROP_WATERMARK_CELLS].push(wmCell);
+            } else if (page[JV.PAGE_SPECIAL_MERGE_POS]) {
+                if (page[JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_LEFT]) {
+                    for (let i = 0; i < page[JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_LEFT].length; i++) {
+                        const area = {};
+                        area[JV.PROP_LEFT] = page[JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_LEFT][i];
+                        area[JV.PROP_RIGHT] = page[JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_RIGHT][i];
+                        area[JV.PROP_TOP] = page[JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_TOP][i];
+                        area[JV.PROP_BOTTOM] = page[JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_BOTTOM][i];
+                        const wmCell = createWaterCell(area);
+                        page[JV.PROP_WATERMARK_CELLS].push(wmCell);
+                    }
+                }
+            }
         }
     }
 }

+ 8 - 0
app/public/report/js/rpt_main.js

@@ -299,6 +299,7 @@ let zTreeOprObj = {
             params.stage_order = getStageOrder();
             params.stage_times = getStageTimes();
             params.material_order = getMaterialOrder();
+            params.closeWatermark = getCloseWatermark();
             // me.requestNormalReport(params);
 
             const gather_select = customSelects.gather_select.find(function (x) {
@@ -548,6 +549,7 @@ let rptControlObj = {
             await rptCustomObj.getCustomSelect(params);
             params.rpt_names = rpt_sheet_names;
             params.rptName = TENDER_NAME;
+            params.option = getExcelOutputOption();
             let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
             if (chkNodes.length > 0) {
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向
@@ -576,6 +578,8 @@ let rptControlObj = {
             params.isOneSheet = true;
             params.rpt_names = rpt_names;
             params.rptName = 'All';
+            // 测试连续输出
+            params.option = getExcelOutputOption();
             let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
             if (chkNodes.length > 0) {
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向
@@ -912,3 +916,7 @@ function getStageTimes() {
 function getCloseWatermark() {
     return PAGE_SHOW['closeWatermark'];
 }
+function getExcelOutputOption() {
+    return 'normal'; // 目前是普通方式
+    // return 'infinity'; // 连续输出方式
+}

+ 2 - 2
app/reports/rpt_component/helper/jpc_helper_flow_tab.js

@@ -19,7 +19,7 @@ let JpcFlowTabHelper = {
         }
         return rst;
     },
-    getActualContentAreaHeight: function(bands, rptTpl, segments, page, isEx) {
+    getActualContentAreaHeight: function(bands, rptTpl, segments, rowAmt, page, isEx) {
         let rst = 1;
         let FLOW_INFO_STR = (!isEx)?JV.NODE_FLOW_INFO:JV.NODE_FLOW_INFO_EX;
         let tab = rptTpl[FLOW_INFO_STR][JV.NODE_FLOW_CONTENT];
@@ -33,7 +33,7 @@ let JpcFlowTabHelper = {
                 maxFieldMeasure = (band.Bottom - band.Top) * rptTpl[FLOW_INFO_STR][JV.NODE_FLOW_CONTENT][JV.PROP_CMN_HEIGHT] / JV.HUNDRED_PERCENT;
             }
             if (segments.length >= page) {
-                rst = segments[page - 1].length * maxFieldMeasure;
+                rst = rowAmt * maxFieldMeasure;
             }
         }
         return rst;

+ 16 - 4
app/reports/rpt_component/jpc_flow_tab.js

@@ -515,9 +515,11 @@ JpcFlowTabSrv.prototype.createNew = function() {
             followTabEx.setupGroupingData(rptTpl, dataObj, $CURRENT_RPT);
         }
         me.sumSeg(dataObj, $CURRENT_RPT); // 考虑到实际会有离散指标的汇总,这些离散指标数据是通过计算式后得来的,这种情况下,不适宜在sorting阶段进行汇总统计,现统一挪到这里处理
+        const bands = JpcBand.createNew(rptTpl, defProperties);
         if (me.paging_option === JV.PAGING_OPTION_INFINITY) {
             rst = me.segments.length;
-            const pageStatus = [true, true, false, true, true, true, false, false];
+            // const pageStatus = [true, true, false, true, true, true, false, false];
+            const pageStatus = [true, true, false, true, true, true, true, true];
             for (let segIdx = 0; segIdx < me.segments.length; segIdx++) {
                 if (segIdx === me.segments.length - 1) {
                     pageStatus[JV.STATUS_REPORT_END] = true;
@@ -525,14 +527,18 @@ JpcFlowTabSrv.prototype.createNew = function() {
                 if (segIdx > 0) {
                     pageStatus[JV.STATUS_REPORT_START] = false;
                 }
+                JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, !me.isEx, me.isEx);
+                maxRowRec = JpcFlowTabHelper.getMaxRowsPerPage(bands, rptTpl, me.isEx);
+                // console.log('presetup maxRowRec: ' + maxRowRec);
+                // console.log('presetup me.segments[segIdx].length: ' + me.segments[segIdx].length);
                 me.pageStatusLst.push(pageStatus.slice(0));
                 pageIdx++;
                 const grpSeqInfo = (me.group_node_info) ? me.group_node_info[segIdx] : null;
-                private_addPageValue(me.dispValueIdxLst, me.segments[segIdx], grpSeqInfo, 0, me.segments[segIdx].length, me.page_seg_map, segIdx, pageIdx, null, false, me.auto_height_info, 0);
+                const rowAmt = Math.max(maxRowRec, me.segments[segIdx].length);
+                private_addPageValue(me.dispValueIdxLst, me.segments[segIdx], grpSeqInfo, 0, rowAmt, me.page_seg_map, segIdx, pageIdx, null, false, me.auto_height_info, 0);
             }
             // 目前不支持flowTabEx
         } else {
-            const bands = JpcBand.createNew(rptTpl, defProperties);
             const pageStatus = [true, true, false, true, false, false, false, false];
             if (me.isEx) {
                 pageStatus[JV.STATUS_REPORT_START] = false;
@@ -799,10 +805,16 @@ JpcFlowTabSrv.prototype.createNew = function() {
             const segIdx = page - 1;
             // 1 calculate the band position
             JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1], !me.isEx, me.isEx);
+            const maxRowRec = JpcFlowTabHelper.getMaxRowsPerPage(bands, rptTpl, me.isEx);
             // 2. then reset the band height
             const tab = rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT];
             const flowContentBand = bands[tab[JV.PROP_BAND_NAME]];
-            const actH = JpcFlowTabHelper.getActualContentAreaHeight(bands, rptTpl, me.segments, page, me.isEx);
+            const rowAmt = Math.max(maxRowRec, me.segments[segIdx].length); // 如不满一页,则需要填充满一页
+            const actH = JpcFlowTabHelper.getActualContentAreaHeight(bands, rptTpl, me.segments, rowAmt, page, me.isEx);
+            // console.log('page:' + page);
+            // console.log('maxRowRec:' + maxRowRec);
+            // console.log('me.segments[segIdx].length:' + me.segments[segIdx].length);
+            // console.log('actH:' + actH);
             const offsetY = actH - (flowContentBand.Bottom - flowContentBand.Top);
             JpcBandHelper.resetBandPos(rptTpl[JV.NODE_BAND_COLLECTION], bands, flowContentBand, 0, offsetY);
             // 2.1 Content-Tab