公共方法tools

export const getQueryString = (name: any) => {
    let url = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    let newUrl = window.location.search.substr(1).match(url);
    if (newUrl != null) {
        return unescape(newUrl[2]);
    } else {
        return false;
    }
};

/**
 * 判断字符是否为空
 * @param value
 * @returns {boolean}
 */

export const isEmpty = (value: any) => {
    if (
        value === undefined ||
        value === null ||
        value === "" ||
        value === "null"
    ) {
        return true;
    }
    return false;
};

/**
 * 判断字符是否不为空
 * @param value
 * @returns {boolean}
 */
export const isNotEmpty = (value: any) => {
    return !isEmpty(value);
};

// 判断是否为微信内置浏览器
export const isWeiXin = () => {
    try {
        let ua = window.navigator.userAgent.toLowerCase();
        return ua.indexOf("micromessenger") !== -1;
    } catch (e) {
        return false;
    }
};

/**
 * 时间格式化
 * @returns {string|*}
 * @param value
 * @param formatVal
 */
export function dateFormat(
    value: string | number | Date | null | undefined,
    formatVal: string
) {
    if (value === undefined || value === null || value === "") {
        return "";
    }
    let dt;
    if (value instanceof Date) {
        dt = value;
    } else {
        dt = new Date(value);
    }

    return formatDate(dt, formatVal);
}
export function datetimeString2DateString(datetimeString: {
    replace: (arg0: RegExp, arg1: string) => string | number | Date;
}) {
    let d = new Date(datetimeString.replace(/\s/, "T"));
    return dateFormat(d, "yyyy-MM-dd");
}

export function formatDate(date: Date, fmt: string) {
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(
            RegExp.$1,
            (date.getFullYear() + "").substr(4 - RegExp.$1.length)
        );
    }
    let o = {
        "M+": date.getMonth() + 1,
        "d+": date.getDate(),
        "h+": date.getHours(),
        "m+": date.getMinutes(),
        "s+": date.getSeconds()
    };
    for (let k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            // @ts-ignore
            let str = o[k] + "";
            fmt = fmt.replace(
                RegExp.$1,
                RegExp.$1.length === 1 ? str : padLeftZero(str)
            );
        }
    }
    return fmt;
}
function padLeftZero(str: string) {
    return ("00" + str).substr(str.length);
}

/**
 * 合并对象
 * @param obj
 * @param options
 * @returns {*}
 */
export const merge = (obj, options) => {
    if (obj && options) {
        for (let p in options) {
            if (typeof obj[p] === "object" && typeof options[p] === "object") {
                merge(obj[p], options[p]);
            } else {
                obj[p] = options[p];
            }
        }
    }
    return obj;
};

/**
 * @param {String|Number} value 要验证的字符串或数值
 * @param {*} validList 用来验证的列表
 */
export function oneOf(value, validList) {
    for (let i = 0; i < validList.length; i++) {
        if (value === validList[i]) {
            return true;
        }
    }
    return false;
}

/**
 * @description 绑定事件 on(element, event, handler)
 */
export const on = (function() {
    try {
        if (document.addEventListener) {
            return function(element, event, handler) {
                if (element && event && handler) {
                    element.addEventListener(event, handler, false);
                }
            };
        } else {
            return function(element, event, handler) {
                if (element && event && handler) {
                    element.attachEvent("on" + event, handler);
                }
            };
        }
    } catch (e) {
        return false;
    }
})();

/**
 * @description 解绑事件 off(element, event, handler)
 */
export const off = (function() {
    try {
        if (document.removeEventListener) {
            return function(element, event, handler) {
                if (element && event) {
                    element.removeEventListener(event, handler, false);
                }
            };
        } else {
            return function(element, event, handler) {
                if (element && event) {
                    element.detachEvent("on" + event, handler);
                }
            };
        }
    } catch (e) {
        return false;
    }
})();

/**
 * 如果返回值浮点型,保留几位小数
 * @returns {number|*}
 */
export function floatFormat(value, deci) {
    if (!deci) deci = 2;
    return parseFloat(value.toFixed(deci));
}

/**
 * 购买金额精度处理
 * @param num1
 * @param num2
 * @param p:精度
 */
export function multi(num1, num2, p) {
    let scale = Math.pow(10, p);
    return (num1 * scale * (num2 * scale)) / (scale * scale);
}

/**
 * 校验手机号
 * @param phoneNum
 */
export function isLegalPhoneNumber(phoneNum: any) {
    const reg = /^\d{7,11}$/;
    return reg.test(phoneNum);
}

/**
 * 校验邮箱
 * @param email
 */
export function isLegalEmail(email: any) {
    const reg = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
    return reg.test(email);
}

/**
 * 校验表情
 */
export function isExpression(expression: any) {
    const reg = /[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\u2026\u2022\u20ac\r\n]/g;
    return reg.test(expression);
}

/**
 * 按空格截取字符串,获取第一个空格之前
 * @returns {string|*}
 */
export function spliceStringPre(val) {
    return val.trim().split(" ")[0];
}

/**
 * 将数字转换为汉字,十万以内
 * @param section
 * @returns {string}
 * @constructor
 */
export function sectionToChinese(section) {
    let chnNumChar = [
        "零",
        "一",
        "二",
        "三",
        "四",
        "五",
        "六",
        "七",
        "八",
        "九"
    ];
    let chnUnitChar = ["", "十", "百", "千", "万", "亿", "万亿", "亿亿"];
    let strIns = "",
        chnStr = "";
    let unitPos = 0;
    let zero = true;
    while (section > 0) {
        let v = section % 10;
        if (v === 0) {
            if (!zero) {
                zero = true;
                chnStr = chnNumChar[v] + chnStr;
            }
        } else {
            zero = false;
            strIns = chnNumChar[v];
            strIns += chnUnitChar[unitPos];
            chnStr = strIns + chnStr;
        }
        unitPos++;
        section = Math.floor(section / 10);
    }
    return chnStr;
}

// base64 编码和解码方法
export const Base64 = {
    encode(str) {
        return btoa(
            encodeURIComponent(str).replace(
                /%([0-9A-F]{2})/g,
                function toSolidBytes(match, p1) {
                    //@ts-ignore
                    return String.fromCharCode("0x" + p1);
                }
            )
        );
    },
    decode(str) {
        return decodeURIComponent(
            atob(str)
                .split("")
                .map(function(c) {
                    return (
                        "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)
                    );
                })
                .join("")
        );
    }
};

/*
 * 设备检验
 */
export function _isMobile() {
    return navigator.userAgent.match(
        /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
    );
}

/**
 * @description 数字转化称对应的字母,1->A
 */
export function numToChapter(value: number) {
    return String.fromCharCode(value + 64);
}

/**
 * 处理文本的标签和样式
 */
export function formatStr(str) {
    return str.replace(/<\/?.+?\/?>/g, "")
}

/**
 *
 */
export function generateVisitorId() {
    function randomNum(Min, Max) {
        var Range = Max - Min;
        var Rand = Math.random();
        return Min + Math.round(Rand * Range);
    }
    return new Date().getTime() + "-" + randomNum(100000, 999999);
}

/**
 * 吐司提示
 */
export const toast = (str, time = 2000) => {
  var dom = document.createElement('div')
  var toast = document.getElementById('toast-temporary')
  if (toast) {
    toast.innerText = str
  } else {
    dom.style = 'position:fixed;z-index:100003;left:50%;top:45%;transition:all .5s;font-size: 16px;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);-o-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);text-align:center;border-radius:5px;color:#FFF;background:rgba(17,17,17,0.7);line-height:1.75;padding:8px 15px;'
    dom.id = 'toast-temporary'
    dom.innerText = str
    document.body.appendChild(dom)
    setTimeout(function () {
      document.body.removeChild(dom)
    }, time)
  }
}

/**
* 获取URL参数
*/
export const parseUrlSearch = () => {
    return location.search.replace(/(^\?)|(&$)/g, "").split("&").reduce((t, v) => {
        const [key, val] = v.split("=");
        t[key] = decodeURIComponent(val);
        return t;
    }, {});
}

/**
 * 全局监听图片加载失败
 * <img avatar src="xxx"/>
 */
document.addEventListener('error', function (e) {
  var elem = e.target
  // 监听头像加载失败
  if (elem.tagName.toLowerCase() === 'img' && elem.hasAttribute('avatar')) {
    elem.src = 'default img'
  }
}, true)
 
/**
 * 金额三位间隔
 */
export const interval = key => {
  key += "";
  let x = key.split(".");
  let x1 = x[0];
  let x2 = x.length > 1 ? "." + x[1] : "";
  let reg = /(\d+)(\d{3})/;
  while (reg.test(x1)) {
    x1 = x1.replace(reg, "$1" + "," + "$2");
    x2 = x2.replace(reg, "$1" + "," + "$2");
  }
  return x1 + x2;
};

/**
 * 号码隐私保护
 */

export const phoneChange = (str) => {
  return str.substring(0, 3) + '****' + str.substring(str.length - 4);
}

/**
 * 防抖
 * fn 需要防抖的函数
 * delay 间隔时间
 * type 执行方式 type true 立即执行 false 延迟执行
 */
export const debounce = (fn, delay) => {
  var enterTime = 0;
  var gapTime = delay || 300;
  return function () {
    var context = this;
    var backTime = new Date();
    if (backTime - enterTime > gapTime) {
      fn.call(context, arguments);
      enterTime = backTime;
    }
  };
}

export const debounce = (fn, delay, type = true) => {
  let timer = null
  return function (...args) {
    timer && clearTimeout(timer)
    type && !timer && fn.apply(this, args)
    timer = setTimeout(() => {
        timer = null
        !type && fn.apply(this, args)
    }, delay)
  };
}

/*
 * 节流    
 */
export const throttle = (fn, delay) => {
  var enterTime = 0;
  var gapTime = delay || 300;
  return function () {
    var context = this;
    var backTime = new Date();
    if (backTime - enterTime > gapTime) {
      fn.call(context, arguments);
      enterTime = backTime;
    }
  };
}

export const throttle = (fn, delay, type = true) => {
  let timer = null
  return function (...args) {
    if (!timer) {
      timer = setTimeout(() => {
        timer = null
        !type && fn.apply(this, args)
      }, delay)
      type && fn.apply(this, args)
    }
  };
}

/**
 * 身份证
 */
export const validIdCard = (str) => {
  const reg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
  return reg.test(str)
}

/* 
 *合法url
 */
export const validateURL = (textval) => {
  const urlregex = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/
  return urlregex.test(textval)
}

/*
 * 文字转base64图片
 */
export const textToImg = (name) => {
  const num = parseInt(Math.random() * 100)
  const w = 96
  const h = 96
  const can = document.createElement('canvas')
  can.width = w
  can.height = h
  const _ctxt = can.getContext('2d')
  ctxt.fillStyle = '#fff'
  _ctxt.fillRect(0, 0, w, h)
  _ctxt.font = 'bolder 40px 宋体'
  _ctxt.fillStyle = '#000'
  _ctxt.textAlign = 'center'
  _ctxt.textBaseline = 'middle'
  _ctxt.fillText(name, w / 2, h / 2)
  return can.toDataURL()
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值