# 工具函数
// 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);
}
}