diff --git a/nezha-fronted/src/components/charts/chart-table.vue b/nezha-fronted/src/components/charts/chart-table.vue
index 5b42138f7..b319a19cd 100644
--- a/nezha-fronted/src/components/charts/chart-table.vue
+++ b/nezha-fronted/src/components/charts/chart-table.vue
@@ -375,9 +375,16 @@ export default {
let mapping
if (type == 'value') {
- mapping = mappings.find(t => { return Number(t.value) == value })
+ mapping = mappings.find(t => {
+ let mappingValue = t.value ===''?'':Number(t.value) //Number('') 值为0
+ return mappingValue === value
+ })
} else {
- mapping = mappings.find(t => { return Number(t.from) <= value && Number(t.to) >= value })
+ mapping = mappings.find(t => {
+ let mappingFrom = t.from ===''?'':Number(t.from)
+ let mappingTo = t.to ===''?'':Number(t.to)
+ return Number(mappingFrom) <= value && Number(mappingTo) >= value
+ })
}
this.mapping = mapping
item.mapping = mapping
@@ -423,97 +430,160 @@ export default {
this.endLoading()
}
},
- getStatisticsResult (statistics, seriesItem) {
+ getStatisticsResult: function (statistics, seriesItem) {
if (!seriesItem || !seriesItem.length > 0) return []
if (!statistics) return seriesItem
let copy = JSON.parse(JSON.stringify(seriesItem))
- const last = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[0]
+ copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[0]
+ let classifies=[];
+ let maxGroup=0
+ let map = new Map();//用于记录在第几组
+ copy.forEach(item => {
+ let element = item.element.element;
+ let group = map.get(element);
+ if(typeof group != "undefined"){
+ classifies[group].push(item)
+ }else{
+ classifies.push([item]);
+ map.set(element,maxGroup++)
+ }
+ })
+
let result
switch (statistics) {
case 'null': {
- return copy.map(item => {
+
+ result = copy.map(item => {
return {
element: item.element,
time: bus.timeFormate(new Date(item.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: item.data[1]
}
})
+ break
}
case 'min': {
- result = copy.sort((x, y) => { return parseFloat(x.data[1]) - parseFloat(y.data[1]) })[0]
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+ let groupMin = group.sort((x, y) => {
+ return parseFloat(x.data[1]) - parseFloat(y.data[1])
+ })[0]
+
+ return {
+ element: groupMin.element,
+ time: bus.timeFormate(new Date(groupMin.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: groupMin.data[1]
+ }
+ })
break
}
case 'max': {
- result = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) })[0]
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+ let groupMax = group.sort((x, y) => {
+ return parseFloat(y.data[1]) - parseFloat(x.data[1])
+ })[0]
+
+ return {
+ element: groupMax.element,
+ time: bus.timeFormate(new Date(groupMax.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: groupMax.data[1]
+ }
+ })
break
}
case 'average': {
- copy = copy.map(t => parseFloat(t.data[1]))
- const sum = eval(copy.join('+'))
- const avg = sum / copy.length
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: avg
- }]
+ result = classifies.map(group=>{
+ let groupData=group.map(t => parseFloat(t.data[1]))
+ const sum = eval(groupData.join('+'))
+ const avg = sum / groupData.length
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: avg
+ }
+ })
break
}
case 'total': {
- copy = copy.map(t => parseFloat(t.data[1]))
- const total = eval(copy.join('+'))
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: total
- }]
+ result = classifies.map(group=>{
+ let groupData=group.map(t => parseFloat(t.data[1]))
+ const total = eval(groupData.join('+'))
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: total
+ }
+ })
break
}
case 'first': {
- result = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1]
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+ let first = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[copy.length - 1]
+
+ return {
+ element: first.element,
+ time: bus.timeFormate(new Date(first.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: first.data[1]
+ }
+ })
break
}
case 'last': {
- result = last
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: last.data[1]
+ }
+ })
break
}
case 'range': {
- const sort = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) })
- const max = sort[0]
- const min = sort[sort.length - 1]
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: max.data[1] - min.data[1]
- }]
+ result = classifies.map(group=>{
+
+ const sort = JSON.parse(JSON.stringify(group)).sort((x, y) => {
+ return parseFloat(y.data[1]) - parseFloat(x.data[1])
+ })
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ const max = sort[0]
+ const min = sort[sort.length - 1]
+ let range = max.data[1] - min.data[1];
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: range
+ }
+ })
break
}
case 'different': {
- const first = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1]
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: last.data[1] - first.data[1]
- }]
+ result = classifies.map(group=>{
+
+ const sort = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })
+ let last = sort[0]
+ let first = sort[copy.length - 1]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: last.data[1] - first.data[1]
+ }
+ })
+
break
}
}
diff --git a/nezha-fronted/src/components/charts/chartPreview.vue b/nezha-fronted/src/components/charts/chartPreview.vue
index fae8a965f..6a83ff9c1 100644
--- a/nezha-fronted/src/components/charts/chartPreview.vue
+++ b/nezha-fronted/src/components/charts/chartPreview.vue
@@ -1388,95 +1388,160 @@ export default {
this.tableShow = true
this.$refs.loadingPreview.endLoading()
},
- getStatisticsResult (statistics, seriesItem) {
+ getStatisticsResult: function (statistics, seriesItem) {
+ if (!seriesItem || !seriesItem.length > 0) return []
+ if (!statistics) return seriesItem
let copy = JSON.parse(JSON.stringify(seriesItem))
- const last = copy.sort((x, y) => { return parseFloat(y[0]) - parseFloat(x[0]) })[0]
+ copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[0]
+ let classifies=[];
+ let maxGroup=0
+ let map = new Map();//用于记录在第几组
+ copy.forEach(item => {
+ let element = item.element.element;
+ let group = map.get(element);
+ if(typeof group != "undefined"){
+ classifies[group].push(item)
+ }else{
+ classifies.push([item]);
+ map.set(element,maxGroup++)
+ }
+ })
+
let result
switch (statistics) {
case 'null': {
- return copy.map(item => {
+
+ result = copy.map(item => {
return {
element: item.element,
time: bus.timeFormate(new Date(item.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: item.data[1]
}
})
+ break
}
case 'min': {
- result = copy.sort((x, y) => { return parseFloat(x.data[1]) - parseFloat(y.data[1]) })[0]
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+ let groupMin = group.sort((x, y) => {
+ return parseFloat(x.data[1]) - parseFloat(y.data[1])
+ })[0]
+
+ return {
+ element: groupMin.element,
+ time: bus.timeFormate(new Date(groupMin.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: groupMin.data[1]
+ }
+ })
break
}
case 'max': {
- result = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) })[0]
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+ let groupMax = group.sort((x, y) => {
+ return parseFloat(y.data[1]) - parseFloat(x.data[1])
+ })[0]
+
+ return {
+ element: groupMax.element,
+ time: bus.timeFormate(new Date(groupMax.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: groupMax.data[1]
+ }
+ })
break
}
case 'average': {
- copy = copy.map(t => parseFloat(t.data[1]))
- const sum = eval(copy.join('+'))
- const avg = sum / copy.length
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: avg
- }]
+ result = classifies.map(group=>{
+ let groupData=group.map(t => parseFloat(t.data[1]))
+ const sum = eval(groupData.join('+'))
+ const avg = sum / groupData.length
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: avg
+ }
+ })
break
}
case 'total': {
- copy = copy.map(t => parseFloat(t.data[1]))
- const total = eval(copy.join('+'))
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: total
- }]
+ result = classifies.map(group=>{
+ let groupData=group.map(t => parseFloat(t.data[1]))
+ const total = eval(groupData.join('+'))
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: total
+ }
+ })
break
}
case 'first': {
- result = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1]
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+ let first = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[copy.length - 1]
+
+ return {
+ element: first.element,
+ time: bus.timeFormate(new Date(first.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: first.data[1]
+ }
+ })
break
}
case 'last': {
- result = last
- result = [{
- element: result.element,
- time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: result.data[1]
- }]
+ result = classifies.map(group=>{
+
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: last.data[1]
+ }
+ })
break
}
case 'range': {
- const sort = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) })
- const max = sort[0]
- const min = sort[sort.length - 1]
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: max.data[1] - min.data[1]
- }]
+ result = classifies.map(group=>{
+
+ const sort = JSON.parse(JSON.stringify(group)).sort((x, y) => {
+ return parseFloat(y.data[1]) - parseFloat(x.data[1])
+ })
+ let last = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })[0]
+ const max = sort[0]
+ const min = sort[sort.length - 1]
+ let range = max.data[1] - min.data[1];
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: range
+ }
+ })
break
}
case 'different': {
- const first = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1]
- result = [{
- element: last.element,
- time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
- value: last.data[1] - first.data[1]
- }]
+ result = classifies.map(group=>{
+
+ const sort = group.sort((x, y) => {
+ return parseFloat(y.data[0]) - parseFloat(x.data[0])
+ })
+ let last = sort[0]
+ let first = sort[copy.length - 1]
+ return {
+ element: last.element,
+ time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
+ value: last.data[1] - first.data[1]
+ }
+ })
+
break
}
}
diff --git a/nezha-fronted/src/components/common/language/cn.js b/nezha-fronted/src/components/common/language/cn.js
index da6d3b214..193ad4300 100644
--- a/nezha-fronted/src/components/common/language/cn.js
+++ b/nezha-fronted/src/components/common/language/cn.js
@@ -147,7 +147,8 @@ const cn = {
reloadTimeout: '重新启动服务器花了太多时间,安装可能有一些问题',
hadConfig: '已经有人开始配置系统',
invalidCode: '身份验证无效,请按照{page}中的描述继续',
- welcomePage: '欢迎页面'
+ welcomePage: '欢迎页面',
+ inited: '系统已经被初始化',
},
webshell: {
shellTitle: '本地 Shell',
diff --git a/nezha-fronted/src/components/common/language/en.js b/nezha-fronted/src/components/common/language/en.js
index 2f7a55b34..4e0ebbd9f 100644
--- a/nezha-fronted/src/components/common/language/en.js
+++ b/nezha-fronted/src/components/common/language/en.js
@@ -153,7 +153,8 @@ const en = {
reloadTimeout: 'It took too much time to restart the server, there may be some problems when you install',
hadConfig: 'Someone has started to configure the system',
invalidCode: "The authentication is invalid ,please follow the description in {page} 'To continue'",
- welcomePage: 'Welcome page'
+ welcomePage: 'Welcome page',
+ inited:'The system has been initialized',
},
webshell: {
shellTitle: 'Local Shell',
diff --git a/nezha-fronted/src/components/page/config/setup.vue b/nezha-fronted/src/components/page/config/setup.vue
index 42776ca73..30940467f 100644
--- a/nezha-fronted/src/components/page/config/setup.vue
+++ b/nezha-fronted/src/components/page/config/setup.vue
@@ -237,6 +237,16 @@ export default {
} else {
this.getValidateCode()
this.$get('setup/checkCode?code=' + this.validateCode).then(response => {
+ if(response.status == 404){
+ this.$alert(this.$t('setup.hadConfig'), { type: 'warning' })
+ const self = this;
+ setTimeout(()=>{
+ self.$router.push({
+ path: '/'
+ })
+ },2000)
+ return;
+ }
if (response.code == 200) {
this.activeStep = 1
this.step = 1
diff --git a/nezha-fronted/src/components/page/dashboard/chartBox.vue b/nezha-fronted/src/components/page/dashboard/chartBox.vue
index e40e3c3da..9e8ffedc5 100644
--- a/nezha-fronted/src/components/page/dashboard/chartBox.vue
+++ b/nezha-fronted/src/components/page/dashboard/chartBox.vue
@@ -439,7 +439,7 @@
-