Browse Source

code sync

TonyKang 6 years ago
parent
commit
eb903b7563

+ 17 - 1
modules/reports/rpt_component/jpc_cross_tab.js

@@ -536,6 +536,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 for (let i = 0; i < me.col_fields_idx.length; i++) {
                     let tab_field = tab_fields[i];
                     if (!(tab_field[JV.PROP_HIDDEN])) {
+                        let mergedRst = [];
                         let data_field = null;
                         let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
                         if (typeof me.col_fields_idx[i] !== 'object') {
@@ -560,20 +561,35 @@ JpcCrossTabSrv.prototype.createNew = function(){
                             } else {
                                 if (colIdx === 0) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
                             }
-                            rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
+                            mergedRst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
+                            //rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
                             //2. output texts
                             if (firstTextOutput) {
                                 if (tab[JV.PROP_TEXT]) {
+                                    // mergedRst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                     rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                 }
                                 if (tab[JV.PROP_TEXTS]) {
                                     for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
+                                        // mergedRst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                         rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, cols, colIdx, 1, 0));
                                     }
                                 }
                             }
                         }
                         firstTextOutput = false;
+                        //判断是否需要合并
+                        if (tab_field[JV.PROP_IS_MERGE] && mergedRst.length > 1) {
+                            let lastCell = mergedRst[mergedRst.length - 1];
+                            for (let mergeIdx = mergedRst.length - 2; mergeIdx >= 0; mergeIdx--) {
+                                if (lastCell[JV.PROP_VALUE] === mergedRst[mergeIdx][JV.PROP_VALUE]) {
+                                    mergedRst[mergeIdx][JV.PROP_AREA][JV.PROP_RIGHT] = lastCell[JV.PROP_AREA][JV.PROP_RIGHT];
+                                    mergedRst.splice(mergeIdx + 1, 1);
+                                }
+                                lastCell = mergedRst[mergeIdx];
+                            }
+                        }
+                        rst = rst.concat(mergedRst);
                     }
                 }
             }

+ 1 - 0
public/web/rpt_value_define.js

@@ -121,6 +121,7 @@ const JV = {
     PROP_POSITION: "Position",
     PROP_HIDDEN: "Hidden",
     PROP_IS_SERIAL: "isSerial",
+    PROP_IS_MERGE: "isMerge",
     PROP_COMBINE_TYPE: "combineType",
     PROP_IS_AUTO_HEIGHT: "isAutoHeight",
     PROP_FONT: "font",

+ 28 - 2
web/maintain/report/js/rpt_tpl_data_map.js

@@ -409,6 +409,7 @@ let dataInfoMapTreeOprObj = {
         if (source[JV.PROP_IS_SERIAL]) destination[JV.PROP_IS_SERIAL] = true;
         if (source[JV.TAB_FIELD_PROP_SORT]) destination[JV.TAB_FIELD_PROP_SORT] = source[JV.TAB_FIELD_PROP_SORT];
         if (source[JV.PROP_COMBINE_TYPE]) destination[JV.PROP_COMBINE_TYPE] = source[JV.PROP_COMBINE_TYPE];
+        if (source.hasOwnProperty(JV.PROP_IS_MERGE)) destination[JV.PROP_IS_MERGE] = source[JV.PROP_IS_MERGE];
         if (source[JV.PROP_AREA]) {
             destination[JV.PROP_AREA] = {};
             me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);
@@ -642,6 +643,10 @@ let dataInfoMapTreeOprObj = {
         let rst = (treeNode.getParentNode() !== null && treeNode.getParentNode().Name === `流水式表_数据`);
         return rst;
     },
+    checkIfCanAddColFieldCombine: function (treeNode) {
+        let rst = (treeNode.getParentNode() !== null && treeNode.getParentNode().getParentNode() !== null && treeNode.getParentNode().getParentNode().Name === `交叉列`);
+        return rst;
+    },
     bandSelectChange: function(dom, treeNodeId) {
         let me = dataInfoMapTreeOprObj, node = me.treeObj.getNodeByTId(treeNodeId);
         if (dom.selectedIndex > 0) {
@@ -658,6 +663,14 @@ let dataInfoMapTreeOprObj = {
             node[JV.PROP_COMBINE_TYPE] = null;
         }
     },
+    combineColSelectChange: function(dom, treeNodeId) {
+        let me = dataInfoMapTreeOprObj, node = me.treeObj.getNodeByTId(treeNodeId);
+        if (dom.selectedIndex > 0) {
+            node[JV.PROP_IS_MERGE] = true;
+        } else {
+            node[JV.PROP_IS_MERGE] = false;
+        }
+    },
     addDiyDom: function (treeId, treeNode) {
         let me = dataInfoMapTreeOprObj, aObj = $("#" + treeNode.tId + IDMark_A);
         //加band selection
@@ -666,8 +679,8 @@ let dataInfoMapTreeOprObj = {
             let addBandStr = "<select class='selDemo' id='diySelect_" +treeNode.tId+ "' onchange='dataInfoMapTreeOprObj.bandSelectChange(this, \"" + treeNode.tId + "\")'></select>";
             aObj.after(addBandStr);
         } else if (me.checkIfCanAddFieldCombine(treeNode)) {
-            let addBandStr = "<select class='selDemo' id='diyCombineSelect_" +treeNode.tId+ "' onchange='dataInfoMapTreeOprObj.combineSelectChange(this, \"" + treeNode.tId + "\")'><option value='none'>请选择</option><option value='vertical'>纵向合并</option><option value='horizon'>横向合并</option></select>";
-            aObj.after(addBandStr);
+            let addCombineFieldStr = "<select class='selDemo' id='diyCombineSelect_" +treeNode.tId+ "' onchange='dataInfoMapTreeOprObj.combineSelectChange(this, \"" + treeNode.tId + "\")'><option value='none'>请选择</option><option value='vertical'>纵向合并</option><option value='horizon'>横向合并</option></select>";
+            aObj.after(addCombineFieldStr);
             let selectCombineObj = $("#diyCombineSelect_" +treeNode.tId);
             if (treeNode.hasOwnProperty(JV.PROP_COMBINE_TYPE)) {
                 if (treeNode[JV.PROP_COMBINE_TYPE] === 'vertical') {
@@ -680,6 +693,19 @@ let dataInfoMapTreeOprObj = {
             } else {
                 selectCombineObj[0].selectedIndex = 0;
             }
+        } else if (me.checkIfCanAddColFieldCombine(treeNode)) {
+            let addCombineColFieldStr = "<select class='selDemo' id='diyCombineColFieldSelect_" +treeNode.tId+ "' onchange='dataInfoMapTreeOprObj.combineColSelectChange(this, \"" + treeNode.tId + "\")'><option>请选择</option><option>数据合并</option>";
+            aObj.after(addCombineColFieldStr);
+            let selectCombineObj = $("#diyCombineColFieldSelect_" +treeNode.tId);
+            if (treeNode.hasOwnProperty(JV.PROP_IS_MERGE)) {
+                if (treeNode[JV.PROP_IS_MERGE]) {
+                    selectCombineObj[0].selectedIndex = 1;
+                } else {
+                    selectCombineObj[0].selectedIndex = 0;
+                }
+            } else {
+                selectCombineObj[0].selectedIndex = 0;
+            }
         }
     },
     addHoverDom: function(treeId, treeNode) {