vue 公共方法----utils.js

70 阅读2分钟
import { ElMessage } from "element-plus";
export function locget(str) {
  let _val = localStorage.getItem(str) ? localStorage.getItem(str) : null;
  return _val;
}

export function locset(str, val) {
  localStorage.setItem(str, val);
}

export function locremove(str) {
  localStorage.removeItem(str);
}

export function getSessionStore(str) {
  let _val = sessionStorage.getItem(str) ? sessionStorage.getItem(str) : null;
  return _val;
}

export function setSessionStore(str, val) {
  sessionStorage.setItem(str, val);
}

export function getcookie(objname) {
  let arrstr = document.cookie.split("; ");
  for (let i = 0; i < arrstr.length; i++) {
    let temp = arrstr[i].split("=");
    if (temp[0] == objname) return unescape(temp[1]);
  }
}

export function setcookie(cname, cvalue, exdays = 15, path = "/") {
  let d = new Date();
  d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
  let expires = "expires=" + d.toGMTString();
  document.cookie =
    cname + "=" + cvalue + "; " + expires + "; " + "path=" + path + "; ";
}

export function rmSessionStore(str) {
  sessionStorage.removeItem(str);
}

//   1100 => 1,000
export function thousandNum(num) {
  return num >= 1000
    ? num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")
    : num;
}

// 1250 = 1.3K  1370000 = 1.4M
export function thousandNumNext(num) {
  Math.round(num * 10) / 10;
  if (num > 1000000) {
    num = `${(num / 1000000).toFixed(1)}M`;
  } else if (num > 1000) {
    num = `${(num / 1000).toFixed(1)}K`;
  } else {
    num = num;
  }
  return num;
}

export function doubleNum(num) {
  return num < 10 ? `0${num}` : num;
}

//  03/06/2019
export function formatTime(cTime) {
  let newDate;
  cTime = parseInt(cTime);
  let date = new Date(cTime);
  let year = date.getFullYear();
  let month = date.getMonth() + 1;
  let day = date.getDate();
  month = month < 10 ? "0" + month : month;
  day = day < 10 ? "0" + day : day;
  newDate = day + "/" + month + "/" + year + "";
  return newDate;
}

export function countdown(time, fun) {
  if (time <= 0) return;
  time -= 1000;
  var scend = parseInt((time / 1000) % 60);
  var minute = parseInt((time / 1000 / 60) % 60);
  var hour = parseInt((time / 1000 / 60 / 60) % 24);
  const _tim = setTimeout(countdown.bind(this, time, fun), 1000);
  fun({
    seconds: doubleNum(scend),
    minutes: doubleNum(minute),
    hours: doubleNum(hour),
    timmer: _tim,
  });
  if ((time = 0)) {
    clearTimeout(_tim);
  }
}

// 省市区回显
export function findAddressByCode(data, code) {
  for (let index = 0; index < data.length; index++) {
    const item = data[index];
    if (!item.list) {
      continue;
    }
    for (let idx = 0; idx < item.list.length; idx++) {
      const itm = item.list[idx];
      if (!itm || !itm.list) {
        continue;
      }
      const it = itm.list.find((it) => it.code == code);
      if (it) {
        return `${item.name}/${itm.name}/${it.name}`;
      }
    }
  }
}

// 防抖
export function _debounce(fn, delay) {
  var delay = delay || 200;
  var timer;
  return function () {
    var th = this;
    var args = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(function () {
      timer = null;
      fn.apply(th, args);
    }, delay);
  };
}
// 节流
export function _throttle(fn, interval) {
  var last;
  var timer;
  var interval = interval || 200;
  return function () {
    var th = this;
    var args = arguments;
    var now = +new Date();
    if (last && now - last < interval) {
      clearTimeout(timer);
      timer = setTimeout(function () {
        last = now;
        fn.apply(th, args);
      }, interval);
    } else {
      last = now;
      fn.apply(th, args);
    }
  };
}

export function changeURLArg(url, arg, arg_val) {
  var pattern = arg + "=([^&]*)";
  var replaceText = arg + "=" + arg_val;
  if (url.match(pattern)) {
    var tmp = "/(" + arg + "=)([^&]*)/gi";
    tmp = url.replace(eval(tmp), replaceText);
    return tmp;
  } else {
    if (url.match("[?]")) {
      return url + "&" + replaceText;
    } else {
      return url + "?" + replaceText;
    }
  }
}

// 校验pc端还是手机端
export function checkMobile() {
  console.log('isMobile')
  let flag = navigator.userAgent.match(
      /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
  );
  return flag;
}

// yyyy.mm.dd hh:mm
export function timestampToTime(timestamp) {
  var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  var Y = date.getFullYear() + '.';
  var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1):date.getMonth()+1) + '.';
  var D = (date.getDate()< 10 ? '0'+date.getDate():date.getDate())+ ' ';
  var h = (date.getHours() < 10 ? '0'+date.getHours():date.getHours())+ ':';
  var m = (date.getMinutes() < 10 ? '0'+date.getMinutes():date.getMinutes());
  // var s = date.getSeconds() < 10 ? '0'+date.getSeconds():date.getSeconds();
  return Y+M+D+h+m;
}


// 校验站内或者站外
export function checkApp() {
  let userAgent = navigator.userAgent;
  // console.log('userAgent',userAgent)
  let uaList = ['','']; //站内的标记
  let flag  = uaList.findIndex((item)=>{
    return item && userAgent.includes(item)
  })
  if (flag !== -1){
    return true
  }else{
    return false
  }
}

export function addQueryParams(url, params) {
  // 解析现有的URL
  let urlObj = new URL(url);
  
  // 遍历要添加的参数
  for (let [key, value] of Object.entries(params)) {
      urlObj.searchParams.set(key, value);
  }
  
  // 返回新的URL字符串
  return urlObj.toString();
}

// 判断是否跳站内或者站外 webUrl:站内url  storeLink:app store url
export function goAppOrNot (webUrl, storeLink ){
  window.location.href = webUrl;
  var timer = setTimeout(function () {
    window.location.href = storeLink;
  }, 3000);
  document.addEventListener("visibilitychange", () => {
    if (document.hidden) {
      timer && clearTimeout(timer);
    }
  });
  document.addEventListener("webkitvisibilitychange", (event) => {
    var hidden = event.target.webkitHidden;
    if (hidden) {
      // 离开当前tab标签
      timer && clearTimeout(timer);
    }
  });
  window.addEventListener("pagehide", function (event) {
    timer && clearTimeout(timer);
  });
  return;
}

// 判断app版本号是否更新 需要更新调用  不需要不调用
export function appUpdate (newVision,storeLink){
  let userAgent = navigator.userAgent;
  if (+userAgent.split("/")[1].replace(/\./g, "").substring(0, 3) < newVision) {
    window.location.href = storeLink;
    return;
  }
}

// 判断是否是json格式
export function isJSON(str) {
  console.log('gl----str',str);
  if(!str){
    return false;
  }
  if (typeof str == 'string') {
    try {
      var obj= JSON.parse(str);
      if(typeof obj == 'object' && obj ){
        return true;
      }else{
        return false;
      }
    }catch(e) {
      return false;
    }
  }
}

// 限制输入框输入的字符数
export function  widthCheck (str, len) {
  let temp = 0;
  for (let i = 0; i < str.length; i++) {
    if (/[\u4e00-\u9fa5]/.test(str[i])) {
      temp += 2;
    } else {
      temp++;
    }
    if (temp > len) {
      str = str.substr(0, i);
      ElMessage.error("Word limit reached");
    }
  }
  return str;
};