102 lines
2.7 KiB
JavaScript
102 lines
2.7 KiB
JavaScript
/**
|
||
* @Author: weilan
|
||
* @Date: 2019-12-02
|
||
*/
|
||
"use strict";
|
||
import Vue from "vue";
|
||
import dayjs from 'dayjs' // 导入日期js
|
||
|
||
/**
|
||
* 将树形数据向下递归为一维数组
|
||
* @param {*} arr 数据源
|
||
* @param {*} childs 子集key
|
||
*/
|
||
function flattenDeep(arr = [], childs = "Children") {
|
||
return arr.reduce((flat, item) => {
|
||
return flat.concat(
|
||
item,
|
||
item[childs] ? flattenDeep(item[childs], childs) : []
|
||
);
|
||
}, []);
|
||
}
|
||
|
||
/**
|
||
* 深拷贝
|
||
* @param {*} source 要拷贝的数据
|
||
*/
|
||
function deepClone(source) {
|
||
if (!source && typeof source !== "object") {
|
||
throw new Error("error arguments", "shallowClone");
|
||
}
|
||
const targetObj = source.constructor === Array ? [] : {};
|
||
Object.keys(source).forEach(keys => {
|
||
if (source[keys] && typeof source[keys] === "object") {
|
||
targetObj[keys] = source[keys].constructor === Array ? [] : {};
|
||
targetObj[keys] = deepClone(source[keys]);
|
||
} else {
|
||
targetObj[keys] = source[keys];
|
||
}
|
||
});
|
||
return targetObj;
|
||
}
|
||
|
||
/**
|
||
* 筛选出数组中最大值
|
||
* @param {*} arr 数据
|
||
* @param {*} key 如果是复杂型数组,请指定字段key
|
||
* @param {*} stamp 如果是时间格式,请设置以转化时间戳
|
||
*/
|
||
function getMax(arr = [], key = null, stamp = false) {
|
||
let _o = !key ? arr : arr.map(i => i[key]);
|
||
let _t = !stamp ? _o : _o.map(i => dayjs(i).valueOf());
|
||
return Math.max(..._t);
|
||
}
|
||
|
||
/**
|
||
* 筛选出数组中最小值
|
||
* @param {*} arr 数据
|
||
* @param {*} key 如果是复杂型数组,请指定字段key
|
||
* @param {*} stamp 如果是时间格式,请设置以转化时间戳
|
||
*/
|
||
function getMin(arr = [], key = null, stamp = false) {
|
||
let _o = !key ? arr : arr.map(i => i[key]);
|
||
let _t = !stamp ? _o : _o.map(i => dayjs(i).valueOf());
|
||
return Math.min(..._t);
|
||
}
|
||
|
||
function deepChangeObject(data) {
|
||
let tmp = [];
|
||
Array.from(data).forEach(function (record) {
|
||
Vue.set(record, "_level", _level);
|
||
Vue.set(record, "_parents", _parents);
|
||
|
||
Vue.set(record, "_level", _level);
|
||
if (record.startDate && record.endDate) {
|
||
let days = dayjs(record.endDate).diff(dayjs(record.startDate), 'day');
|
||
Vue.set(record, "_duration", days);
|
||
}
|
||
if (record.startDate) {
|
||
Vue.set(record, "_old_startDate", record.startDate);
|
||
}
|
||
if (record.endDate) {
|
||
Vue.set(record, "_old_endDate", record.endDate);
|
||
}
|
||
// 如果有父元素
|
||
if (parent) {
|
||
Vue.set(record, "_parent", parent);
|
||
}
|
||
tmp.push(record);
|
||
if (record[children] && record[children].length > 0) {
|
||
deepChangeObject(record[children], children, record, _level);
|
||
}
|
||
});
|
||
return tmp;
|
||
}
|
||
|
||
export {
|
||
flattenDeep, // 将树转化为一维数组
|
||
deepClone, // 深拷贝
|
||
getMax, // 获取最大值
|
||
getMin, // 获取最小值
|
||
}
|