浏览代码

code sync

TonyKang 6 年之前
父节点
当前提交
7454a15701
共有 3 个文件被更改,包括 118 次插入23 次删除
  1. 114 19
      modules/reports/rpt_component/jpc_flow_tab.js
  2. 1 1
      modules/reports/util/rpt_pdf_util.js
  3. 3 3
      test/demo/stringTest.js

+ 114 - 19
modules/reports/rpt_component/jpc_flow_tab.js

@@ -160,7 +160,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
         me.multiCols = 1;
         me.multiCols = 1;
         me.pagesAmt = 0;
         me.pagesAmt = 0;
     };
     };
-    JpcFlowTabResult.sorting = function(rptTpl, dataObj, dataSeq) {
+    JpcFlowTabResult.sorting = function(rptTpl, dataObj, dataSeq, $CURRENT_RPT) {
         let me = this;
         let me = this;
         let FLOW_NODE_STR = me.isEx?JV.NODE_FLOW_INFO_EX:JV.NODE_FLOW_INFO;
         let FLOW_NODE_STR = me.isEx?JV.NODE_FLOW_INFO_EX:JV.NODE_FLOW_INFO;
         if (rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_SEG_SUM]) JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_SEG_SUM][JV.PROP_SUM_FIELDS], me.seg_sum_tab_fields, me.seg_sum_fields_idx, me.isEx);
         if (rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_SEG_SUM]) JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_SEG_SUM][JV.PROP_SUM_FIELDS], me.seg_sum_tab_fields, me.seg_sum_fields_idx, me.isEx);
@@ -174,11 +174,24 @@ JpcFlowTabSrv.prototype.createNew = function(){
             me.segments.push(dataSeq[si].slice(0));
             me.segments.push(dataSeq[si].slice(0));
         }
         }
         //pre-sum the data(for seg sum display)
         //pre-sum the data(for seg sum display)
+        //考虑到实际会有离散指标的汇总,这些离散指标数据是通过计算式后得来的,这种情况下,不适宜在sorting阶段进行汇总统计,现挪到preSetupPages阶段处理
+    };
+    JpcFlowTabResult.sumSeg = function (dataObj, $CURRENT_RPT) {
+        let me = this;
         let data_details = me.isEx?dataObj[JV.DATA_DETAIL_DATA_EX]:dataObj[JV.DATA_DETAIL_DATA],
         let data_details = me.isEx?dataObj[JV.DATA_DETAIL_DATA_EX]:dataObj[JV.DATA_DETAIL_DATA],
             data_fields = [];
             data_fields = [];
         for (let i = 0; i < me.seg_sum_fields_idx.length; i++) {
         for (let i = 0; i < me.seg_sum_fields_idx.length; i++) {
-            let data_field = data_details[me.seg_sum_fields_idx[i]];
-            data_fields.push(data_field);
+            if (typeof(me.seg_sum_fields_idx[i])=="object") {
+                let exField = JE.F(me.seg_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
+                if (exField) {
+                    data_fields.push(exField["data_field"]);
+                } else {
+                    data_fields.push(null);
+                }
+            } else {
+                let data_field = data_details[me.seg_sum_fields_idx[i]];
+                data_fields.push(data_field);
+            }
         }
         }
         for (let i = 0; i < me.segments.length; i++) { //seg level
         for (let i = 0; i < me.segments.length; i++) { //seg level
             if (me.segments[i].length > 0) {
             if (me.segments[i].length > 0) {
@@ -192,7 +205,6 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 }
                 }
                 me.segSumValLst.push(rowGrandTotal);
                 me.segSumValLst.push(rowGrandTotal);
             }
             }
-
         }
         }
     };
     };
     JpcFlowTabResult.sumUpGrp = function ($CURRENT_RPT, dataObj, segIdx, preGrpIdx, nexGrpIdx) {
     JpcFlowTabResult.sumUpGrp = function ($CURRENT_RPT, dataObj, segIdx, preGrpIdx, nexGrpIdx) {
@@ -329,14 +341,17 @@ JpcFlowTabSrv.prototype.createNew = function(){
                             doc.fontSize(12);
                             doc.fontSize(12);
                         }
                         }
                         let hasSplitStr = false, splitStrArr = [];
                         let hasSplitStr = false, splitStrArr = [];
+                        let accAmt = 0;
                         for (let i = 0; i < values.length; i++) {
                         for (let i = 0; i < values.length; i++) {
-                            let amt = JpcCommonHelper.getStringLinesInArea(area, values[i], doc) - 1;
-                            rst += amt;
-                            if (amt > 0) {
+                            let amt = JpcCommonHelper.getStringLinesInArea(area, values[i], doc);
+                            accAmt += amt;
+                            // rst += amt;
+                            if (amt > 1) {
                                 hasSplitStr = true;
                                 hasSplitStr = true;
                                 splitStrArr.push(i);
                                 splitStrArr.push(i);
                             }
                             }
                         }
                         }
+                        if (accAmt > rst) rst = accAmt;
                         if (hasSplitStr) {
                         if (hasSplitStr) {
                             let newValArr = [];
                             let newValArr = [];
                             for (let i = 0; i < values.length; i++) {
                             for (let i = 0; i < values.length; i++) {
@@ -395,6 +410,7 @@ JpcFlowTabSrv.prototype.createNew = function(){
         if (followTabEx) {
         if (followTabEx) {
             JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO_EX][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], null, me.disp_fields_ex_idx, true);
             JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO_EX][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], null, me.disp_fields_ex_idx, true);
         }
         }
+        me.sumSeg(dataObj, $CURRENT_RPT); //考虑到实际会有离散指标的汇总,这些离散指标数据是通过计算式后得来的,这种情况下,不适宜在sorting阶段进行汇总统计,现统一挪到这里处理
         if (me.paging_option === JV.PAGING_OPTION_INFINITY) {
         if (me.paging_option === JV.PAGING_OPTION_INFINITY) {
             rst = me.segments.length;
             rst = me.segments.length;
             let pageStatus = [true, true, false, true, true, true, false, false];
             let pageStatus = [true, true, false, true, true, true, false, false];
@@ -759,8 +775,17 @@ JpcFlowTabSrv.prototype.createNew = function(){
                 let contentValuesIdx = me.dispValueIdxLst[page - 1];
                 let contentValuesIdx = me.dispValueIdxLst[page - 1];
                 let page_sum_data_fields = [];
                 let page_sum_data_fields = [];
                 for (let i = 0; i < me.page_sum_fields_idx.length; i++) {
                 for (let i = 0; i < me.page_sum_fields_idx.length; i++) {
-                    let data_field = data_details[me.page_sum_fields_idx[i]];
-                    page_sum_data_fields.push(data_field);
+                    if (typeof(me.page_sum_fields_idx[i])=="object") {
+                        let exField = JE.F(me.page_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
+                        if (exField) {
+                            page_sum_data_fields.push(exField["data_field"]);
+                        } else {
+                            page_sum_data_fields.push(null);
+                        }
+                    } else {
+                        let data_field = data_details[me.page_sum_fields_idx[i]];
+                        page_sum_data_fields.push(data_field);
+                    }
                 }
                 }
                 let rowGrandTotal = [];
                 let rowGrandTotal = [];
                 for (let di = 0; di < page_sum_data_fields.length; di++) {
                 for (let di = 0; di < page_sum_data_fields.length; di++) {
@@ -976,11 +1001,13 @@ JpcFlowTabSrv.prototype.createNew = function(){
             }
             }
             let rst = JpcCommonOutputHelper.createCommonOutput(tab_field, showText, controls);
             let rst = JpcCommonOutputHelper.createCommonOutput(tab_field, showText, controls);
             rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
             rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
+            rst[JV.PROP_IS_AUTO_HEIGHT] = true;
             return rst;
             return rst;
         } else {
         } else {
             if (contentValInfo[3] > 0) showText = '';
             if (contentValInfo[3] > 0) showText = '';
             let rst = JpcCommonOutputHelper.createCommonOutput(tab_field, showText, controls);
             let rst = JpcCommonOutputHelper.createCommonOutput(tab_field, showText, controls);
             rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
             rst[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, rows, rowIdx, cols, colIdx, me.multiCols, multiColIdx, true, false);
+            rst[JV.PROP_IS_AUTO_HEIGHT] = false;
             return rst;
             return rst;
         }
         }
     };
     };
@@ -1055,17 +1082,24 @@ function setupControl(mergeCell, controls) {
             "Shrink": "T",
             "Shrink": "T",
             "ShowZero": orgCtrl.ShowZero,
             "ShowZero": orgCtrl.ShowZero,
             "Horizon": orgCtrl.Horizon,
             "Horizon": orgCtrl.Horizon,
-            "Vertical": "top",
+            "Vertical": orgCtrl.Vertical,
             "Wrap": "T",
             "Wrap": "T",
-            "VerticalForExcel": "justify"
+            "VerticalForExcel": "center"
         };
         };
     } else {
     } else {
         mergeCell[JV.PROP_CONTROL].Shrink = "T";
         mergeCell[JV.PROP_CONTROL].Shrink = "T";
         mergeCell[JV.PROP_CONTROL].Vertical = "top";
         mergeCell[JV.PROP_CONTROL].Vertical = "top";
         mergeCell[JV.PROP_CONTROL].Wrap = "T";
         mergeCell[JV.PROP_CONTROL].Wrap = "T";
-        mergeCell[JV.PROP_CONTROL].VerticalForExcel = "justify";
+        mergeCell[JV.PROP_CONTROL].VerticalForExcel = "center";
         orgCtrl = mergeCell[JV.PROP_CONTROL];
         orgCtrl = mergeCell[JV.PROP_CONTROL];
     }
     }
+    if (mergeCell[JV.PROP_IS_AUTO_HEIGHT]) {
+        mergeCell[JV.PROP_CONTROL]["VerticalForExcel"] = 'justify';
+        // mergeCell[JV.PROP_CONTROL]["Vertical"] = 'center';
+    } else {
+        mergeCell[JV.PROP_CONTROL]["VerticalForExcel"] = 'center';
+        // mergeCell[JV.PROP_CONTROL]["Vertical"] = 'top';
+    }
     return orgCtrl;
     return orgCtrl;
 }
 }
 
 
@@ -1075,31 +1109,92 @@ function combineAutoHeightCells(prepareObj, page, controls) {
         //merge cells' value and area
         //merge cells' value and area
         //备注: 系统逻辑已经把Cell的顺序放好,无需再做排序。
         //备注: 系统逻辑已经把Cell的顺序放好,无需再做排序。
         for (let mergeKey in prepareObj.pageCellObj) {
         for (let mergeKey in prepareObj.pageCellObj) {
-            if (prepareObj.pageCellObj[mergeKey].length > 1) {
-                let firstMergeCell = prepareObj.pageCellObj[mergeKey][0].cell;
+            let sameColCells = prepareObj.pageCellObj[mergeKey]; //左右位置相同的Cell先放在一起,统一处理
+            if (sameColCells.length > 1) {
+                let firstMergeCell = sameColCells[0].cell;
+                firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge")); //首先还原original style
+                let orgCtrl = setupControl(firstMergeCell, controls);
+                let validValueAmt = 0, fullValidValueAmt = 0;
+                for (let i = 1; i < sameColCells.length; i++) {
+                    let mergeCell = sameColCells[i].cell;
+                    if (mergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge_Top") < 0) {
+                        fullValidValueAmt++;
+                        //merge into the firstMergeCell! position & value
+                        firstMergeCell[JV.PROP_AREA][JV.PROP_BOTTOM] = mergeCell[JV.PROP_AREA][JV.PROP_BOTTOM];
+                        if (mergeCell[JV.PROP_VALUE]) {
+                            firstMergeCell[JV.PROP_VALUE] = firstMergeCell[JV.PROP_VALUE] + "|" + mergeCell[JV.PROP_VALUE];
+                            validValueAmt++;
+                        } else {
+                            // firstMergeCell[JV.PROP_VALUE] = firstMergeCell[JV.PROP_VALUE] + "|" ;
+                        }
+                        rst.push(sameColCells[i].cellIdx); //记下Cell的位置,在函数外消除
+                        //如果到了最后一条数据,得判断firstMergeCell是否满格(即数据是满的,有可能有些格数据也有折行但不是自动行高判断指标)
+                        //不满格的cell的Vertical强制设置为 'center'
+                        if (i === sameColCells.length - 1 && validValueAmt !== fullValidValueAmt) {
+                            // firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
+                            // firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
+                        }
+                    } else {
+                        //碰到新开始的自动行高行,判断原先的firstMergeCell是否满格(即数据是满的,有可能有些格数据也有折行但不是自动行高判断指标)
+                        //不满格的cell的Vertical强制设置为 'center'
+                        if (validValueAmt !== fullValidValueAmt) {
+                            // firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
+                            // firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
+                        }
+                        firstMergeCell = sameColCells[i].cell;
+                        firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
+                        orgCtrl = setupControl(firstMergeCell, controls);
+                        validValueAmt = 0;
+                        fullValidValueAmt = 0;
+                    }
+                }
+            }
+        }
+        rst.sort(function (i1, i2) {
+            return (i1 > i2)?1:-1;
+        });
+    }
+    return rst;
+}
+
+function combineAutoHeightCellsBk(prepareObj, page, controls) {
+    let rst = [];
+    if (prepareObj.cellsArr) {
+        //merge cells' value and area
+        //备注: 系统逻辑已经把Cell的顺序放好,无需再做排序。
+        for (let mergeKey in prepareObj.pageCellObj) {
+            let sameColCells = prepareObj.pageCellObj[mergeKey]; //左右位置相同的Cell先放在一起,统一处理
+            if (sameColCells.length > 1) {
+                let firstMergeCell = sameColCells[0].cell;
                 firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
                 firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
                 let orgCtrl = setupControl(firstMergeCell, controls);
                 let orgCtrl = setupControl(firstMergeCell, controls);
                 let validValueAmt = 0;
                 let validValueAmt = 0;
-                for (let i = 1; i < prepareObj.pageCellObj[mergeKey].length; i++) {
-                    let mergeCell = prepareObj.pageCellObj[mergeKey][i].cell;
+                for (let i = 1; i < sameColCells.length; i++) {
+                    let mergeCell = sameColCells[i].cell;
                     if (mergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge_Top") < 0) {
                     if (mergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge_Top") < 0) {
                         //merge into the firstMergeCell!
                         //merge into the firstMergeCell!
                         firstMergeCell[JV.PROP_AREA][JV.PROP_BOTTOM] = mergeCell[JV.PROP_AREA][JV.PROP_BOTTOM];
                         firstMergeCell[JV.PROP_AREA][JV.PROP_BOTTOM] = mergeCell[JV.PROP_AREA][JV.PROP_BOTTOM];
                         firstMergeCell[JV.PROP_VALUE] = firstMergeCell[JV.PROP_VALUE] + "|" + mergeCell[JV.PROP_VALUE];
                         firstMergeCell[JV.PROP_VALUE] = firstMergeCell[JV.PROP_VALUE] + "|" + mergeCell[JV.PROP_VALUE];
                         if (mergeCell[JV.PROP_VALUE]) validValueAmt++;
                         if (mergeCell[JV.PROP_VALUE]) validValueAmt++;
-                        rst.push(prepareObj.pageCellObj[mergeKey][i].cellIdx);
-                        if (i === prepareObj.pageCellObj[mergeKey].length - 1 && validValueAmt === 0) {
+                        rst.push(sameColCells[i].cellIdx);
+                        if (i === sameColCells.length - 1 && validValueAmt === 0) {
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
                             firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
                             firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
                         }
                         }
                     } else {
                     } else {
                         if (validValueAmt === 0) {
                         if (validValueAmt === 0) {
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
                             firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
                             firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
+                            // firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = 'center';
                         }
                         }
-                        firstMergeCell = prepareObj.pageCellObj[mergeKey][i].cell;
+                        firstMergeCell = sameColCells[i].cell;
                         firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
                         firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));
                         orgCtrl = setupControl(firstMergeCell, controls);
                         orgCtrl = setupControl(firstMergeCell, controls);
                         validValueAmt = 0;
                         validValueAmt = 0;

+ 1 - 1
modules/reports/util/rpt_pdf_util.js

@@ -231,7 +231,7 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
             doc.rotate(font.FontAngle,rotateOptions);
             doc.rotate(font.FontAngle,rotateOptions);
         }
         }
         doc.text(val,output[0], output[1], options);
         doc.text(val,output[0], output[1], options);
-        doc.font(__dirname + '/pdf_base_files/Smart.ttf');
+        doc.font(__dirname + '/pdf_base_files/simhei_bold_italic.ttf');
         // doc.restore();
         // doc.restore();
     }
     }
 
 

+ 3 - 3
test/demo/stringTest.js

@@ -32,9 +32,9 @@ let strUtil = require('../../public/stringUtil');
 // })
 // })
 
 
 test('string encodeURI', function(t){
 test('string encodeURI', function(t){
-    let str = 123;
-    console.log(str.toString());
-    console.log(str.toString().replace('\t', ' '));
+    let str = "讠";
+    console.log(str);
+    console.log(encodeURI(str));
     t.end();
     t.end();
 })
 })