const u_check = uni.$u.test;
var com = {
	
	/**************uview集成********************************/
	/**
	 * 验证检测
	 * 
	 * @param array || obj || ...     value 需要验证的值(可以是 array || obj || ... )
	 * @param string     type 需要验证的类型(可以是 array || obj || ...)
	 */
	check:function(value,type)
	{
		switch(type) {
			//数组
		     case 'array':
					return u_check.array(value);
		        break;
			//json字符串	
		     case 'json':
					return u_check.jsonString(value);
		        break;
			//object对象
			 case 'object':
					return u_check.object(value);
			    break;	
			//email 邮箱号
		    case 'email':
		    		return u_check.email(value);
		       break;	
			//mobile 手机号
		    case 'mobile':
		    		return u_check.mobile(value);
		       break;
		    //url 地址
		    case 'url':
		    		return u_check.url(value);
		       break;	
			//empty 是否为空
		    case 'empty':
		    		return u_check.isEmpty(value);
		       break;				   
			//注解
			//总的来说，年月日之间可以用"/"或者"-"分隔(不能用中文分隔)，时分秒之间用":"分隔，数值不能超出范围，如月份不能为13，则检验成功，否则失败。						 
			//date 日期时间
			case 'date':
					return u_check.date(value);
			   break;
			//number 是否十进制数值
			case 'number':
					return u_check.number(value);
			   break;  
			//digits 是否整数
			case 'digits':
				 return u_check.digits(value);
			break;   
		    //idCard 是否身份证号
		    case 'id_card':
		    	 return u_check.idCard(value);
		    break;   
			//是否车牌号 (例:京A88888)
			case 'car_no':
				 return u_check.carNo(value);
			break;  
			//amount 金额字符串
			case 'amount':
				 return u_check.amount(value);
			break;
			//zh 是否汉字
			case 'zh':
				 return u_check.chinese(value);
			break;
			//en 是否字母	letter
			case 'en':
				 return u_check.letter(value);
			break;
			//str 是否字母或者数字
			case 'str':
				 return u_check.enOrNum(value);
			break;
			default:
				return false;
		} 
	},
	//是否为空
	isNull:function(value)
	{
		if(value != null || value != 'null')
		{
			return u_check.isEmpty(value);
		}
		else
		{
			return true;
		}
	},
	
	/********************反馈信息****************************************************/
	alert: function(info) {
		uni.showModal({
			title: '提示',
			content: info,
			showCancel: false
		});
	},

	alertDo: function(info, callback) {
		uni.showModal({
			title: '提示',
			content: info,
			showCancel: false,
			success() {
				callback();
			}
		});
	},
	confirm: function(info, callback, title) {
		uni.showModal({
			title: title ? title : '提示',
			content: info,
			success: function(res) {
				if (res.confirm) {
					callback();
				}
			}
		});
	},
	
	// 加载信息，带遮罩
	showLoading: function(title = '', mask = true) {
			uni.showLoading({
				title,
				mask
			});
	}, 
	 
	// 隐藏遮罩
	hideLoading:function () {
			uni.hideLoading();
	}, 
	
	showSuccess: function(info) {
		uni.showToast({
			title: info,
			icon: 'success',
			duration: 3000
		});
	},
	showError: function(info) {
		uni.showToast({
			title: info,
			icon: 'none',
			duration: 3000
		});
	},
	showSuccessDo: function(info, time, callback) {
		uni.showToast({
			title: info,
			icon: 'success',
			duration: time,
			success: function() {
				callback();
			}
		});
	},
	/******************加减乘除****************************************************/
	/**
	 * 加法精度计算
	 * 
	 * @param {Object} number 数字
	 */
	bcadd: function(a, b){
	    var c, d, e;
	    try {
	        c = a.toString().split(".")[1].length
	    } catch(f) {
	        c = 0
	    }
	    try {
	        d = b.toString().split(".")[1].length
	    } catch(f) {
	        d = 0
	    }
	    return e = Math.pow(10, Math.max(c, d)),(this.bcmul(a, e) + this.bcmul(b, e)) / e
	},
	
	/**
	 * 减法精度计算
	 * 
	 * @param {Object} number 数字
	 */
	bcsub: function(a, b){
	    var c, d, e;
	    try {
	        c = a.toString().split(".")[1].length
	    } catch(f) {
	        c = 0
	    }
	    try {
	        d = b.toString().split(".")[1].length
	    } catch(f) {
	        d = 0
	    }
	    return e = Math.pow(10, Math.max(c, d)),(this.bcmul(a, e) - this.bcmul(b, e)) / e
	},
	
	/**
	 * 乘法精度计算
	 * 
	 * @param {Object} number 数字
	 */
	bcmul: function(a, b){
	    var c = 0,
	    d = a.toString(),
	    e = b.toString();
	    try {
	        c += d.split(".")[1].length
	    } catch(f) {}
	    try {
	        c += e.split(".")[1].length
	    } catch(f) {}
	    return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c)
	},
	
	/**
	 * 除法精度计算
	 * 
	 * @param {Object} number 数字
	 */
	bcdiv: function(a, b){
	    var c, d, e = 0,
	    f = 0;
	    try {
	        e = a.toString().split(".")[1].length
	    } catch(g) {}
	    try {
	        f = b.toString().split(".")[1].length
	    } catch(g) {}
	    return c = Number(a.toString().replace(".", "")),d = Number(b.toString().replace(".", "")),this.bcmul(c / d, Math.pow(10, f - e))
	},
	
	/**
	 * 隐藏手机号
	 * @param phone string 数值1
	 */
	hidephone:function (phone){
		var reg = /^(\d{3})\d{4}(\d{4})$/;  
		return phone.replace(reg, "$1****$2")
	},
	
	removeObserver(arr) {
	  return arr.map((item) => {
	    if (Array.isArray(item)) return removeObserver(item)
	    else if (typeof item === 'object') {
	      const target = {}
	      for (let key in item) {
	        if (key !== '__ob__') {
	          target[key] = item[key]
	        }
	      }
	      return target
	    }
	    return item
	  })
	},

}

module.exports = com