TonyKang 7 anni fa
parent
commit
a99e2f89e9

+ 16 - 12
modules/reports/rpt_component/jpc_flow_tab.js

@@ -163,10 +163,12 @@ JpcFlowTabSrv.prototype.createNew = function(){
     JpcFlowTabResult.sorting = function(rptTpl, dataObj, dataSeq) {
         let me = this;
         let FLOW_NODE_STR = me.isEx?JV.NODE_FLOW_INFO_EX:JV.NODE_FLOW_INFO;
-        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);
-        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS], me.page_sum_tab_fields, me.page_sum_fields_idx, me.isEx);
-        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP][JV.PROP_GROUP_FIELDS], me.group_fields, null, me.isEx);
-        JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP][JV.PROP_SUM_FIELDS], me.group_sum_fields, null, 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);
+        if (rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_PAGE_SUM]) JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_PAGE_SUM][JV.PROP_SUM_FIELDS], me.page_sum_tab_fields, me.page_sum_fields_idx, me.isEx);
+        if (rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP]) {
+            JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP][JV.PROP_GROUP_FIELDS], me.group_fields, null, me.isEx);
+            JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_GROUP][JV.PROP_SUM_FIELDS], me.group_sum_fields, null, me.isEx);
+        }
         JpcFieldHelper.findAutoHeightFieldIdx(rptTpl, rptTpl[FLOW_NODE_STR][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], me.auto_height_fields_idx, me.isEx);
         for (let si = 0; si < dataSeq.length; si++) {
             me.segments.push(dataSeq[si].slice(0));
@@ -795,7 +797,6 @@ JpcFlowTabSrv.prototype.createNew = function(){
                             if (contentValuesIdx[rowIdx][0] !== JV.TYPE_FOLLOW_MODE && contentValuesIdx[rowIdx][1] === JV.DISPLAY_VAL_TYPE_NORMAL) {
                                 rst.push(me.outputTabField(band, tab_field, data_field, contentValuesIdx[rowIdx][2], -1, contentValuesIdx.length, rowIdx, 1, 0, unitFactor, true, controls, multiColIdx));
                             } else if (contentValuesIdx[rowIdx][1] === JV.DISPLAY_VAL_TYPE_AUTO_HEIGHT) {
-                                //vIdx.push([followMode, JV.DISPLAY_VAL_TYPE_AUTO_HEIGHT, sortedSequence[startRecIdx + vi]], subValIdx, ttlValAmt);
                                 if (contentValuesIdx[rowIdx][4] === 1) {
                                     //等效于普通输出
                                     rst.push(me.outputTabField(band, tab_field, data_field, contentValuesIdx[rowIdx][2], -1, contentValuesIdx.length, rowIdx, 1, 0, unitFactor, true, controls, multiColIdx));
@@ -871,12 +872,9 @@ JpcFlowTabSrv.prototype.createNew = function(){
             }
         }
         let eliminateCells = combineAutoHeightCells(prepareObj, page, controls);
-        // console.log("rst.length: " + rst.length);
-        // console.log("eliminateCells.length: " + eliminateCells.length);
         for (let idIdx = eliminateCells.length - 1; idIdx >= 0; idIdx--) {
             rst.splice(eliminateCells[idIdx], 1);
         }
-        console.log("rst.length: " + rst.length);
         return rst;
     };
     JpcFlowTabResult.outputColumn = function (rptTpl, dataObj, page, segIdx, bands, unitFactor, multiColIdx) {
@@ -1026,10 +1024,11 @@ JpcFlowTabSrv.prototype.createNew = function(){
 };
 
 function push_cell(pageCellObj, cell, cellIdx) {
-    if (!pageCellObj[cell[JV.PROP_AREA][JV.PROP_LEFT] + '_' + cell[JV.PROP_AREA][JV.PROP_RIGHT]]) {
-        pageCellObj[cell[JV.PROP_AREA][JV.PROP_LEFT] + '_' + cell[JV.PROP_AREA][JV.PROP_RIGHT]] = [];
+    let key = cell[JV.PROP_AREA][JV.PROP_LEFT] + '_' + cell[JV.PROP_AREA][JV.PROP_RIGHT];
+    if (!pageCellObj[key]) {
+        pageCellObj[key] = [];
     }
-    let cellArr = pageCellObj[cell[JV.PROP_AREA][JV.PROP_LEFT] + '_' + cell[JV.PROP_AREA][JV.PROP_RIGHT]];
+    let cellArr = pageCellObj[key];
     cellArr.push({"cellIdx": cellIdx, "cell": cell});
 }
 
@@ -1052,12 +1051,14 @@ function setupControl(mergeCell, controls) {
             "ShowZero": orgCtrl.ShowZero,
             "Horizon": orgCtrl.Horizon,
             "Vertical": "top",
-            "Wrap": "T"
+            "Wrap": "T",
+            "VerticalForExcel": "justify"
         };
     } else {
         mergeCell[JV.PROP_CONTROL].Shrink = "T";
         mergeCell[JV.PROP_CONTROL].Vertical = "top";
         mergeCell[JV.PROP_CONTROL].Wrap = "T";
+        mergeCell[JV.PROP_CONTROL].VerticalForExcel = "justify";
         orgCtrl = mergeCell[JV.PROP_CONTROL];
     }
     return orgCtrl;
@@ -1067,6 +1068,7 @@ function combineAutoHeightCells(prepareObj, page, controls) {
     let rst = [];
     if (prepareObj.cellsArr) {
         //merge cells' value and area
+        //备注: 系统逻辑已经把Cell的顺序放好,无需再做排序。
         for (let mergeKey in prepareObj.pageCellObj) {
             if (prepareObj.pageCellObj[mergeKey].length > 1) {
                 let firstMergeCell = prepareObj.pageCellObj[mergeKey][0].cell;
@@ -1084,11 +1086,13 @@ function combineAutoHeightCells(prepareObj, page, controls) {
                         if (i === prepareObj.pageCellObj[mergeKey].length - 1 && validValueAmt === 0) {
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
+                            firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
                         }
                     } else {
                         if (validValueAmt === 0) {
                             firstMergeCell[JV.PROP_CONTROL].Shrink = orgCtrl.Shrink;
                             firstMergeCell[JV.PROP_CONTROL].Wrap = "F";
+                            firstMergeCell[JV.PROP_CONTROL].VerticalForExcel = null;
                         }
                         firstMergeCell = prepareObj.pageCellObj[mergeKey][i].cell;
                         firstMergeCell[JV.PROP_STYLE] = firstMergeCell[JV.PROP_STYLE].slice(0, firstMergeCell[JV.PROP_STYLE].indexOf("_AutoHeightMerge"));

+ 1 - 0
modules/reports/util/rpt_construct_data_util.js

@@ -896,6 +896,7 @@ function sortData(sourceData, sortCfg, prjData) {
                 newTopArr = rst;
             }
             let destArr = [];
+            // fsUtil.writeObjToFile(newTopArr, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRstBefore.jsp");
             treeUtil.getFlatArray(newTopArr, destArr);
             replaceActDataArr(sourceData, destArr);
             // fsUtil.writeObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.jsp");

+ 9 - 2
public/web/treeDataHelper.js

@@ -49,7 +49,7 @@ let tree_Data_Helper = {
                 private_buildNodeData(iter[i], iter[i][SUB_ID], (treeLevel + 1), rtbID);
             }
         };
-
+        //1. 给每个节点设置key, 顺便找Top Node
         for (let i = 0; i < data.length; i++) {
             tmpNodes[prefix + data[i][NODE_ID]] = data[i];
             data[i][ADHOC_PRE_ID] = EMPTY_ID_VAL;
@@ -59,16 +59,23 @@ let tree_Data_Helper = {
                 topArr.push(data[i][NODE_ID]);
             }
         }
+        //2. 通过key,设置好兄弟/父子关系
         for (let i = 0; i < data.length; i++) {
             if (parseInt(data[i][NEXT_ID]) !== EMPTY_ID_VAL) {
                 if (tmpNodes[prefix + data[i][NEXT_ID]] !== undefined){
-                    tmpNodes[prefix + data[i][NEXT_ID]][ADHOC_PRE_ID] = data[i][NODE_ID];
+                    if (tmpNodes[prefix + data[i][NEXT_ID]][P_ID] === data[i][P_ID]) {
+                        tmpNodes[prefix + data[i][NEXT_ID]][ADHOC_PRE_ID] = data[i][NODE_ID];
+                    } else {
+                        tmpNodes[prefix + data[i][NEXT_ID]][ADHOC_PRE_ID] = EMPTY_ID_VAL;
+                        data[i][NEXT_ID] = EMPTY_ID_VAL;
+                    }
                 }
             }
             if (parseInt(data[i][P_ID]) !== EMPTY_ID_VAL) {
                 tmpNodes[prefix + data[i][P_ID]][SUB_ID].push(data[i][NODE_ID]);
             }
         }
+        //3. 开build
         private_buildNodeData(null, topArr, 0, -1);
         //try to release and return
         tmpNodes = null;