vue常用方法

封装 @/utils下的index.js中

import moment from "moment";

/**
 * UTC时间转本地时间
 * @param utc  utc时间
 * @param format  要转换的格式
 * @returns {string}
 */
const utc2localDate = (utc, format = "YYYY-MM-DD HH:mm:ss") => {
  if (utc == null) {
    return "";
  } else {
    return moment(utc).format(format);
  }
};

/**
 * 本地时间转UTC时间
 * @param local
 * @returns {string}
 */
const localDate2utc = local => {
  return moment(local)
    .utc()
    .format();
};

// 时间比较大小
function bjDate(date) {
  var date = new Date(date);
  var date1 = new Date();
  if (date.getTime() - date1.getTime() < 0) {
    return false
  } else {
    return true
  }
}

/**
 * 计算时间差
 * @param startDate 开始时间
 * @param endDate 结束时间
 * @returns {object}
 */
function dateDifference(startDate, endDate) {
  let stime = Date.parse(new Date(startDate));
  let etime = Date.parse(new Date(endDate));
  // 两个时间戳相差的毫秒数
  let usedTime = etime - stime;
  // 计算相差的天数
  let days = Math.floor(usedTime / (24 * 3600 * 1000));
  // 计算天数后剩余的毫秒数
  let leave1 = usedTime % (24 * 3600 * 1000);
  // 计算出小时数
  let hours = Math.floor(leave1 / (3600 * 1000));
  // 计算小时数后剩余的毫秒数
  let leave2 = leave1 % (3600 * 1000);
  // 计算相差分钟数
  let minutes = Math.floor(leave2 / (60 * 1000));
  // 计算分钟数后剩余的毫秒数
  let leave3 = leave2 % (60 * 1000);
  // 计算相差分钟数
  let second = Math.floor(leave3 / (1000));
  let time = {
    days,
    hours,
    minutes,
    second
  }
  return time;
}

// 获取文件名后缀
function getSuffix(fileName) {
  let pos = fileName.lastIndexOf('.');
  let suffix = '';
  if (pos !== -1) {
    suffix = fileName.substring(pos + 1);
  }
  return suffix.toLowerCase();
}

// 判断数组内属性值相等时,只保留一个
function unique(arr, key) {
  const result = [arr[0]]
  for (let i = 1; i < arr.length; i++) {
    let item = arr[i]
    let repeat = false
    for (let j = 0; j < result.length; j++) {
      if (item[key] === result[j][key]) {
        repeat = true
        break
      }
    }
    if (!repeat) {
      result.push(item)
    }
  }
  return result
}

// 时间格式校验 2023-04-03T01:57:00Z
function isDateTimeString(str) {
  const regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}\+\d{2}:\d{2}$/;
  return regex.test(str);
}

// 去除空格返回数据
const formatTrimValue = data => {
  let trimData = data;
  formatArrOrObjTrimValue(trimData);
  return trimData;
}

// 去空格
const formatArrOrObjTrimValue = val => {
  for (let i in val) {
    if (typeof val[i] === 'string' && val[i].length > 0) {
      val[i.trim()] = val[i].trim();
      // 如果key两端有空格
      if (i.trim().length < i.length) {
        delete val[i];
      }
    }
    else if (
      isAnyObject(val[i]) ||
      (Array.isArray(val[i]) && val[i].length > 0)
    ) {
      val[i.trim()] = val[i];
      // 如果key两端有空格
      if (i.trim().length < i.length) {
        delete val[i];
      }
      formatArrOrObjTrimValue(val[i.trim()])
    }
  }
}

// 判断是否为json字符串
const jsonType = (str) => {
  if (typeof str == 'string') {
    try {
      var obj = JSON.parse(str);
      // 等于这个条件说明就是JSON字符串 会返回true
      if (typeof obj == 'object' && obj) {
        return true;
      } else {
        //不是就返回false
        return false;
      }
    } catch (e) {
      return false;
    }
  }
  return false;
}

// 异步加载js文件
const loadScripts = (urls, callback) => {
  return new Promise(function (resolve, reject) {
    let count = urls.length; // 记录需要加载的 JS 插件数量
    const loadScript = (url) => {
      const scripts = document.getElementsByTagName('script');
      for (let i = 0; i < scripts.length; i++) {
        if (scripts[i].src == url) {
          count--; // 每完成加载一个 JS 插件,数量减 1
          if (count == 0) {
            resolve(); // 所有 JS 插件加载完成后执行回调函数
          }
          return;
        }
      }
      const script = document.createElement('script');
      script.type = 'text/javascript';
      if (script.readyState) {
        script.onreadystatechange = function () {
          if (script.readyState == "loaded" || script.readyState == "complete") {
            script.onreadystatechange = null;
            count--; // 每完成加载一个 JS 插件,数量减 1
            if (count == 0) {
              resolve(); // 所有 JS 插件加载完成后执行回调函数
            }
          }
        }
      } else {
        script.onload = function () {
          count--; // 每完成加载一个 JS 插件,数量减 1
          if (count == 0) {
            resolve(); // 所有 JS 插件加载完成后执行回调函数
          }
        }
      }
      script.onerror = function () {
        reject();
      };
      script.async = true;
      script.src = url;
      document.head.appendChild(script);
    }
    for (let i = 0; i < urls.length; i++) {
      loadScript(urls[i]);
    }
  })
}

// 判断是否为对象
const isAnyObject = val => Object.prototype.toString.call(val) === '[object Object]'

/**
 * 数组去重
 * @param arr
 * @param key
 * @returns {arr}
 */
const duplication = function (arr, key) {
  var result = [];
  var obj = {};
  for (var i = 0; i < arr.length; i++) {
    if (!obj[arr[i][key]]) {
      result.push(arr[i]);
      obj[arr[i][key]] = true;
    }
  }
  return result;
};

/**
 * 判断str是否存在汉字
 * @param str
 * @returns {boolean}
 */
const hasHanZi = function (str) {
  if (/.*[\u4e00-\u9fa5]+.*$/.test(str)) return false;
  return true;
};

/**
 * 根据数组中对象的某个字段排序
 * @param props 进行排序的字段
 * @param type 排序规则 ascend 升序 descend降序
 * @returns {*}
 */
function sortBy(props, type) {
  return function (a, b) {
    if (type == 'ascend') {
      return b[props] - a[props];
    } else if (type == 'descend') {
      return a[props] - b[props];
    }
  }
}

/**
 * 深拷贝对象
 * @param ori
 * @returns {Array|any}
 */
function deepClone(ori) {
  const type = getType(ori);
  let copy;
  switch (type) {
    case "array":
      return copyArray(ori, type, copy);
    case "object":
      return copyObject(ori, type, copy);
    default:
      return ori;
  }
}

/**
 * 拷贝数组
 * @param ori
 * @param type
 * @param copy
 * @returns {Array}
 */
function copyArray(ori, type, copy = []) {
  for (const [index, value] of Object.entries(ori)) {
    copy[index] = deepClone(value);
  }
  return copy;
}

/**
 * 拷贝对象
 * @param ori
 * @param type
 * @param copy
 */
function copyObject(ori, type, copy = {}) {
  for (const [key, value] of Object.entries(ori)) {
    if (getType(value) === "function") {
      copy[key] = ori[key];
    } else {
      copy[key] = deepClone(value);
    }
  }
  return copy;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值