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, // 获取最小值
|
|||
|
|
}
|