| 
					
				 | 
			
			
				@@ -1,27 +1,38 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * Created by Tony on 2017/10/5. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 各种类型(flow/bill/cross)数据类型 + 离散 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 'use strict' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 let dataInfoMapTreeOprObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     treeObj : null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    bandTreeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    selectedTreeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     currentNode: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     dataTypeDef: ['string', 'int32', 'int64', 'double', 'currency', 'date', 'image'], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     iniTree: function(rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let fieldMapList = me.buildTreeData(rptTpl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.treeObj = $.fn.zTree.init($("#tpl_data_info_reversed"), rptDataInfoSetting, fieldMapList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.treeObj.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     iniDataMap: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = this, bandList = bandTreeOprObj.copyBandList(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this, bandList = bandTreeOprObj.copyBandList(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (bandList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let bandTree = $.fn.zTree.init($("#band_tree2_reversed"), bandSetting2, bandList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            bandTree.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.bandTreeObj = $.fn.zTree.init($("#band_tree2_reversed"), bandSetting2, bandList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.bandTreeObj.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let selectedFieldList = fieldMapTreeOprObj.copySelectedFieldList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (me.selectedTreeObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let nodes = me.selectedTreeObj.getNodes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    me.selectedTreeObj.removeNode(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.selectedTreeObj.refresh(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // me.selectedTreeObj = $.fn.zTree.init(document.getElementById("tpl_data_selected_field_map_reversed"), selectedFieldMapSetting, selectedFieldList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.selectedTreeObj = $.fn.zTree.init($("#tpl_data_selected_field_map_reversed"), selectedFieldMapSetting, selectedFieldList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.selectedTreeObj.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let selectedFieldList = fieldMapTreeOprObj.copySelectedFieldList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let selectedFieldTree = $.fn.zTree.init($("#tpl_data_selected_field_map_reversed"), selectedFieldMapSetting, selectedFieldList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        selectedFieldTree.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     buildTreeData: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this, rst = null; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,72 +57,117 @@ let dataInfoMapTreeOprObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let discreteNode = {Name: JV.NODE_DISCRETE_INFO}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         rst.push(rootFieldNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         rst.push(discreteNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.private_build_bill_data(rootFieldNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.private_build_bill_discrete_data(discreteNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.private_build_bill_data(rootFieldNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT], rptTpl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.private_build_bill_discrete_data(discreteNode, rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], rptTpl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private_build_bill_data: function (rootFieldNode, billData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_build_bill_data: function (rootFieldNode, billData, rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this, bandName = billData[JV.PROP_BAND_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (rootFieldNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rootFieldNode[JV.PROP_BAND_NAME] = bandName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rootFieldNode.items = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let fieldItem of billData[JV.PROP_BILL_FIELDS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rootFieldNode.items.push(me.private_build_field_node(bandName, fieldItem)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (fieldItem[JV.PROP_FIELD_ID]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rootFieldNode.items.push(me.private_build_field_node(fieldItem, rptTpl)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (fieldItem[JV.PROP_PARAM_ID]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rootFieldNode.items.push(me.private_build_param_node(fieldItem, rptTpl)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private_build_bill_discrete_data: function (discreteNode, discreteData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_build_bill_discrete_data: function (discreteNode, discreteData, rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (discreteNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            discreteNode.items = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let fieldItem = {Name: "Fields", items:[], isParent: true}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let paramItem = {Name: "Params", items:[], isParent: true}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let textItem = {Name: "Texts", items:[], isParent: true}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            discreteNode.items.push(fieldItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            discreteNode.items.push(paramItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            discreteNode.items.push(textItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (let bandItem of discreteData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let bandName = bandItem[JV.PROP_BAND_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (bandItem[JV.PROP_DISCRETE_FIELDS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (let dtlItem of bandItem[JV.PROP_DISCRETE_FIELDS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        fieldItem.items.push(me.private_build_field_node(bandName, dtlItem)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discreteNode.isParent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        discreteNode.items = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let i = 0; i < discreteData.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let dtl = discreteData[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let item = {"Name": "子项(所在区域:" + dtl[JV.PROP_BAND_NAME] + ")", "items":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item[JV.PROP_BAND_NAME] = dtl[JV.PROP_BAND_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let discreteFieldsNode = {"Name": "离散字段集", "items": [], "isParent": true}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let discreteTextsNode = {"Name": "离散文本集", "items": [], "isParent": true}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.items.push(discreteFieldsNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.items.push(discreteTextsNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            discreteNode.items.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (dtl[JV.PROP_DISCRETE_FIELDS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let field of dtl[JV.PROP_DISCRETE_FIELDS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (field[JV.PROP_FIELD_ID]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        discreteFieldsNode.items.push(me.private_build_field_node(field, rptTpl)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else if (field[JV.PROP_PARAM_ID]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        discreteFieldsNode.items.push(me.private_build_param_node(field, rptTpl)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (bandItem[JV.PROP_PARAMS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (let dtlItem of bandItem[JV.PROP_PARAMS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        paramItem.items.push(me.private_build_param_node(bandName, dtlItem)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (dtl[JV.PROP_TEXTS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let txt of dtl[JV.PROP_TEXTS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    discreteTextsNode.items.push(me.private_build_text_node(txt)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (bandItem[JV.PROP_TEXTS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (let dtlItem of bandItem[JV.PROP_TEXTS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        textItem.items.push(me.private_build_text_node(bandName, dtlItem)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_get_field_by_id: function (fieldId, rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function getField(collection) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!rst && collection) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let item of collection) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (item[JV.PROP_ID] === fieldId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rst = item; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (bandItem[JV.PROP_TEXT]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    textItem.items.push(me.private_build_text_node(bandName, bandItem[JV.PROP_TEXT])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_NO_MAPPING_FIELDS]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS_EX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getField(rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_get_param_by_id: function (paramId, rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function getParam(collection) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!rst && collection) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let item of collection) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (item[JV.PROP_ID] === paramId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rst = item; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        getParam(rptTpl[JV.NODE_DISCRETE_PARAMS]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private_build_field_node: function (bandName, fieldData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_build_field_node: function (fieldData, rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this, rst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (fieldData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_BAND_NAME] = bandName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_FIELD_ID] = fieldData[JV.PROP_FIELD_ID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.TAB_FIELD_PROP_SORT] = fieldData[JV.TAB_FIELD_PROP_SORT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_FONT] = fieldData[JV.PROP_FONT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_CONTROL] = fieldData[JV.PROP_CONTROL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_STYLE] = fieldData[JV.PROP_STYLE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_PREFIX] = fieldData[JV.PROP_PREFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_SUFFIX] = fieldData[JV.PROP_SUFFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_AREA] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.private_copy_area(fieldData[JV.PROP_AREA], rst[JV.PROP_AREA]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let f = me.private_get_field_by_id(fieldData[JV.PROP_FIELD_ID], rptTpl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (f) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst[JV.PROP_NAME] = f[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst[JV.PROP_NAME] = fieldData[JV.PROP_FIELD_ID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.private_copy_field_properties(fieldData, rst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_copy_field_properties: function (source, destination) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_FIELD_ID] = source[JV.PROP_FIELD_ID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (source[JV.TAB_FIELD_PROP_SORT]) destination[JV.TAB_FIELD_PROP_SORT] = source[JV.TAB_FIELD_PROP_SORT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_FONT] = source[JV.PROP_FONT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_CONTROL] = source[JV.PROP_CONTROL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_STYLE] = source[JV.PROP_STYLE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_PREFIX] = source[JV.PROP_PREFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_SUFFIX] = source[JV.PROP_SUFFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_AREA] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private_copy_area: function (orgArea, destArea) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         destArea[JV.PROP_LEFT] = orgArea[[JV.PROP_LEFT]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         destArea[JV.PROP_RIGHT] = orgArea[[JV.PROP_RIGHT]]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -120,32 +176,131 @@ let dataInfoMapTreeOprObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         destArea[JV.PROP_H_CALCULATION] = orgArea[[JV.PROP_H_CALCULATION]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         destArea[JV.PROP_V_CALCULATION] = orgArea[[JV.PROP_V_CALCULATION]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private_build_param_node: function (bandName, param) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_build_param_node: function (param, rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this, rst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (param) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_BAND_NAME] = bandName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_PARAM_ID] = param[JV.PROP_PARAM_ID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_FONT] = param[JV.PROP_FONT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_CONTROL] = param[JV.PROP_CONTROL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_STYLE] = param[JV.PROP_STYLE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_PREFIX] = param[JV.PROP_PREFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_SUFFIX] = param[JV.PROP_SUFFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_AREA] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.private_copy_area(param[JV.PROP_AREA], rst[JV.PROP_AREA]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let p = me.private_get_param_by_id(param[JV.PROP_PARAM_ID], rptTpl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (p) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst[JV.PROP_NAME] = p[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst[JV.PROP_NAME] = param[JV.PROP_PARAM_ID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.private_copy_param_properties(param, rst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_copy_param_properties: function (source, destination) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_PARAM_ID] = source[JV.PROP_PARAM_ID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_FONT] = source[JV.PROP_FONT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_CONTROL] = source[JV.PROP_CONTROL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_STYLE] = source[JV.PROP_STYLE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_PREFIX] = source[JV.PROP_PREFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_SUFFIX] = source[JV.PROP_SUFFIX]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_AREA] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_build_text_node: function (text) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this, rst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (text) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst[JV.PROP_NAME] = text[JV.PROP_LABEL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.private_copy_text_properties(text, rst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_copy_text_properties: function (source, destination) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_LABEL] = source[JV.PROP_LABEL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_FONT] = source[JV.PROP_FONT]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_CONTROL] = source[JV.PROP_CONTROL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_STYLE] = source[JV.PROP_STYLE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        destination[JV.PROP_AREA] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private_build_text_node: function (bandName, text) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_get_dummy_text_node: function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this, rst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_NAME] = "文本"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_LABEL] = "文本"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_FONT] = "Content"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_CONTROL] = "Default"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_STYLE] = "Default_None"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_AREA] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_AREA][JV.PROP_LEFT] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_AREA][JV.PROP_RIGHT] = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_AREA][JV.PROP_TOP] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_AREA][JV.PROP_BOTTOM] = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_AREA][JV.PROP_H_CALCULATION] = JV.CAL_TYPE[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_AREA][JV.PROP_V_CALCULATION] = JV.CAL_TYPE[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onClick: function (event,treeId,treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_setup_dummy_field_node: function(node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!node[JV.PROP_PARAM_ID]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            node[JV.PROP_FIELD_ID] = node[JV.PROP_ID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_FONT] = "Content"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_CONTROL] = "Default"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_STYLE] = "Default_None"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_AREA] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_AREA][JV.PROP_LEFT] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_AREA][JV.PROP_RIGHT] = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_AREA][JV.PROP_TOP] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_AREA][JV.PROP_BOTTOM] = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_AREA][JV.PROP_H_CALCULATION] = JV.CAL_TYPE[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_AREA][JV.PROP_V_CALCULATION] = JV.CAL_TYPE[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onBandClick: function (event,treeId,treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onTabDataClick: function (event,treeId,treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = dataInfoMapTreeOprObj, matchedBandNode = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let bandChked = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.currentNode = treeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function checkBandNode(bNode, bandName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (bNode[JV.PROP_NAME] === bandName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bandChked = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                matchedBandNode = bNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if (bNode.items){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let subNode of bNode.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    checkBandNode(subNode, bandName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (bandChked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let nodes = me.bandTreeObj.getNodes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function setDisabledBandSelect(disabled) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.bandTreeObj.setChkDisabled(node, disabled, true, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (treeNode[JV.PROP_BAND_NAME]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                checkBandNode(node, treeNode[JV.PROP_BAND_NAME]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (bandChked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (bandChked) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setDisabledBandSelect(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.bandTreeObj.checkNode(matchedBandNode, true, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            setDisabledBandSelect(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //检测是否为field/param/text对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rpt_tpl_cfg_helper.checkAndSetSelectedNodeCfg(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onCheck: function (event,treeId,treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = dataInfoMapTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (me.currentNode[JV.PROP_BAND_NAME] && me.currentNode[JV.PROP_BAND_NAME] !== treeNode[JV.PROP_NAME])  { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // alert("change band from: " + me.currentNode[JV.PROP_BAND_NAME] + " to : " + treeNode[JV.PROP_NAME]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.currentNode[JV.PROP_BAND_NAME] = treeNode[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.currentNode[JV.PROP_NAME] = "子项(所在区域:" + treeNode[JV.PROP_NAME] + ")"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.treeObj.updateNode(me.currentNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onBeforeRemove: function(treeId, treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = true; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -157,7 +312,16 @@ let dataInfoMapTreeOprObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     beforeRename: function(treeId, treeNode, newName, isCancel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    beforeEditName: function(treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let pn = treeNode.getParentNode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (pn && pn[JV.PROP_NAME] === "离散文本集") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onBeforeDrag: function (treeId, treeNodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = true; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -171,35 +335,137 @@ let dataInfoMapTreeOprObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (targetNode.tId && targetNode.tId.indexOf("tpl_data_info_reversed") >= 0 && (!(targetNode.isParent && moveType !== 'inner')) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (targetNode.level === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (targetNode.Name !== "离散信息" && moveType === 'inner') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (targetNode.Name === JV.NODE_FLOW_CONTENT || targetNode.Name === JV.NODE_BILL_CONTENT || targetNode.Name === JV.NODE_CROSS_CONTENT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            || targetNode.Name === JV.NODE_CROSS_ROW || targetNode.Name === JV.NODE_CROSS_COL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            || targetNode.Name === "离散字段集" ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onDrop: function(event, treeId, treeNodes, targetNode, moveType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = dataInfoMapTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let node of treeNodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.private_setup_dummy_field_node(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onRemove: function (e, treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onRename: function (e, treeId, treeNode, isCancel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!isCancel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode[JV.PROP_LABEL] = treeNode[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addHoverDom: function(treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = dataInfoMapTreeOprObj, sObj = $("#" + treeNode.tId + "_span"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if ((treeNode.level === 0 && treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) || (treeNode.level === 2 && treeNode[JV.PROP_NAME] === "离散文本集")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增' onfocus='this.blur();'></span>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sObj.after(addStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let btn = $("#addBtn_"+treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                btn.bind("click", function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let amtIdx = treeNode.items.length + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let node = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    node[JV.PROP_NAME] = "子项(所在区域:" + me.bandTreeObj.getNodes()[0][JV.PROP_NAME] + ")"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    node[JV.PROP_BAND_NAME] = me.bandTreeObj.getNodes()[0][JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    node.items = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let fields = {"Name": "离散字段集", "items": [], "isParent": true}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let texts = {"Name": "离散文本集", "items": [], "isParent": true}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    node.items.push(fields); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    node.items.push(texts); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let newNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newNodes.push(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    me.treeObj.addNodes(treeNode, -1, newNodes, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let parentNode = targetNode.getParentNode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (parentNode.Name === "离散信息") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (targetNode.Name === "Fields") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                btn.bind("click", function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let node = me.private_get_dummy_text_node(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let newNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newNodes.push(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    me.treeObj.addNodes(treeNode, -1, newNodes, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    removeHoverDom: function(treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#addBtn_"+treeNode.tId).unbind().remove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    extractTabFields: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = dataInfoMapTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // for (let rootNode of me.treeObj.getNodes()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //     rptTpl[JV.NODE_FIELD_MAP][rootNode.Name] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //     for (let mappingFieldNode of rootNode.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //         rptTpl[JV.NODE_FIELD_MAP][rootNode.Name].push(me.createMapFieldByNode(mappingFieldNode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (rptTpl[JV.NODE_FLOW_INFO]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (rptTpl[JV.NODE_CROSS_INFO]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (rptTpl[JV.NODE_BILL_INFO]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let nodes = me.treeObj.getNodes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (node[JV.PROP_NAME] === JV.NODE_BILL_CONTENT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let newContent = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newContent[JV.PROP_BAND_NAME] = node[JV.PROP_BAND_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newContent[JV.PROP_BILL_FIELDS] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let subNode of node.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let f = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        me.private_copy_field_properties(subNode, f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        newContent[JV.PROP_BILL_FIELDS].push(f); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else if (parentNode.Name === "Fields") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT] = newContent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (node[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO] = me.private_extract_discrete_info(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onRemove: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onRename: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private_extract_discrete_info: function(discreteNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this, rst = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let dtlItemNode of discreteNode.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let newContent = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst.push(newContent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            newContent[JV.PROP_BAND_NAME] = dtlItemNode[JV.PROP_BAND_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let node of dtlItemNode.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // if (node[JV.PROP_DISCRETE_FIELDS] && node[JV.PROP_DISCRETE_FIELDS].length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (node[JV.PROP_NAME] === "离散字段集" && node.items.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newContent[JV.PROP_DISCRETE_FIELDS] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let field of node.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let item = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        newContent[JV.PROP_DISCRETE_FIELDS].push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (field[JV.PROP_FIELD_ID]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            me.private_copy_field_properties(field, item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else if (field[JV.PROP_PARAM_ID]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            me.private_copy_param_properties(field, item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // if (node[JV.PROP_TEXTS] && node[JV.PROP_TEXTS].length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (node[JV.PROP_NAME] === "离散文本集" && node.items.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newContent[JV.PROP_TEXTS] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let txt of node.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let item = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        newContent[JV.PROP_TEXTS].push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        me.private_copy_text_properties(txt, item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    extractFieldMaps: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    extractDiscreteFieldParam: function(rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = dataInfoMapTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     createMapFieldByNode: function (node) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |