This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nezha-nezha-fronted/nezha-fronted/src/libs/bus.js

337 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Vue from 'vue';
Date.prototype.setStart = function() {
this.setHours(0);
this.setMinutes(0);
this.setSeconds(0);
};
// eslint-disable-next-line
Date.prototype.setEnd = function() {
this.setHours(23);
this.setMinutes(59);
this.setSeconds(59);
};
export default new Vue({
data() {
return {
selectDate: [], // 选中的时间段
emailReg: /^[a-zA-Z0-9]{1,10}@[a-zA-Z0-9]{1,5}\.[a-zA-Z0-9]{1,5}$/,
// 创建策略信息
buildRuleInfo: {
triggers: [],
actions: [],
},
backtoRulelist: '', // 返回策略列表页信息
//role: md5(1),
role:1,
// 创建图表信息
chartAddInfo: {
metricTarget: [],
},
};
},
methods: {
// 获取初始化时间,默认最近一周
getDefaultDate() {
let start = this.getDays(-7);
let end = this.getDays(0);
start.setStart();
end.setEnd();
// let start = this.getHoursTime(-1);
// let end = this.getHoursTime(0);
start = this.timeFormate(start, 'yyyy-MM-dd hh:mm:ss');
end = this.timeFormate(end, 'yyyy-MM-dd hh:mm:ss');
this.selectDate = [start, end];
},
getHoursTime(hours) {
const today = new Date().getTime();
const date = new Date(today + (hours * 60 * 60 * 1000));
return date;
},
// 初始化日期
getDays(days) {
const today = new Date().getTime();
const date = new Date(today + (days * 24 * 60 * 60 * 1000));
return date;
},
formatDate(date, type) {
const yy = date.getFullYear();
const dateM = date.getMonth() + 1;
const mm = dateM > 9 ? dateM : `0${dateM}`;
const dateD = date.getDate();
const dd = dateD > 9 ? dateD : `0${dateD}`;
if (type) {
return `${yy}${type}${mm}${type}${dd}`;
}
return `${yy}${mm}${dd}`;
},
timeFormate(date, fmt='yyyy-MM-dd hh:mm:ss') {
const time = new Date(date);
let fm = fmt;
// fmt 自定义格式,如yy-MM-dd
let week = '';
switch (time.getDay()) {
case 0:
week = '周日';
break;
case 1:
week = '周一';
break;
case 2:
week = '周二';
break;
case 3:
week = '周三';
break;
case 4:
week = '周四';
break;
case 5:
week = '周五';
break;
case 6:
week = '周六';
break;
default:
week = '';
break;
}
const o = {
'M+': time.getMonth() + 1, // 月份
'd+': time.getDate(), // 日
'hh': time.getHours(), // 小时
'm+': time.getMinutes(), // 分
's+': time.getSeconds(), // 秒
'q+': Math.floor((time.getMonth() + 3) / 3), // 季度
'a': time.getHours() > 12 ? "pm" : "am",
S: time.getMilliseconds(), // 毫秒
w: week,
};
if (/(y+)/.test(fm)) {
fm = fm.replace(RegExp.$1, (time.getFullYear().toString()).substr(4 - RegExp.$1.length));
}
Object.keys(o).forEach((k) => {
if (new RegExp(`(${k})`).test(fm)) {
fm = fm.replace(RegExp.$1, (RegExp.$1.length === 1) ?
(o[k]) : ((`00${o[k]}`).substr((`${o[k]}`).length)));
}
});
fm = fm.replace("h", time.getHours() > 12 ? time.getHours()-12 : time.getHours());
return fm;
},
// 格式化tag为字符串表达式
tagsToString(metric,arr) {
let str = metric;
let sepStr = '';
arr.forEach((item, index) => {
if (index === 0) {
str +="{"
if(item.value.length===1){
str += `${item.name}='${item.value.join('|')}'`;
sepStr = ',';
}else if(item.value.length>1){
str += `${item.name}=~'${item.value.join('|')}'`;
sepStr = ',';
}
} else {
if(item.value.length===1){
str += sepStr+`${item.name}='${item.value.join('|')}'`;
sepStr = ',';
}else if(item.value.length>1){
str += sepStr+`${item.name}=~'${item.value.join('|')}'`;
sepStr = ',';
}
}
});
if(str.indexOf('{')>-1){
str +="}";
}
if(str.endsWith('{}')){
str = str.substring(0,str.indexOf('{'));
}
return str;
},
getStep(startTime,endTime){
const start = new Date(startTime);
const end = new Date(endTime);
let step='15s';
const numInterval = end.getTime()-start.getTime();
let oneDay = 86400000;
let sevenDay = 604800000;
let thirtyDay = 2592000000;
if (numInterval < oneDay) {//小于1天step为15s
step='15s';
}else if(numInterval<sevenDay){
step='5m';
}else if(numInterval<thirtyDay){
step='10m';
}else {
step='30m';
}
return step;
},
isEmptyObject(obj) {
if (obj) {
let name = '';
// eslint-disable-next-line
for (name in obj) { return false; }
return true;
}
return true;
},
validateEmail(rule, value, callback) {
if (value === '') {
callback(new Error('请输入邮箱'));
} else if (!this.emailReg.test(value)) {
callback(new Error('邮箱格式不正确'));
} else {
callback();
}
},
getNumStr(num) {
if (num >= 1000) {
const kbNum = num / 1000;
if (kbNum >= 1000) {
const mbNum = kbNum / 1000;
if (mbNum > 1000) {
const gbNum = mbNum / 1000;
if (gbNum > 1000) {
const tbNum = gbNum / 1000;
if (tbNum > 1000) {
const pbNum = tbNum / 1000;
return `${pbNum.toFixed(2)}PB`;
}
return `${tbNum.toFixed(2)}TB`;
}
return `${gbNum.toFixed(2)}GB`;
}
return `${mbNum.toFixed(2)}MB`;
}
return `${kbNum.toFixed(2)}KB`;
}
return num.toFixed(2);
},
getSingleStatRlt(statistics,result){
let dataArray = [];
if(result){
result.forEach((item)=>{
dataArray.push(item[1]);
})
}
let statisticsRlt = '';
if(dataArray.length>0){
if(statistics==='min'){//min最小值
statisticsRlt = dataArray.reduce(function(a , b){
return b < a ? b : a;
});
}else if(statistics==='max'){// max最大值
statisticsRlt = dataArray.reduce(function(a , b){
return b > a ? b : a;
});
}else if(statistics==='average'){// average平均值
let sum = 0;
dataArray.forEach((item)=>{
sum =Number(sum) + Number(item);
})
statisticsRlt = sum/dataArray.length;
}else if(statistics==='total'){//total总计
dataArray.forEach((item)=>{
statisticsRlt =Number(statisticsRlt) + Number(item);
})
}else if(statistics==='first'){//first第一个值
statisticsRlt = dataArray[0];
}else if(statistics==='last'){// last最后一个值
statisticsRlt = dataArray[dataArray.length-1];
}else if(statistics==='range'){//range : max - min
let min = dataArray.reduce(function(a , b){
return b < a ? b : a;
});
let max = dataArray.reduce(function(a , b){
return b > a ? b : a;
});
statisticsRlt = max-min;
}else if(statistics==='different'){//different : last - first
statisticsRlt = dataArray[dataArray.length-1]-dataArray[0];
}
}
dataArray = null;
return statisticsRlt;
},
//将本地时区转为系统配置的时区
computeTimezone:function(sourceTime){
let offset=localStorage.getItem('nz-sys-timezone');
if(offset&& offset != 'undefined' && offset != null){
offset=Number.parseInt(offset);
let date=new Date(sourceTime);
let localOffset=date.getTimezoneOffset()*60*1000; //默认 一分钟显示时区偏移的结果
let utcTime=sourceTime + localOffset;
return utcTime+(offset * 60*60*1000);
}else{
return sourceTime;
}
},
getTimezontDateRange:function(offset=-1){
return [
new Date(new Date(this.computeTimezone(new Date().getTime())).setHours(new Date(this.computeTimezone(new Date().getTime())).getHours() + offset)),
new Date(this.computeTimezone(new Date().getTime()))
]
},
getOffsetTimezoneData(offset=0){
return new Date(this.computeTimezone(new Date().getTime())).setHours(new Date(this.computeTimezone(new Date().getTime())).getHours() + offset)
},
debounce(fn, delay) {
// 记录上一次的延时器
var timer = null;
var delay = delay || 200;
return function() {
var args = arguments;
var that = this;
// 清除上一次延时器
clearTimeout(timer)
timer = setTimeout(function() {
fn.apply(that,args)
}, delay);
}
},
UTCTimeToConfigTimezone:function(utcTime){
let offset=localStorage.getItem('nz-sys-timezone');
if(offset&& offset != 'undefined' && offset != null){
let time = utcTime;
if(typeof time == 'string' && /(\d+?-){2}\d+?\s(\d+?:)*\d+/.test(time)){
time = new Date(time).getTime();
}
offset=Number.parseInt(offset);
return time += offset * 60*60*1000
}else{
return utcTime;
}
},
configTimezoneToUTCTime:function(configTime){
let offset=localStorage.getItem('nz-sys-timezone');
if(offset&& offset != 'undefined' && offset != null){
let time = configTime;
if(typeof time == 'string' && /(\d+?-){2}\d+?\s(\d+?:)*\d+/.test(time)){
time = new Date(time).getTime();
}
offset=Number.parseInt(offset);
return time -= offset * 60*60*1000
}else{
return configTime;
}
}
},
created() {
this.getDefaultDate();
},
computed: {
/*
isAdmin() {
return this.role === Cookies.get('owl_role');
},
*/
},
});