
export const utils =  {
	ColorMain: '#318AFE',
	ColorRed: '#F02C45',
	
	/**
	 * 限制只让输入数字
	 * @param {Object} e
	 */
	isNumber (e) {
		return e.replace(/[^\d]/g, '')
	},
	
	/**
	 * 限制金额输入格式 
	 * @param {Object} e
	 */
	isMoney (e) {
		return e.toString().replace(/[^0-9.]/g, '').replace(/^\./g, "").replace(".", "$#$").replace(/\./g, "").replace("$#$", ".").replace(/^(\-)*(\d+)\.(\d{0,2}).*$/, "$1$2.$3")
	},
	
	/**
	 * 判断菜品使用价格 
	 * @param {Object} e
	 */
	isGoodsPrice(item,user) {
		let isVip = uni.getStorageSync("shopInfo").isMemberPrice&&user.id&&user.isVip
		
		let memberPrice = item.memberPrice ? item.memberPrice : item.price;
		let price = isVip ? memberPrice : item.price;
		price = item.discountSaleAmount  ? item.discountSaleAmount : price
		return price;
	},
	
	inputReg(value,key,regName){
	//判断regList对象是否存在属性 避免报错
	  // utils.hasOwnProperty.call(utils,regName)&&(form[key]=utils[regName](value))
	},

	/**
	 * 金额保留两位小数 
	 * @param {Object} e
	 */
	toFixed (price,item) {
		if( item ){
			if( item.productType == 'weight' || item.type == 'weight'){
				return (Math.floor(price * 100)/100).toFixed(2)
			} else {
				return parseFloat(price).toFixed(2)
			}
		} else {
			return parseFloat(price).toFixed(2)
		}
	},
		
	/**
	 * 金额向下取整 
	 * @param {Object} e
	 */
	formatPrice (e) {
		return (Math.floor(n*100)/100).toFixed(2)
	},
	
	/**
	 * 消息提示框
	 */
	showToast(title, duration = 1.5, extObject) {
		return new Promise((resolve, reject) => {
			uni.showToast(Object.assign({ title: title, icon: 'none', mask: false, duration: (duration * 1000) }, extObject))
			setTimeout(resolve, (duration * 1000));
		})
	},
	
	/**
	 * 保留小数n位，不进行四舍五入
	 * num你传递过来的数字,
	 * decimal你保留的几位,默认保留小数后两位
	 */
	formatDecimal (num, decimal = 2) {
		num = num.toString()
		const index = num.indexOf('.')
		if (index !== -1) {
			num = num.substring(0, decimal + index + 1)
		} else {
			num = num.substring(0)
		}
		//截取后保留两位小数
		return parseFloat(num).toFixed(decimal)
	},
	
	/**
	 * 分转元
	 * amount - 金额   
	 * parseFloat - 是否转换为数字格式， 
	 * 默认String
	 */ 
	cert2Dollar(amount, needParseFloat = false) {
		if (needParseFloat) { // parseFlot
			return formatDecimal(amount / 100)
		}
		return formatDecimal(amount / 100)
	},
	
	/**
	 * @desc 函数防抖
	 * @param func 目标函数
	 * @param wait 延迟执行毫秒数
	 * @param immediate true - 立即执行， false - 延迟执行
	 */
	debounce (func, wait = 1000, immediate = true) {
		let timer;
		return function() {
			let context = this,
				args = arguments;
			if (timer) clearTimeout(timer);
			if (immediate) {
				let callNow = !timer;
				timer = setTimeout(() => {
					timer = null;
				}, wait);
				if (callNow) func.apply(context, args);
			} else {
				timer = setTimeout(() => {
					func.apply(context, args);
				}, wait)
			}
		}
	},
	
	/**
	 * @desc 函数节流
	 * @param func 函数
	 * @param wait 延迟执行毫秒数
	 * @param type 1 使用表时间戳，在时间段开始的时候触发 2 使用表定时器，在时间段结束的时候触发
	 */
	throttle (func, wait = 1000, type = 1) {
		let previous = 0;
		let timeout;
		return function() {
			let context = this;
			let args = arguments;
			if (type === 1) {
				let now = Date.now();
	
				if (now - previous > wait) {
					func.apply(context, args);
					previous = now;
				}
			} else if (type === 2) {
				if (!timeout) {
					timeout = setTimeout(() => {
						timeout = null;
						func.apply(context, args)
					}, wait)
				}
			}
		}
	},
	
	/**
	 * 对象转数组 
	 * @param {Object} e
	 */
	objToArrary (obj) {
		
		if (Object.values(obj) && Array.isArray(Object.values(obj)[0])){
		    // 是数组
			let arr = []
			Object.values(obj).forEach(item=>{
				arr = [...arr,...item]
			})
			return arr
		} else {
		    // 不是数组
			return Object.keys(obj).map(key => obj[key])
		}
		
	},
	
	/**
	 * 获取url链接参数
	 * @param {Object} url
	 * @param {Object} name
	 */
	getQueryString(url, name) {
		var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
		var r = url.substr(1).match(reg)
		if (r != null) {
			return r[2]
		}
		return null;
	},
	
}