baseUrl = window.top.RootSetting.url;


uploadAxios = axios.create(
{
	timeout: 60000,
	headers:{
		  
	}
	
}); 

commonAxios = axios.create({
  timeout: 60000,
  // withCredentials: true,

  headers: {
    'Content-Type': 'application/json',
  },
  transformRequest: [function (data) {
    function dateFormat(date, fmt) {
      if (null == date || undefined == date) return '';
      var o = {
        "M+": date.getMonth() + 1, //月份
        "d+": date.getDate(), //æ—¥
        "h+": date.getHours(), //小时
        "m+": date.getMinutes(), //分
        "s+": date.getSeconds(), //ç§’
        "S": date.getMilliseconds() //毫秒
      };
      if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
      for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
      return fmt;
    }

    Date.prototype.toJSON = function () {
      return dateFormat(this, 'yyyy-MM-dd')
    }
    data = JSON.stringify(data)
    return data
  }]

});

Array.prototype.remove = function(val) { 
	var index = this.indexOf(val); 
	if (index > -1) { 
	this.splice(index, 1); 
	} 
};

function createCode (code) {
	var code_ = "";
	var date = new Date();
	code_ = date.getTime();
	
	if (code) {
		code_ = code + "_" + code_;
	}
	return code_;
};

function uniq(array){
    var temp = []; //一个新的临时数组
    for(var i = 0; i < array.length; i++){
        if(temp.indexOf(array[i]) == -1){
            temp.push(array[i]);
        }
    }
    return temp;
};

function dateFormat(date, fmt) {
    if (null == date || undefined == date) return '';
    var o = {
        "M+": date.getMonth() + 1, //月份
        "d+": date.getDate(), //æ—¥
        "h+": date.getHours(), //小时
        "m+": date.getMinutes(), //分
        "s+": date.getSeconds(), //ç§’
        "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};

function getUrl(vue, url, params, callback, error_callback) {
	url = baseUrl + url;
	let lastUrl = url.substring(url.lastIndexOf("/") + 1);
	let user = localStorage.getItem('user');
	let userInfo = JSON.parse(user);
	if (!params) {
		params = {
			user_name: userInfo.name
		}
	}
	else if(!params.user_name && userInfo) {
		params.user_name = userInfo.name
	}
	
	commonAxios.get(url, {
			params: params
		}).then(data_ => {
			if(typeof(data_.data) == "string"){
				data_.data = JSON.parse(data_.data);
			}
			
			if (!data_.data.success) {
				vue.$message({
					showClose: true,
					message: data_.data.errormessage,
					type: 'error'
				});
				return;
			}
			var result = data_.data;
			if (!isEncoded) {
				var dataStr = JSON.stringify(data_.data);
				// dataStr = percent2percent25(dataStr);
				dataStr = decodeURI(dataStr);
				var result = eval('(' + dataStr + ')');
			}

			if (callback) {
				if (lastUrl && lastUrl.startsWith("get")) {
					lastUrl = lastUrl.substring(3).toLowerCase();
					if (result[lastUrl]) {
						callback(result[lastUrl]);
					} else {
						callback(result);
					}
				} else {
					callback(result);
				}
			}
		})
		.catch(error => {
			vue.$message({
				showClose: true,
				message: url + ':请求出现错误:' + error,
				type: 'error'
			});
			console.error(error);
			if (error_callback) {
				error_callback(error);
			}
		})
};

function uploadFile(vue, formData, callback, error_callback) {
	uploadAxios.post(baseUrl +'file/exec', formData).then(data_ => {
		vue.$message({
			showClose: true,
			message: '上传成功!',
			type: 'success'
		});
		if (callback) {
			callback(data_);
		}
	}).catch(error => {
			vue.$message({
				showClose: true,
				message:  ':请求出现错误:' + error,
				type: 'error'
			});
			console.error(error);
			if (error_callback) {
				error_callback(error);
			}
		});
}


function uploadFileAnalysis(vue, formData, callback, error_callback) {
	/* formData.type="textCommon"; */
	
	uploadAxios.post(baseUrl +'api/parseLicense', formData).then(data_ => {
		vue.$message({
			showClose: true,
			message: '上传成功!',
			type: 'success'
		});
		if (callback) {
			callback(data_);
		}
	}).catch(error => {
			vue.$message({
				showClose: true,
				message:  ':请求出现错误:' + error,
				type: 'error'
			});
			console.error(error);
			if (error_callback) {
				error_callback(error);
			}
		});
}

function getDataList(me, dataName, params, callback, error_callback) {
	params.dataName = dataName;
	getUrl(me, "data/getEntitySet", params, callback, error_callback);
};

function getOneData(me, dataName, params, callback, error_callback) {
	params.dataName = dataName;
	getUrl(me, "data/getEntity", params, callback, error_callback);
};

function saveData(me, dataName, params, callback, error_callback) {
	for(let one in params) {
		let val = params[one];
		if(val === "") {
			params[one] = undefined;
		}
	}
	params.dataName = dataName;
	getUrl(me, "data/saveEntity", params, callback, error_callback);
};

function delData(me, dataName, id, callback, error_callback) {
	let params = {
		id:id,
		dataName: dataName
	};
		
	getUrl(me, "data/deleteEntity", params, callback, error_callback);
};

function percent2percent25(URI) {
	if (URI.indexOf('%') > -1) {
		return URI.replace(/%/g, '%25')
	} else {
		return URI;
	}
}

function postUrl(vue, url, params, callback, error_callback) {
	url = baseUrl + url;
	let lastUrl = url.substring(url.lastIndexOf("/") + 1);
	let formData = new FormData();
	for(let name in params) {
		let val = params[name];
		formData.append(name, val);
	}
	axios.post(url, formData)
		.then(data_ => {
			if (!data_.data.success) {
				vue.$message({
					showClose: true,
					message: data_.data.errormessage,
					type: 'error'
				});
				return;
			}
			if (callback) {
				if (lastUrl && lastUrl.startsWith("get")) {
					lastUrl = lastUrl.substring(3).toLowerCase();
					if (data_.data[lastUrl]) {
						callback(data_.data[lastUrl]);
					} else {
						callback(data_.data.data);
					}
				} else {
					callback(data_.data.data);
				}
			}
		})
		.catch(error => {
			vue.$message({
				showClose: true,
				message: url + ':请求出现错误:' + error,
				type: 'error'
			});
			console.info(error);
			if (error_callback) {
				error_callback(error);
			}
		})
};


function postCommonUrl(vue, url, params, callback, error_callback) {
	url = baseUrl + url;
	let lastUrl = url.substring(url.lastIndexOf("/") + 1);

	commonAxios.post(url, params)
		.then(data_ => {
			if (!data_.data.success) {
				vue.$message({
					showClose: true,
					message: data_.data.errormessage,
					type: 'error'
				});
				return;
			}
			if (callback) {
				if (lastUrl && lastUrl.startsWith("get")) {
					lastUrl = lastUrl.substring(3).toLowerCase();
					if (data_.data[lastUrl]) {
						callback(data_.data[lastUrl]);
					} else {
						callback(data_.data.data);
					}
				} else {
					callback(data_.data.data);
				}
			}
		})
		.catch(error => {
			vue.$message({
				showClose: true,
				message: url + ':请求出现错误:' + error,
				type: 'error'
			});
			console.info(error);
			if (error_callback) {
				error_callback(error);
			}
		})
};

function objectToURI(object) {
	if (!object) {
		return null;
	}

	if (typeof object == "String") {
		return encodeURI(object);
	}

	var param = null;
	for (var prop in object) {
		if (object[prop]) {
			if (param) {
				param = param + "&" + prop + "=" + encodeURI(object[prop]);
			} else {
				param = prop + "=" + encodeURI(object[prop]);
			}
		}
	}

	return param;
}

function getGetParams(url) {
	// var url = window.location.href;
	const search = url.split('?')[1]
	if (!search) {
		return {}
	}
	return JSON.parse(
		'{"' +
		decodeURIComponent(search)
		.replace(/"/g, '\\"')
		.replace(/&/g, '","')
		.replace(/=/g, '":"') +
		'"}'
	)
}

function ArrayToTreeByNotParent(array_, name, parentId, parId, disabled_field, isencode, parentobj) {
	if(!parentId) {
		parentId = "parent_id";
	}
	
	if(!name) {
		name = "label";
	}
	
	if(!parId) {
		parId = "";
	}
	
	let obj = {};
	let result = [];
	let list = JSON.parse(JSON.stringify(array_));
	list.map(el => {
		obj[el.id] = el;
	})
	let openId = "";
	for (let i = 0, len = list.length; i < len; i++) {
		let parentId_ = list[i][parentId];
		//如果存在判断只读字段,并且该字段有值则设置该节点为只读
		if (disabled_field) {
			if(list[i][disabled_field]) {
				list[i].disabled = true;
			}
		}
		
		//设置显示字段
		if (isencode) {
			list[i].label = decodeURI(encodeURI( list[i][name]));//数据如果带“%”的需要编码再解码,否则会存在格式错误
			list[i].name = decodeURI(encodeURI( list[i][name]));
		}
		else {
			list[i].label = decodeURI(list[i][name]);
			list[i].name = decodeURI(list[i][name]);
		}
		if (parentId_ == parId || !parentId_ || parentId_ == "null") {
			if(!obj[list[i].id].children) {
			    obj[list[i].id].children = null;
			}
			result.push(list[i]);
			continue;
		} else if (obj[parentId_]) {
			if (!obj[parentId_].children) {
				obj[parentId_].children = [];
			}
			obj[parentId_].children.push(list[i]);
		}
		else if(!obj[parentId_]) {
			var item = {
				children: []
			};
			for (var k in parentobj) {
				item[k] = list[i][parentobj[k]];
			}
			obj[parentId_] = item;
			result.push(obj[parentId_]);
			obj[parentId_].children.push(list[i]);
		}
	}
	return result;
}


function ArrayToTree(array_, name, parentId, parId, disabled_field, isencode) {
	if(!parentId) {
		parentId = "parent_id";
	}
	
	if(!name) {
		name = "label";
	}
	
	if(!parId) {
		parId = "";
	}
	
	let obj = {};
	let result = [];
	let list = JSON.parse(JSON.stringify(array_));
	list.map(el => {
		obj[el.id] = el;
	})
	let openId = "";
	for (let i = 0, len = list.length; i < len; i++) {
		let parentId_ = list[i][parentId];
		//如果存在判断只读字段,并且该字段有值则设置该节点为只读
		if (disabled_field) {
			if(list[i][disabled_field]) {
				list[i].disabled = true;
			}
		}
		
		//设置显示字段
		if (isencode) {
			list[i].label = decodeURI(encodeURI( list[i][name]));//数据如果带“%”的需要编码再解码,否则会存在格式错误
			list[i].name = decodeURI(encodeURI( list[i][name]));
		}
		else {
			list[i].label = decodeURI(list[i][name]);
			list[i].name = decodeURI(list[i][name]);
		}
		if (parentId_ == parId || !parentId_ || parentId_ == "null") {
			if(!obj[list[i].id].children) {
			    obj[list[i].id].children = null;
			}
			result.push(list[i]);
			continue;
		} else if (obj[parentId_]) {
			if (!obj[parentId_].children) {
				obj[parentId_].children = [];
			}
			obj[parentId_].children.push(list[i]);
		}
	}
	return result;
}

function ArrayToTree2(array_, name, parentId, parId, disabled_field, isencode) {
	if(!parentId) {
		parentId = "parent_id";
	}
	
	if(!name) {
		name = "label";
	}
	
	if(!parId) {
		parId = "";
	}
	
	let obj = {};
	let result = [];
	let list = JSON.parse(JSON.stringify(array_));
	list.map(el => {
		obj[el.id] = el;
	})
	let openId = "";
	for (let i = 0, len = list.length; i < len; i++) {
		let parentId_ = list[i][parentId];
		//如果存在判断只读字段,并且该字段有值则设置该节点为只读
		if (disabled_field) {
			if(list[i][disabled_field]) {
				list[i].disabled = true;
			}
		}
		
		if (parentId_ == parId || !parentId_ || parentId_ == "null") {
			if(!obj[list[i].id].children2) {
			    obj[list[i].id].children2 = null;
			}
			result.push(list[i]);
			continue;
		} else if (obj[parentId_]) {
			if (!obj[parentId_].children2) {
				obj[parentId_].children2 = [];
			}
			obj[parentId_].children2.push(list[i]);
		}
	}
	return result;
}


function listTOGroup(array_, id, parentId, label) {
	let parId = "";
	let obj = {};
	let result = [];
	let list = JSON.parse(JSON.stringify(array_));
	list.map(el => {
		obj[el.id] = el;
	})
	let openId = "";
	for (let i = 0, len = list.length; i < len; i++) {
		let parentId_ = list[i][parentId];
		//设置显示字段
		list[i].value = list[i][id];
		list[i].label = list[i][label];

		if (parentId_ == parId || !parentId_) {
			obj[list[i].id].children = [];
			result.push(list[i]);
			continue;
		} else if (obj[parentId_]) {
			if (!obj[parentId_].children) {
				obj[parentId_].children = [];
			}
			obj[parentId_].children.push(list[i]);
		}
	}
	return result;

}


function list2Options(array_, value, label) {
	var result = array_.map(function(one) {
		return {
			value: one[value],
			label: one[label]
		}
	});
	return result;
}

function clone(obj) {
	var result, oClass = isClass(obj);
	//确定result的类型
	if (oClass === "Object") {
		result = {};
	} else if (oClass === "Array") {
		result = [];
	} else {
		return obj;
	}
	for (var key in obj) {
		var copy = obj[key];
		if (isClass(copy) == "Object") {
			result[key] = arguments.callee(copy); //递归调用
		} else if (isClass(copy) == "Array") {
			result[key] = arguments.callee(copy);
		} else {
			result[key] = obj[key];
		}
	}
	return result;
};

function isClass(o) {
	if (o === null) return "Null";
	if (o === undefined) return "Undefined";
	return Object.prototype.toString.call(o).slice(8, -1);
}

function formatterRate(rate, fixed) {
	if (!fixed) {
		fixed = 1;
	}
	if (rate == "") {
		return "";
	}

	if (rate == 0) {
		return 0;
	}

	if (isNaN(rate)) {
		return 0;
	}
	return (rate * 10000 / 100).toFixed(fixed);
}

function formatters(rate, fixed) {

	if (!fixed) {
		fixed = 1;
	}


	if (rate == "") {
		return "";
	}

	if (isNaN(rate)) {
		return rate;
	}
	if (parseInt(rate) == rate) {
		return rate;
	}
	return (rate * 100 / 100).toFixed(fixed);
}

function sortNumber(a, b) {
	return a - b
}

function groupArr(list, field) {
	var obj = {};
	for (var i = 0; i < list.length; i++) {

		var keys = Object.keys(list[i]);
		for (var j = 0; j < keys.length; j++) {
			var item = keys[j]
			if (item == field) {
				obj[list[i][item]] = {
					list: obj[list[i][field]] ? obj[list[i][field]].list : [],
					type: list[i][field]
				};
			}
		}

		obj[list[i][field]].list.push(list[i])
	}
	var att = [];
	for (item in obj) {
		att.push({
			list: obj[item].list,
			type: obj[item].type,
		})
	}
	return att;
}

function dealExportByBlob(res) {
	let fileName = decodeURI(res.headers['content-disposition'].split('filename=')[1])
	// let fileName = decodeURI(res.headers['content-disposition'].match(/filename=(\S*)(?=(.xls|.xlsx))/)[1])
	let blob = new Blob([res.data], {
		type: 'application/vnd.ms-excel;charset=UTF-8'
	})
	if (window.navigator.msSaveBlob) { // 没有此判断的话,ie11下的导出没有效果
		window.navigator.msSaveBlob(blob, fileName)
	} else {
		let downloadElement = document.createElement('a')
		let href = window.URL.createObjectURL(blob) // 创建下载的链接
		downloadElement.href = href
		downloadElement.download = fileName // 下载后文件名
		document.body.appendChild(downloadElement)
		downloadElement.click() // 点击下载
		document.body.removeChild(downloadElement) // 下载完成移除元素
		window.URL.revokeObjectURL(href) // 释放掉blob对象
	}
}

function dealExportByPath(fileurl, fileName) {
	let downloadElement = document.createElement('a');
	downloadElement.href = fileurl;
	downloadElement.download = fileName; // 下载后文件名
	document.body.appendChild(downloadElement);
	downloadElement.click(); // 点击下载
	document.body.removeChild(downloadElement); // 下载完成移除元素
}


function randomData(length, multiple, fixed) {
	if (!length) {
		length = 1;
	}
	if (!multiple) {
		multiple = 1;
	}
	if (!fixed) {
		fixed = 0;
	}
	if (length == 1) {
		return getOneRandom(multiple, fixed);
	}
	var data = [];
	for (var i = 0; i < length; i++) {
		data[i] = getOneRandom(multiple, fixed);
	}
	return data;
}

function getOneRandom(multiple, fixed) {
	return parseFloat((Math.random() * multiple).toFixed(fixed));
}


function uuid(len, radix) {
	var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
	var uuid = [],
		i;
	radix = radix || chars.length;

	if (len) {
		// Compact form  
		for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
	} else {
		// rfc4122, version 4 form  
		var r;

		// rfc4122 requires these characters  
		uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
		uuid[14] = '4';

		// Fill in random data.  At i==19 set the high bits of clock sequence as  
		// per rfc4122, sec. 4.1.5  
		for (i = 0; i < 36; i++) {
			if (!uuid[i]) {
				r = 0 | Math.random() * 16;
				uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
			}
		}
	}

	return uuid.join('');
}

function uuid_short() {
	return uuid(32);
}
function isObject(obj) {
	return Object.prototype.toString.call(obj) === '[object Object]';
}

function str2JSON(str) {
	if(str == ""|| str == undefined) {
		return null;
	}
	return JSON.parse(str);
}


function getArrDifference(array1, array2) {
 
    var result = [];
    for(var i = 0; i < array2.length; i++){
        var obj = array2[i];
        var num = obj.id;
        var isExist = false;
        for(var j = 0; j < array1.length; j++){
            var aj = array1[j];
            var n = aj.field_id;
            if(n == num){
                isExist = true;
                break;
            }
        }
        if(!isExist){
            result.push(obj);
        }
    }
    return result;
 
}


function groupBy( array , f ) {
    let groups = {};
    array.forEach( function( o ) {
        let group = JSON.stringify( f(o) );
        groups[group] = groups[group] || [];
        groups[group].push( o );
    });
    return Object.keys(groups).map( function( group ) {
        return groups[group];
    });
}
Array.prototype.contains = function (obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}

function dateformatter(date, type){
	if(!type) {
		type = 0;
	}
	if(0 == type) {
		return dateFormatCommon(date);
	}
	
	if(1 == type) {
		return dateFormatEn(date);
	}
	
	if(2 == type) {
		return dateFormatCn(date);
	}
	if(-1 == type) {
		 return new  Date(Date.parse(date.replace(/-/g,   "/")));   
	}
}


function dateFormatCommon(date) {
var nowdate = new Date(date).toLocaleDateString().replace(/\//g, '-')
return nowdate
}

function dateFormatEn(date) {
	var nowdate = new Date(date).toLocaleDateString()
	return nowdate
}

function dateFormatCn(now) {
	y = now.getFullYear(),
	m = ("0" + (now.getMonth() + 1)).slice(-2),
	d = ("0" + now.getDate()).slice(-2);
	return y + "-" + m + "-" + d + " " + now.toTimeString().substr(0, 8);
}

function isAssetTypeAnImage(ext) {
 return [
 'png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff'].
 indexOf(ext.toLowerCase()) !== -1;
}

function logOut() {
	window.top.location.href = "login.html";
	localStorage.removeItem('user');
	localStorage.removeItem('emp');
	localStorage.removeItem('menu');
}
function quotedStr(val) {
	
	return "'" + val + "'";
}

function handleDownload(fileId) {
      var elemIF = document.createElement('iframe')
      elemIF.src = getDownloadFileUrl(fileId);
      elemIF.style.display = 'none'
      document.body.appendChild(elemIF)
}

function getDownloadFileUrl(fileId) {
     return baseUrl + 'file/downloadFile?id=' + fileId;
}

Array.prototype.remove = function(val) { 
	var index = this.indexOf(val); 
	if (index > -1) { 
	this.splice(index, 1); 
	} 
};
/// 项目使用

function addNotice(me, to_id, content, callback) {
	let params = {
		to_id: to_id,
		content: content
	};
	
	let url = "work/push2Msg";
	getUrl(me, url, params, result => {
		if(callback) {
			callback(result);
		}
	})
}