| 
					
				 | 
			
			
				@@ -3,176 +3,238 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 let calculationTreeOprObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    treeObj : null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    extCodeTreeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    currentNode: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    currentExtCodeNode: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    iniTree: function(rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let fieldMapList = me.buildTreeData(rptTpl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.treeObj = $.fn.zTree.init($("#rpt_tpl_formulas"), caculationSetting, fieldMapList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.treeObj.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $("#exprDetail")[0].style.display = "none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    iniExtCodeTpl: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = this, params = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CommonAjax.postEx("report_tpl_api/getExtCodeTpl", params, 10000, true, function(result){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.extCodeTreeObj = $.fn.zTree.init($("#rpt_ext_code_tpl"), extCodeSetting, result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let nodes = me.extCodeTreeObj.getNodes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                me.extCodeTreeObj.expandNode(node, true, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // me.extCodeTreeObj.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }, null, null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  treeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  extCodeTreeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  currentNode: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  currentExtCodeNode: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  iniTree: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var me = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let fieldMapList = me.buildTreeData(rptTpl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    me.treeObj = $.fn.zTree.init( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#rpt_tpl_formulas"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      caculationSetting, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fieldMapList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    me.treeObj.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $("#exprDetail")[0].style.display = "none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  iniExtCodeTpl: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = this, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      params = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    CommonAjax.postEx( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "report_tpl_api/getExtCodeTpl", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      params, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      10000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.extCodeTreeObj = $.fn.zTree.init( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $("#rpt_ext_code_tpl"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          extCodeSetting, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    buildRunType: function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let et = $("#exprRunType"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        et.append("<option value='" + JV.RUN_TYPE_BEFORE_PAGING + "'>默认运行</option>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        et.append("<option value='" + JV.RUN_TYPE_BEFORE_OUTPUT + "'>每页实时运行</option>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        et.append("<option value='" + JV.RUN_TYPE_BEFORE_ANALYZING + "'>数据分析前运行</option>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        et.append("<option value='" + JV.RUN_TYPE_BEFORE_COMBINE + "'>合并单元格前事件</option>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        et.append("<option value='" + JV.RUN_TYPE_AFTER_COMBINE + "'>合并单元格后事件</option>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        et.append("<option value='" + JV.RUN_TYPE_BEFORE_GROUP_TEXT_OUT + "'>分组text输出前事件</option>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    buildTreeData: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = this, rst = {"Name": "计算式", items: []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (rptTpl[JV.NODE_FORMULAS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (let cItem of rptTpl[JV.NODE_FORMULAS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let node = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                me.copyContent(cItem, node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node[JV.PROP_NAME] = cItem[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node[JV.PROP_RUN_TYPE] = cItem[JV.PROP_RUN_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node[JV.PROP_EXPRESSION] = cItem[JV.PROP_EXPRESSION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node["format"] = (cItem["format"])?cItem["format"]:""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst.items.push(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let nodes = me.extCodeTreeObj.getNodes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          me.extCodeTreeObj.expandNode(node, true, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    copyContent: function(source, target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        target[JV.PROP_NAME] = source[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        target[JV.PROP_RUN_TYPE] = source[JV.PROP_RUN_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        target[JV.PROP_EXPRESSION] = source[JV.PROP_EXPRESSION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        target["format"] = (source["format"])?source["format"]:""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    changeRunType: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.currentNode[JV.PROP_RUN_TYPE] = dom.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    setExtCodeTemplate: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (me.currentExtCodeNode && me.currentExtCodeNode["Template"] !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $("#exprContent")[0].value = me.currentExtCodeNode["Template"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            editor2.setValue($("#exprContent")[0].value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    addExtCodeTemplate: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (me.currentExtCodeNode && me.currentExtCodeNode["Template"] !== '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $("#exprContent")[0].value += me.currentExtCodeNode["Template"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            editor2.setValue($("#exprContent")[0].value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    changeFormat: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.currentNode["format"] = dom.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    changeExpression: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.currentNode[JV.PROP_EXPRESSION] = dom.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onClick: function (event,treeId,treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.currentNode = treeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (treeNode.level === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $("#exprDetail")[0].style.display = "none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $("#exprDetail")[0].style.display = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_PAGING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                $("#exprRunType")[0].selectedIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_OUTPUT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                $("#exprRunType")[0].selectedIndex = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                $("#exprRunType")[0].selectedIndex = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $("#exprFormat")[0].value = (treeNode["format"])?treeNode["format"]:""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $("#exprContent")[0].value = treeNode[JV.PROP_EXPRESSION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            editor2.setValue($("#exprContent")[0].value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onExtCodeTreeClick: function (event, treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        me.currentExtCodeNode = treeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onBeforeRemove: function(treeId, treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (treeNode.level > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst = confirm('请确认是否真的删除?'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    beforeRename: function(treeId, treeNode, newName, isCancel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (isCancel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (treeNode.level === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    onBeforeDrop: function (treeId, treeNodes, targetNode, moveType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (targetNode.level === 1 && (moveType === "next" || moveType === "prev")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    addHoverDom: function(treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj, sObj = $("#" + treeNode.tId + "_span"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || treeNode.level > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增' onfocus='this.blur();'></span>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sObj.after(addStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let btn = $("#addBtn_"+treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            btn.bind("click", function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let newNodes = [], node = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node[JV.PROP_NAME] = "新计算式"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node[JV.PROP_RUN_TYPE] = JV.RUN_TYPE_BEFORE_PAGING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node[JV.PROP_EXPRESSION] = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                node["format"] = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                newNodes.push(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                me.treeObj.addNodes(treeNode, -1, newNodes, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    removeHoverDom: function(treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $("#addBtn_"+treeNode.tId).unbind().remove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    extractCalculation: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = this, newCaclList = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let topNode = me.treeObj.getNodes()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let node of topNode.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let item = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.copyContent(node, item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            newCaclList.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rptTpl[JV.NODE_FORMULAS] = newCaclList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // me.extCodeTreeObj.expandAll(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  buildRunType: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let et = $("#exprRunType"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    et.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "<option value='" + JV.RUN_TYPE_BEFORE_PAGING + "'>默认运行</option>" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    et.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "<option value='" + JV.RUN_TYPE_BEFORE_OUTPUT + "'>每页实时运行</option>" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    et.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "<option value='" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JV.RUN_TYPE_BEFORE_ANALYZING + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "'>数据分析前运行</option>" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    et.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "<option value='" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JV.RUN_TYPE_BEFORE_COMBINE + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "'>合并单元格前事件</option>" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    et.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "<option value='" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JV.RUN_TYPE_AFTER_COMBINE + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "'>合并单元格后事件</option>" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    et.append( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "<option value='" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JV.RUN_TYPE_BEFORE_GROUP_TEXT_OUT + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "'>分组text输出前事件</option>" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  buildTreeData: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = this, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      rst = { Name: "计算式", items: [] }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (rptTpl[JV.NODE_FORMULAS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      for (let cItem of rptTpl[JV.NODE_FORMULAS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let node = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.copyContent(cItem, node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_NAME] = cItem[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_RUN_TYPE] = cItem[JV.PROP_RUN_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_EXPRESSION] = cItem[JV.PROP_EXPRESSION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node["format"] = cItem["format"] ? cItem["format"] : ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst.items.push(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  copyContent: function (source, target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    target[JV.PROP_NAME] = source[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    target[JV.PROP_RUN_TYPE] = source[JV.PROP_RUN_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    target[JV.PROP_EXPRESSION] = source[JV.PROP_EXPRESSION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    target["format"] = source["format"] ? source["format"] : ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  changeRunType: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      me.currentNode[JV.PROP_RUN_TYPE] = dom.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  setExtCodeTemplate: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (me.currentExtCodeNode && me.currentExtCodeNode["Template"] !== "") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#exprContent")[0].value = me.currentExtCodeNode["Template"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      editor2.setValue($("#exprContent")[0].value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  addExtCodeTemplate: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (me.currentExtCodeNode && me.currentExtCodeNode["Template"] !== "") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#exprContent")[0].value += me.currentExtCodeNode["Template"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      editor2.setValue($("#exprContent")[0].value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  changeFormat: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      me.currentNode["format"] = dom.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  changeExpression: function (dom) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      me.currentNode[JV.PROP_EXPRESSION] = dom.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onClick: function (event, treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    me.currentNode = treeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (treeNode.level === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#exprDetail")[0].style.display = "none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#exprDetail")[0].style.display = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_PAGING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#exprRunType")[0].selectedIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_OUTPUT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#exprRunType")[0].selectedIndex = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_ANALYZING) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#exprRunType")[0].selectedIndex = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_COMBINE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#exprRunType")[0].selectedIndex = 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_AFTER_COMBINE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#exprRunType")[0].selectedIndex = 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        treeNode[JV.PROP_RUN_TYPE] === JV.RUN_TYPE_BEFORE_GROUP_TEXT_OUT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#exprRunType")[0].selectedIndex = 5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#exprRunType")[0].selectedIndex = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#exprFormat")[0].value = treeNode["format"] ? treeNode["format"] : ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#exprContent")[0].value = treeNode[JV.PROP_EXPRESSION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      editor2.setValue($("#exprContent")[0].value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onExtCodeTreeClick: function (event, treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    me.currentExtCodeNode = treeNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onBeforeRemove: function (treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (treeNode.level > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      rst = confirm("请确认是否真的删除?"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  beforeRename: function (treeId, treeNode, newName, isCancel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (isCancel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (treeNode.level === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onBeforeDrop: function (treeId, treeNodes, targetNode, moveType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      targetNode.level === 1 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (moveType === "next" || moveType === "prev") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  addHoverDom: function (treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      sObj = $("#" + treeNode.tId + "_span"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      treeNode.editNameFlag || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $("#addBtn_" + treeNode.tId).length > 0 || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      treeNode.level > 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let addStr = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "<span class='button add' id='addBtn_" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        treeNode.tId + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "' title='新增' onfocus='this.blur();'></span>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      sObj.after(addStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let btn = $("#addBtn_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      btn.bind("click", function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let newNodes = [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          node = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_NAME] = "新计算式"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_RUN_TYPE] = JV.RUN_TYPE_BEFORE_PAGING; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_EXPRESSION] = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node["format"] = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        newNodes.push(node); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.treeObj.addNodes(treeNode, -1, newNodes, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  removeHoverDom: function (treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $("#addBtn_" + treeNode.tId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      .unbind() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      .remove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  extractCalculation: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = this, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      newCaclList = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let topNode = me.treeObj.getNodes()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let node of topNode.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let item = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      me.copyContent(node, item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      newCaclList.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    rptTpl[JV.NODE_FORMULAS] = newCaclList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $(document).ready(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    editor2.on('change', function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            me.currentNode[JV.PROP_EXPRESSION] = editor2.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  editor2.on("change", function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let me = calculationTreeOprObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (me.currentNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      me.currentNode[JV.PROP_EXPRESSION] = editor2.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 |