Utils工具类

/**
 * 
 * @authors chenshw (chenshw@seaway.net.cn)
 * @date    2017-04-01 11:40:20
 * @version $Id$
 * @description 
 * @update [user] [date] [instruction]
 */
/*
 * 判断obj是否为一个整数
 */
function isInteger(obj) {
    return Math.floor(obj) === obj
}

/*
 * 将一个浮点数转成整数,返回整数和倍数。如 3.14 >> 314,倍数是 100
 * @param floatNum {number} 小数
 * @return {object}
 *   {times:100, num: 314}
 */
function toInteger(floatNum) {
    var ret = { times: 1, num: 0 }
    var isNegative = floatNum < 0
    if (isInteger(floatNum)) {
        ret.num = floatNum
        return ret
    }
    var strfi = floatNum + ''
    var dotPos = strfi.indexOf('.')
    var len = strfi.substr(dotPos + 1).length
    var times = Math.pow(10, len)
    var intNum = parseInt(Math.abs(floatNum) * times + 0.5, 10)
    ret.times = times
    if (isNegative) {
        intNum = -intNum
    }
    ret.num = intNum
    return ret
}

/*
 * 核心方法,实现加减乘除运算,确保不丢失精度
 * 思路:把小数放大为整数(乘),进行算术运算,再缩小为小数(除)
 *
 * @param a {number} 运算数1
 * @param b {number} 运算数2
 * @param digits {number} 精度,保留的小数点数,比如 2, 即保留为两位小数
 * @param op {string} 运算类型,有加减乘除(add/subtract/multiply/divide)
 *
 */
function operation(a, b, digits, op) {
    var o1 = toInteger(a)
    var o2 = toInteger(b)
    var n1 = o1.num
    var n2 = o2.num
    var t1 = o1.times
    var t2 = o2.times
    var max = t1 > t2 ? t1 : t2
    var result = null
    switch (op) {
        case 'add':
            if (t1 === t2) { // 两个小数位数相同
                result = n1 + n2
            } else if (t1 > t2) { // o1 小数位 大于 o2
                result = n1 + n2 * (t1 / t2)
            } else { // o1 小数位 小于 o2
                result = n1 * (t2 / t1) + n2
            }
            return (result / max);
        case 'subtract':
            if (t1 === t2) {
                result = n1 - n2
            } else if (t1 > t2) {
                result = n1 - n2 * (t1 / t2)
            } else {
                result = n1 * (t2 / t1) - n2
            }
            return (result / max);
        case 'multiply':
            result = (n1 * n2) / (t1 * t2)
            return result;
        case 'divide':
            result = (n1 / n2) * (t2 / t1)
            return result;
    }
}

let utils = {}
/**
 * [stringFomat 字符串格式化]
 * @type {Object}
 */
utils.stringFomat = {
    /**
     * [camelcaseToHyphen 驼峰转化成-连接]
     * @param  {[type]} str [驼峰字符串]
     * @return {[type]}     [连接-字符串]
     */
    camelcaseToHyphen(str) {
        return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
    },
    /**
     * [numToCard 转化成卡号]
     * @param  {[type]} string [description]
     * @return {[type]}        [description]
     */
    numToCard(string) {
        return string.replace(/(\d{4})(?=\d)/g, "$1" + " ")
    },
    /**
     * [cardToNum 卡号转化成字符串]
     * @param  {[type]} string [description]
     * @return {[type]}        [description]
     */
    cardToNum(string) {
        return string.replace(/\s/ig, "")
    },
    /**
     * [moneyFormate 金额整数去掉.00]
     * @param  {[type]} string [description]
     * @return {[type]}        [description]
     */
    moneyFormate(string) {
        let oArray = string.split(".");
        if (oArray.length == 2) {
            if (oArray[1] > 0) {
                return string;
            } else {
                return oArray[0];
            }
        }
        return string;
    }

}
/**
 * [dateFormat 时间格式化处理]
 * @type {Object}
 */
utils.dateFormat = {  
    /**
     * [format description]
     * @param  {[Date]} date [需要格式的对象]
     * @param  {[String]} fmt  [例子:yyyy-MM-dd hh:mm:ss 连接上做处理]
     * @return {[String]}      [返回fmt的时间]
     */
    format(date, fmt) {
        let o = {
            "M+": date.getMonth() + 1, //月份
            "d+": date.getDate(), //日
            "h+": date.getHours(), //小时
            "m+": date.getMinutes(), //分
            "s+": date.getSeconds(), //秒
            "q+": Math.floor((date.getMonth() + 3) / 3), //季度
            "S": date.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        }
        for (let 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;
    },
    millisecondToTime(timestamp) {

        var dateDiff = timestamp;//时间毫秒数
        var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
        var leave1=dateDiff%(24*3600*1000)    //计算天数后剩余的毫秒数
        var hours=Math.floor(leave1/(3600*1000))//计算出小时数
        //计算相差分钟数
        var leave2=leave1%(3600*1000)    //计算小时数后剩余的毫秒数
        var minutes=Math.floor(leave2/(60*1000))//计算相差分钟数
        //计算相差秒数
        var leave3=leave2%(60*1000)      //计算分钟数后剩余的毫秒数
        var seconds=Math.round(leave3/1000)

        var timeFn = dayDiff+"天"+hours+"小时"+minutes+"分"+seconds+"秒";
        return timeFn;
    },
    getRecentMonth(){
        //获取最近6个月
        var data=new Date();
        //获取月
        var mon=data.getMonth()+1;
        var arry=new Array();
        for(var i=0;i<6;i++){
            if(mon<=0){
                mon=mon+12;
            }
            if(mon<10){
                mon=mon;
            }
            arry[i]= mon+"月";
            mon=mon-1;
        }
        
        
        return arry.reverse();
    },
    /*日期组件获取今天的日期*/
    getTodayDate() {
        //是否选择今天及其今天以后的日期
        let date = new Date();
        let year = date.getFullYear();
        let month = date.getMonth();
        let day = date.getDate();
        return new Date(year, month, day);
    },
    dateGap30(start, end, day) {
        //日期间隔不超过30天
        var dayTime = day ? day : 30;
        var time = dayTime * 24 * 60 * 60 * 1000,
            gaptime = 0;
        start = start.replace(/-/g, "/");
        end = end.replace(/-/g, "/");
        gaptime = Date.parse(end) - Date.parse(start);
        if (gaptime < 0 || gaptime >= time) {
            return false;
        }
        return true;
    },
    getMonthDate(fmt) {
        let str = "";
        let date = new Date();
        let year = date.getFullYear();
        let month = date.getMonth() + 1;
        let day = date.getDate();
        let startTime = "";
        let endTime = "";
        fmt = fmt ? fmt : "";
        month = month < 10 ? ('0' + month) : month;
        startTime = year + fmt + month + fmt + "01";
        endTime = year + fmt + month + fmt + new Date(year, month, 0).getDate();
        return { "first": startTime, "last": endTime };
    },
    getWeekDate() {
        let startTime = "";
        let Nowdate = new Date();
        let WeekFirstDay = new Date(Nowdate - (Nowdate.getDay() - 1) * 86400000);
        let month = Number(WeekFirstDay.getMonth()) + 1;
        month = month < 10 ? ('0' + month) : month;
        startTime = WeekFirstDay.getFullYear() + "-" + month + "-" + WeekFirstDay.getDate();
        return { "start": startTime, "end": utils.dateFormat.format(Nowdate, "yyyy-MM-dd") };
    },
    /*1417708800000转化成2014-12-05 00:00:00
        date 类型为string*/
    formatDate4(date) {
        return date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2) + " " + date.substr(8, 2) + ":" + date.substr(10, 2) + ":" + date.substr(12, 2);
    },
    /*1417708800000转化成2014-12-05 00:00:00*/
    formatDate3(timestamp, isymd) {
        if (timestamp) {
            var date = new Date(timestamp);
            var y = date.getFullYear();
            var m = date.getMonth() + 1;
            var d = date.getDate();
            var h = date.getHours();
            var mi = date.getMinutes();
            var s = date.getSeconds();
            if (!isymd) { //是否年月日
                return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d) + ' ' + (h < 10 ? ('0' + h) : h) + ':' + (mi < 10 ? ('0' + mi) : mi) + ':' + (s < 10 ? ('0' + s) : s);
            } else {
                return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
            }

        } else
            return;
    },
    //2016-07-22 to Date
    stringToDate(string) {
        var stringObj = string.split("-");
        return new Date(stringObj[0], (parseInt(stringObj[1]) - 1), stringObj[2]);
    },
    /*19201101转换成1970-11-01 或者 19201101121212转换成1970-11-01 12:12:12*/
    dateToString(date) {
        if (date == 0) return "无";
        if (date.indexOf('-') > 0) return date;
        if (date.length == 14) {
            return date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2) + " " + date.substr(8, 2) + ":" + date.substr(10, 2) + ":" + date.substr(12, 2);
        } else {
            return date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2);
        }

    },
    /*19201101转换成1970.11.01 或者 19201101121212转换成1970.11.01 12:12:12*/
    datetimeToString2(date) {
        if (date == 0) return "无";
        if (date.indexOf('-') > 0) return date;
        return date.substr(0, 4) + "." + date.substr(4, 2) + "." + date.substr(6, 2) + " " + date.substr(8, 2) + ":" + date.substr(10, 2);
    },
    datetimeToDay(date,type) {
        if( type == 4){
            if (date) {
                return date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2)+ " " + date.substr(8, 2) + ":" + date.substr(10, 2)+ ":" + date.substr(12, 2);
            }
        }else{
            if (date) {
                return date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2);
            }
        }
        return date;
    },
    datetimeToString(date) {
        date = date + "";
        if (date == 0) return "无";
        if (date.indexOf('-') > 0) return date;
        return date.substr(0, 4) + "." + date.substr(4, 2) + "." + date.substr(6, 2);
    },
    /*192011转换成1970-11*/
    monthToString(date) {
        if (date == 0) return "无";
        if (date.indexOf('-') > 0) return date;
        return date.substr(0, 4) + "-" + date.substr(4, 2);
    },
    /*生成当前的年月*/
    produceDate() {
        let date = new Date();
        let year = date.getFullYear();
        let month = date.getMonth() + 1;
        return year + "年" + month + "月";
    },
    /*192011转换成1970年11月*/
    monthToString2(date) {
        if (date == 0) return "无";
        if (date.indexOf('-') > 0) return date;
        return date.substr(0, 4) + "年" + date.substr(4, 2) + "月";
    },
    /*191441转换成19:14:41*/
    timeToString(time) {
        if (time == 0) return time;
        if (time.indexOf(':') > 0) return time;
        return time.substr(0, 2) + ":" + time.substr(2, 2) + ":" + time.substr(4, 2);
    },
    /*
     *   功能:DateAdd功能.
     *   参数:interval,字符串表达式,表示要添加的时间间隔.
     *   参数:number,数值表达式,表示要添加的时间间隔的个数.
     *   参数:date,时间对象.
     *   返回:新的时间对象.
     *   var now = new Date();
     *   var newDate = DateAdd( "d", 5, now);
     *---------------  DateAdd(interval,number,date)   -----------------
     */
    dateAdd(interval, number, date) {
        switch (interval) {
            case "y":
                {
                    date.setFullYear(date.getFullYear() + number);
                    return date;
                    break;
                }
            case "q":
                {
                    date.setMonth(date.getMonth() + number * 3);
                    return date;
                    break;
                }
            case "M":
                {
                    date.setMonth(date.getMonth() + number);
                    return date;
                    break;
                }
            case "w":
                {
                    date.setDate(date.getDate() + number * 7);
                    return date;
                    break;
                }
            case "d":
                {
                    date.setDate(date.getDate() + number);
                    return date;
                    break;
                }
            case "h":
                {
                    date.setHours(date.getHours() + number);
                    return date;
                    break;
                }
            case "m":
                {
                    date.setMinutes(date.getMinutes() + number);
                    return date;
                    break;
                }
            case "s":
                {
                    date.setSeconds(date.getSeconds() + number);
                    return date;
                    break;
                }
            default:
                {
                    date.setDate(date.getDate() + number);
                    return date;
                    break;
                }
        }
    },
    formatDate6(date) {
        if (date.indexOf('-') < 0) {
            return date.substr(0, 4) + "-" + date.substr(4, 2) + "-" + date.substr(6, 2)
        } else {
            return date
        }
    },
    /**
     * 获取今年到今天
     * @returns 
     */
    getFullYearFirstDay(){
        let today = new Date();
        let year = today.getFullYear();
        let month = today.getMonth() + 1;  // 获取当前月份(注意要加1,月份从0开始)
        let date = today.getDate();  // 获取当前日期
        let todayTime=year + "-" +( month<10?`0${month}`:month )+ "-" + (date<10?`0${date}`:date)
        let firstDay =utils.dateFormat.format(new Date(year + "-01-01"),"yyyy-MM-dd")
        return [firstDay,todayTime]
    }
}
/**
 * [Rmb description 人民币]
 * @type {Object}
 */
utils.Rmb = {
    /**
     * [upDigit 数字金额大写转换(可以处理整数,小数,负数)]
     * @param  {[type]} n [description]
     * @return {[type]}   [description]
     */
    upDigit(n) {
        var fraction = ['角', '分'];
        var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
        var unit = [
            ['元', '万', '亿'],
            ['', '拾', '佰', '仟']
        ];
        var head = n < 0 ? '欠' : '';
        n = Math.abs(n);
        var s = '';
        for (var i = 0; i < fraction.length; i++) {
            s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
        }
        s = s || '整';
        n = Math.floor(n);
        for (var i = 0; i < unit[0].length && n > 0; i++) {
            var p = '';
            for (var j = 0; j < unit[1].length && n > 0; j++) {
                p = digit[n % 10] + unit[1][j] + p;
                n = Math.floor(n / 10);
            }
            s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
        }
        return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
    },
    /**
     * [formatRMB 格式化]
     * @param  {[muber]} money  [传入需要格式化的钱(分为单位)]
     * @param  {[string]} format [thousands:转换千分位,tenthousand:转换万元,空保留小数]
     * @return {[string]}        [返回格式化后的钱]
     */
    formatRMB(money, format) {
        var RMB = null;
        if (isNaN(money)) {
            RMB = 0;
        } else {
            RMB = (Number(money)).toFixed(2); //分转换成元保留两位小数
            switch (format) {
                case "thousands":
                    RMB = (RMB + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
                    break;
                case "tenthousand":
                    RMB = parseInt(RMB) >= 10000 ? (parseInt(RMB) / 10000) + "万" : parseInt(RMB);
                    break;
                default:
                    RMB = RMB;
            }
        }
        return RMB
    },
    /**
     * [rmbYF 计算元与分]
     * @param  {[muber]} money [传入需要格式化的钱]
     * @return {[object]}   RMB     [存取值]
     */
    rmbYF(money) {
        var RMB = {};
        if (isNaN(money)) {
            RMB.YUAN = 0;
            RMB.FEN = "00";
        } else {
            var money = (Number(money) / 100).toFixed(2); //分转换成元保留两位小数
            RMB.YUAN = money.split(".")[0];
            RMB.FEN = money.split(".")[1];
        }
        return RMB
    },
     /**
     * [changeMoney 分转元]
     * @param  {[muber]} money [传入需要转换的钱 单位:分]
     * @return {[object]}   RMB     [转换后]
     */
    changeMoney(num) {
        var regexp = /(?:\.0*|(\.\d+?)0+)$/
        if (num > 1000000) {
            num = JSON.stringify(num).slice(0, JSON.stringify(num).length - 4) / 100
            return num + '万'
        } else {
            num = (num / 100).toFixed(2)
            num = num.replace(regexp, '$1')
            return num
        }
    },
    
     /**
     * [regYuanToFen 元转分]
     * @param  {[yuan]} yuan [传入需要转换的钱 单位:元]
     * @param  {[digit]} digit [转换倍数]
     * @return {[object]}   RMB     [转换后 单位:分]
     */
     regYuanToFen(yuan,digit){
        var m=0,
            s1=yuan.toString(),
            s2=digit.toString();
        try{m+=s1.split(".")[1].length}catch(e){}
        try{m+=s2.split(".")[1].length}catch(e){}
        return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
    }
};

/**
 * [Input 输入替换]
 * @type {Object}
 */
utils.Input = {

    clearNoPriceMax6(obj) {

        obj.value = obj.value.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        obj.value = obj.value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        obj.value = obj.value.replace(/^\./g, ""); //验证第一个字符是数字而不是
        obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        obj.value = obj.value.replace(/^(\d+)\.(\d\d).*$/, '$1.$2'); //保留两位小数

        var _reg = /^(.){0,6}$/;
        if (!_reg.test(obj.value)) {
            obj.value = obj.value.substr(0, 6);
            return;
        }
    },
    faceDecimal: function(str) {
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/^(\d\d\d\d)(\d+).*$/, '$1');
        str = str.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        str = str.replace(/^(\d{1,4})\.(\d\d).*$/, '$1.$2');
        return str;
    },
    clearNoPriceMax11(obj) {

        obj.value = obj.value.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        obj.value = obj.value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        obj.value = obj.value.replace(/^\./g, ""); //验证第一个字符是数字而不是
        obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        obj.value = obj.value.replace(/^(\d+)\.(\d\d).*$/, '$1.$2'); //保留两位小数

        var _reg = /^(.){0,11}$/;
        if (!_reg.test(obj.value)) {
            obj.value = obj.value.substr(0, 11);
            return;
        }
    },
    clearNoPriceMax10(obj) {
        // console.log(obj.validity.badInput);
        // if(!obj.value){
        //     return;
        // }
        // console.log(obj.value);
        obj.value = obj.value.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        obj.value = obj.value.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        obj.value = obj.value.replace(/^\./g, ""); //验证第一个字符是数字而不是
        obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        obj.value = obj.value.replace(/^(\d+)\.(\d\d).*$/, '$1.$2'); //保留两位小数

        var _reg = /^(.){0,10}$/;
        if (!_reg.test(obj.value)) {
            obj.value = obj.value.substr(0, 10);
            return;
        }
    },
    /**
      * [clearNoPrice 整数可9位,小数点可6位]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearNoPrice2(str) {
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/^(\d\d\d\d\d\d\d\d\d)(\d+).*$/, '$1');
        str = str.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        str = str.replace(/^(\d+)\.(\d\d\d\d\d\d).*$/, '$1.$2');//保留后6位小数
        return str;
    },
     
    /**
     * [clearNoPrice 小数点两位]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearNoPrice(str) {
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        str = str.replace(/^(\d+)\.(\d\d).*$/, '$1.$2'); //保留两位小数 
        return str;
    },
    /**
     * [clearNoPrice 小数点后n位]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearPrice(str, n,len) {
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        if (len && str.length==9  && str.substr(str.length - 1, 1)=='.') {
            str=str.substr(0, str.length - 1)
        }
        if (n == 1) {
            str = str.replace(/^(\d+)\.(\d).*$/, '$1.$2'); //保留一个位小数 
        } else if (n == 2) {
            str = str.replace(/^(\d+)\.(\d\d).*$/, '$1.$2'); //保留两位小数 
        } else if (n == 3) {
            str = str.replace(/^(\d+)\.(\d\d\d).*$/, '$1.$2'); //保留三位小数 
        }

        return str;
    },
    /**
     * [clearSpace description]
     * @param  {[type]} obj [description]
     * @return {[type]}     [description]
     */
    clearSpace(obj) {
        obj.value = obj.value.replace(/\s/g, "") //清楚空格
    },
    /**
     * [clearNoInt 非0整数]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearNoInt(str) {
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/\D/g, '');
        return str;
    },
    /**
     * [clearNoChinese 只能输入英文字母和数字,不能输入中文]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearNoChinese(obj) {
        obj.value = obj.value.replace(/[^\w\.\/]/ig, '')
    },
    /**
     * [clearNoInt 整数]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearNoInteger(str,num) {
        str = str.replace(/\D/g, '');
        if (num && str.length>6) {
            str=str.substring(0, 6);
        }
        return str;
    },
    /**
     * [clearNoInt 整数]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearNoInteger2(str) {
        str = str.replace(/[0]/g, '');
        str = str.replace(/\D/g, '');
        return str;
    },
    /**
     * [clearNoInt 只能输入字母和汉字]
     */
    clearNoLetterChinese(str) {
        str = str.replace(/[^\a-\z\A-\Z\u4E00-\u9FA5]/g, '');
        return str;
    },
    /**
     * [clearNoInt 只能输入字母和汉字和·]
     */
    clearNoLetterChineseDot(str) {
        str = str.replace(/[^\a-\z\A-\Z\u4E00-\u9FA5\·]/g, '');
        return str;
    },
    /**
     * [clearNoInt 只能输入字母,汉字和数字]
     */
    clearNoLetterChineseNumber(str) {
        str = str.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g, '');
        return str;
    },
    /**
     * [clearNoInt 只能输入字母和数字]
     */
    clearNOEN(str) {
        str = str.replace(/[^\a-\z\A-\Z0-9]/g, '');
        return str;
    },
    // /**
    //  * [clearNoInt 只能输入字母,汉字和数字]
    //  */
    // clearNoLetterChineseNumber(obj) {
    //     obj.value = obj.value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g, '')
    // },
    /**
     * [clearNoInt 不能输入汉字]
     */
    clearChinese(obj) {
        obj = obj.replace(/[\u4E00-\u9FA5]/g, '')
        return obj;
    },
    /**
     * [clearDiscount 只能输入0.1~9.9]
     */
    clearDiscount(str) {
        //折扣:只能输入0.1~9.9
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/^(\d\d)(\d+).*$/, '$1');
        str = str.replace(/\.{1,}/g, "."); //只保留第一个. 清除多余的
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        str = str.replace(/^(\d{1,2})\.(\d\d).*$/, '$1.$2');
        if (parseFloat(str) > 10 && str.indexOf(".") == -1) {
            str = str.substring(0, 1);
        } else if (parseFloat(str) > 10 && str.indexOf(".") != -1) {
            str = str.substring(0, 3);
        }
        return str;
    },
    /**
     * [clearNoDiscount 只能输入0.1~99.999]
     */
    clearNoDiscount2(str) {
        //折扣:只能输入0.1~99.999
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/^(\d\d)(\d+).*$/, '$1');
        str = str.replace(/\.{1,}/g, "."); //只保留第一个. 清除多余的
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        str = str.replace(/^(\d{1,2})\.(\d{3}).*$/, '$1.$2');
        if (parseFloat(str) >= 100 && str.indexOf(".") == -1) {
            str = str.substring(0, 2);
        } else if (parseFloat(str) >= 100 && str.indexOf(".") != -1) {
            str = str.substring(0, 4);
        } else if (str == '0.000') {
            str = str.substring(0, 3);
        }
        return str;
    },
      /**
    * [clearNoDiscount 只能输入0.1~9.9]
    */
   clearNoDiscount(str) {
    //折扣:只能输入0.1~9.9
    str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
    str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
    str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
    str = str.replace(/^(\d\d)(\d+).*$/, '$1');
    str = str.replace(/\.{1,}/g, "."); //只保留第一个. 清除多余的
    str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
    str = str.replace(/^(\d{1,2})\.(\d{2}).*$/, '$1.$2');
    if (parseFloat(str) >= 1 && str.indexOf(".") == -1) {
        str = str.substring(0, 1);
    } else if (parseFloat(str) >= 1 && str.indexOf(".") != -1) {
        str = str.substring(0, 4);
    } else if (str == '0.0') {
        str = str.substring(0, 2);
    }
    return str;
    },
    /**
    * [clearNoDiscount 只能输入0~0.99]
    */
   clearNoDiscount3(str) {
        console.log(str);
       str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
       str = str.replace(/^[1-9]/g, ""); //清除1-9开始的非小数的字符
       str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
       str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
       str = str.replace(/^(\d\d)(\d+).*$/, '$1');
       str = str.replace(/\.{1,}/g, "."); //只保留第一个. 清除多余的
       str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
       str = str.replace(/^(\d{1,2})\.(\d{2}).*$/, '$1.$2');
       if (parseFloat(str) >= 1 && str.indexOf(".") == -1) {
           str = str.substring(0, 1);
       } else if (parseFloat(str) >= 1 && str.indexOf(".") != -1) {
           str = str.substring(0, 4);
       } else if (str == '0.00') {
           str = str.substring(0, 3);
       }
       return str;
   },
    clearAmount: function(str) {
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/^(\d\d\d\d\d\d)(\d+).*$/, '$1');
        str = str.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
        str = str.replace(/^(\d{1,6})\.(\d\d).*$/, '$1.$2');
        return str;
    },
    /**
     * 清除非数字 9整数 6位小数
     * @param {*} str 
     * @returns 
     */
    clearNotNum: function(str) {
        str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
        str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
        str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
        str = str.replace(/^(\d{9,})(\d+).*$/, '$1');   //保留9位整数
        str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");//只保留第一个. 清除多余的
        str = str.replace(/^(\d+)\.(\d{1,6}).*$/, '$1.$2');  //9整数 6位小数
        return str;
    },
    /**
    * [clearNoPrice 整数前面最多6位,小数点两位]
    * @param  {[Object]} obj [输入对象]
    * @return {[type]}     [description]
    */
   clearFourAmount: function(str) {
       str = str.replace(/^[0][0-9]/g, "") //清楚以0开始的非小数的字符
       str = str.replace(/[^\d.]/g, ""); //清除"数字"和"."以外的字符
       str = str.replace(/^\./g, ""); //验证第一个字符是数字而不是
       str = str.replace(/^(\d\d\d\d\d\d)(\d+).*$/, '$1');
       str = str.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
       str = str.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
       str = str.replace(/^(\d{1,6})\.(\d\d).*$/, '$1.$2');
       return str;
   },
    /**
     * [clearMatchIdNo 数字和Xx]
     * @param  {[Object]} obj [输入对象]
     * @return {[type]}     [description]
     */
    clearMatchIdNo(str) {
        str = str.replace(/[^0-9xX]/g, '');
        return str;
    },
    /*
        输入包含中文的字符串,进行长度为 maxlength 的限制
    */
    clearTextMaxlength({
        str,
        maxLength
    }){
        if(!str || !maxLength) {
            console.log("clearTextMaxlength, 数据有误,停止执行")
            return
        }
        let split = str.split("");
        let res = str;
        const map = split.map((s, i) => (str.charCodeAt(i) >= 0 && str.charCodeAt(i) <= 128) ? 1 : 2);
        // 这里设置想要限制的长度 
        let n = 0;
        const charLength = map.length > 0 && map.reduce((accumulator, currentValue, index) => {
            if (accumulator === maxLength || accumulator === maxLength - 1) {
                n = index;
            }
            return accumulator + currentValue;
        });
        if (charLength > maxLength) {
            res = split.slice(0, n).join('');
        }
        console.log("res ==========", res)
        return res;
    }
}
/**
 * [valid 验证类]
 * @type {Object}
 */
utils.Valid = {
    /**
     *  经纬度
     * @param {*} val 
     * @returns 
     */
    isLongitude(val) { 
        return /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/.test(val);
    },
    /**
     * 经纬度
     * @param {*} val 
     * @returns 
     */
    isLatitude(val) { 
        return /^(\-|\+)?([0-8]?\d{1}\.\d{0,6}|90\.0{0,6}|[0-8]?\d{1}|90)$/.test(val);
    },
    /**
     * [isNum 是否位数字]
     * @param  {[string]}  num [description]
     * @return {Boolean}     [description]
     */
    isNum(num) { //# 是否为数
        return !isNaN(num);
    },
    /**
     * [isEmail description]
     * @param  {[type]}  mail [description]
     * @return {Boolean}      [description]
     */
    isEmail(mail) { //# 是否为 邮箱
        return /^([a-z0-9]+[_\-\.]?)*[a-z0-9]+@([a-z0-9]+[_\-\.]?)*[a-z0-9]+\.[a-z]{2,5}$/i.test(mail);
    },
    /**
     * [isFloat 浮点数]
     * @param  {[type]}  num [description]
     * @return {Boolean}     [description]
     */
    isFloat(num) { //# 是否为 浮点数
        return /^(([1-9]\d*)|(\d+\.\d+)|0)$/.test(num);
    },
    /**
     * [isInt 正整数]
     * @param  {[type]}  num [description]
     * @return {Boolean}     [description]
     */
    isInt(num) { //# 是否为 正整数
        return /^[1-9]\d*$/.test(num);
    },
    /**
     * [isLicitDeciaml 是否是合法的数字]
     * @param  {[type]}  num [description]
     * @return {Boolean}     [description]
     */
    isLicitDeciaml(amount) {
        if (amount > 0 && /^\d+(\.\d{1,2})?$/.test(amount)) {
            return true;
        } else {
            return false;
        }
    },
    /**
     * [isChinese 是否全为汉字]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isChinese(str) { //# 是否全为 汉字
        return /^([\u4E00-\u9FA5]|[\uFE30-\uFFA0])+$/gi.test(str);
    },
    /**
     * [isChinese 是含有汉字]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isIncludeChinese(str) { //# 是含有汉字
        return /([\u4e00-\u9fa5]|[\ufe30-\uffa0])/.test(str);
    },
    /**
     * [isChinese 是否金额]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isAmount(str) {
        if (str == "0" || str == "0." || str == "0.0" || str == "0.00") {
            return false;
        }
        return /^([1-9][\d]{0,}|0)(\.[\d]{1,2})?$/gi.test(str);
    },
    /**
     * [isChinese 是否金额]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isAmount3(str) {
        if (str == "0." || str == "0.0" || str == "0.00") {
            return false;
        }
        return /^([1-9][\d]{0,}|0)(\.[\d]{1,3})?$/gi.test(str);
    },
    
    /**
     * [isChinese 是否金额]
     * @param  {[type]}  str [//按% 1位小数点; ]
     * @return {Boolean}     [description]
     */
    isAmount2(str) {
        if (str == "0" || str == "0." || str == "0.0" || str == "0.00") {
            return false;
        }
        return /^([1-9][\d]{0,}|0)(\.[\d]{0,1})?$/.test(str);
    },
    isTimeSpinner(start, end) {
        var t1 = parseInt(start.replace(/:/g, ""));
        var t2 = parseInt(end.replace(/:/g, ""));
        return t1 >= t2;
    },
    isLateDay(start, end) {
        //晚一天比较字符串
        start = utils.dateFormat.dateAdd("d", 1, new Date(start));
        return start <= new Date(end);
    },
    /**
     * [isChinese 是否为中文名称]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isChineseName(str) {
        return /^([\u4E00-\u9FA5]|[\uFE30-\uFFA0]{2,5})+([·|•]([\u4E00-\u9FA5]|[\uFE30-\uFFA0]){2,5})*$/gi.test(str);
    },
    /**
     * [isBankAccount 是否为银行账号]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isBankAccount(str) {
        return /^\d{8,32}$/gi.test(str);
    },
    /**
     * [isCEN  是否为中文数字英文符号]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isCENP(str) {
        return /^[\,\。\!\?\:\,\.\!\?\:\·\¥\%\u4E00-\u9FA5A-Za-z0-9_]+$/gi.test(str);
    },
    /**
     * [isCEN  是否为中文数字英文]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isCEN(str) {
        return /^[\u4E00-\u9FA5A-Za-z0-9_]+$/gi.test(str);
    },
    /**
     * [isCEN  是否为数字英文]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isEN(str) {
        return /^[A-Za-z0-9]+$/gi.test(str);
    },
    /**
     * [isCEN  是否为中文英文]
     * @param  {[type]}  str [description]
     * @return {Boolean}     [description]
     */
    isCE(str) {
        return /^[\u4E00-\u9FA5A-Za-z_]+$/gi.test(str);
    },
       //
    /**
     * [isIdCard 身份证验证]
     * @param {[type]} gets [description]  string 类型传递
     * @return {Boolean}     [description]
     */
     isIdCard(gets) {
        if (typeof gets == 'number') {
            gets=gets.toString();
        }
        var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子;
        var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 身份证验证位值,10代表X;
        if (gets.length == 15) {
            return isValidityBrithBy15IdCard(gets);
        } else if (gets.length == 18) {
            var a_idCard = gets.split(""); // 得到身份证数组
            if (isValidityBrithBy18IdCard(gets) && isTrueValidateCodeBy18IdCard(a_idCard)) {
                return true;
            }
            return false;
        }
        return false;

        function isTrueValidateCodeBy18IdCard(a_idCard) {
            var sum = 0; // 声明加权求和变量
            if (a_idCard[17].toLowerCase() == 'x') {
                a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作
            }
            for (var i = 0; i < 17; i++) {
                sum += Wi[i] * a_idCard[i]; // 加权求和
            }
            var valCodePosition = sum % 11; // 得到验证码所位置
            if (a_idCard[17] == ValideCode[valCodePosition]) {
                return true;
            }
            return false;
        }

        function isValidityBrithBy18IdCard(idCard18) {
            var year = idCard18.substring(6, 10);
            var month = idCard18.substring(10, 12);
            var day = idCard18.substring(12, 14);
            var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
            // 这里用getFullYear()获取年份,避免千年虫问题
            if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
                return false;
            }
            return true;
        }

        function isValidityBrithBy15IdCard(idCard15) {
            var year = idCard15.substring(6, 8);
            var month = idCard15.substring(8, 10);
            var day = idCard15.substring(10, 12);
            var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
            // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
            if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
                return false;
            }
            return true;
        }
    },
    /**
     * [isMobile  手机验证]
     * @param  {[type]} gets [description]
     * @return {[type]}      [description]
     */
    isMobile(gets) {
        return /^1[3-9][0-9]{9}$/.test(gets);
    },
    
    /**
     * [httpUrl  网址]
     * @param  {[type]} gets [description]
     * @return {[type]}      [description]
     */
     httpUrl(gets) {
        return /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/.test(gets);
    },
    /**
     * [isTel 验证座机]
     * @param  {[type]}  tel [description]
     * @return {Boolean}     [description]
     */
    isTel(tel) { //# 是否为 验证座机
        return /^\d{3,4}-\d{7,8}(-\d{1,6})?$/.test(tel);
    },
    //   /**
    //  * [isMobile  手机验证]
    //  * @param  {[type]} gets [description]
    //  * @return {[type]}      [description]
    //  */
    // isMobile(gets) {
    //     return /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(gets);
    // },
    /**
     * [isCustomerTel 验证客服电话]
     * @param  {[type]}  tel [description]
     * @return {Boolean}     [description]
     */
    isCustomerTel(tel) { //# 是否为 客服电话
        return /^[0-9\-]+$/.test(tel);
    },
    /**
     * [merchantCredentialNumber  商户资质证件类型(营业执照编码;统一社会信用代码;组织机构代码证;经营许可证;税务登记证;其他)
     * @param  {[val]}  val [description] 传递值
     * @return {type}   类型  [description] 营业执照编码;统一社会信用代码;组织机构代码证;经营许可证;税务登记证;其他
     */
    isCredentialNumber(val,type) { 
        if (type=='营业执照编码') {//营业执照15位数字 或18位(由18数字或大写英文字母(不使用I、O、Z、S、V)组成,(同 统一社会信用代码)
           
            //注:标准的18位营业执照应为()/^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/
            //此地此需求为产品要求(?![0-9]+$)(?![A-HJ-NPQRTUWXY]+$)
            return /^([0-9A-HJ-NPQRTUWXY]{18}|[0-9]{15})$/.test(val);

        }else  if(type=='统一社会信用代码'){
            //统一社会信用代码为由18位数字或大写英文字母(不使用I、O、Z、S、V)组成 => 20240416弃用
            // return /^([0-9A-HJ-NPQRTUWXY]{18})$/.test(val);
            return /^(([0-9A-Za-z]{15})|([0-9A-Za-z]{18})|([0-9A-Za-z]{20}))$/.test(val);

        }else  if(type=='组织机构代码证'){//组织机构代码证为9位长度 数字与大写英文字母

            return /^(([0-9A-Z-]{9})|([0-9A-Z-]{10}))$/.test(val);

        }else  if(type=='经营许可证'){//经营许可证为16位、以JY标识后加14位数字

            return /^([JY]{2}\d{14})$/.test(val);

        }else  if(type=='税务登记证'){//税务登记证为15位数字和大写的英文字母

            return /^([0-9A-Z]{15})$/.test(val);
        }else{  //其他
            return true;
        }
    },

    /**
     * [isDiscount 验证折扣金额]
     * @param  {[type]}  text [description]
     * @return {Boolean}     [description]
     */
    isDiscount(price) { //# 是否为 折扣金额
        if (price == "0" || price == "0." || price == "0.0" || price == "0.00" || /^[1-9]\d?\.$/.test(price)) {
            return false;
        }
        if (parseFloat(price) > 10.00) {
            return false;
        }
        return true;
    },
    /**
     * [isPrice校验价格和金额的方法]
     * @param  {[type]}  price [description]
     * @return {Boolean}       [description]
     */
    isPrice(price) {
        if (price == "0" || price == "0." || price == "0.0" || price == "0.00") {
            price = "0";
            return true;
        } else {
            var index = price.indexOf("0");
            var length = price.length;
            if (index == 0 && length > 1) { /*0开头的数字串*/
                var reg = /^[0]{1}[.]{1}[0-9]{1,2}$/;
                if (!reg.test(price)) {
                    return false;
                } else {
                    return true;
                }
            } else { /*非0开头的数字*/
                var reg = /^[1-9]{1}[0-9]{0,10}[.]{0,1}[0-9]{0,2}$/;
                if (!reg.test(price)) {
                    return false;
                } else {
                    return true;
                }
            }
            return false;
        }
    },
    /**
     * [isPlateNumber 车牌号验证]
     * @param  {[type]} gets [description]
     * @return {[Boolean]}      [description]
     */
    isPlateNumber(gets) {
        var re = /^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{5}$/; //车牌号
        if (gets.search(re) == -1) {
            return false;
        } else {
            return true;
        }
    },
    /**
     * [isName 姓名验证]
     * @param  {[type]} gets [description]
     * @return {[Boolean]}      [description]
     */
    isName(gets) {
        return /[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*/.test(gets);
    },
    /**
     * [passCheck 密码验证]
     * @param  {[type]} gets [description]
     * @return {[Boolean]}      [description]
     */
    passCheck(gets) {
        var number = 0,
            letter = 0,
            other = 0,
            regs = /^([a-zA-Z0-9!\$&'\(\)\*\+,.;:}{\/\=-@%^#~]){8,20}$/;
        for (var i = gets.length - 1; i >= 0; i--) {
            var charater = gets.charCodeAt(i);
            if (charater >= 48 && charater <= 57) {
                //统计数字
                number++;
            } else if ((charater >= 65 && charater <= 90) || (charater >= 97 && charater <= 122)) {
                //统计字母
                letter++;
            } else {
                other++;
            }
        }
        console.log(11)
        if (number >= 1 && letter >= 1 && regs.test(gets)) {
            //密码格式为8-20位数字和字母组合
            return true;
        }
        return false;
        //return /^\d[a-zA-Z][!\$&'\(\)\*\+,.;:}{\/\=-@#~]$/; 
    },
    /**
     * [contrastDate 时间对比]
     * @param  {["YYYY--MM-DD"]} a [第一个日期]
     * @param  {["YYYY--MM-DD"]} b [第二个日期]
     * @param  {[int]} number [间隔日期天]
     * @return {[Boolean]}   [如果第一个大于第二 false  反之 true]
     */
    contrastDate(a, b, number) {
        var num = number ? number : 0;
        var arr = a.split("-");
        var startTime = new Date(arr[0], arr[1] - 1, arr[2]);
        var startTimes = startTime.getTime();
        var arrs = b.split("-");
        var endTime = new Date(arrs[0], arrs[1] - 1, arrs[2]);
        var endTimes = endTime.getTime();
        if (num != 0) {
            var datenum = num * 24 * 60 * 60 * 1000;
            if (startTimes + datenum >= endTimes) {
                return true;
            } else {
                return false;
            }
        } else {
            if (startTimes <= endTimes) {
                return true;
            } else {
                return false;
            }
        }
    },
    /**
     * [contrastDate 时间对比大小,起始时间不得小于结束时间]
     * @param  {["YYYY--MM-DD"]} a [第一个日期]
     * @param  {["YYYY--MM-DD"]} b [第二个日期]
     * @return {[Boolean]}   [如果第一个大于第二 false  反之 true]
     */
    contrastDateSize(a, b) {
        var arr = a.split("-");
        var startTime = new Date(arr[0], arr[1] - 1, arr[2]);
        var startTimes = startTime.getTime();
        var arrs = b.split("-");
        var endTime = new Date(arrs[0], arrs[1] - 1, arrs[2]);
        var endTimes = endTime.getTime();
        if (startTimes <= endTimes) {
            return true;
        } else {
            return false;
        }
    },
};
/**
 * [Desensitize 脱敏类]
 * @type {Object}
 */
utils.Desensitize = {
    /**
     * [手机号]
     * @param  {[string]}  val [description]
     * @return {Boolean}     [description]
     */
    desensitizationPhone(val) { 
        if (val) {
            return val.replace(/^(.{3})(?:\d+)(.{4})$/, "$1 **** $2");
        }
        return val;
    },
   
    /**
     * [desensitizationID 身份证]
     * @param  {[type]} gets [description]
     * @return {[Boolean]}      [description]
     */
     desensitizationID(val) { 
        if (val) {
            return  val.replace(/^(.{6})(?:\d+)(.{2})$/, "$1 **** $2"); 
        }
        return val;
    },
    /**
     * [desensitizationCard 卡号脱敏]
     * @param  {[type]} gets [description]
     * @return {[Boolean]}      [description]
     */
     desensitizationCard(val,len) { 
        if (val) {
            if (len) {  
                let valStr=val.toString()
                return  '*'+valStr.substring(valStr.length-4,valStr.length) //只留后四位
            }else{
                return  val.replace(/^(.{4})(?:\d+)(.{4})$/, "$1 *********** $2"); 
            }
        }
        return val;
    },
    /**
     * [姓名]
     * @param  {[string]}  val [description]
     * @return {Boolean}     [description]
     */
     desensitizationName(val) { 
        if (val) {
            return '*'+val.substring(val.length-1,val.length) //截取name 字符串截取最后一个字符,
        }
        return val;
    },
}
// deepCopy
utils.deepCopyArray = function(data) {
    let o = [];
    for (let i = 0; i < data.length; i++) {
        o.push(data[i]);
    }
    return o;
}

// deepCopy
utils.deepCopyArray2 = function(data) {
    let o = [];
    for (let i = 0; i < data.length; i++) {
        let newobj = {};
        for (var j in data[i]) {
            newobj[j] = data[i][j];
        }
        o.push(newobj);
    }
    return o;
}

// deepCopy
utils.deepCopyArray3 = function(odata) {
    var o = {};
    for (var key in odata) {
        o[key] = [];
        for (let m = 0; m < odata[key].length; m++) {
            let item = {};
            for (let n in odata[key][m]) {
                item[n] = odata[key][m][n];
            }
            o[key].push(item);
        }
    }
    return o;
}

// deepCopyParam-过滤没有值的参数
utils.deepCopyParam = function(data) {
    let o = [];
    for (let i = 0; i < data.length; i++) {
        data[i] && o.push(data[i]);
    }
    return o;
}

// shallowCopyObject
utils.shallowCopyObject = function(option) {
    let o = {};
    for (var i in option) {
        o[i] = option[i];
    }
    return o;
}

// shallowCopyObject
utils.shallowCopyObject2 = function(data, option) {
    let o = {};
    for (var i in data) {
        o[i] = option[i];
    }
    return o;
}


// deepCopy
utils.deepCopyObject = function(option, data) {
    for (var i in option) {
        if (data[i]) {
            if (i == 'areaId') {
                option[i] = data['publicAreaId'];
            } else if (i == 'cityId') {
                option[i] = data['publicCityId'];
            } else {
                option[i] = data[i];
            }
        }
    }
    return option;
}
// deepCopy-简单赋值对象
utils.simpleCopyObject = function(data) {
    var option = {};
    for (var i in data) {
        if (i == 'sellerInvoiceClientList' || i == 'sellerTaxItemsList') {
            option[i] = [];
            for (let m = 0; m < data[i].length; m++) {
                let item = {};
                for (let n in data[i][m]) {
                    item[n] = data[i][m][n];
                }
                option[i].push(item);
            }
        } else {
            option[i] = data[i];
        }
    }
    return option;
}
// 增值业务判断
utils.addServices = function(datas) {
    var result = {
            errors: "",
            msg: "",
        },
        todayTime = "";

    if (datas.state == 0) {
        todayTime = utils.dateFormat.format(new Date(), "hh:mm");
        if (datas.specialStartTime && datas.specialEndTime) {
            if (datas.specialStartTime <= todayTime && todayTime <= datas.specialEndTime) {
                //通过
                result.errors = 'VAS000';
                result.msg = "通过";

            } else {
                //不在服务时间
                result.errors = 'VAS002';
                result.msg = "抱歉,服务时间为" + datas.specialStartTime + "—" + datas.specialEndTime;
            }
        } else {
            //通过
            result.errors = 'VAS000';
            result.msg = "通过";
        }
    } else if (datas.state == 1) {
        //维护中
        result.errors = 'VAS003';
        result.msg = '系统维护中,给您带来不便,请谅解';
    }
    return result;
}
// 加减乘除的四个接口
utils.floatObj = {
    add: function(a, b, digits) {
        return operation(a, b, digits, 'add')
    },
    subtract: function(a, b, digits) {
        return operation(a, b, digits, 'subtract')
    },
    multiply: function(a, b, digits) {
        return operation(a, b, digits, 'multiply')
    },
    divide: function(a, b, digits) {
        return operation(a, b, digits, 'divide')
    }
}


//计算距离(进行经纬度转换为距离的计算),参数分别为第一点的纬度,经度;第二点的纬度,经度
utils.getDistance = function(lat1, lng1, lat2, lng2) {
    function Rad(d) {
        return d * Math.PI / 180.0; //经纬度转换成三角函数中度分表形式。
    }
    var radLat1 = Rad(lat1);
    var radLat2 = Rad(lat2);
    var a = radLat1 - radLat2;
    var b = Rad(lng1) - Rad(lng2);
    var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
        Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    s = s * 6378.137; // EARTH_RADIUS;
    //s = Math.round(s * 1000); //输出为米
    // s = Math.round(s * 1000) / 1000; //输出为千米
    s = s * 1000;
    return s;
}

//组合省市区的数据
utils.combineAddress = function(odata) {
    let provinceList = [],
        cityObj = {},
        areaObj = {};

    for (let i = 0; i < odata.length; i++) {
        let nCity = [];
        provinceList.push({ "text": odata[i].name, "value": odata[i].code });
        if (odata[i].areaList) {
            for (let m = 0; m < odata[i].areaList.length; m++) {
                let nArea = [];
                nCity.push({ "text": odata[i].areaList[m].name, "value": odata[i].areaList[m].code });
                if (odata[i].areaList[m].areaList) {
                    for (let n = 0; n < odata[i].areaList[m].areaList.length; n++) {
                        nArea.push({ "text": odata[i].areaList[m].areaList[n].name, "value": odata[i].areaList[m].areaList[n].code });
                    }
                }
                areaObj[odata[i].areaList[m].code] = nArea;
            }
        }
        cityObj[odata[i].code] = nCity;
    }
    return { "province": provinceList, "city": cityObj, "district": areaObj, };
}

//类别数据组装
utils.categoryCombite = function(odata) {
    let newList = [];
    if(odata && odata.length){
        for(let i = 0,len = odata.length;i<len;i++){
            newList.push({'value':odata[i].cateName,'id':odata[i].cateId});
        }
    }
    return  newList;
}

utils.fileType = function(fileUrl){ // 通过返回的地址路径判断文件类型
    if(!fileUrl){ // 无地址
        console.log("utils.fileType ================= 无地址");
        return;
    }
    let fileType = "";
    let regImg = /\.(png|jpe?g|gif)(\?.*)?$/;
    let regDoc = /\.(docx?)(\?.*)?$/;
    let regPdf = /\.pdf(\?.*)?$/;
    if(regImg.test(fileUrl)){
        fileType = "image"
    }
    if(regDoc.test(fileUrl)){
        fileType = "word"
    }
    if(regPdf.test(fileUrl)){
        fileType = "pdf"
    }
    return fileType;
}

utils.pxToRem =function({value, basicFontSize = 100}) { // 项目里 1rem = 100px,
    return value/window.devicePixelRatio/basicFontSize
}

// 将版本号转成整数位用于判断版本号大小;
// 先替换去除.在转成8位字符串,不够位数的时候在字符串前面补0,parserint去除前面的0的整数
utils.versionToEightNum = function(vers) {
    console.log("vers ===========", vers);
    let lent = 8;
    let versNum = parseInt(vers.replace(/\./g, ""));
    return parseInt((Array(lent).join("0") + versNum).slice(-lent));
}


//合并对象
utils.mergeObject = function (...options) {
    let obj={}
    for (let i = 0; i < options.length; i++) {
        let sObj = options[i]
        for (let key in sObj) {
            if(obj[key]){
                console.log(sObj)
                console.log(key)
               throw("对象名称相同的了")
            }else{
                obj[key]=sObj[key]
            }

        }
    }
    return obj
}

//合并数组
utils.mergeArray = function (...options) {
    let newArray = [];
    for (let i = 0; i < options.length; i++) {
        let sArray = options[i]
        for (let j = 0; j < sArray.length; j++) {
            newArray.push(sArray[j]);
        }
    }
    return newArray
}
//合并固定参数
utils.mergeFixedParams = (targetVal, newObj) => {
    if (newObj) {
        let c = {}
        Object.keys(targetVal).forEach(key => {
            c[key] = newObj[key]
        })
        return c;
    }
    return targetVal;
}

export default utils

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值