| 
					
				 | 
			
			
				@@ -143,6 +143,36 @@ class Rpt_Data_Extractor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pri_setup_filter(JV.NODE_DETAIL_FIELDS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pri_setup_filter(JV.NODE_MASTER_FIELDS_EX); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pri_setup_filter(JV.NODE_DETAIL_FIELDS_EX); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (tpl[JV.NODE_MAP_DATA_HANDLE_INFO] && tpl[JV.NODE_MAP_DATA_HANDLE_INFO].length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let preHandle of tpl[JV.NODE_MAP_DATA_HANDLE_INFO]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (rst.indexOf(preHandle[JV.PROP_DATA_KEY]) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rst.push(preHandle[JV.PROP_DATA_KEY]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (preHandle[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_FILTER) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (preHandle[JV.PROP_FILTER_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (let filter of preHandle[JV.PROP_FILTER_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (filter[JV.PROP_FILTER_COMPARE_OBJ] && rst.indexOf(filter[JV.PROP_FILTER_COMPARE_OBJ]) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                rst.push(filter[JV.PROP_FILTER_COMPARE_OBJ]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (preHandle[JV.PROP_HANDLE_TYPE] === JV.PROP_HANDLE_TYPE_SUM) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (preHandle[JV.PROP_SUM_GROUP_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (let grpKey of preHandle[JV.PROP_SUM_GROUP_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (grpKey.seeking_parent && rst.indexOf(grpKey.seeking_parent) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                rst.push(grpKey.seeking_parent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (preHandle[JV.PROP_PARENT_CHILD_SORT_KEY] && preHandle[JV.PROP_PARENT_CHILD_SORT_KEY].length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let item of preHandle[JV.PROP_PARENT_CHILD_SORT_KEY]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (rst.indexOf(item[JV.PROP_PARENT_DATA_KEY]) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            rst.push(item[JV.PROP_PARENT_DATA_KEY]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (rst.length === 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst.push(projectConst.RATION_ASS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -279,41 +309,69 @@ function filterData(sourceData, handleCfg, prjData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tempRstArr.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let private_chkVal = function (src, dest, compStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let private_chkVal = function (src, compVal, compStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         switch (compStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case "==" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src == dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src == compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case "===" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src === dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src === compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case ">" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src > dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src > compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case ">=" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src >= dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src >= compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case "<" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src < dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src < compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case "<=" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src <= dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src <= compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case "!=" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src != dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src != compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case "!==" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                rst = (src !== dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rst = (src !== compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case "in" : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (compVal instanceof Array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rst = compVal.indexOf(src) >= 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //string,需要转类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let newCv = JSON.parse(compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (newCv instanceof Array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rst = newCv.indexOf(src) >= 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rst = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case "not in": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (compVal instanceof Array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rst = compVal.indexOf(src) < 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //string,需要转类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let newCv = JSON.parse(compVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (newCv instanceof Array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rst = newCv.indexOf(src) < 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 rst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let compareObj = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (let item of tempRstArr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let compRst = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let curComparePrjData = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let startIdx = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let cfg of handleCfg[JV.PROP_FILTER_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (cfg[JV.PROP_FILTER_COMPARE_VAL]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //比较key值 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -323,11 +381,28 @@ function filterData(sourceData, handleCfg, prjData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!curComparePrjData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     curComparePrjData = getModuleDataByKey(prjData, cfg[JV.PROP_FILTER_COMPARE_OBJ]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for (let data of curComparePrjData.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    compRst = private_chkVal(item[cfg.key], data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]], cfg[JV.PROP_FILTER_CONDITION]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (compRst) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (cfg[JV.PROP_FILTER_CONDITION] === "in" || cfg[JV.PROP_FILTER_CONDITION] === "not in") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let compareArr = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!compareObj.hasOwnProperty(cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY] + startIdx.toString())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        compareObj[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY] + startIdx.toString()] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        compareArr = compareObj[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY] + startIdx.toString()]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (let data of curComparePrjData.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (compareArr.indexOf(data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]]) < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                compareArr.push(data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        compareArr = compareObj[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY] + startIdx.toString()]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    compRst = private_chkVal(item[cfg.key], compareArr, cfg[JV.PROP_FILTER_CONDITION]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (let data of curComparePrjData.data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        compRst = private_chkVal(item[cfg.key], data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]], cfg[JV.PROP_FILTER_CONDITION]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (compRst) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            startIdx++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (compRst) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rstArr.push(item); 
			 |