TonyKang 6 лет назад
Родитель
Сommit
2b76cda00d

+ 22 - 0
modules/reports/rpt_component/jpc_rte.js

@@ -47,6 +47,24 @@ let JE = {
         }
         return rst;
     },
+    getFieldDataLen: function(field, dataObj) {
+        let rst = 0;
+        if (field.DataNodeName === 'NA') {
+            if (!field[JV.PROP_AD_HOC_DATA]) {
+                field[JV.PROP_AD_HOC_DATA] = [];
+            }
+            rst = field[JV.PROP_AD_HOC_DATA].length;
+        } else {
+            if (!field.DataNodeName) {
+                // that means this is a self-defined discrete field!
+                field.DataNodeName = JV.DATA_DISCRETE_DATA;
+                field.DataSeq = dataObj[JV.DATA_DISCRETE_DATA];
+                dataObj[JV.DATA_DISCRETE_DATA].push([]);
+            }
+            rst = dataObj[field.DataNodeName][field.DataSeq].length;
+        }
+        return rst;
+    },
     setFieldValue: function (field, dataObj, valIdx, newValue) {
         if (field.DataNodeName === "NA") {
             if (!field[JV.PROP_AD_HOC_DATA]) {
@@ -109,10 +127,14 @@ let JE = {
         if (field.DataNodeName === "NA") {
             if (field[JV.PROP_AD_HOC_DATA].length > valIdx && valIdx >= 0) {
                 field[JV.PROP_AD_HOC_DATA].splice(valIdx, 0, newValue);
+            } else if (field[JV.PROP_AD_HOC_DATA].length <= valIdx) {
+                field[JV.PROP_AD_HOC_DATA][field[JV.PROP_AD_HOC_DATA].length] = newValue;
             }
         } else {
             if (dataObj[field.DataNodeName][field.DataSeq].length > valIdx && valIdx >= 0) {
                 dataObj[field.DataNodeName][field.DataSeq].splice(valIdx, 0, newValue);
+            } else if (dataObj[field.DataNodeName][field.DataSeq].length <= valIdx) {
+                dataObj[field.DataNodeName][field.DataSeq][dataObj[field.DataNodeName][field.DataSeq].length] = newValue;
             }
         }
     }

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

@@ -133,7 +133,7 @@ class Rpt_Data_Extractor {
     };
 
     //-- 根据报表模板映射指标(非离散指标)的定义,罗列出所有需要用到的data对象key,作为数据请求的过滤依据
-    getDataRequestFilter(summaryRst) {
+    getDataRequestFilter(summaryRst, economicRst) {
         let rst = [];
         let tpl = this.rptTpl;
         let pri_func_chk_filter = function (field) {
@@ -177,6 +177,17 @@ class Rpt_Data_Extractor {
                     }
                 }
             }
+            if (economicRst instanceof Array) {
+                for (let key of consts.projectFieldConstList) {
+                    if (economicRst.indexOf(key) < 0) {
+                        if (field[JV.PROP_FIELD_EXP_MAP]) {
+                            if (field[JV.PROP_FIELD_EXP_MAP].indexOf('.' + key + '.') >= 0) {
+                                economicRst.push(key);
+                            }
+                        }
+                    }
+                }
+            }
         };
         let pri_setup_filter = function (FIELD_LIST_KEY) {
             if (tpl[JV.NODE_FIELD_MAP][FIELD_LIST_KEY]) {

+ 57 - 0
web/maintain/report/js/rpt_tpl_data_map.js

@@ -338,6 +338,11 @@ let dataInfoMapTreeOprObj = {
         if (source[JV.PROP_FORMAT]) destination[JV.PROP_FORMAT] = source[JV.PROP_FORMAT];
         if (source[JV.PROP_IS_AUTO_HEIGHT]) destination[JV.PROP_IS_AUTO_HEIGHT] = true
         else destination[JV.PROP_IS_AUTO_HEIGHT] = false;
+        if (source[JV.PROP_HIDDEN]) destination[JV.PROP_HIDDEN] = true;
+        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]);
@@ -561,6 +566,14 @@ let dataInfoMapTreeOprObj = {
         }
         return rst;
     },
+    checkIfCanAddFieldCombine: function (treeNode) {
+        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) {
@@ -569,6 +582,22 @@ let dataInfoMapTreeOprObj = {
             node[JV.PROP_BAND_NAME] = "";
         }
     },
+    combineSelectChange: function(dom, treeNodeId) {
+        let me = dataInfoMapTreeOprObj, node = me.treeObj.getNodeByTId(treeNodeId);
+        if (dom.selectedIndex > 0) {
+            node[JV.PROP_COMBINE_TYPE] = dom.value;
+        } else {
+            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
@@ -576,6 +605,34 @@ let dataInfoMapTreeOprObj = {
             //准备加selection
             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 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') {
+                    selectCombineObj[0].selectedIndex = 1;
+                } else if (treeNode[JV.PROP_COMBINE_TYPE] === 'horizon') {
+                    selectCombineObj[0].selectedIndex = 2;
+                } else {
+                    selectCombineObj[0].selectedIndex = 0;
+                }
+            } 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) {