# 工具函数


// import Vue from 'vue'
export function userIDs () {
  // 测试(写死账号id)
  return '8a818a396cae816e016caea67baf13f9'
}
// 工程id
export function projectId () {
  // 测试(写死账号id)
  return '402881826f36432c016f3abfd42c0101'
}
export function dateFormat (date, format) {
  date = new Date(date);
  date.setHours(date.getHours()-14);
  var o = {
      'M+' : date.getMonth() + 1, //month
      'd+' : date.getDate(), //day
      'H+' : date.getHours(), //hour
      'm+' : date.getMinutes(), //minute
      's+' : date.getSeconds(), //second
      'q+' : Math.floor((date.getMonth() + 3) / 3), //quarter
      'S' : date.getMilliseconds() //millisecond
  };

  if (/(y+)/.test(format))
      format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));

  for (var k in o)
      if (new RegExp('(' + k + ')').test(format)){
          format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
      }
  return format;
}
export function formatDateTime (dates) {
  if (dates !== undefined) {
    var date = new Date(dates)
    var y = date.getFullYear()
    var m = date.getMonth() + 1
    m = m < 10 ? ('0' + m) : m
    var d = date.getDate()
    d = d < 10 ? ('0' + d) : d
    return y + '-' + m + '-' + d
  } else {
    var dated = new Date()
    var ys = dated.getFullYear()
    var ms = dated.getMonth() + 1
    ms = ms < 10 ? ('0' + ms) : ms
    var ds = dated.getDate()
    ds = ds < 10 ? ('0' + ds) : ds
    return ys + '-' + ms + '-' + ds
  }
}
export function getDate (str) {
  var oDate = new Date(str)
  var oYear = oDate.getFullYear()
  var oMonth = oDate.getMonth() + 1
  var oDay = oDate.getDate()
  var oHour = oDate.getHours()
  var oMin = oDate.getMinutes()
  var oSec = oDate.getSeconds()
  var oTime = oYear + '-' + getzf(oMonth) + '-' + getzf(oDay) + ' ' + getzf(oHour) + ':' + getzf(oMin) + ':' + getzf(oSec)
  return oTime
}
export function format (datetime, fmt) {
  if (!datetime) return ''
  if (!fmt)fmt = 'yyyy-MM-dd hh:mm'
  if (parseInt(datetime) === datetime) {
    if (datetime.length === 10) {
      datetime = parseInt(datetime) * 1000
    } else if (datetime.length === 13) {
      datetime = parseInt(datetime)
    }
  }
  datetime = new Date(datetime)
  var o = {
    'M+': datetime.getMonth() + 1,                 // 月份
    'd+': datetime.getDate(),                    // 日
    'h+': datetime.getHours(),                   // 小时
    'm+': datetime.getMinutes(),                 // 分
    's+': datetime.getSeconds(),                 // 秒
    'q+': Math.floor((datetime.getMonth() + 3) / 3), // 季度
    'S': datetime.getMilliseconds()             // 毫秒
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (datetime.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }
  return fmt
}

export function getzf (num) {
  if (parseInt(num) < 10) {
    num = '0' + num
  }
  return num
}
// 自动生成uuid
export function uuid () {
  var s = []
  var hexDigits = '0123456789abcdef'
  for (var i = 0; i < 32; i++) {
    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)
  }
  s[14] = '4'
  s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1)
  var uuid = s.join('')
  return uuid
}
// pk
var pk
export function pks (data) {
  pk = data
}
export function pked () {
  return pk === '' ? '' : pk
}
var pking
export function pksing (data) {
  pking = data
}
export function pkeding () {
  return pking === '' ? '' : pking
}
export function fD (a, b, c) {
  for (; a > c;) { a -= c - b }
  for (; a < b;) { a += c - b }
  return a
}
function jD (a, b, c) {
  b != null && (a = Math.max(a, b))
  c != null && (a = Math.min(a, c))
  return a
}
function yk (a) {
  return Math.PI * a / 180
}
function Ce (a, b, c, d) {
  var dO = 6370996.81
  return dO * Math.acos(Math.sin(c) * Math.sin(d) + Math.cos(c) * Math.cos(d) * Math.cos(b - a))
}
function getDistance (a, b) {
  if (!a || !b) { return 0 }
  a.lng = fD(a.lng, -180, 180)
  a.lat = jD(a.lat, -74, 74)
  b.lng = fD(b.lng, -180, 180)
  b.lat = jD(b.lat, -74, 74)
  return Ce(yk(a.lng), yk(b.lng), yk(a.lat), yk(b.lat))
}
var loadings
export function loadingBools (data) {
  loadings = data
}
export function loadinged () {
  return loadings === undefined ? '' : loadings
}
// 控制拦截器里面的数据加载条
// 全局变量记录处理文书数据

export default {
  loadinged,
  loadingBools,
  pksing,
  pkeding,
  pks,
  pked,
  userIDs,
  formatDateTime,
  getDate,
  getzf,
  uuid,
  format,
  getDistance,
  projectId,
  dateFormat
}

# 重组树结构

  • 源码
const reorganizeTree = (
  treeArr = [],
  id = null,
  link = "parentId",
  idName = "key"
  ) =>
    treeArr.filter((itemF) => itemF[link] === id)
      .map((itemM) => ({
        ...itemM,
        children: reorganizeTree(treeArr, itemM[idName], link, idName),
          }));
  • 参数:
treeArr: 原始的具有parentId的一维数组数据。
id: 每个item对象的唯一id。
[link = 'parentId']: 存储parentId值的属性名称。
[idName = 'key']: 存储id值的属性名称。

返回:
(Array): 重组完成的树形结构数组。
  • 例子
const treeData = [
        { id: 1, parent_id: null },
        { id: 2, parent_id: 1 },
        { id: 3, parent_id: 1 },
        { id: 4, parent_id: 2 },
        { id: 5, parent_id: 4 },
      ];
 reorganizeTree(treeData,null,'parent_id','id');

# 解析URL参数

  • 源码
// URLSearchParams 实现
const getSearchParams = () => {
 const searchPar = new URLSearchParams(window.location.search);
 const paramsObj = {};
 for (const [key, value] of searchPar.entries()) {
   paramsObj[key] = value;
 }
 return { paramsObj, searchPar };
     };
  • 例子
const test = `https://****com/searchPage?wd=URLSearchParams&age=18`;
getSearchParams(test); // {wd: "URLSearchParams", age: "18"}

# 数组对象根据字段去重

/**
 * 数组对象根据字段去重
 * @param {Array} arr 原数组
 * @param {Array} arr2 新添加数组
 * @param {String} prop 根据去重的字段名
 * @returns {Array} 去重后新数组
 */
export const removeDuplicate = function(arr = [], arr2 = [], prop = "id") {
  const rawList = [...arr, ...arr2];
  let list = [];
  if (rawList.length) {
    let map = {};
    rawList.forEach((item) => {
      if (!map[item[prop]]) {
        map[item[prop]] = item;
      }
    });
    list = Object.values(map);
  }

  return list;
};

# 基于 URL 生成UUID

export const genUUID= () => {
    const url = URL.createObjectURL(new Blob([]));
    // const uuid = url.split("/").pop();
    const uuid = url.substring(url.lastIndexOf('/')+ 1);
    URL.revokeObjectURL(url);
    return uuid;
}

genUUID() // cd205467-0120-47b0-9444-894736d873c7

# 数字转化为大写金额

export const digitUppercase = (n) => {
    const fraction = ['角', '分'];
    const digit = [
        '零', '壹', '贰', '叁', '肆',
        '伍', '陆', '柒', '捌', '玖'
    ];
    const unit = [
        ['元', '万', '亿'],
        ['', '拾', '佰', '仟']
    ];
    n = Math.abs(n);
    let s = '';
    for (let i = 0; i < fraction.length; i++) {
        s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
    }
    s = s || '整';
    n = Math.floor(n);
    for (let i = 0; i < unit[0].length && n > 0; i++) {
        let p = '';
        for (let j = 0; j < unit[1].length && n > 0; j++) {
            p = digit[n % 10] + unit[1][j] + p;
            n = Math.floor(n / 10);
        }
        s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
    }
    return s.replace(/(零.)*零元/, '元')
        .replace(/(零.)+/g, '零')
        .replace(/^整$/, '零元整');
};

# 滚动到页面顶部

export const scrollToTop = () => {
  const height = document.documentElement.scrollTop || document.body.scrollTop;
  if (height > 0) {
    window.requestAnimationFrame(scrollToTop);
    window.scrollTo(0, height - height / 8);
  }
}
Last Updated: 8/15/2022, 5:59:09 PM