import env from "@/http/config/config.js"
/**
 * 判断字符串是否为空
 * @param obj
 * @returns {boolean}
 */

export const isStringEmpty = (obj) => {
	if (typeof obj == "undefined" || obj == null || obj === "") {
		return true;
	} else {
		return false;
	}
}

/**
 * 判断对象、字符串是否为空
 * @param obj
 * @returns {boolean}
 */
export const isObjStringEmpty = (obj) => {
	if (typeof obj == "object" && JSON.stringify(obj) == "{}") {
		return true;
	} else {
		return isStringEmpty(obj);
	}
}

/**
 * 判断字符串是否非空
 * @param obj
 * @returns {boolean}
 */
export const isStringNotEmpty = (obj) => {
	return !isStringEmpty(obj);
}

/**
 * 判断对象、字符串是否非空
 * @param obj
 * @returns {boolean}
 */
export const isObjStringNotEmpty = (obj) => {
	return !isObjStringEmpty(obj);
}

/**
 * 字符串如果为空,转换字符串为null
 * @param obj
 * @returns {boolean}
 */
export const changeStringEmptyToNull = (obj) => {
	if (isStringEmpty(obj)) {
		obj = null;
	}
	return obj;
}

/**
 * 字符串如果为空,转换字符串为""
 * @param obj
 * @returns {boolean}
 */
export const changeStringNullToEmpty = (obj) => {
	if (typeof obj == "undefined" || obj == null) {
		obj = "";
	}
	return obj;
}

/**
 * 字符串如果为空,转换字符串为""
 * @param obj
 * @returns {boolean}
 */
export const stringEndWith = (str) => {
	if (str == null || str == "" || this.length == 0 || str.length > this.length)
		return false;
	if (this.substring(this.length - str.length) == str)
		return true;
	else
		return false;
};


export const formatDate = (shijianchuo) => {
	//shijianchuo是整数,否则要parseInt转换
	function add0(m) {
		return m < 10 ? '0' + m : m
	}
	var time = new Date(shijianchuo);
	var y = time.getFullYear();
	var m = time.getMonth() + 1;
	var d = time.getDate();
	var h = time.getHours();
	var mm = time.getMinutes();
	var s = time.getSeconds();
	return y + '-' + add0(m) + '-' + add0(d) + ' ' + add0(h) + ':' + add0(mm) + ':' + add0(s);
}
/**
 * 格式化时间对象
 * @param {string}  fmt Date对象的格式化格式:如yyyy-MM-dd HH:mm:ss
 * @param {date}  date 需要格式化的时间对象
 * @return {string} 返回格式化后的字符串,如2020-0101 00:00:00
 * */
export const formatDateToStr = function (fmt, date) {
	fmt = fmt.replace("hh", "HH")
	let ret;
	// debugger
	const opt = {
		"y+": date.getFullYear().toString(),
		"M+": (date.getMonth() + 1).toString(),
		"d+": date.getDate().toString(),
		"H+": date.getHours().toString(),
		"m+": date.getMinutes().toString(),
		"s+": date.getSeconds().toString(),
	};
	for (let k in opt) {
		ret = new RegExp(`(${k})`).exec(fmt);
		if (ret) {
			fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"))
		}
	}
	return fmt
}
/**
 * 格式化时间对象
 * @param {string}  str 要转换成时间对象的字符串,如2020-0101 00:00:00
 * @return {date} 转换后的时间对象
 * */
export function formatStrToDate(str) {
	return new Date(Date.parse(str.replace(/-/g, "/")));
}


//数字校验
export const digits = (str, bol) => {
	var regexp = /^[0-9]*$/;

	if (bol) {
		if (regexp.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}
};

//校验只能输入大于0的正整数
export const checkNum0 = (str, bol) => {
	var regexp = /^[1-9]\d*$/;
	if (bol) {
		if (regexp.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}
};

//校验只能输入大于1的正整数
export const checkNum1 = (str) => {
	var regexp = /^[2-9]\d*$/;
	if (bol) {
		if (regexp.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}
};

//校验金额(精确到小数点2位)
export const moneyvalid = (str, bol) => {
	var reg = /^^\d+(\.\d{2})+$/;
	if (bol) {
		if (reg.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (reg.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}
};

//校验只能输入字母
export const english = (str, bol) => {
	var regexp = /^[A-Za-z]+$/;
	if (bol) {
		if (regexp.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}
};

//检验只能输入汉字
export const chinese = (str, bol) => {
	var regexp = /^[\u4e00-\u9fa5]{0,}$/;
	if (bol) {
		if (regexp.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}
};


//校验数字和字母
export const letterOrNumberonly = (str, bol) => {
	var regexp = /^[A-Za-z0-9]+$/;
	if (bol) {
		if (regexp.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}


};

//校验数字、字母及下划线
export const letterOrNumberOrUnderline = (str, bol) => {
	var regexp = /^\w+$/;
	if (bol) {
		if (regexp.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}
	}

};
//邮箱校验
export const email = (str, bol) => {
	var regexp = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
	var regexp2 = /^[A-Za-z0-9._%-]+@([A-Za-z0-9-]+\.)+[A-Za-z]{2,4}$/;
	if (bol) {
		if (regexp.test(str) || regexp2.test(str)) {
			return false;
		}
		return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (regexp.test(str) || regexp2.test(str)) {
				return false;
			}
			return true;
		} else {
			return false
		}

	}

};

//校验手机号码
export const mobile = (str, bol) => {
	var isMobile = /^1(3|4|5|6|7|8|9)\d{9}$/;
	if (bol) {
		if (isMobile.test(str))
			return false
		else
			return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (isMobile.test(str))
				return false
			else
				return true;
		} else {
			return false
		}

	}

};

//校验固定电话
export const phone = (str, bol) => {
	var homeMobile = /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/;
	if (bol) {
		if (homeMobile.test(str))
			return false
		else
			return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (homeMobile.test(str))
				return false
			else
				return true;
		} else {
			return false
		}

	}

};

//校验电话号码
export const mobileOrPhone = (str, bol) => {
	var homeMobile = /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/;
	var isMobile = /^1(3|4|5|6|7|8|9)\d{9}$/;
	if (bol) {
		if (homeMobile.test(str) || isMobile.test(str))
			return false
		else
			return true;
	} else {
		if (typeof str != "undefined" && str.length > 0) {
			if (homeMobile.test(str) || isMobile.test(str))
				return false
			else
				return true;
		} else {
			return false
		}

	}

};

//校验身份证号
export const idcard = (str) => {
	var idcard1 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
	var idcard2 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
	if (idcard1.test(str) || idcard2.test(str))
		return false
	else
		return true;
};

//获取本周
export const getCurrentWeek = (str) => {
	//获取当前时间
	const currentDate = new Date(str)
	//返回date是一周中的某一天
	const week = currentDate.getDay()
	//一天的毫秒数
	const millisecond = 1000 * 60 * 60 * 24
	//减去的天数
	const minusDay = week != 0 ? week - 1 : 6
	//本周 周一
	const monday = new Date(currentDate.getTime() - minusDay * millisecond)
	//本周 周日
	const sunday = new Date(monday.getTime() + 6 * millisecond)
	return [monday, sunday]
};

//获取上一周
export const handleGetPrevWeek = (str) => {
	const Time = new Date(str)
	let weekNum = Time.getDay()
	weekNum = weekNum == 0 ? 7 : weekNum
	let lastDate = new Date(Time.getTime() - weekNum * 24 * 60 * 60 * 1000)
	let fitstDate = new Date(
		Time.getTime() - (weekNum + 6) * 24 * 60 * 60 * 1000
	)
	let startDate =
		`${fitstDate.getFullYear()}-${fitstDate.getMonth() + 1 < 10
			? '0' + (fitstDate.getMonth() + 1)
			: fitstDate.getMonth() + 1
		}-${fitstDate.getDate() < 10
			? '0' + fitstDate.getDate()
			: fitstDate.getDate()
		}`
	let endDate =
		`${lastDate.getFullYear()}-${lastDate.getMonth() + 1 < 10
			? '0' + (lastDate.getMonth() + 1)
			: lastDate.getMonth() + 1
		}-${lastDate.getDate() < 10 ? '0' + lastDate.getDate() : lastDate.getDate()
		}`
	return [startDate, endDate]
};


//获取下一周
export const handleGetNextvWeek = (str) => {
	const Time = new Date(str)
	let weekNum = Time.getDay()
	weekNum = weekNum == 0 ? 7 : weekNum

	let fitstDate = new Date(
		Time.getTime() + (7 - weekNum + 1) * 24 * 60 * 60 * 1000
	)
	let lastDate = new Date(
		Time.getTime() + (7 - weekNum + 7) * 24 * 60 * 60 * 1000
	)
	let startDate =
		`${fitstDate.getFullYear()}-${fitstDate.getMonth() + 1 < 10
			? '0' + (fitstDate.getMonth() + 1)
			: fitstDate.getMonth() + 1
		}-${fitstDate.getDate() < 10
			? '0' + fitstDate.getDate()
			: fitstDate.getDate()
		}`
	let endDate =
		`${lastDate.getFullYear()}-${lastDate.getMonth() + 1 < 10
			? '0' + (lastDate.getMonth() + 1)
			: lastDate.getMonth() + 1
		}-${lastDate.getDate() < 10 ? '0' + lastDate.getDate() : lastDate.getDate()
		}`
	return [startDate, endDate]
}

// url参数解析
export const getUrlkey = (url) => {
	var params = {};
	var urls = url.split("?");
	var arr = urls[1].split("&");
	for (var i = 0, l = arr.length; i < l; i++) {
		var a = arr[i].split("=");
		params[a[0]] = a[1];
	}
	return params;
}

//获取上一个年月
export const getPreMonth = () => {
	var date = new Date();
	var year = date.getFullYear();
	var month = date.getMonth()
	if (month == 0) {
		year = year - 1;
		month = 12;
	}
	month = month <= 9 ? "0" + month : month
	return year + '年' + month + '月'
}

//解决IOS日期显示问题
export const formateIOS = (str, pattern) => {
	var format = str.replace(/\-/g, "/"); //把“-”,替换成‘/’
	var date = new Date(format),
		y = date.getFullYear(),
		m = (date.getMonth() + 1).toString().padStart(2, 0),
		d = date.getDate().toString().padStart(2, 0),
		h = date.getHours().toString().padStart(2, 0),
		mi = date.getMinutes().toString().padStart(2, 0),
		se = date.getSeconds().toString().padStart(2, 0);
	if (pattern == "yyyy.mm.dd") {
		return `${y}.${m}.${d}`;
	} else {
		return y + '-' + m + '-' + d;
	}
}

//小写金额转大写
export const DX = (n) => {
	var newchar = "";
	var Num = n;
	if (Num == "") {
		//输入框删减为空时,将大写金额的内容值设为原始状态,当然也可以根据需求进行修改
		newchar = "零元整";
		return newchar;
	}
	var part = String(Num).split(".");
	for (let i = part[0].length - 1; i >= 0; i--) {
		if (part[0].length > 10) {
			newchar = "位数过大,无法计算"; //前面如果有验证位数的,此处判断可去掉
			return newchar;
		}
		var tmpnewchar = ""
		var perchar = part[0].charAt(i);
		switch (perchar) {
			case "0":
				tmpnewchar = "零" + tmpnewchar;
				break;
			case "1":
				tmpnewchar = "壹" + tmpnewchar;
				break;
			case "2":
				tmpnewchar = "贰" + tmpnewchar;
				break;
			case "3":
				tmpnewchar = "叁" + tmpnewchar;
				break;
			case "4":
				tmpnewchar = "肆" + tmpnewchar;
				break;
			case "5":
				tmpnewchar = "伍" + tmpnewchar;
				break;
			case "6":
				tmpnewchar = "陆" + tmpnewchar;
				break;
			case "7":
				tmpnewchar = "柒" + tmpnewchar;
				break;
			case "8":
				tmpnewchar = "捌" + tmpnewchar;
				break;
			case "9":
				tmpnewchar = "玖" + tmpnewchar;
				break;
		}
		switch (part[0].length - i - 1) {
			case 0:
				tmpnewchar = tmpnewchar + "元";
				break;
			case 1:
				if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
				break;
			case 2:
				if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
				break;
			case 3:
				if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
				break;
			case 4:
				tmpnewchar = tmpnewchar + "万";
				break;
			case 5:
				if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
				break;
			case 6:
				if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
				break;
			case 7:
				if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
				break;
			case 8:
				tmpnewchar = tmpnewchar + "亿";
				break;
			case 9:
				tmpnewchar = tmpnewchar + "拾";
				break;
		}
		newchar = tmpnewchar + newchar;
	}
	if (("" + Num).indexOf(".") != -1) {
		if (part[1].length > 2) {
			part[1] = part[1].substr(0, 2)
		}
		for (i = 0; i < part[1].length; i++) {
			tmpnewchar = ""
			var perchar = part[1].charAt(i)
			switch (perchar) {
				case "0":
					tmpnewchar = "零" + tmpnewchar;
					break;
				case "1":
					tmpnewchar = "壹" + tmpnewchar;
					break;
				case "2":
					tmpnewchar = "贰" + tmpnewchar;
					break;
				case "3":
					tmpnewchar = "叁" + tmpnewchar;
					break;
				case "4":
					tmpnewchar = "肆" + tmpnewchar;
					break;
				case "5":
					tmpnewchar = "伍" + tmpnewchar;
					break;
				case "6":
					tmpnewchar = "陆" + tmpnewchar;
					break;
				case "7":
					tmpnewchar = "柒" + tmpnewchar;
					break;
				case "8":
					tmpnewchar = "捌" + tmpnewchar;
					break;
				case "9":
					tmpnewchar = "玖" + tmpnewchar;
					break;
			}
			if (i == 0) tmpnewchar = tmpnewchar + "角";
			if (i == 1) tmpnewchar = tmpnewchar + "分";
			newchar = newchar + tmpnewchar;
		}
	}
	while (newchar.search("零元") != -1) {
		newchar = newchar.replace("零零", "零");
		newchar = newchar.replace("零亿", "亿");
		newchar = newchar.replace("亿万", "亿");
		newchar = newchar.replace("零万", "万");
		newchar = newchar.replace("零元", "元");
		newchar = newchar.replace("零角", "");
		newchar = newchar.replace("零分", "");
	}
	if (newchar.charAt(newchar.length - 1) == "元" || newchar.charAt(newchar.length - 1) == "角") {
		newchar = newchar + "整";
	}
	return newchar;
}
//计算数组对象某个属性的总和
export const countTotal = (arr, keyName) => {
	let $total = 0;
	$total = arr.reduce(function (total, currentValue, currentIndex, arr) {
		return parseFloat(currentValue[keyName]) ? (total + parseFloat(currentValue[keyName])) : total;
	}, 0);
	return $total;
}

//防抖函数
let timeout = null;
export const debounce = (fn, wait) => {
	if (timeout != null) clearTimeout(timeout)
	timeout = setTimeout(fn, wait)
}


//对象深拷贝
export const deepClone = (obj) => {
	let objClone = Array.isArray(obj) ? [] : {};
	if (obj && typeof obj === "object") {
		for (var key in obj) {
			if (obj.hasOwnProperty(key)) {
				//判断ojb子元素是否为对象,如果是,递归复制
				if (obj[key] && typeof obj[key] === "object") {
					objClone[key] = deepClone(obj[key]);
				} else {
					//如果不是,简单复制
					objClone[key] = obj[key];
				}
			}
		}
	}
	return objClone;
}


//字母大写转小写
export const  strChange = (arg) => {
    var str=arg.split('');
    for(var i = 0; i < str.length; i++) {
        if (str[i].charAt() >= "a" && str[i].charAt() <= "z") {
			//转换成大写
            // str[i] = str[i].toUpperCase();
        } else {
			//转换成小写
            str[i] = str[i].toLowerCase();
        }
    }
    return str.join('');
}

//创建unid
export const createUnid = () => {
	var unid = "";
	const str = "0 1 2 3 4 5 6 7 8 9 A B C D E F"
	var arr = str.split(" ");
	var dateStr = getCurDateStr();
	for (let i = 0; i < 18; i++) {
		unid += arr[Math.round(Math.random() * (arr.length - 1))];
	}
	return dateStr + unid;
}


const getCurDateStr = () => {
	//获取当前时间
	var mydate = new Date();
	var newyear = mydate.getFullYear();
	var newmonth = mydate.getMonth() + 1;
	newmonth = (newmonth < 10 ? "0" + newmonth : newmonth);
	var newDate = mydate.getDate();
	newDate = (newDate < 10 ? "0" + newDate : newDate);
	var hours = mydate.getHours(); //获取当前小时数(0-23)
	hours = (hours < 10 ? "0" + hours : hours);
	var minutes = mydate.getMinutes(); //获取当前分钟数(0-59)
	minutes = (minutes < 10 ? "0" + minutes : minutes);
	var seconds = mydate.getSeconds(); //获取当前秒数(0-59)
	seconds = (seconds < 10 ? "0" + seconds : seconds);
	var datetime = "" + newyear + newmonth + newDate + hours + minutes + seconds;
	return datetime;
}

//获取短信模板消息体 已使用
export const getmestemplate = async (e) => {
	const res = await getSmsTemplate(e)
	return res.data.data
}

//通过字典获取值
export const queryType = async (e) => {
	const res = await queryByType(e)
	return res.data.data[e.dictTypes].map(item => {
		return {
			label: item.dictname,
			value: item.dictvalue,
		}
	});
}


//把年月日时间格式转换成可以识别的时间格式
export const getDateToNum = (date) => {
	let redate = ""
	if (date.indexOf("年") > 1) {
		redate = date.substring(0, date.indexOf("年"))
	}
	if (date.indexOf("月") > 1) {
		redate = redate + "-" + date.substring(date.indexOf("月") - 2, date.indexOf("月"))
	}
	if (date.indexOf("日") > 1) {
		redate = redate + "-" + date.substring(date.indexOf("日") - 2, date.indexOf("日"))
	}
	return redate
}
/**
 * 弹窗提示方法
 * @param {String} msg 提示的消息
 * @param {Function} func 成功后执行的方法
 */
export async function toastFunc(msg = '', func = null) {
	uni.showToast({
		icon: "none",
		title: msg,
		complete() {
			setTimeout(async () => {
				func && await func()
			}, 1000)
		}
	})
}


/**
 * 模态框提示方法
 * @param {String} msg 提示的消息
 * @param {Function} func 点击确定后执行的方法
 */
export function modalFunc(msg = '', func = null, func2 = null) {
	uni.showModal({
		title: '提示',
		content: msg,
		complete(e) {
			if (e.confirm) {
				//点击确定执行的方法
				func && func()
			}else if(e.cancel){
				//点击取消执行的方法
				func2 && func2()
			}
		}
	})
}

// 跳转缺省页面
export function jumpResponseHandle(code, msg) {
	uni.redirectTo({
		url: '/pages/commonview/responceHandle?code=' + code + '&msg=' + msg
	})
}

// 判断日期大小
export function computingDate(startDate, endDate) {
	startDate = new Date(startDate).getTime()
	endDate = new Date(endDate).getTime()
	if (startDate == endDate) {
		return '等于'
	} else if (startDate < endDate) {
		return '小于'
	} else {
		return '大于'
	}
}

//获取本周日期 i传0 返回本周第一天
export function getWeek(i) {
	var now = new Date();
	var firstDay = new Date(now - (now.getDay() - 1) * 86400000);
	firstDay.setDate(firstDay.getDate() + i);
	let mon = Number(firstDay.getMonth()) + 1;
	let day = firstDay.getDate();
	if (mon < 10) {
		mon = '0' + mon
	}
	if (day < 10) {
		day = '0' + day
	}
	return now.getFullYear() + "-" + mon + "-" + day;
}

export function changeNumToHan(num) {
	var arr1 = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
	var arr2 = new Array('', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千', '亿');//可继续追加更高位转换值
	if (!num || isNaN(num)) {
		return "零";
	}
	var english = num.toString().split("")
	var result = "";
	for (var i = 0; i < english.length; i++) {
		var des_i = english.length - 1 - i;//倒序排列设值
		result = arr2[i] + result;
		var arr1_index = english[des_i];
		result = arr1[arr1_index] + result;
	}
	//将【零千、零百】换成【零】 【十零】换成【十】
	result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
	//合并中间多个零为一个零
	result = result.replace(/零+/g, '零');
	//将【零亿】换成【亿】【零万】换成【万】
	result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
	//将【亿万】换成【亿】
	result = result.replace(/亿万/g, '亿');
	//移除末尾的零
	result = result.replace(/零+$/, '')
	//将【零一十】换成【零十】
	//result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十
	//将【一十】换成【十】
	result = result.replace(/^一十/g, '十')
	return result;
}