Tools

作者: 我的钱包瘪瘪的 | 来源:发表于2019-10-22 10:46 被阅读0次

    项目常用工具

    /**
     * 常量及公共方法
     */
    
    // export const APPID = '';
    import CryptoJS from 'crypto-js'
    export const APPSECRET = ''
    export const APPID = ''
    
    function getBackHost() {
      let src = window.location.protocol + '//' + window.location.host
      return src
    }
    
    export function isIos() {
      let u = navigator.userAgent
      let _isIos = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) //ios终端
      return _isIos
    }
    
    export function getSearchQueryString(name) {
      let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
      let search = window.location.search
      let r = search.substr(search.indexOf('?') + 1).match(reg)
      if (r != null) return decodeURI(r[2])
      return ''
    }
    
    export function getHashQueryString(name) {
      let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
      let hash = window.location.hash
      let r = hash.substr(hash.indexOf('?') + 1).match(reg)
      if (r != null) return decodeURI(r[2])
      return ''
    }
    
    /**
     * @description 获取url中的所有参数
     * @return {object} 如:{a:3,b:4}
     * 直接获取url上的参数
     * getUrlParamsObj().recordId
     */
    export function getUrlParamsObj() {
      const href = window.location.href
      const urlPath = href.substring(href.lastIndexOf('?') + 1)
      let params = {}
      urlPath.replace(/([^?&=#]+)=([^?&=#]*)/g, (match, $1, $2) => {
        let key = decodeURIComponent($1)
        let value = decodeURIComponent($2)
        params[key] = value
      })
      return params
    }
    
    export function getUrlParamsObj2() {
      const href = window.location.href
      const urlPath = href.substring(href.indexOf('?')[0] + 1)
      let params = {}
      urlPath.replace(/([^?&=#]+)=([^?&=#]*)/g, (match, $1, $2) => {
        let key = decodeURIComponent($1)
        let value = decodeURIComponent($2)
        params[key] = value
      })
      return params
    }
    
    /**
     * @description 给url添加参数
     * @return {string} 如: '?k1=v1&k2=v2' 
     * 
     * const urlSearch = objParamsToUrlStr({ recordId });
     * this.props.history.push({ pathname: "/mineAwardDetail", search: urlSearch });
     */
    export function objParamsToUrlStr(obj) {
      if (typeof obj !== 'object') return ''
      let str = ''
      for (let key in obj) {
        str += '&' + key + '=' + obj[key]
      }
      return '?' + str.substring(1)
    }
    
    export function toUtcTime(date) {
      let y = date.getUTCFullYear()
      let m = date.getUTCMonth()
      let d = date.getUTCDate()
      let h = date.getUTCHours()
      let M = date.getUTCMinutes()
      let s = date.getUTCSeconds()
      m = FormateNum(m + 1)
      d = FormateNum(d)
      h = FormateNum(h)
      M = FormateNum(M)
      s = FormateNum(s)
      let utc = y + '-' + m + '-' + d + ' ' + h + ':' + M + ':' + s
      console.log(utc)
      return utc
    }
    /**
     * 格式化时间函数
     * @param    {string}   date   日期字符串或时间戳
     * @param    {string}   format 格式,缺省为:yyyy-MM-dd hh:mm:ss
     * @param    {Boolean}  isUTC  是否UTC时间,如传入为UTC时间,将自动转为本地时间
     * @return   {string}          按format格式输出日期
     */
    export function dateFormat(date, format, isUTC) {
      var timezoneOffset = 0
      var dateObj = new Date(date)
      var patt = /^(?:(\d+)-(\d+)-(\d+))?\s?(?:(\d+):(\d+):(\d+))?$/
      var dateArr
      var now = new Date()
      // IOS 解析失败时尝试手动解析
      if (dateObj.toString() === 'Invalid Date' && typeof date === 'string') {
        dateArr = date.match(patt) || []
        dateObj = new Date(
          dateArr[1] || now.getFullYear(),
          dateArr[2] - 1 + '' || now.getMonth(),
          dateArr[3] || now.getDate(),
          dateArr[4] || now.getHours(),
          dateArr[5] || now.getMinutes(),
          dateArr[6] || now.getSeconds()
        )
      }
      format = format || 'yyyy-MM-dd hh:mm:ss'
      if (isUTC) {
        // 处理utc时间
        timezoneOffset = new Date().getTimezoneOffset()
        dateObj.setMinutes(dateObj.getMinutes() - timezoneOffset)
      }
      var map = {
        M: dateObj.getMonth() + 1, //月份
        d: dateObj.getDate(), //日
        h: dateObj.getHours(), //小时
        m: dateObj.getMinutes(), //分
        s: dateObj.getSeconds(), //秒
        q: Math.floor((dateObj.getMonth() + 3) / 3), //季度
        S: dateObj.getMilliseconds() //毫秒
      }
      format = format.replace(/([yMdhmsqS])+/g, function(all, t) {
        var v = map[t]
        if (v !== undefined) {
          if (all.length > 1) {
            v = '0' + v
            v = v.substr(v.length - 2)
          }
          return v
        } else if (t === 'y') {
          return (dateObj.getFullYear() + '').substr(4 - all.length)
        }
        return all
      })
      return format
    }
    
    // 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
    export function scrollTop(val, elem) {
      if (elem && !this.isDOM(elem)) {
        return
      }
    
      if (!this._isEmpty(val) && this.isNumber(val)) {
        if (elem) {
          elem.scrollTop = val
          elem.scrollTop = val
        } else {
          setTimeout(() => {
            document.documentElement.scrollTop = val
            // console.log(document.documentElement.scrollTop);
            document.body.scrollTop = val
          }, 10)
        }
      } else {
        var scrollTop
        if (elem) {
          scrollTop = elem.scrollTop
          return scrollTop
        } else {
          scrollTop =
            document.documentElement.scrollTop ||
            window.pageYOffset ||
            document.body.scrollTop
          return scrollTop
        }
      }
    }
    
    //生成签名(公司内部, 不同产品, appsecret是不一样)
    // const url = `/getVeriCode`;
    // let opts = {
    //     appId,
    //     timestamp,
    //     mobilePhone: phone ? phone.replace(/\s/g, '') : '',
    // }
    // const sign = calcSign('POST', url, opts, appSecret);
    // opts.sign = sign;
    export function calcSign(type, url, data, appSecret) {
      appSecret = APPSECRET
      url = `https://${window.location.host}${url}`
      // console.log(888, url);
      //计算签名通用函数
      if (!data || typeof data !== 'object') return
      var arr = []
      for (var key in data) {
        //检出所有key
        if (data.hasOwnProperty(key)) arr.push(key)
      }
      arr.sort() //排序
      var str1 = type === 'GET' || type === 'get' ? 'GET' : 'POST'
      var signStr = str1 + url
      arr.forEach(function(item, index) {
        if (index === 0) {
          signStr = signStr + item + '=' + data[item]
        } else {
          signStr = signStr + '&' + item + '=' + data[item]
        }
      })
      signStr = signStr + '&' + appSecret //按指定规则生成签名
      // let CryptoJS = require('./md5.js');
      return CryptoJS.enc.Hex.stringify(CryptoJS.MD5(signStr)) //返回签名
    }
    
    /*
    * 验证手机号码的格式
    */
    export const checkTelephone = (val) => {  
      return /^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(phone.replace(/\s/g, ''));
    };
    

    相关文章

      网友评论

          本文标题:Tools

          本文链接:https://www.haomeiwen.com/subject/uwzfvctx.html