编写自己的代码库

301 阅读7分钟
const plugobj = {
    /**
     *判断浏览器的innerText或textContent属性 
     */
    setcontent(element,content){
        if(typeof element.innerText === "string"){
            return element.innerText = content;
        }else {
            return element.textContent = content;
        }
    },
    /**
     * 获取页面的当中可视区域的宽高度的兼容函数
     */
    getClient(){
        return {
            width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0,
            height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
        }
    },
    /**
     * 获取下一个兄弟元素的兼容函数
     */
    getEleSibling(element){
        if(element.nextElementSibling){
            return element.nextElementSibling;
        }else {
            var next = element.nextSibling;
            while(next && next.nodeType !== 1){
                next = next.nextSibling
            }
            return next;
        }
    },
    /**
     *获取上一个兄弟元素的兼容函数
     */
    setprev(element){
        if(element.previousElementSibling){
            return element.previousElementSibling;
        }else {
            var prev = element.previousSibling;
            while(prev && prev.nodeType !== 1){
                prev = prev.previousSibling;
            }
            return prev;
        };
    },
    /**
     * 获取类名的兼容函数
     */
    getClassName(ele,className){
        if(ele.getElementsByClassName){
            return ele.getElementsByClassName(className);
        }else {
            var elements = ele.getElementsByTagName("*");
            var arr = [];
            for (var i = 0; i < elements.length; i++) {
                if(elements[i].className.indexOf(className) !== -1){
                    arr.push(elements[i]);
                }
            }
            return arr;
        }
    },
    /**
     * 匀速动画的封装函数
     */
    animate(Obj,target){
        clearInterval(Obj.timer);
        Obj.timer = setInterval(function(){
            var leader = Obj.offsetLeft,
            step = 10,
            step = leader < target ? step : -step;
            if(Math.abs(leader - target) > Math.abs(step)){
                Obj.style.left = leader + step + "px";
            }else {
                Obj.style.left = target + "px";
                clearInterval(Obj.timer);
            }
        },15)
    },
    /**
     * 获取页面被卷去的头部高度和左侧宽度的 兼容函数
     */
    scroll(){
        return {
            top : window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0,
            left : window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0
        }
    },
    /**
     * 获取外部样式的兼容函数
     */
    getStyle(obj,attr){
        if(window.getComputedStyle){
            return window.getComputedStyle(obj,null)[attr];
        }else {
            return obj.currentStyle[attr];
        }
    },
    /**
     * 用缓动动画封装一个回调函数(包含透明度和层级)
     */
    setanimate3(obj,josn,fn){
        clearInterval(obj.timer);
        obj.timer = setInterval(function(){
            var flag = true;
            for(var key in josn){
                if(key === "opacity"){
                    var leader = getStyle(obj,key) * 100;
                    var step = (josn[key] * 100 - leader) / 10;
                    step = step > 0 ? Math.ceil(step) : Math.floor(step);
                    obj.style[key] = (leader + step) / 100;
                }else if(key === "zIndex"){
                    obj.style[key] = josn[key];
                }else {
                    var leader = parseInt(getStyle(obj,key)) || 0;
                    var step = (josn[key] - leader) / 10;
                    step = step > 0 ? Math.ceil(step) : Math.floor(step);
                    obj.style[key] = leader + step + "px";
                }
                if(josn[key] !== leader){
                    flag = false;
                }
            }
            if(flag){
                clearInterval(obj.timer);
                if(fn){
                    fn();
                }
            }
        },15)
    },
    /**
     * 设置全屏的能力检测
     */
    getStyle(obj,attr){
        if(window.getComputedStyle){
            return window.getComputedStyle(obj,null)[attr];
        }else {
            return obj.currentStyle[attr];
        }
    },
    clickFull(){
        btn1.onclick=function(){
            //全屏
            if(div.requestFullScreen){
                div.requestFullScreen();
            }else if(div.webkitRequestFullScreen){
                div.webkitRequestFullScreen();
            }else if(div.mozRequestFullScreen){
                div.mozRequestFullScreen();
            }else if(div.msRequestFullScreen){
                div.msRequestFullScreen();
            } else if(div.oRequestFullScreen){
                div.oRequestFullScreen();
            }
        };
        btn2.onclick=function(){
            //退出全屏
            if(document.cancelFullScreen){
                document.cancelFullScreen();
            }else if(document.webkitCancelFullScreen){
                document.webkitCancelFullScreen();
            }else if(document.mozCancelFullScreen){
                document.mozCancelFullScreen();
            }else if(document.msCancelFullScreen){
                document.msCancelFullScreen();
            }else if(document.oCancelFullScreen){
                document.oCancelFullScreen();
            }
        };
        btn3.onclick=function(){
            //检测是否全屏
            if(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.oFullscreenElement){
                alert(true);
            }else {
                alert(false);
            }
        };
    },
    /**
     * 拖拽任意元素
     */
    dragdom(){
        //被拖拽元素
        document.ondragstart = function(event){
            event.dataTransfer.setData("text/html",event.target.id);
        };
        //目标元素
        document.ondragover = function(event){
            event.preventDefault();
        };
        document.ondrop = function(event){
            var x = event.dataTransfer.getData("text/html");
            event.target.appendChild(document.getElementById(x));
        };
    },
    /**
     * 模拟jquery的ajax请求文件(跨域(jsonp)和不跨域(json)
     */
    ajax(obj){
        var defaus = {
            type:"get",
            url:"#",
            async:true,
            data:{},
            jsonp:"callback",
            dataType:"text",
            success:function(data){
                console.log(data);
            }
        };
        for(var key in obj){
            defaus[key] = obj[key];
        };
        if(defaus.dataType === "jsonp"){
            ajaxJsonp(defaus);
        }else {
            ajaxJson(defaus);
        };
        function ajaxJsonp(){
            var cbName = "jQuery" + ("1.11.1" + Math.random()).replace(/\D/g,"") + "_" + (new Date().getTime());//这里是设置的默认的回调函数名字
            if(defaus.jsonpCallback){//这里是为了方便设置jsonp的默认名字
                cbName = defaus.jsonpCallback;
            };
            window[cbName] = function(data){//这里就是回调函数,调用方式服务器响应内容来调用,实际上时向window中添加了一个方法,方法名是变量cbname的值
                try {//用try---finally将请求完数据的script标签从页面中删除
                    defaus.success(data);//这里的data是实参
                }finally{
                    script.parentNode.removeChild(script);//将请求数据后的script标签删除
                    delete window[cbName];//将添加在window上的自定义方法删除
                }
            };
            var parm = "";
            for(var key in defaus.data){
                parm +=  key + "=" + defaus.data[key] + "&";
            };
            if(parm){
                parm += parm.substring(0,parm.length - 1);
                parm = "&" + parm;
            };
            var script = document.createElement("script");
            script.src = defaus.url + "?" + defaus.jsonp + "=" + cbName + parm;
            var head = document.getElementsByTagName("head")[0];
            head.appendChild(script);
        };
        function ajaxJson(){
            var xhr;
            if(window.XMLHttpRequest){//处理兼容Ajax请求
                xhr = new XMLHttpRequest();
            }else {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            };
            var parm = "";//将对象形式的参数(实参)转为字符串,
            for(var key in defaus.data){//这里是用来将(get请求后边要传入的键值对)中的值赋值给parm
                parm += key + "=" + defaus.data[key] + "&";
            };
            if(parm){//如果parm中有值,则将其提取出来,目的是为了去掉最后一个多余的&符号
                parm = parm.substring(0,parm.length-1);//从0开始截取,截取到最后一个值也可使用substring()方法
            };
            if(defaus.type === "get"){//处理get参数
                defaus.url += "?"+ encodeURI(parm);//这里是为了防止中文乱码的问题。
            };
            xhr.open(defaus.type,defaus.url,defaus.async);//设置发送参数
            var code = null;
            if(defaus.type === "post"){//处理post参数,且必须设置头信息
                code = parm;
                xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            }
            xhr.send(code);//执行发送动作
            //处理同步请求,注意,同步的话就不使用回调函数了
            if(!defaus.async){
                if(defaus.dataType === "json"){
                    return JSON.parse(xhr.responseText);
                }else {
                    return xhr.responseText;
                };
            };
            xhr.onreadystatechange = function(){
                if(xhr.readyState === 4){
                    if(xhr.status === 200){
                        var data = xhr.responseText;
                        if(defaus.dataType === "json"){
                            data = JSON.parse(data);//注意:使用此方法要引入json.js包(为了适应IE和旧版浏览器);
                        };
                        defaus.success(data);
                    };
                };
            };
        }
    },
    getSearchString(key) {//key就是要截取的参数的键
        // 获取URL中?之后的字符
        var str = location.search;
        str = str.substring(1,str.length);
        // 以&分隔字符串,获得类似name=xiaoli这样的元素数组
        var arr = str.split("&");
        var obj = new Object();
        // 将每一个数组元素以=分隔并赋给obj对象    
        for(var i = 0; i < arr.length; i++) {
            var tmp_arr = arr[i].split("=");
            obj[decodeURIComponent(tmp_arr[0])] = decodeURIComponent(tmp_arr[1]);
        }
        return obj[key];
    },
    getQueryString(name) {
        try {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
            var url = location.href.split("?");
            r = url[1].match(reg);
            if (r != null) return unescape(r[2]);
            return "";
        } catch (e) {
            return "";
        }
    },
    /**
     * 获取当前日期
     */
    getDayTime() {
        var d = new Date();
        var year = d.getFullYear();
        var month = d.getMonth() + 1;
        var date = d.getDate();
        var day = d.getDay();
        var h = d.getHours();
        var m = d.getMinutes();
        var s = d.getSeconds();
        if (h < 10) { h = "0" + h; }
        if (m < 10) { m = "0" + m; }
        if (s < 10) { s = "0" + s; }
        var week = ["日", "一", "二", "三", "四", "五", "六"];
        //var str = year + "年" + month + "月" + date + "日&nbsp;星期" + week[day] + "&nbsp;" + h + ":" + m + ":" + s;
        var str = year + "年" + month + "月" + date + "日&nbsp;&nbsp;星期" + week[day] + "&nbsp;&nbsp;" + h + ":" + m;
        return str;
    },
    /**
     * 获取当前时间
     */
    getDate() {
        var myDate = new Date();
        var dataStr = "";
        dataStr += myDate.getFullYear() + "-";
        var num = myDate.getMonth() + 1;
        if (num < 10) {
            dataStr += "0" + num + "-";
        } else {
            dataStr += num + "-";
        }
        var day = myDate.getDate();
        if (day < 10) {
            dataStr += "0" + day + " ";
        } else {
            dataStr += day + " ";
        }
        var h = myDate.getHours();
        var m = myDate.getMinutes();
        var s = myDate.getSeconds();
        if (h < 10) { dataStr += "0" + h + ":"; } else { dataStr += h + ":"; }
        if (m < 10) { dataStr += "0" + m + ":"; } else { dataStr += m + ":"; }
        if (s < 10) { dataStr += "0" + s; } else { dataStr += s; }
        return dataStr;
    },
    /**
     * cookie设置,存取,删除
     */
    setCookie(name, value, seconds) {//设置cookie
        seconds = seconds || 0; //seconds有值就直接赋值,没有为0,这个根php不一样。
        var expires = "";
        if (seconds != 0) { //设置cookie生存时间
            var date = new Date();
            date.setTime(date.getTime() + (seconds * 1000));
            expires = "; expires=" + date.toGMTString();
        }
        document.cookie = name + "=" + escape(value) + expires + "; path=/"; //转码并赋值
    },
    getCookie(name) {//取得cookie
        var nameEQ = name + "=";
        var ca = document.cookie.split(';'); //把cookie分割成组
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i]; //取得字符串
            while (c.charAt(0) == ' ') { //判断一下字符串有没有前导空格
                c = c.substring(1, c.length); //有的话,从第二位开始取
            }
            if (c.indexOf(nameEQ) == 0) { //如果含有我们要的name
                return unescape(c.substring(nameEQ.length, c.length)); //解码并截取我们要值
            }
        }
        return false;
    },
    clearCookie(name) {//清除cookie
        setCookie(name, "", -1);
    },
    /**
     * MD5加密
     */
    md5(sMessage) {
        function RotateLeft(lValue, iShiftBits) { return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); }
        function AddUnsigned(lX, lY) {
            var lX4, lY4, lX8, lY8, lResult;
            lX8 = (lX & 0x80000000);
            lY8 = (lY & 0x80000000);
            lX4 = (lX & 0x40000000);
            lY4 = (lY & 0x40000000);
            lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
            if (lX4 & lY4) {
                return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
            }
            if (lX4 | lY4) {
                if (lResult & 0x40000000) {
                    return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
                }
                else {
                    return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
                }
            }
            else {
                return (lResult ^ lX8 ^ lY8);
            }
        }
        function F(x, y, z) { return (x & y) | ((~x) & z); }
        function G(x, y, z) { return (x & z) | (y & (~z)); }
        function H(x, y, z) { return (x ^ y ^ z); }
        function I(x, y, z) { return (y ^ (x | (~z))); }
        function FF(a, b, c, d, x, s, ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        }
        function GG(a, b, c, d, x, s, ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        }
        function HH(a, b, c, d, x, s, ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        }
        function II(a, b, c, d, x, s, ac) {
            a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
            return AddUnsigned(RotateLeft(a, s), b);
        }
        function ConvertToWordArray(sMessage) {
            var lWordCount;
            var lMessageLength = sMessage.length;
            var lNumberOfWords_temp1 = lMessageLength + 8;
            var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
            var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
            var lWordArray = Array(lNumberOfWords - 1);
            var lBytePosition = 0;
            var lByteCount = 0;
            while (lByteCount < lMessageLength) {
                lWordCount = (lByteCount - (lByteCount % 4)) / 4;
                lBytePosition = (lByteCount % 4) * 8;
                lWordArray[lWordCount] = (lWordArray[lWordCount] | (sMessage.charCodeAt(lByteCount) << lBytePosition));
                lByteCount++;
            }
            lWordCount = (lByteCount - (lByteCount % 4)) / 4;
            lBytePosition = (lByteCount % 4) * 8;
            lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
            lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
            lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
            return lWordArray;
        }
        function WordToHex(lValue) {
            var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
            for (lCount = 0; lCount <= 3; lCount++) {
                lByte = (lValue >>> (lCount * 8)) & 255;
                WordToHexValue_temp = "0" + lByte.toString(16);
                WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
            }
            return WordToHexValue;
        }
        var x = Array();
        var k, AA, BB, CC, DD, a, b, c, d
        var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
        var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
        var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
        var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
        x = ConvertToWordArray(sMessage);
        a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
        for (k = 0; k < x.length; k += 16) {
            AA = a; BB = b; CC = c; DD = d;
            a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
            d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
            c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
            b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
            a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
            d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
            c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
            b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
            a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
            d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
            c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
            b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
            a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
            d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
            c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
            b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
            a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
            d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
            c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
            b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
            a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
            d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
            c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
            b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
            a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
            d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
            c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
            b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
            a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
            d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
            c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
            b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
            a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
            d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
            c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
            b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
            a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
            d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
            c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
            b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
            a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
            d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
            c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
            b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
            a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
            d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
            c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
            b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
            a = II(a, b, c, d, x[k + 0], S41, 0xF4292244);
            d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
            c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
            b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
            a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
            d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
            c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
            b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
            a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
            d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
            c = II(c, d, a, b, x[k + 6], S43, 0xA3014314);
            b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
            a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
            d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
            c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
            b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
            a = AddUnsigned(a, AA); b = AddUnsigned(b, BB);
            c = AddUnsigned(c, CC); d = AddUnsigned(d, DD);
        }
        var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);
        return temp.toUpperCase();
    },
    /**
     * 常用正则验证
     */
    regNum(number){
        return /[\u4e00-\u9fa5]/.test(number);//密码不能输入中文
    },
    regIDcard(regIDcard){
        return /(^\d{18}$)|(^\d{17}(\d|[Xx])$)/.test(regIDcard);//身份证号为字符和数字且为18位
    },
    regPhone(regPhone){
        return /^1[34578]\d{9}$/.test(regPhone);//手机号码验证
    },
    regNumsz(code){
        return /^\d{4}$/.test(code);//验证码为纯数字
    },
    regName() {
        return /^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$|^[\u4E00-\u9FA5A-Za-z]+$|^[A-Za-z]+(·[A-Za-z]+)*$/.test(name);//姓名只能输入汉字或者英文
    },
    regEmail() {
        return /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;//邮箱格式验证
    },
    /**
     * 验证码倒计时
     */
    YZTimeOut() {
        $("#phonenum").attr("disabled", true);
        lgmsgOutTime = null;
        var lgmsgTime = 60;
        //验证码倒计时;
        if (!lgmsgOutTime) {
            lgmsgOutTime = setInterval(function () {
                if (lgmsgTime > 0) {
                    lgmsgTime--;
                    $("#plg_timeout").html(lgmsgTime);
                } else {
                    clearInterval(lgmsgOutTime);
                    lgmsgTime = 60;
                    $("#plg_timeout").html(lgmsgTime);
                    $("#phonenum").removeAttr("disabled");
                    lgmsgOutTime = null;
                }
            }, 1000);
        }
    },
    YzmLgReset() {//验证码复原
        clearInterval(lgmsgOutTime);
        var lgmsgTime = 60;
        $("#plg_timeout").html(lgmsgTime);
        $("#plg_SendCode").show();
        $("#plg_CountDown").hide();
        $("#phonenum").removeAttr("disabled");
        lgmsgOutTime = null;
    },
    /**
     * 社会统一信用代码校验
     */
    CheckCreditCode(creditCode, isSubtle) {
        if (creditCode == null || creditCode == undefined || creditCode == "") return false;
        if (isSubtle != false) isSubtle = true;
        if (!isSubtle) creditCode = creditCode.toUpperCase();
        var Ancode, Ancodevalue, total = 0;
        var weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];//权
        var str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
        for (var i = 0; i < creditCode.length - 1; i++) {
            Ancode = creditCode.substring(i, i + 1);
            Ancodevalue = str.indexOf(Ancode);
            total = total + Ancodevalue * weightedfactors[i];
        }
        var logiccheckcode = 31 - total % 31;
        if (logiccheckcode == 31) {
            logiccheckcode = 0;
        }
        var Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
        var Array_Str = Str.split(',');
        logiccheckcode = Array_Str[logiccheckcode];
        var checkcode = creditCode.substring(17, 18);
        return logiccheckcode == checkcode;
    },
    /**
     * 判断是ios还是安卓系统
     */
    IsIos() {
        var u = navigator.userAgent, app = navigator.appVersion;
        //苹果
        if (u.indexOf('AppleWebKit') > -1 && u.indexOf('MicroMessenger') > -1 && u.indexOf('iPhone') > -1 && !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {
            return true;
        } else {
            //安卓
            return false;
        };
    },
    /**
     * 判断是pc还是移动
     */
    IsPC() {
        var userAgentInfo = navigator.userAgent;
        var Agents = ["Android", "iPhone",
            "SymbianOS", "Windows Phone",
            "iPad", "iPod"];
        var flag = true;
        for (var v = 0; v < Agents.length; v++) {
            if (userAgentInfo.indexOf(Agents[v]) > 0) {
                flag = false;
                break;
            }
        }
        return flag;
    },
    /**
     * 营业执照注册号校验
     */
    CheckRegCode(regCode) {
        var result = -1;
        if (regCode.length > 1) {
            var ti = 0, si = 0, cj = 0, pj = 10;
            for (var i = 0; i < regCode.length; i++) {
                ti = parseInt(regCode.substring(i, i + 1));
                si = pj + ti;
                cj = (0 == si % 10 ? 10 : si % 10) * 2;
                pj = (cj % 11) == 0 ? 10 : (cj % 11);
                if (i == regCode.length - 1) {
                    if (regCode.length == 14) {
                        pj = (cj % 11) == 0 ? 10 : (cj % 11);
                        result = 1 - pj < 0 ? 11 - pj : 1 - pj;
                    } else if (regCode.length == 15) {
                        result = si % 10;
                    }
                }
            }
        }
        return result == 1;
    },
    /**
     * 组织机构代码校验
     */
    CheckOrgCode(orgCode, isSubtle) {
        if (orgCode == null || orgCode == undefined || orgCode == "") return false;
        if (isSubtle != false) isSubtle = true;
        if (!isSubtle) orgCode = orgCode.toUpperCase();
        var ws = [3, 7, 9, 10, 5, 8, 4, 2];
        var str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        //判断是否有“-”,如果没有则添加“-”
        var aaa = orgCode.slice(orgCode.length - 2, orgCode.length - 1);
        if(aaa != "-"){
            orgCode = orgCode.slice(0, orgCode.length - 1) + "-" + orgCode.slice(orgCode.length - 1);
        };
        if (!/^([0-9A-Z]){8}-[0-9|X]$/.test(orgCode)) return false;
        var sum = 0;
        for (var i = 0; i < 8; i++) {
            var c = orgCode.substring(i, i + 1);
            //var c = orgCode.ToCharArray()[i];
            sum += str.indexOf(c) * ws[i];
        }
        var c9 = 11 - (sum % 11);
        var sc9 = c9 + "";
        if (11 == c9) {
            sc9 = "0";
        } else if (10 == c9) {
            sc9 = "X";
        }
        var oc = orgCode.substring(9, 10);
        return sc9 == oc;
    },
    /**
     * 循环获取多级字典
     */
    getEjVal(dictory, arr) {
        if(!arr.length) return;
        const newArr = [];
        dictory.forEach(v=>{
            if(v instanceof Array){
                arr.forEach(item=>{
                    if(v.id==item){
                        newArr.push(v.value);
                    };
                });
            }else{
                getEjVal(v,arr);    
            };
        });
        return newArr;
    },
    /**
     * 兼容ie初始选择框和input框(placeholder提示)
     */
    InitPlaceholder() {
        $("select").each(function () {
            if ($(this).val() == "" || $(this).val() == null) {
                $(this).css({ "color": "#999999" });
            } else if ($(this).val() == $(this).attr("placeholder")) {
                $(this).css({ "color": "#999999" });
            } else {
                $(this).css({ "color": "#454545" });
            }
        });
        $("select").change(function () {
            if ($(this).val() == "") {
                $(this).css({ "color": "#999999" });
            } else if ($(this).val() == $(this).attr("placeholder")) {
                $(this).css({ "color": "#999999" });
            } else {
                $(this).css({ "color": "#454545" });
            }
        });
        $("input:button").each(function () {
            if ($(this).val() == "") {
                $(this).val($(this).attr("placeholder"))
                $(this).css({ "color": "#999999" });
            } else if ($(this).val() == $(this).attr("placeholder")) {
                $(this).css({ "color": "#999999" });
            } else {
                $(this).css({ "color": "#454545" });
            }
        });
        $("input:button").change(function () {
            if ($(this).val() == "") {
                $(this).val($(this).attr("placeholder"))
                $(this).css({ "color": "#999999" });
            } else if ($(this).val() == $(this).attr("placeholder")) {
                $(this).css({ "color": "#999999" });
            } else {
                $(this).css({ "color": "#454545" });
            }
        });
    },
    /**
     * 按出生日期算年龄
     */
    birthDataChangeAge(date) {
        if (date == "" || date == undefined) {
            return "";
        }
        var r = date.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
        var d = new Date(r[1], r[3] - 1, r[4]);
        if (r == null) {
            return false;
        }
        else if (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]) {
            var Y = new Date().getFullYear();
            return (Y - r[1]);
        }
        else {
            return false;
        }
    },
    /**
     * 计算年龄(根据出生日期)
     * 计算年份->计算月份->计算天数
     * sDate1起始年
     * sDate2结束年
     */
    getDiffYmdBetweenDate(sDate1,sDate2){
        var fixDate = function(sDate){
            var aD = sDate.split('-');
            for(var i = 0; i < aD.length; i++){
                aD[i] = fixZero(parseInt(aD[i]));
            }
            return aD.join('-');
        };
        var fixZero = function(n){
            return n < 10 ? '0'+n : n;
        };
        var fixInt = function(a){
            for(var i = 0; i < a.length; i++){
                a[i] = parseInt(a[i]);
            }
            return a;
        };
        var getMonthDays = function(y,m){
            var aMonthDays = [0,31,28,31,30,31,30,31,31,30,31,30,31];
            if((y%400 == 0) || (y%4==0 && y%100!=0)){
                aMonthDays[2] = 29;
            }
            return aMonthDays[m];
        };
        var checkDate = function(sDate){
        };
        var y = 0;
        var m = 0;
        var d = 0;
        var sTmp;
        var aTmp;
        sDate1 = fixDate(sDate1);
        sDate2 = fixDate(sDate2);
        if(sDate1 > sDate2){
            sTmp = sDate2;
            sDate2 = sDate1;
            sDate1 = sTmp;
        }
        var aDate1 = sDate1.split('-');
            aDate1 = fixInt(aDate1);
        var aDate2 = sDate2.split('-');
            aDate2 = fixInt(aDate2);
        //计算相差的年份
        /*aTmp = [aDate1[0]+1,fixZero(aDate1[1]),fixZero(aDate1[2])];
        while(aTmp.join('-') <= sDate2){
            y++;
            aTmp[0]++;
        }*/
        y = aDate2[0] - aDate1[0];
        if( sDate2.replace(aDate2[0],'') < sDate1.replace(aDate1[0],'')){
            y = y - 1;
        }
        //计算月份
        aTmp = [aDate1[0]+y,aDate1[1],fixZero(aDate1[2])];
        while(true){
            if(aTmp[1] == 12){
                aTmp[0]++;
                aTmp[1] = 1;
            }else{
                aTmp[1]++;
            }
            if(([aTmp[0],fixZero(aTmp[1]),aTmp[2]]).join('-') <= sDate2){
                m++;
            } else {
                break;
            }
        }
        //计算天数
        aTmp = [aDate1[0]+y,aDate1[1]+m,aDate1[2]];
        if(aTmp[1] > 12){
            aTmp[0]++;
            aTmp[1] -= 12;
        }
        while(true){
            if(aTmp[2] == getMonthDays(aTmp[0],aTmp[1])){
                aTmp[1]++;
                aTmp[2] = 1;
            } else {
                aTmp[2]++;
            }
            sTmp = ([aTmp[0],fixZero(aTmp[1]),fixZero(aTmp[2])]).join('-');
            if(sTmp <= sDate2){
                d++;
            } else {
                break;
            }
        }
        return {y:y,m:m,d:d};
    },
    /**
     * 获取两个日期之间的所有月份(包括区间)
     */
    getMonthBetween(start, end) {//传入的格式YYYY-MM
        var result = [];
        var s = start.split("-");
        var e = end.split("-");
        var min = new Date();
        var max = new Date();
        min.setFullYear(s[0], s[1] * 1 - 1, 1);//开始日期
        max.setFullYear(e[0], e[1] * 1 - 1, 1);//结束日期
        var curr = min;
        while (curr <= max) {
            /**
             * 单返回月份
             */
            // var month = curr.getMonth();
            // result.push(month + 1);
            // curr.setMonth(month + 1);
            /**
             * 返回区间
             */
            var month = curr.getMonth();
            var str = curr.getFullYear()+'-'+(month+1);
            var s = curr.getFullYear()+'-0';
            if(str==s){
                str = curr.getFullYear()+'-1';
            }
            //返回区间
            result.push(str);
            curr.setMonth(month + 1);
        };
        let arr = [];
        result.forEach(v=>{
            const day = utility.getLastDay(v);
            arr.push(v.replace('-','年')+'月1日'+'-'+v.replace('-','年')+'月'+day+'日');
        })
        return arr;
        // return result;//返回月份
    },
    /**
     * 获取指定月份的最后一天
     */
    getLastDay(date){
        let nowyear = new Date(date).getFullYear();//取当前的年份
        let nowmonth = new Date(date).getMonth()+1;//获取当前月份
        let nextmonth = nowmonth++;//取下一个月的第一天,方便计算(最后一天不固定)
        if(nowmonth>12){
            nextmonth -= 12;//月份减
            nowyear++;//年份增
        };
        var new_date = new Date(nowyear,nextmonth,1);//取当年当月中的第一天
        return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期
    },
    /**
     * 将数字转化为大写金额
     */
    changeNumMoneyToChinese(money){
        var cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字
        var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位
        var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位
        var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位
        var cnInteger = "整"; //整数金额时后面跟的字符
        var cnIntLast = "元"; //整型完以后的单位
        var maxNum = 999999999999999.9999; //最大处理的数字
        var IntegerNum; //金额整数部分
        var DecimalNum; //金额小数部分
        var ChineseStr = ""; //输出的中文金额字符串
        var parts; //分离金额后用的数组,预定义    
        var Symbol="";//正负值标记
        if (money == "") {
            return "";
        }

        money = parseFloat(money);
        if (money >= maxNum) {
            alert('超出最大处理数字');
            return "";
        }
        if (money == 0) {
            ChineseStr = cnNums[0] + cnIntLast + cnInteger;
            return ChineseStr;
        }
        if(money<0)
        {
            money=-money;
            Symbol="负 ";        
        }
        money = money.toString(); //转换为字符串
        if (money.indexOf(".") == -1) {
            IntegerNum = money;
            DecimalNum = '';
        } else {
            parts = money.split(".");
            IntegerNum = parts[0];
            DecimalNum = parts[1].substr(0, 4);
        }
        if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换
            var zeroCount = 0;
            var IntLen = IntegerNum.length;
            for (var i = 0; i < IntLen; i++) {
                var n = IntegerNum.substr(i, 1);
                var p = IntLen - i - 1;
                var q = p / 4;
                var m = p % 4;
                if (n == "0") {
                    zeroCount++;
                }
                else {
                    if (zeroCount > 0) {
                        ChineseStr += cnNums[0];
                    }
                    zeroCount = 0; //归零
                    ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
                }
                if (m == 0 && zeroCount < 4) {
                    ChineseStr += cnIntUnits[q];
                }
            }
            ChineseStr += cnIntLast;
            //整型部分处理完毕
        }
        if (DecimalNum != '') { //小数部分
            var decLen = DecimalNum.length;
            for (var i = 0; i < decLen; i++) {
                var n = DecimalNum.substr(i, 1);
                if (n != '0') {
                    ChineseStr += cnNums[Number(n)] + cnDecUnits[i];
                }
            }
        }
        if (ChineseStr == '') {
            ChineseStr += cnNums[0] + cnIntLast + cnInteger;
        } else if (DecimalNum == '') {
            ChineseStr += cnInteger;
        }
        ChineseStr = Symbol +ChineseStr;

        return ChineseStr;
    },
    /**
     * js获取一段字符串中完整的url地址
     */
    httpString(s){
        try{
            var reg= /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
            s = s.match(reg);
            // console.log(s)
            return s[0];
        }catch(e){}
    },
    /**
     * 多条件筛选
     * condition:{name:'掌声',age:'13'}
     * data:要筛选的数组
     * 注意:此方式返回的数据是模糊数据,即包含的都算,例如:
     * arr = [{name:'sales'},{name:'sales_bj'}];
     * parm = {name:'sales'}
     * 筛选结束返回为[{name:'sales'},{name:'sales_bj'}]
     */
    selectParams(condition, data){
        return data.filter(item => {
            return Object.keys(condition).every(key => {
                return String(item[key]).toLowerCase().includes(
                    String(condition[key]).trim().toLowerCase()
                )
            })
        })
    },
    /**
     * 将obj对象参数拆分成get请求后的参数
     */
    splitObj(obj){
        obj = JSON.stringify(obj);
        if(obj=='{}'){
            return '';
        };
        obj = obj.replace(/\{|\}|\'|\"+/g,'');
        let arr = obj.split(',');
        for(var i = 0;i<arr.length;i++){
            arr[i] = arr[i].replace(/\:/g,'=') + '&';
        };
        let str = arr.join('');
        str = str.slice(0,str.length-1);
        str = '?' + str;
        return str;
    },
    /**
     * 比较时间大小 
     * 参数:startTime:开始时间 eTime:结束时间,
     * 返回值:1.小于,2.大于,3.等于
     */
    dateComptime(startTime,eTime) {
        var beginTime = startTime;
        var endTime = eTime;
        var beginTimes = beginTime.substring(0, 10).split('-');
        var endTimes = endTime.substring(0, 10).split('-');
        beginTime = beginTimes[1] + '/' + beginTimes[2] + '/' + beginTimes[0] + ' ' + beginTime.substring(10, 19);
        endTime = endTimes[1] + '/' + endTimes[2] + '/' + endTimes[0] + ' ' + endTime.substring(10, 19);
        var returnDate = (Date.parse(endTime) - Date.parse(beginTime)) / 3600 / 1000;
        if (returnDate < 0) {
            return "1";
        } else if (returnDate > 0) {
            return "2";
        } else if (returnDate == 0) {
            return "3";
        } else {
            return 'exception';
        }
    },
    /**
     * 18位身份证号验证
     */
    isIdCard(idcard) {
        if (idcard.length != 18) {
            return false
        }
        var num = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
        var total = 0;
        for (i = 0; i < 17; i++) {
            total = total + Number(idcard.substring(i, i + 1)) * num[i];
        }
        var mod = total % 11;
        var charx = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
        if (idcard.substring(17, 18).toUpperCase() == charx[mod]) {
            console.log("身份证号正确");
            return true;
        } else {
            console.log("身份证号错误");
            return false
        }
    },
    /**
     * 检验身份证
     */
    checkIdCard( num ){
        num = num.toUpperCase();
        //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
        if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {

            return false;
        }
        //校验位按照,X可以认为是数字10。
        //下面分别分析出生日期和校验位
        var len, re;
        len = num.length;
        if (len == 15) {
            re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
            var arrSplit = num.match(re);

            //检查生日日期是否正确
            var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
            var bGoodDay;
            bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
            if (!bGoodDay) {
                //alert('输入的身份证号里出生日期不对!');
                return false;
            }
            else {
                //将15位身份证转成18位
                //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
                var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
                var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
                var nTemp = 0, i;
                num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
                for (i = 0; i < 17; i++) {
                    nTemp += num.substr(i, 1) * arrInt[i];
                }
                num += arrCh[nTemp % 11];
                return true;
            }
        }
        if (len == 18) {
            re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
            var arrSplit = num.match(re);

            //检查生日日期是否正确
            var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
            var bGoodDay;
            bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
            if (!bGoodDay) {
                return false;
            }
            else {
                //检验18位身份证的校验码是否正确。
                //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
                var valnum;
                var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
                var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
                var nTemp = 0, i;
                for (i = 0; i < 17; i++) {
                    nTemp += num.substr(i, 1) * arrInt[i];
                }
                valnum = arrCh[nTemp % 11];
                if (valnum != num.substr(17, 1)) {
                    return false;
                }
                return true;
            }
        }
        return false;
    },
    /**
     * 从身份证中获取生日  格式 YYYY-MM-DD
     */
    getBirthday( idCard ){
        var birthday = "";
        if (idCard != null && idCard != "") {
            if (idCard.length == 15) {
                birthday = "19" + idCard.substr(6, 6);
            } else if (idCard.length == 18) {
                birthday = idCard.substr(6, 8);
            }
            birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
        }
        return birthday;
    },
    /**
    *js中对当前日期加n天的实现
    */
    AddDays(dayIn) {
        var date=new Date();
        var myDate=new Date(date.getTime()+dayIn*24*60*60*1000);
        var year=myDate.getFullYear();
        var month=myDate.getMonth()+1;
        var day=myDate.getDate();
        let CurrentDate=year+"-";
        if(month>=10)
        {
            CurrentDate=CurrentDate+month+"-";
        }
        else
        {
            CurrentDate=CurrentDate+"0"+month+"-";
        }
        if(day>=10)
        {
            CurrentDate=CurrentDate+day;
        }
        else
        {
            CurrentDate=CurrentDate+"0"+day;
        }
        return CurrentDate;
    },
    // 比较两个时间的差值(返回剩余多少天,多少小时,多少分钟)
    calcDate(val1: any, val2: any) {
      const nowDate = new Date()
      let startTime = new Date(nowDate - 24 * 60 * 60 * 1000).getTime() // 开始时间(昨天)
      const eDate = date
      let endTime = new Date(eDate).getTime() // 结束时间
      let usedTime = endTime - startTime // 相差的毫秒数
      let days = Math.floor(usedTime / (24 * 3600 * 1000)) // 计算出天数
      let leavel = usedTime % (24 * 3600 * 1000) // 计算天数后剩余的时间
      let hours = Math.floor(leavel / (3600 * 1000)) // 计算剩余的小时数
      let leavel2 = leavel % (3600 * 1000) // 计算剩余小时后剩余的毫秒数
      let minutes = Math.floor(leavel2 / (60 * 1000)) // 计算剩余的分钟数
      let leavel3 = leavel2 % (60*1000) // 计算分钟数后剩余的毫秒数
      let seconds = Math.round(leavel3 / 1000) // 计算剩余的秒数
      if (days <= 0 && hours <= 0 && minutes <= 0) {
        return '已结束'
      }
      return days + '' + hours + '' + minutes + '' + seconds + ''
    },
    // 判断一组数字是否连续
    isContinuityNum(num) {
        let arr = [];
        if (num instanceof Array) {
          arr = [...num]
        } else {
          arr = Array.from(num.toString())
        }
        var i = arr [0]
        var isContination = true;
        for(var k in arr){
          if (arr[k] != i) {
            isContination = false;
            break;
          }
          i++;
        }
        return isContination
    },
    /**
     * 借助momentjs返回今天,明天,后天
     * 格式为 xx-xx 今天, xx-xx 明天 xx-xx 后天
     */
    backdate(d) {
      var td = new Date();
      td = new Date(td.getFullYear(),td.getMonth(),td.getDate());
      var od =new Date(d);
      od = new Date(od.getFullYear(),od.getMonth(),od.getDate());
      var xc = (od - td)/1000/60/60/24;
      // if (xc <- 2) {
      //   return -xc+"天前";
      // } else if (xc == -2) {
      //   return "前天";
      // } else if (xc == -1) {
      //   return "昨天";
      // }
      console.log(xc)
      if (xc == 0) {
        return {
          name: '今天',
          date: moment(d).format('MM-DD')
        }
      } else if (xc == 1) {
        return {
          name: '明天',
          date: moment(d).format('MM-DD')
        }
      } else if (xc == 2) {
        return {
          name: '后天',
          date: moment(d).format('MM-DD')
        }
      } else {
        // return xc+"天后";
        return {
          name: '',
          date: moment(d).format('MM-DD')
        }
      }
    },
    /**
     * 小数计算
     * calc.plus 加法运算
     * calc.subtract 减法运算
     * calc.multiply 乘法运算
     * calc.divide 除法运算
     */
    const calcmoney = (() => {
      let operation = (num1, num2, op) => {
        let l1, l2, max;
        try {
          l1 = num1.toString().split(".")[1].length;
        } catch (e) {
          l1 = 0;
        }
        try {
          l2 = num2.toString().split(".")[1].length;
        } catch (e) {
          l2 = 0;
        }
        switch (op) {
          case "plus":
            max = Math.pow(10, Math.max(l1, l2));
            return (num1 * max + num2 * max) / max;
          case "subtract":
            max = Math.pow(10, Math.max(l1, l2));
            return (num1 * max - num2 * max) / max;
          case "multiply":
            return (Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", ""))) / Math.pow(10, l1 + l2);
          case "divide":
            return operation(Number(num1.toString().replace(".", "")) / Number(num2.toString().replace(".", "")), Math.pow(10, l2 - l1), "multiply");
        }
      };
      let plus = (a, b) => {
        return operation(a, b, "plus");
      };
      let subtract = (a, b) => {
        return operation(a, b, "subtract");
      };
      let multiply = (a, b) => {
        return operation(a, b, "multiply");
      };
      let divide = (a, b) => {
        return operation(a, b, "divide");
      };
      return { plus, subtract, multiply, divide };
    })()

};