Pārlūkot izejas kodu

code merge from cost

TonyKang 7 gadi atpakaļ
vecāks
revīzija
f3fea859d1

+ 21 - 3
modules/reports/rpt_component/jpc_ex.js

@@ -208,6 +208,18 @@ JpcExSrv.prototype.createNew = function(){
     };
     JpcResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, bands, page, controls) {
         let me = this, rst = null;
+        function getPageMergeBorder() {
+            let rst = null;
+            if (bands[JV.BAND_PROP_MERGE_BAND]) {
+                let mergedBand = bands[JV.BAND_PROP_MERGE_BAND];
+                rst = {};
+                rst[JV.PROP_LEFT] = parseInt(mergedBand[JV.PROP_LEFT].toFixed(0));
+                rst[JV.PROP_RIGHT] = parseInt(mergedBand[JV.PROP_RIGHT].toFixed(0));
+                rst[JV.PROP_TOP] = parseInt(mergedBand[JV.PROP_TOP].toFixed(0));
+                rst[JV.PROP_BOTTOM] = parseInt(mergedBand[JV.PROP_BOTTOM].toFixed(0));
+            }
+            return rst;
+        }
         if (me.totalPages >= page) {
             rst = {};
             rst[JV.PROP_PAGE_SEQ] = page;
@@ -218,7 +230,7 @@ JpcExSrv.prototype.createNew = function(){
                     if (me.flowTab.paging_option === JV.PAGING_OPTION_INFINITY) {
                         adHocMergePos = {};
                     }
-                    rst.cells = me.flowTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, adHocMergePos, me);
+                    rst[JV.PROP_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;
@@ -226,14 +238,20 @@ JpcExSrv.prototype.createNew = function(){
 
                 } else {
                     if (!me.isFollowMode) {
-                        rst.cells = me.flowTabEx.outputAsSimpleJSONPage(rptTpl, dataObj, page - (me.totalPages - me.exTotalPages), bands, controls, adHocMergePos, me);
+                        rst[JV.PROP_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);
+                rst[JV.PROP_CELLS] = me.crossTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, me);
             } else if (me.billTab) {
                 //
             }
+            if (!(me.flowTab && me.flowTab.paging_option === JV.PAGING_OPTION_INFINITY)) {
+                let pageMergeBorder = getPageMergeBorder();
+                if (pageMergeBorder) {
+                    rst[JV.PROP_PAGE_MERGE_BORDER] = pageMergeBorder;
+                }
+            }
         }
         return rst;
     };

+ 2 - 2
modules/reports/util/rpt_construct_data_util.js

@@ -556,11 +556,11 @@ function sortData(sourceData, sortCfg, prjData) {
                             }
                         } else if (sort[JV.PROP_SORT_TYPE] === 'self_define') {
                             for (let subArr of sortedRstArr) {
-                                console.log(subArr);
+                                // console.log(subArr);
                                 let selfDefFunc = null;
                                 eval('selfDefFunc = ' + sort[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]);
                                 subArr.sort(selfDefFunc);
-                                console.log(subArr);
+                                // console.log(subArr);
                             }
                         }
                     }

+ 1 - 0
public/web/rpt_value_define.js

@@ -243,6 +243,7 @@ const JV = {
     OFFSET_IDX_BOTTOM: 3,
 
     PROP_PAGE_SEQ: "page_seq",
+    PROP_PAGE_MERGE_BORDER: "page_merge_border",
     PROP_CELLS: "cells",
 
     PAGING_OPTION_NORMAL: 'normal',

+ 55 - 31
web/maintain/report/js/jpc_output.js

@@ -1,20 +1,22 @@
-/** Created by Tony on 2016/12/2. */
+/**
+ * Created by Tony on 2017/11/2.
+ */
 let JpcCanvasOutput = {
     offsetX: 10,
     offsetY: 10,
     cleanCanvas: function (canvas) {
-        var ctx = canvas.getContext("2d");
+        let ctx = canvas.getContext("2d");
         ctx.save();
         ctx.fillStyle="white";
         ctx.clearRect(0,0, canvas.width, canvas.height);
         ctx.restore();
     },
     drawToCanvas : function(pageObj, canvas, pageIdx) {
-        var me = this;
-        var ctx = canvas.getContext("2d");
+        let me = this;
+        let ctx = canvas.getContext("2d");
 
         function private_setupAreaH(area, type, fontAngle, dftFontHeight, outputPoint) {
-            var lType = type;
+            let lType = type;
             if (type != "left" && type != "right" && type != "center") lType = "left";
             switch (lType) {
                 case "left":
@@ -42,7 +44,7 @@ let JpcCanvasOutput = {
             }
         }
         function private_setupAreaV(area, type, fontAngle, dftFontHeight, outputPoint) {
-            var lType = type;
+            let lType = type;
             if (type != "top" && type != "bottom" && type != "center") lType = "top";
             switch (lType) {
                 case "top":
@@ -69,16 +71,16 @@ let JpcCanvasOutput = {
             }
         }
         function private_drawText(val, area, font, control) {
-            var dftFontHeight = 12;
-            var output = [];
+            let dftFontHeight = 12;
+            let output = [];
             if (font) {
                 dftFontHeight = 1 * font[JV.FONT_PROPS[1]];
-                var dftOthers = "";
-                var dftFontBold = font[JV.FONT_PROPS[3]];
+                let dftOthers = "";
+                let dftFontBold = font[JV.FONT_PROPS[3]];
                 if (dftFontBold && dftFontBold == 'T') {
                     dftOthers = "bold " + dftOthers ;
                 }
-                var dftFontItalic = font[JV.FONT_PROPS[4]];
+                let dftFontItalic = font[JV.FONT_PROPS[4]];
                 if (dftFontItalic && dftFontItalic == 'T') {
                     dftOthers = dftOthers + "italic ";
                 }
@@ -91,15 +93,15 @@ let JpcCanvasOutput = {
                 private_setupAreaH(area, "left", font.FontAngle, dftFontHeight, output);
                 private_setupAreaV(area, "bottom", font.FontAngle, dftFontHeight, output);
             }
-            var w = area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
+            let w = area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
             if (font.FontAngle != "0") {
                 w = area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] - area[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
             }
             ctx.save();
             ctx.translate(output[0], output[1]);
-            if (font.FontAngle == JV.VERTICAL_ANGLE) {
+            if (font.FontAngle === JV.VERTICAL_ANGLE) {
                 ctx.rotate(Math.PI/2);
-            } else if (font.FontAngle == JV.ANTI_VERTICAL_ANGLE) {
+            } else if (font.FontAngle === JV.ANTI_VERTICAL_ANGLE) {
                 ctx.rotate(-Math.PI/2);
             }
             if (w >= ctx.measureText(val).width) {
@@ -118,12 +120,17 @@ let JpcCanvasOutput = {
         }
         function private_drawCellText(cell, fonts, controls) {
             if (cell[JV.PROP_VALUE]) {
-                var values = ("" + cell[JV.PROP_VALUE]).split('|');
-                var font = fonts[cell[JV.PROP_FONT]];
-                var control = controls[cell[JV.PROP_CONTROL]];
-                var height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
-                var area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + me.offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + me.offsetY];
-                for (var i = 0; i < values.length; i++) {
+                let values = ("" + cell[JV.PROP_VALUE]).split('|');
+                let font = fonts[cell[JV.PROP_FONT]];
+                let control = controls[cell[JV.PROP_CONTROL]];
+                if (control.ShowZero === "F") {
+                    if (parseFloat(cell[JV.PROP_VALUE]) === 0.0) {
+                        values = [""];
+                    }
+                }
+                let height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
+                let area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + me.offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + me.offsetY];
+                for (let i = 0; i < values.length; i++) {
                     area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + me.offsetY;
                     area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + me.offsetY;
                     private_drawText(values[i], area, font, control);
@@ -132,7 +139,7 @@ let JpcCanvasOutput = {
         }
         function private_drawLine(cell, ctx, style, styleBorderDest, startP, destP, mergedBand, styles, isNeedMergeBand) {
             ctx.beginPath();
-            var destStyle = style;
+            let destStyle = style;
             if (mergedBand) {
                 if (isNeedMergeBand && mergedBand[styleBorderDest] == cell[JV.PROP_AREA][styleBorderDest]) {
                     destStyle = styles[mergedBand[JV.PROP_STYLE][JV.PROP_ID]];
@@ -150,14 +157,14 @@ let JpcCanvasOutput = {
             let rst = false;
             if (mergedBand && cell) {
                 rst = mergedBand[JV.PROP_TOP] <= cell[JV.PROP_AREA][JV.PROP_TOP] && mergedBand[JV.PROP_BOTTOM] >= cell[JV.PROP_AREA][JV.PROP_BOTTOM] &&
-                      mergedBand[JV.PROP_LEFT] <= cell[JV.PROP_AREA][JV.PROP_LEFT] && mergedBand[JV.PROP_RIGHT] >= cell[JV.PROP_AREA][JV.PROP_RIGHT];
+                    mergedBand[JV.PROP_LEFT] <= cell[JV.PROP_AREA][JV.PROP_LEFT] && mergedBand[JV.PROP_RIGHT] >= cell[JV.PROP_AREA][JV.PROP_RIGHT];
             }
             return rst;
         }
         function private_drawCell(cell, fonts, styles, controls, mergedBand) {
             ctx.save();
             ctx.translate(0.5,0.5);
-            var style = styles[cell[JV.PROP_STYLE]];
+            let style = styles[cell[JV.PROP_STYLE]];
             if (style) {
                 let isNeedMergeBand = private_chkIfInMergedBand(mergedBand, cell);
                 private_drawLine(cell, ctx, style, JV.PROP_TOP, [JV.PROP_LEFT, JV.PROP_TOP],[JV.PROP_RIGHT, JV.PROP_TOP], mergedBand, styles, isNeedMergeBand);
@@ -168,26 +175,43 @@ let JpcCanvasOutput = {
             private_drawCellText(cell, fonts, controls);
             ctx.restore();
         }
+        function getIniPageMergeBorder(mergedBand) {
+            let rst = {};
+            rst[JV.PROP_LEFT] = mergedBand[JV.PROP_LEFT];
+            rst[JV.PROP_RIGHT] = mergedBand[JV.PROP_RIGHT];
+            rst[JV.PROP_TOP] = mergedBand[JV.PROP_TOP];
+            rst[JV.PROP_BOTTOM] = mergedBand[JV.PROP_BOTTOM];
+            rst[JV.PROP_STYLE] = mergedBand[JV.PROP_STYLE];
+            return rst;
+        }
 
         if (pageObj && pageObj.items.length > 0 && canvas && pageObj.items.length >= pageIdx) {
-            var page = pageObj.items[pageIdx - 1],
+            let page = pageObj.items[pageIdx - 1],
                 fonts = pageObj[JV.NODE_FONT_COLLECTION],
                 styles = pageObj[JV.NODE_STYLE_COLLECTION],
                 controls = pageObj[JV.NODE_CONTROL_COLLECTION],
                 mergedBand = pageObj[JV.BAND_PROP_MERGE_BAND];
-            for (var j = 0; j < page.cells.length; j++) {
-                var cell = page.cells[j];
-                private_drawCell(cell, fonts, styles, controls, mergedBand);
+            let newPageMergeBand = getIniPageMergeBorder(mergedBand);
+            if (page[JV.PROP_PAGE_MERGE_BORDER]) {
+                newPageMergeBand[JV.PROP_LEFT] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_LEFT];
+                newPageMergeBand[JV.PROP_RIGHT] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_RIGHT];
+                newPageMergeBand[JV.PROP_TOP] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_TOP];
+                newPageMergeBand[JV.PROP_BOTTOM] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_BOTTOM];
+            }
+            for (let j = 0; j < page.cells.length; j++) {
+                let cell = page.cells[j];
+                // private_drawCell(cell, fonts, styles, controls, mergedBand);
+                private_drawCell(cell, fonts, styles, controls, newPageMergeBand);
             }
         }
     },
     drawPageBorder: function(rptTpl, canvas, resolution) {
-        var me = this;
-        var size = rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
+        let me = this;
+        let size = rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
         size[0] = Math.round(resolution[0] * size[0]);
         size[1] = Math.round(resolution[0] * size[1]);
 
-        var ctx = canvas.getContext("2d");
+        let ctx = canvas.getContext("2d");
         ctx.save();
         ctx.beginPath();
         ctx.translate(0.5,0.5);
@@ -204,4 +228,4 @@ let JpcCanvasOutput = {
         ctx.fillRect(size[0] + me.offsetX,10 + me.offsetY,10,size[1]);
         ctx.fillRect(10 + me.offsetX,size[1] + me.offsetY,size[0],10);
     }
-}
+};

+ 1 - 0
web/maintain/report/js/jpc_output_value_define.js

@@ -13,6 +13,7 @@ let JV = {
     NODE_CONTROL_COLLECTION: "control_collection",
 
     BAND_PROP_MERGE_BAND: "MergeBand",
+    PROP_PAGE_MERGE_BORDER: "page_merge_border",
 
     PROP_NAME: "Name",
     PROP_VALUE: "Value",