| 
					
				 | 
			
			
				@@ -7,120 +7,122 @@ const baseURL = process.env.VUE_APP_BASE_API 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 日期格式化 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function parseTime(time, pattern) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (arguments.length === 0 || !time) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let date 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (typeof time === 'object') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		date = time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			time = parseInt(time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else if (typeof time === 'string') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			time = time.replace(new RegExp(/-/gm), '/'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ((typeof time === 'number') && (time.toString().length === 10)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			time = time * 1000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		date = new Date(time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	const formatObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		y: date.getFullYear(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		m: date.getMonth() + 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		d: date.getDate(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		h: date.getHours(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		i: date.getMinutes(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		s: date.getSeconds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		a: date.getDay() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let value = formatObj[key] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// Note: getDay() returns 0 on Sunday 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (result.length > 0 && value < 10) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			value = '0' + value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return value || 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return time_str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (arguments.length === 0 || !time) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let date 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (typeof time === 'object') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        date = time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            time = parseInt(time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if (typeof time === 'string') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            time = time.replace(new RegExp(/-/gm), '/'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ((typeof time === 'number') && (time.toString().length === 10)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            time = time * 1000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        date = new Date(time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const formatObj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        y: date.getFullYear(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        m: date.getMonth() + 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        d: date.getDate(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        h: date.getHours(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        i: date.getMinutes(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        s: date.getSeconds(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a: date.getDay() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let value = formatObj[key] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Note: getDay() returns 0 on Sunday 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (result.length > 0 && value < 10) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            value = '0' + value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return value || 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return time_str 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 表单重置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function resetForm(refName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (this.$refs[refName]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.$refs[refName].resetFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (this.$refs[refName]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$refs[refName].resetFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 添加日期范围 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function addDateRange(params, dateRange, propName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var search = params; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	search.params = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (null != dateRange && '' != dateRange) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (typeof (propName) === "undefined") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			search.params["beginTime"] = dateRange[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			search.params["endTime"] = dateRange[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			search.params["begin" + propName] = dateRange[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			search.params["end" + propName] = dateRange[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return search; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var search = params; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    search.params = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (null != dateRange && '' != dateRange) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (typeof(propName) === "undefined") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            search.params["beginTime"] = dateRange[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            search.params["endTime"] = dateRange[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            search.params["begin" + propName] = dateRange[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            search.params["end" + propName] = dateRange[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return search; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 回显数据字典 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function selectDictLabel(datas, value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var actions = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Object.keys(datas).some((key) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (datas[key].dictValue == ('' + value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			actions.push(datas[key].dictLabel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return actions.join(''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var actions = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Object.keys(datas).some((key) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (datas[key].dictValue == ('' + value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            actions.push(datas[key].dictLabel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return actions.join(''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 回显数据字典(字符串数组) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function selectDictLabels(datas, value, separator) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var actions = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var currentSeparator = undefined === separator ? "," : separator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var temp = value.split(currentSeparator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Object.keys(value.split(currentSeparator)).some((val) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Object.keys(datas).some((key) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (datas[key].dictValue == ('' + temp[val])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				actions.push(datas[key].dictLabel + currentSeparator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return actions.join('').substring(0, actions.join('').length - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var actions = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var currentSeparator = undefined === separator ? "," : separator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var temp = value.split(currentSeparator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Object.keys(value.split(currentSeparator)).some((val) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Object.keys(datas).some((key) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (datas[key].dictValue == ('' + temp[val])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                actions.push(datas[key].dictLabel + currentSeparator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return actions.join('').substring(0, actions.join('').length - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 通用下载方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function download(fileName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 字符串格式化(%s ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function sprintf(str) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var args = arguments, flag = true, i = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	str = str.replace(/%s/g, function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		var arg = args[i++]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (typeof arg === 'undefined') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			flag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return flag ? str : ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var args = arguments, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        flag = true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        i = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    str = str.replace(/%s/g, function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var arg = args[i++]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (typeof arg === 'undefined') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            flag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return flag ? str : ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 转换字符串,undefined,null等转化为"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function praseStrEmpty(str) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!str || str == "undefined" || str == "null") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return str; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!str || str == "undefined" || str == "null") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return str; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -131,45 +133,84 @@ export function praseStrEmpty(str) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param {*} children 孩子节点字段 默认 'children' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function handleTree(data, id, parentId, children) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let config = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		id: id || 'id', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		parentId: parentId || 'parentId', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		childrenList: children || 'children' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var childrenListMap = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var nodeIds = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var tree = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (let d of data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let parentId = d[config.parentId]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (childrenListMap[parentId] == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			childrenListMap[parentId] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		nodeIds[d[config.id]] = d; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		childrenListMap[parentId].push(d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (let d of data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let parentId = d[config.parentId]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (nodeIds[parentId] == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tree.push(d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (let t of tree) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		adaptToChildrenList(t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	function adaptToChildrenList(o) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (childrenListMap[o[config.id]] !== null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			o[config.childrenList] = childrenListMap[o[config.id]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (o[config.childrenList]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (let c of o[config.childrenList]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				adaptToChildrenList(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return tree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let config = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id: id || 'id', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        parentId: parentId || 'parentId', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        childrenList: children || 'children' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var childrenListMap = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var nodeIds = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    var tree = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let d of data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let parentId = d[config.parentId]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (childrenListMap[parentId] == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            childrenListMap[parentId] = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        nodeIds[d[config.id]] = d; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        childrenListMap[parentId].push(d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let d of data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let parentId = d[config.parentId]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (nodeIds[parentId] == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tree.push(d); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (let t of tree) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        adaptToChildrenList(t); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    function adaptToChildrenList(o) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (childrenListMap[o[config.id]] !== null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o[config.childrenList] = childrenListMap[o[config.id]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (o[config.childrenList]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let c of o[config.childrenList]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                adaptToChildrenList(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return tree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const CryptoJS = require("crypto-js"); //引用AES源码js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const key = CryptoJS.enc.Utf8.parse(fillKey("xintong")); //十六位十六进制数作为密钥 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const iv = CryptoJS.enc.Utf8.parse("ABCDEF1234123412"); //十六位十六进制数作为密钥偏移量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function fillKey(key) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const filledKey = Buffer.alloc(128 / 8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const keys = Buffer.from(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (keys.length < filledKey.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        filledKey.map((b, i) => filledKey[i] = keys[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return filledKey; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//解密方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function Decrypt(word) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let encryptedHexStr = CryptoJS.enc.Hex.parse(word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let decrypt = CryptoJS.AES.decrypt(srcs, key, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // iv: iv, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mode: CryptoJS.mode.ECB, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        padding: CryptoJS.pad.Pkcs7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return decryptedStr.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//加密方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function Encrypt(word) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let srcs = CryptoJS.enc.Utf8.parse(word); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let encrypted = CryptoJS.AES.encrypt(srcs, key, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // iv: iv, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mode: CryptoJS.mode.ECB, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        padding: CryptoJS.pad.Pkcs7, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return encrypted.ciphertext.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export { Decrypt, Encrypt }; 
			 |