// 工具函数类
//对应下拉列表 获取对应的label值 value对应的value arr对应OPRUNSTATUS
//OPRUNSTATUS = [{ label: "工作", value: "0" }, { label: "关机", value: "1" }]
export function getLabel(value, arr) {
let temp = ''
for (let item of arr) {
if (value == item.value) {
temp = item.label
}
}
return temp
}
//key 根据key和val查询到对应的item,返回该item的reskey的值
export function getArrObjValue(key,val,resKey,arr) {
let temp = null
if(arr&&arr.length>0){
for (let item of arr) {
if (val == item[key]) {
temp = item[resKey]
}
}
}
return temp
}
// 如果数组存在重复属性 筛取任意一个匹配的对象,取出对应下resKey值
export function getPluCodeToVal(key,val,resKey,arr){
let temp = null;
if(arr&&arr.length>0){
for(let item of arr){
if(item[key] == val){
temp = item[resKey]
break
}
}
}
return temp
}
//根据多条件定位一个对象 传入data:[{},{}],condition:{'test1':'111',test2:'222'}
export function getFilterArr(condition,data){
return data.filter( item => {
return Object.keys( condition ).every( key => {
return String( item[ key ] ).toLowerCase().includes(
String( condition[ key ] ).trim().toLowerCase() )
} )
} )
}
//将对应数组对象按传入的属性排列成字符串
// val 需要拼接的属性明 arr 数组对象 str拼接的中间字符
export function splicStr(val,arr,str){
let temp = '';
if(arr){
for(let item of arr){
temp = temp+item[val]+str
}
}
return temp.slice(0,temp.length-1)
}
export function splicStrArr(arr,str){
let temp = '';
if(arr){
for(let item of arr){
temp = temp+item+str
}
}
return temp.slice(0,temp.length-1)
}
//获取两位小数,不够补齐0
export function toDecimal2(x) {
var f = parseFloat(x);
if (isNaN(f)) {
return "0.00";
}
var f = Math.round(x*100)/100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
}
//检验文本类型方法
export function isEdit(str) { return /^[\s\S]*\.(xml|json|yml|yaml|bat|sh|c|ini|properties|txt|html|conf|css|js|ts)$/.test(str); }
export function paramsToFormData(obj) {
const formData = new FormData();
Object.keys(obj).forEach((key) => {
if (obj[key] instanceof Array) {
obj[key].forEach((item) => {
formData.append(key, item);
});
return;
}
formData.append(key, obj[key]);
});
return formData;
}
//树形结构多条件查询 arr过滤的数组 searchCon过滤的键值(list) nameList过滤的键名(list)未测试!!!
export function matchTreeData(arr, searchCon,nameList) {
let newArr = [];
let searchNameList = nameList;
arr.forEach((item) => {
for (let i = 0, len = searchNameList.length; i < len; i++) {
let nameKey = searchNameList[i];
if (item.hasOwnProperty(nameKey)) {
if (item[nameKey] && item[nameKey].indexOf(searchCon) !== -1) {
newArr.push(item);
break;
} else {
if (item.childList && item.childList.length > 0) {
let resultArr = this.matchTreeData(item.childList, searchCon);
if (resultArr && resultArr.length > 0) {
newArr.push({
...item,
childList: resultArr
})
break;
}
}
}
} else {
continue;
}
}
})
return newArr;
}
//去掉时分秒
export function getTimeNoHMS(value){
return value.substr(0,10)
}
//el时间框默认获取一天
export function getDefaultTimeEL(){
let time = []
let end = new Date();
let start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
time = [start,end]
return time
}
//获取此刻前后任意一天
export function getDayNowAny(day){
let today = new Date();
let targetday_milliseconds=today.getTime() + 1000*60*60*24*day;
today.setTime(targetday_milliseconds); //注意,这行是关键代码
let tDate = today.getFullYear()+ "-" + (today.getMonth()+1)+ "-" + today.getDate();
return tDate;
}
//获取时间戳 传入天数 返回时间戳 num为- 之前 为+ 之后 返回[小,大] type (false?天;true?秒级)
export function getDayTime(num,type){
let end = new Date().getTime()/1000 - 120;
let start =type?(end + num):(end + 60*60*24*num)
return num>=0?[end,start]:[start,end]
}
export function timestampToTime(timestamp) {
timestamp = timestamp ? timestamp : null;
let date = new Date(timestamp*1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
let Y = date.getFullYear() + '/';
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '/';
let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + h + m + s;
}
//提取继承obj方法
export function extend(obj, obj2) {
for (var k in obj2) {
obj[k] = obj2[k];
}
return obj;
}
//校验 对象是否每一项都有值
export function paramsValidate(params){
let flag = true;
for(var key in params){
if(params[key] != '0' && !params[key]){
return false; // 终止程序
}
}
return flag;
}
//数组对象 对象中的每一项都不为空 目前为固定字段后续改为全部字段校验
/**
*
* @param {*} tempArr
* @returns
* 这里夹杂了业务逻辑 不可通用
* 需要考虑 提示出 cpu告警/磁盘告警等。。。 未填写完全 等信息 而对于的是value
*/
export function arrObjIsVal(tempArr){
let obj = {
isVer:false,
item:null,
error:'pt',
message:'' //pt 普通错误 未创建指标 ms 带提示信息 需要将item 的对应字段转化再进行拼接,message
}
let regPos = /^\d+(\.\d{0,2})?$/ //只能填写数字或两位小数
let regPos2Str = /^([0-9]\d{0,1}|100$)(\.\d{1,2})?$/ //百分比
try {
if(tempArr.length==0){
throw new Error()}
tempArr.forEach((item, index) => {
if(item.number1 === null||item.number1 === ''){
obj.error = 'pt';
obj.item = item;
throw new Error()
}
if(item.number2 === null||item.number2 === ''){
obj.error = 'pt';
obj.item = item;
throw new Error()
}
if(item.target === null||item.target === ''){
obj.error = 'pt';
obj.item = item;
throw new Error()
}
if(!(regPos.test(item.number1)&®Pos.test(item.number2))){//是否是数字
obj.error = 'ms';
obj.item = item;
obj.message = '只能填写数字或两位小数'
throw new Error()
}
if(item.unit === '%'){//单位为百分比 数字不能超过100 小数点是两位
if(!(regPos2Str.test(item.number1)&®Pos2Str.test(item.number2))){//是否是数字
obj.error = 'ms';
obj.item = item;
obj.message = '整数部分<=100,小数部分不得超过两位'
throw new Error()
}
}
})
} catch (e) {
obj.isVer = true;
};
return obj
}
//给个键值
export function arrObjIsValObj(tempArr){
let obj = {
isVer:false,
index:null,
item:null,
}
try {
if(tempArr.length==0){
throw new Error(obj)}
tempArr.forEach((item, index) => {
if(Object.prototype.toString.call(item) === '[object Object]'){
for(let key in item){
if(item[key] === null||item[key] === ''||item[key] === undefined){
obj.index = index;
obj.item = item;
throw new Error()
}
}
}
})
} catch (e) {
obj.isVer = true;
};
return obj
}
//数组去重
export function unique(arr) {
return Array.from(new Set(arr));
}
//数组对象去重
export function uniqueFunc(arr, uniId){
let res = new Map();
return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1));
}
















