| 
					
				 | 
			
			
				@@ -4,88 +4,124 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const sort_types = ["normal", "tree", "accord_to_parent", "self_define"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const condition_types = ["==", "===", ">", ">=", "<", "<=", "!=", "in", "not in"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const pre_handle_data_objects = ["bills", "ration", "ration_glj"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const pre_handle_data_objects_name = ["清单", "定额", "定额工料机"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const pre_handle_data_objects = ["bills", "ration", "ration_glj", "projectGLJ"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const pre_handle_data_objects_name = ["清单", "定额", "定额人材机", "项目人材机"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//供货方式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixed_supply_types = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "自行采购(0)", Title: "", Value: 0}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "部分甲供(1)", Title: "", Value: 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "完全甲供(2)", Title: "", Value: 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "甲定乙供(3)", Title: "", Value: 3} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//三材类别 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixed_material_types = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "钢材(1)", Title: "", Value: 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "钢筋(2)", Title: "", Value: 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "木材(3)", Title: "", Value: 3}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "水泥(4)", Title: "", Value: 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "标准砖(5)", Title: "", Value: 5} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixed_glj_types = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "人工(1)", Title: "", Value: 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "普通材料(201)", Title: "", Value: 201}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "混凝土(202)", Title: "", Value: 202}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "砂浆(203)", Title: "", Value: 203}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "配合比(204)", Title: "", Value: 204}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "商品混凝土(205)", Title: "", Value: 205}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "商品砂浆(206)", Title: "", Value: 206}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "普通机械(301)", Title: "", Value: 301}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "机械组成物(302)", Title: "", Value: 302}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "机上人工(303)", Value: 303}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "主材(4)", Title: "", Value: 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "设备(5)", Title: "", Value: 5} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixed_top_bills_nodes = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "分部分项工程(1)", Title: "", Value: 1} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "措施项目(2)", Title: "", Value: 2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "其他项目(7)", Title: "", Value: 7} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "规费(15)", Title: "", Value: 15} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "税金(18)", Title: "", Value: 18} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "工程造价(19)", Title: "", Value: 19} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixed_other_bills_types = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "施工技术措施项目(3)", Title: "", Value: 3} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "安全文明施工按实计算费用(4)", Title: "", Value: 4} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "施工组织措施专项费用(5)", Title: "", Value: 5} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "安全文明施工专项费用(6)", Title: "", Value: 6} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "暂列金额(8)", Title: "", Value: 8} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "暂估价(9)", Title: "", Value: 9} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "材料(工程设备)暂估价(10)", Title: "", Value: 10} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "专业工程暂估价(11)", Title: "", Value: 11} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "计日工(12)", Title: "", Value: 12} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "总承包服务费(13)", Title: "", Value: 13} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "索赔与现场签证(14)", Title: "", Value: 14} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "社会保险费及住房公积金(16)", Title: "", Value: 16} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "工程排污费(17)", Title: "", Value: 17} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixed_bills_flags = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "分部分项工程(1)", Title: "", Value: 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "措施项目(2)", Title: "", Value: 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "施工技术措施项目(3)", Title: "", Value: 3}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "安全文明施工按实计算费用(4)", Title: "", Value: 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "施工组织措施专项费用(5)", Title: "", Value: 5}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "安全文明施工专项费用(6)", Title: "", Value: 6}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "其他项目(7)", Title: "", Value: 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "暂列金额(8)", Title: "", Value: 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "暂估价(9)", Title: "", Value: 9}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "材料(工程设备)暂估价(10)", Title: "", Value: 10}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "专业工程暂估价(11)", Title: "", Value: 11}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "计日工(12)", Title: "", Value: 12}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "总承包服务费(13)", Title: "", Value: 13}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "索赔与现场签证(14)", Title: "", Value: 14}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "规费(15)", Title: "", Value: 15}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "社会保险费及住房公积金(16)", Title: "", Value: 16}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "工程排污费(17)", Title: "", Value: 17}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "税金(18)", Title: "", Value: 18}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "工程造价(19)", Title: "", Value: 19} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const fixed_bills_types = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "大项费用(1)", Title: "", Value: 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "分部(2)", Title: "", Value: 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "分项(3)", Title: "", Value: 3}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "清单(4)", Title: "", Value: 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "补项(5)", Title: "", Value: 5}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const exposed_bills_properties = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     {Name: "清单_所属项目ID", Title: "", Key: "projectID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ,{Name: "清单_ID", Title: "", Key: "ID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "顶层父清单_标记", Title: "", Key: "topBillID", Order: "ascend", individualType: fixed_top_bills_nodes} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ,{Name: "清单_层次", Title: "", Key: "treeLevel", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ,{Name: "清单_标记", Title: "", Key: "flags.flag", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_项目编码", Title: "", Key: "code", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_项目名称", Title: "", Key: "name", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_项目特征", Title: "", Key: "itemCharacterText", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_计量单位", Title: "", Key: "unit", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_工程量", Title: "", Key: "quantity", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_综合单价", Title: "", Key: "unitFee", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_综合合价", Title: "", Key: "totalFee", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "清单_暂估价", Title: "", Key: "tenderUnitFee", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "清单_类别", Title: "", Key: "type", Order: "ascend", individualType: fixed_bills_types} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "清单_标记", Title: "", Key: "flags.flag", Order: "ascend", individualType: fixed_bills_flags} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const exposed_ration_properties = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     {Name: "定额_工程内部ID", Title: "", Key: "ID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ,{Name: "定额_所属项目ID", Title: "", Key: "projectID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ,{Name: "定额_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ,{Name: "定额_清单内顺序", Title: "", Key: "serialNo", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_编号", Title: "", Key: "code", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_项目名称", Title: "", Key: "caption", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_单位", Title: "", Key: "unit", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_数量", Title: "", Key: "quantity", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_人工费", Title: "", Key: "labour", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_材料费", Title: "", Key: "material", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_机械费", Title: "", Key: "machine", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_机上人工费", Title: "", Key: "machineLabour", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_人工费调整", Title: "", Key: "adjustLabour", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_材料费调整", Title: "", Key: "'adjustMaterial'", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_机械费调整", Title: "", Key: "adjustMachine", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_机上人工费调整", Title: "", Key: "adjustMachineLabour", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_人工价差", Title: "", Key: "labourDiff", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_材料价差", Title: "", Key: "materialDiff", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_机械价差", Title: "", Key: "machineDiff", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_风险费用", Title: "", Key: "risk", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // ,{Name: "定额_管理费率", Title: "", Key: ""} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const exposed_prj_glj_properties = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "工料机_ID", Title: "", Key: "ID"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "工料机_所属定额ID", Title: "", Key: "rationID", Order: "ascend"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "工料机_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "工料机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // {Name: "工料机_代码", Title: "", Key: "code", Order: "ascend"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // {Name: "工料机_名称", Title: "", Key: "name", Order: "ascend"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // {Name: "工料机_单位", Title: "", Key: "unit", Order: "ascend"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // {Name: "工料机_数量", Title: "", Key: "quantity", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const exposed_properties_arr = [exposed_bills_properties, exposed_ration_properties, exposed_prj_glj_properties]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const fixed_top_bills_nodes = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "分部分项工程", Title: "", Value: 1}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "措施项目", Title: "", Value: 2}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "其他项目", Title: "", Value: 7}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "规费", Title: "", Value: 15}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "税金", Title: "", Value: 18}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "工程造价", Title: "", Value: 19} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const exposed_ration_glj_properties = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "定额人材机_ID", Title: "", Key: "ID"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_所属定额ID", Title: "", Key: "rationID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_代码", Title: "", Key: "code", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_类型", Title: "", Key: "type", Order: "ascend", individualType: fixed_glj_types} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_是否暂估", Title: "", Key: "ref_join(projectGLJID,projectGLJ,id).is_evaluate", Order: "ascend", isBoolean: true, booleanOptions: [1,0]} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_供货方式", Title: "", Key: "ref_join(projectGLJID,projectGLJ,id).supply", Order: "ascend", individualType: fixed_supply_types} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "定额人材机_三材类别", Title: "", Key: "ref_join(projectGLJID,projectGLJ,id).materialType", Order: "ascend", individualType: fixed_material_types} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const fixed_other_bills_types = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "施工技术措施项目", Title: "", Value: 3}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "安全文明施工按实计算费用", Title: "", Value: 4}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "施工组织措施专项费用", Title: "", Value: 5}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "安全文明施工专项费用", Title: "", Value: 6}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "暂列金额", Title: "", Value: 8}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "暂估价", Title: "", Value: 9}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "材料(工程设备)暂估价", Title: "", Value: 10}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "专业工程暂估价", Title: "", Value: 11}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "计日工", Title: "", Value: 12}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "总承包服务费", Title: "", Value: 13}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "索赔与现场签证", Title: "", Value: 14}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "社会保险费及住房公积金", Title: "", Value: 16}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {Name: "工程排污费", Title: "", Value: 17} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const exposed_prj_glj_properties = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {Name: "项目人材机_ID", Title: "", Key: "ID"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "项目人材机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "项目人材机_代码", Title: "", Key: "code", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "项目人材机_类型", Title: "", Key: "type", Order: "ascend", individualType: fixed_glj_types} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "项目人材机_数量", Title: "", Key: "quantity", Order: "ascend"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "项目人材机_是否暂估", Title: "", Key: "is_evaluate", Order: "ascend", isBoolean: true, booleanOptions: [1,0]} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "项目人材机_供货方式", Title: "", Key: "supply", Order: "ascend", individualType: fixed_supply_types} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ,{Name: "项目人材机_三材类别", Title: "", Key: "materialType", Order: "ascend", individualType: fixed_material_types} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const IDMark_Switch = "_switch", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_Icon = "_ico", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_Span = "_span", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_Input = "_input", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_Check = "_check", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_Edit = "_edit", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_Remove = "_remove", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_Ul = "_ul", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    IDMark_A = "_a"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const exposed_properties_arr = [exposed_bills_properties, exposed_ration_properties, exposed_ration_glj_properties, exposed_prj_glj_properties]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 let preHandleObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     treeObj: null, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -141,34 +177,38 @@ let preHandleObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    addNewNode: function(nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = this, item = null, preHandleType = nodeType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    createNewNode: function (nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = null, preHandleType = nodeType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             preHandleType = JV.PROP_HANDLE_TYPE_SORT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         switch (nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case JV.PROP_HANDLE_TYPE_SORT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "排序方式": "normal", "排序键值集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "排序方式": "normal", "排序键值集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case JV.PROP_HANDLE_TYPE_FILTER: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "过滤键值集": []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "过滤键值集": []}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case JV.PROP_HANDLE_TYPE_BILLS_DATA_MOVE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item = {Name: "预处理环节", Title: "", "映射数据对象": "ration", "预处理类型": preHandleType}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "ration", "预处理类型": preHandleType}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case JV.PROP_HANDLE_TYPE_SUM: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "分组键值集": [], "统计键值集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "分组键值集": [], "统计键值集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case JV.PROP_HANDLE_TYPE_ADJUST: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "数据调整集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "数据调整集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case JV.PROP_HANDLE_TYPE_ADD_DUMMY: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "Dummy数据集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": preHandleType, "Dummy数据集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                item = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": "排序", "排序方式": "normal", "排序键值集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = {Name: "预处理环节", Title: "", "映射数据对象": "bills", "预处理类型": "排序", "排序方式": "normal", "排序键值集":[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addNewNode: function(nodeType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = this, item = me.createNewNode(nodeType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.private_set_title(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.treeObj.addNodes(null, -1, [item], true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -311,8 +351,22 @@ let preHandleObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             preHandleObj.currentNode[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY] = dom.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onBeforeDrag: function (treeId, treeNodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let node of treeNodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (node.level > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onBeforeDrop: function(treeId, treeNodes, targetNode, moveType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (targetNode.level === 0 && moveType !== "inner") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onBeforeRemove: function(treeId, treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = true; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -323,6 +377,46 @@ let preHandleObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addHoverDom: function(treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = preHandleObj, sObj = $("#" + treeNode.tId + "_span"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ((treeNode.level > 0 && treeNode[JV.PROP_HANDLE_TYPE] !== JV.PROP_HANDLE_TYPE_FILTER) || ($("#addBtn_"+treeNode.tId).length > 0) ) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (treeNode[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_SORT && treeNode[JV.PROP_SORT_TYPE] === "accord_to_parent") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子排序' onfocus='this.blur();'></span>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sObj.after(addStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let btn = $("#addBtn_"+treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (btn) btn.bind("click", function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newSubNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newNode = me.createNewNode(treeNode[JV.PROP_HANDLE_TYPE]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newNode.Name = "子排序"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newNode[JV.PROP_DATA_KEY] = treeNode[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.private_set_title(newNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newSubNodes.push(newNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.isParent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.treeObj.addNodes(treeNode, -1, newSubNodes, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.treeObj.expandNode(treeNode, true, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (treeNode[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_FILTER) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增子过滤' onfocus='this.blur();'></span>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sObj.after(addStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let btn = $("#addBtn_"+treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (btn) btn.bind("click", function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newSubNodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newNode = me.createNewNode(treeNode[JV.PROP_HANDLE_TYPE]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newNode.Name = "子过滤"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newNode[JV.PROP_DATA_KEY] = treeNode[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newNode.Title = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newNode[JV.PROP_HANDLE_TYPE] = JV.PROP_HANDLE_TYPE_FILTER; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // me.private_set_title(newNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                newSubNodes.push(newNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.isParent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.treeObj.addNodes(treeNode, -1, newSubNodes, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.treeObj.expandNode(treeNode, true, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    removeHoverDom: function (treeId, treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $("#addBtn_"+treeNode.tId).unbind().remove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     extractTabFields: function (rptTpl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this, nodes = me.treeObj.getNodes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = []; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -360,6 +454,7 @@ let preHandleSortObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     topBillsTreeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     otherBillsTreeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     copyNode: function (src, dest) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = preHandleSortObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dest[JV.PROP_SORT_TYPE] = src[JV.PROP_SORT_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         switch (sort_types.indexOf(src[JV.PROP_SORT_TYPE])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case -1: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -390,7 +485,6 @@ let preHandleSortObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case 2 : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //according to parent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 dest[JV.PROP_PARENT_CHILD_SORT_KEY] = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                dest[JV.PROP_OTHER_SUB_SORT] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY] = src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (let item of src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_PARENT_SORT_KEYS]) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -400,19 +494,14 @@ let preHandleSortObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (let item of src[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     dest[JV.PROP_PARENT_CHILD_SORT_KEY][JV.PROP_CHILD_SORT_KEYS].push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dest[JV.PROP_OTHER_SUB_SORT] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (src[JV.PROP_OTHER_SUB_SORT] !== null && src[JV.PROP_OTHER_SUB_SORT] !== undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dest.items = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for (let subSort of src[JV.PROP_OTHER_SUB_SORT]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        let st = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        st[JV.PROP_SORT_TYPE] = subSort[JV.PROP_SORT_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (subSort[JV.PROP_SORT_TYPE] === "normal") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            st[JV.PROP_SORT_KEYS] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            for (let item of subSort[JV.PROP_SORT_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                let di = {key: item.key, order: item.order}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                st[JV.PROP_SORT_KEYS].push(di); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            //其他暂时不实现,目前没那么复杂 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let destSubSort = {Name: "子排序"}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        me.copyNode(subSort, destSubSort); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        destSubSort[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        dest.items.push(destSubSort); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -639,6 +728,17 @@ let preHandleSortObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case 2 : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //according to parent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 rst[JV.PROP_PARENT_CHILD_SORT_KEY] = handleObj[JV.PROP_PARENT_CHILD_SORT_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst[JV.PROP_OTHER_SUB_SORT] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (handleObj.items && handleObj.items.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let subSort of handleObj.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        let dtlRst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        me.copyNode(subSort, dtlRst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        delete dtlRst.Name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        delete dtlRst.PROP_DATA_KEY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rst[JV.PROP_OTHER_SUB_SORT].push(dtlRst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        dtlRst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case 3 : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //self define 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -653,7 +753,7 @@ let preHandleSortObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 let preHandleFilterObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     treeObj: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     copyNode: function (src, dest) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let keys = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = preHandleFilterObj, keys = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let filterItem of src[JV.PROP_FILTER_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let item = {key: filterItem.key}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             item[JV.PROP_FILTER_CONDITION] = filterItem[JV.PROP_FILTER_CONDITION]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -664,7 +764,21 @@ let preHandleFilterObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             keys.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dest[JV.PROP_HANDLE_TYPE] = src[JV.PROP_HANDLE_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dest[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dest[JV.PROP_FILTER_KEYS] = keys; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (src[JV.PROP_OTHER_SUB_FILTER] && src[JV.PROP_OTHER_SUB_FILTER].length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dest.items = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let subFilter of src[JV.PROP_OTHER_SUB_FILTER]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let dtlRst = {Name: "子过滤", Title: ""}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subFilter[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                me.copyNode(subFilter, dtlRst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dtlRst[JV.PROP_HANDLE_TYPE] = src[JV.PROP_HANDLE_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dtlRst[JV.PROP_DATA_KEY] = src[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dest.items.push(dtlRst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     refresh_node: function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -680,26 +794,43 @@ let preHandleFilterObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //and then others... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         //过滤条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         keyNode[JV.PROP_FILTER_CONDITION] = filterItem[JV.PROP_FILTER_CONDITION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        $("#diySelect_" + keyNode.tId)[0].selectedIndex = condition_types.indexOf(filterItem[JV.PROP_FILTER_CONDITION]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        //条件值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        keyNode[JV.PROP_FILTER_COMPARE_VAL] = filterItem[JV.PROP_FILTER_COMPARE_VAL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        $("#diyInput_" + keyNode.tId)[0].value = filterItem[JV.PROP_FILTER_COMPARE_VAL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        //其他关联业务数据对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (filterItem[JV.PROP_FILTER_COMPARE_OBJ]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            let cmpObjDom = $("#diyDataSelect_" + keyNode.tId)[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            keyNode[JV.PROP_FILTER_COMPARE_OBJ] = filterItem[JV.PROP_FILTER_COMPARE_OBJ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            let idx = pre_handle_data_objects.indexOf(filterItem[JV.PROP_FILTER_COMPARE_OBJ]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            cmpObjDom.selectedIndex = idx + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            me.private_setup_compare_obj(cmpObjDom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            let cmpObjIdDom = $("#diyDataDetailSelect_" + keyNode.tId)[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            for (let i = 0; i < cmpObjIdDom.children.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                let option = cmpObjIdDom.children[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (option.value === filterItem[JV.PROP_FILTER_COMPARE_OBJ_KEY]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    keyNode[JV.PROP_FILTER_COMPARE_OBJ_KEY] = filterItem[JV.PROP_FILTER_COMPARE_OBJ_KEY] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    cmpObjIdDom.selectedIndex = i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (keyNode.isBoolean) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            keyNode[JV.PROP_FILTER_COMPARE_VAL] = filterItem[JV.PROP_FILTER_COMPARE_VAL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            $("#diyCheck_" + keyNode.tId)[0].checked = (keyNode["booleanOptions"].indexOf(filterItem["compareValue"]) === 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else if (keyNode.hasOwnProperty("individualType")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            $("#diySelect_" + keyNode.tId)[0].selectedIndex = condition_types.indexOf(filterItem[JV.PROP_FILTER_CONDITION]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            //条件值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            keyNode[JV.PROP_FILTER_COMPARE_VAL] = filterItem[JV.PROP_FILTER_COMPARE_VAL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            $("#diyInput_" + keyNode.tId)[0].value = filterItem[JV.PROP_FILTER_COMPARE_VAL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for (let idx = 0; idx < keyNode["individualType"].length; idx++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                let idType = keyNode["individualType"][idx]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (idType.Value.toString() === filterItem[JV.PROP_FILTER_COMPARE_VAL].toString()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    $("#diyDataDetailSelect_" + keyNode.tId)[0].selectedIndex = idx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            $("#diySelect_" + keyNode.tId)[0].selectedIndex = condition_types.indexOf(filterItem[JV.PROP_FILTER_CONDITION]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            //条件值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            keyNode[JV.PROP_FILTER_COMPARE_VAL] = filterItem[JV.PROP_FILTER_COMPARE_VAL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            $("#diyInput_" + keyNode.tId)[0].value = filterItem[JV.PROP_FILTER_COMPARE_VAL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            //其他关联业务数据对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (filterItem[JV.PROP_FILTER_COMPARE_OBJ]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                let cmpObjDom = $("#diyDataSelect_" + keyNode.tId)[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                keyNode[JV.PROP_FILTER_COMPARE_OBJ] = filterItem[JV.PROP_FILTER_COMPARE_OBJ]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                let idx = pre_handle_data_objects.indexOf(filterItem[JV.PROP_FILTER_COMPARE_OBJ]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                cmpObjDom.selectedIndex = idx + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                me.private_setup_compare_obj(cmpObjDom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                let cmpObjIdDom = $("#diyDataDetailSelect_" + keyNode.tId)[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                for (let i = 0; i < cmpObjIdDom.children.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    let option = cmpObjIdDom.children[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (option.value === filterItem[JV.PROP_FILTER_COMPARE_OBJ_KEY]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        keyNode[JV.PROP_FILTER_COMPARE_OBJ_KEY] = filterItem[JV.PROP_FILTER_COMPARE_OBJ_KEY] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        cmpObjIdDom.selectedIndex = i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -746,32 +877,70 @@ let preHandleFilterObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         rst.push("</select>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst.join(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    build_individual_filter_selection_str: function (individualTypes,treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rst = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst.push("<select class='selDemo' id='diyDataDetailSelect_" + treeNode.tId + "'>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let i = 0; i < individualTypes.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst.push("<option value='" + individualTypes[i].Value + "'>" + individualTypes[i].Name + "</option>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst.push("</select>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rst.join(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     addDiyDom: function(treeId,treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = preHandleFilterObj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let aObj = $("#" + treeNode.tId + IDMark_A); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let dataDtlSelStr = me.build_filter_handle_data_detail_selection_str(treeId,treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aObj.after(dataDtlSelStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let dataSelStr = me.build_filter_handle_data_selection_str(treeId,treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aObj.after(dataSelStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let editStr = "<input type='text' id='diyInput_" + treeNode.tId + "' width='10'/>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aObj.after(editStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let selStr = "<select class='selDemo' id='diySelect_" + treeNode.tId + "'><option value='=='>等于</option><option value='==='>全等于</option><option value='>'>大于</option><option value='>='>大于等于</option><option value='<'>小于</option><option value='<='>小于等于</option><option value='!='>不等于</option><option value='in'>在</option><option value='not in'>不在</option></select>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aObj.after(selStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let sel = $("#diySelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sel.bind("change", me.filterConditionChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sel = $("#diyInput_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sel.bind("change", me.filterCompareValChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sel = $("#diyDataSelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sel.bind("change", me.filterCompareObjChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sel = $("#diyDataDetailSelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sel.bind("change", me.filterCompareObjKeyChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (treeNode.hasOwnProperty("isBoolean")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let checkStr = "<input type='checkbox' id='diyCheck_" + treeNode.tId + "' />"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(checkStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let sel = $("#diyCheck_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterConditionCheck); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (treeNode.hasOwnProperty("individualType")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let dataDtlSelStr = me.build_individual_filter_selection_str(treeNode.individualType, treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(dataDtlSelStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let editStr = "<input type='text' id='diyInput_" + treeNode.tId + "' width='10'/>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(editStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let selStr = "<select class='selDemo' id='diySelect_" + treeNode.tId + "'><option value='=='>等于</option><option value='==='>全等于</option><option value='>'>大于</option><option value='>='>大于等于</option><option value='<'>小于</option><option value='<='>小于等于</option><option value='!='>不等于</option><option value='in'>在</option><option value='not in'>不在</option></select>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(selStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let sel = $("#diySelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterConditionChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sel = $("#diyInput_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterCompareValChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sel = $("#diyDataDetailSelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterIndividualCompareObjKeyChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //注意:这是后面的DOM先生成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let dataDtlSelStr = me.build_filter_handle_data_detail_selection_str(treeId,treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(dataDtlSelStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let dataSelStr = me.build_filter_handle_data_selection_str(treeId,treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(dataSelStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let editStr = "<input type='text' id='diyInput_" + treeNode.tId + "' width='10'/>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(editStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let selStr = "<select class='selDemo' id='diySelect_" + treeNode.tId + "'><option value='=='>等于</option><option value='==='>全等于</option><option value='>'>大于</option><option value='>='>大于等于</option><option value='<'>小于</option><option value='<='>小于等于</option><option value='!='>不等于</option><option value='in'>在</option><option value='not in'>不在</option></select>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            aObj.after(selStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let sel = $("#diySelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterConditionChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sel = $("#diyInput_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterCompareValChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sel = $("#diyDataSelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterCompareObjChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sel = $("#diyDataDetailSelect_" + treeNode.tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (sel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sel.bind("change", me.filterCompareObjKeyChange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     filterCompareValChange(event) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -780,6 +949,18 @@ let preHandleFilterObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         node[JV.PROP_FILTER_COMPARE_VAL] = sel.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.resetFilter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    filterConditionCheck: function (event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = preHandleFilterObj, sel = event.currentTarget, tId = sel.id.slice(9); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let node = me.treeObj.getNodeByTId(tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_FILTER_CONDITION] = "==="; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (sel.checked === true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            node[JV.PROP_FILTER_COMPARE_VAL] = node.booleanOptions[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            node[JV.PROP_FILTER_COMPARE_VAL] = node.booleanOptions[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //注:这里虽然是boolean选项,但实际有可能是0,1的选择(非true,false),所以需要设置node节点的booleanOptions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.resetFilter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     filterConditionChange: function(event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = preHandleFilterObj, sel = event.currentTarget, tId = sel.id.slice(10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let node = me.treeObj.getNodeByTId(tId); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -809,6 +990,16 @@ let preHandleFilterObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.private_setup_compare_obj(sel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.resetFilter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    filterIndividualCompareObjKeyChange: function(event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = preHandleFilterObj, sel = event.currentTarget, tId = sel.id.slice(20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let inTxt = $("#diyInput_" + tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (inTxt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            inTxt[0].value = sel.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let node = me.treeObj.getNodeByTId(tId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        node[JV.PROP_FILTER_COMPARE_VAL] = sel.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.resetFilter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     filterCompareObjKeyChange: function(event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = preHandleFilterObj, sel = event.currentTarget, tId = sel.id.slice(20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let node = me.treeObj.getNodeByTId(tId); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -816,18 +1007,27 @@ let preHandleFilterObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.resetFilter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     extractTabFields: function (handleObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let me = this, rst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rst[JV.PROP_HANDLE_TYPE] = handleObj[JV.PROP_HANDLE_TYPE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rst[JV.PROP_DATA_KEY] = handleObj[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rst[JV.PROP_FILTER_KEYS] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let item of handleObj[JV.PROP_FILTER_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let dtl = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dtl.key = item.key; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dtl[JV.PROP_FILTER_CONDITION] = item[JV.PROP_FILTER_CONDITION]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dtl[JV.PROP_FILTER_COMPARE_VAL] = item[JV.PROP_FILTER_COMPARE_VAL]?item[JV.PROP_FILTER_COMPARE_VAL]:null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dtl[JV.PROP_FILTER_COMPARE_OBJ] = item[JV.PROP_FILTER_COMPARE_OBJ]?item[JV.PROP_FILTER_COMPARE_OBJ]:null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dtl[JV.PROP_FILTER_COMPARE_OBJ_KEY] = item[JV.PROP_FILTER_COMPARE_OBJ_KEY]?item[JV.PROP_FILTER_COMPARE_OBJ_KEY]:null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rst[JV.PROP_FILTER_KEYS].push(dtl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let me = preHandleFilterObj, rst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        me.copyNode(handleObj, rst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rst[JV.PROP_OTHER_SUB_FILTER] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let private_extract_other_sub_filter = function (parentFilter, currentFilterNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let dtlRst = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            me.copyNode(currentFilterNode, dtlRst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            parentFilter[JV.PROP_OTHER_SUB_FILTER].push(dtlRst); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (currentFilterNode.items && currentFilterNode.items.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dtlRst[JV.PROP_OTHER_SUB_FILTER] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let subFilterNode of currentFilterNode.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    private_extract_other_sub_filter(dtlRst, subFilterNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delete dtlRst.Name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delete dtlRst[JV.PROP_DATA_KEY]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dtlRst = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (handleObj.items && handleObj.items.length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let subFilter of handleObj.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                private_extract_other_sub_filter(rst, subFilter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 |