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, ''));
};

相关文章

  • 论文日鉴16:综合生信工具网站

    Bio.tools bio.tools · Bioinformatics Tools and Services D...

  • 简谈platform-tools,build-tools,too

    如果所示,platform-tools,build-tools,tools几个文件夹。 plat...

  • centos 7 setup minikube k8s env

    tools These tools just for virtual cloud compute machine ...

  • Tools

    完全理解Gson(3):Gson反序列化 完全理解Gson(2):Gson序列化 完全理解Gson(1):简单入门...

  • Tools

    GitHub; Google Browser:already comes with CDT (Chrome Dev...

  • Tools

    cut cut这个工具主要是用来从文本中抽取文本的今天我主要学习的使用是这样的情况,举个例子吧。我们创建一个jyq...

  • Tools

    1.CocoaPods:http://ishalou.com/blog/2012/10/15/how-to-use...

  • tools

    查看假数据, 只会出现在设计模式(预览)中. tools:text="fake data"

  • Tools

    项目常用工具

  • tools

网友评论

      本文标题:Tools

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