fix:修复table类型聚合bug

This commit is contained in:
wangwenrui
2021-04-13 19:35:52 +08:00
parent 9e958900c3
commit 9659955cef
6 changed files with 264 additions and 117 deletions

View File

@@ -375,9 +375,16 @@ export default {
let mapping let mapping
if (type == 'value') { 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 { } 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 this.mapping = mapping
item.mapping = mapping item.mapping = mapping
@@ -423,97 +430,160 @@ export default {
this.endLoading() this.endLoading()
} }
}, },
getStatisticsResult (statistics, seriesItem) { getStatisticsResult: function (statistics, seriesItem) {
if (!seriesItem || !seriesItem.length > 0) return [] if (!seriesItem || !seriesItem.length > 0) return []
if (!statistics) return seriesItem if (!statistics) return seriesItem
let copy = JSON.parse(JSON.stringify(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 let result
switch (statistics) { switch (statistics) {
case 'null': { case 'null': {
return copy.map(item => {
result = copy.map(item => {
return { return {
element: item.element, element: item.element,
time: bus.timeFormate(new Date(item.data[0]), 'yyyy-MM-dd hh:mm:ss'), time: bus.timeFormate(new Date(item.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: item.data[1] value: item.data[1]
} }
}) })
break
} }
case 'min': { case 'min': {
result = copy.sort((x, y) => { return parseFloat(x.data[1]) - parseFloat(y.data[1]) })[0] result = classifies.map(group=>{
result = [{ let groupMin = group.sort((x, y) => {
element: result.element, return parseFloat(x.data[1]) - parseFloat(y.data[1])
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), })[0]
value: result.data[1]
}] return {
element: groupMin.element,
time: bus.timeFormate(new Date(groupMin.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: groupMin.data[1]
}
})
break break
} }
case 'max': { case 'max': {
result = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) })[0] result = classifies.map(group=>{
result = [{ let groupMax = group.sort((x, y) => {
element: result.element, return parseFloat(y.data[1]) - parseFloat(x.data[1])
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), })[0]
value: result.data[1]
}] return {
element: groupMax.element,
time: bus.timeFormate(new Date(groupMax.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: groupMax.data[1]
}
})
break break
} }
case 'average': { case 'average': {
copy = copy.map(t => parseFloat(t.data[1])) result = classifies.map(group=>{
const sum = eval(copy.join('+')) let groupData=group.map(t => parseFloat(t.data[1]))
const avg = sum / copy.length const sum = eval(groupData.join('+'))
result = [{ const avg = sum / groupData.length
element: last.element, let last = group.sort((x, y) => {
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: avg })[0]
}] return {
element: last.element,
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: avg
}
})
break break
} }
case 'total': { case 'total': {
copy = copy.map(t => parseFloat(t.data[1])) result = classifies.map(group=>{
const total = eval(copy.join('+')) let groupData=group.map(t => parseFloat(t.data[1]))
result = [{ const total = eval(groupData.join('+'))
element: last.element, let last = group.sort((x, y) => {
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: total })[0]
}] return {
element: last.element,
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: total
}
})
break break
} }
case 'first': { case 'first': {
result = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1] result = classifies.map(group=>{
result = [{ let first = group.sort((x, y) => {
element: result.element, return parseFloat(y.data[0]) - parseFloat(x.data[0])
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), })[copy.length - 1]
value: result.data[1]
}] return {
element: first.element,
time: bus.timeFormate(new Date(first.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: first.data[1]
}
})
break break
} }
case 'last': { case 'last': {
result = last result = classifies.map(group=>{
result = [{
element: result.element, let last = group.sort((x, y) => {
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: result.data[1] })[0]
}] return {
element: last.element,
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: last.data[1]
}
})
break break
} }
case 'range': { case 'range': {
const sort = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) }) result = classifies.map(group=>{
const max = sort[0]
const min = sort[sort.length - 1] const sort = JSON.parse(JSON.stringify(group)).sort((x, y) => {
result = [{ return parseFloat(y.data[1]) - parseFloat(x.data[1])
element: last.element, })
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), let last = group.sort((x, y) => {
value: max.data[1] - min.data[1] 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 break
} }
case 'different': { case 'different': {
const first = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1] result = classifies.map(group=>{
result = [{
element: last.element, const sort = group.sort((x, y) => {
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: last.data[1] - first.data[1] })
}] 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 break
} }
} }

View File

@@ -1388,95 +1388,160 @@ export default {
this.tableShow = true this.tableShow = true
this.$refs.loadingPreview.endLoading() 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)) 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 let result
switch (statistics) { switch (statistics) {
case 'null': { case 'null': {
return copy.map(item => {
result = copy.map(item => {
return { return {
element: item.element, element: item.element,
time: bus.timeFormate(new Date(item.data[0]), 'yyyy-MM-dd hh:mm:ss'), time: bus.timeFormate(new Date(item.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: item.data[1] value: item.data[1]
} }
}) })
break
} }
case 'min': { case 'min': {
result = copy.sort((x, y) => { return parseFloat(x.data[1]) - parseFloat(y.data[1]) })[0] result = classifies.map(group=>{
result = [{ let groupMin = group.sort((x, y) => {
element: result.element, return parseFloat(x.data[1]) - parseFloat(y.data[1])
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), })[0]
value: result.data[1]
}] return {
element: groupMin.element,
time: bus.timeFormate(new Date(groupMin.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: groupMin.data[1]
}
})
break break
} }
case 'max': { case 'max': {
result = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) })[0] result = classifies.map(group=>{
result = [{ let groupMax = group.sort((x, y) => {
element: result.element, return parseFloat(y.data[1]) - parseFloat(x.data[1])
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), })[0]
value: result.data[1]
}] return {
element: groupMax.element,
time: bus.timeFormate(new Date(groupMax.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: groupMax.data[1]
}
})
break break
} }
case 'average': { case 'average': {
copy = copy.map(t => parseFloat(t.data[1])) result = classifies.map(group=>{
const sum = eval(copy.join('+')) let groupData=group.map(t => parseFloat(t.data[1]))
const avg = sum / copy.length const sum = eval(groupData.join('+'))
result = [{ const avg = sum / groupData.length
element: last.element, let last = group.sort((x, y) => {
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: avg })[0]
}] return {
element: last.element,
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: avg
}
})
break break
} }
case 'total': { case 'total': {
copy = copy.map(t => parseFloat(t.data[1])) result = classifies.map(group=>{
const total = eval(copy.join('+')) let groupData=group.map(t => parseFloat(t.data[1]))
result = [{ const total = eval(groupData.join('+'))
element: last.element, let last = group.sort((x, y) => {
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: total })[0]
}] return {
element: last.element,
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: total
}
})
break break
} }
case 'first': { case 'first': {
result = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1] result = classifies.map(group=>{
result = [{ let first = group.sort((x, y) => {
element: result.element, return parseFloat(y.data[0]) - parseFloat(x.data[0])
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), })[copy.length - 1]
value: result.data[1]
}] return {
element: first.element,
time: bus.timeFormate(new Date(first.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: first.data[1]
}
})
break break
} }
case 'last': { case 'last': {
result = last result = classifies.map(group=>{
result = [{
element: result.element, let last = group.sort((x, y) => {
time: bus.timeFormate(new Date(result.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: result.data[1] })[0]
}] return {
element: last.element,
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'),
value: last.data[1]
}
})
break break
} }
case 'range': { case 'range': {
const sort = copy.sort((x, y) => { return parseFloat(y.data[1]) - parseFloat(x.data[1]) }) result = classifies.map(group=>{
const max = sort[0]
const min = sort[sort.length - 1] const sort = JSON.parse(JSON.stringify(group)).sort((x, y) => {
result = [{ return parseFloat(y.data[1]) - parseFloat(x.data[1])
element: last.element, })
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), let last = group.sort((x, y) => {
value: max.data[1] - min.data[1] 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 break
} }
case 'different': { case 'different': {
const first = copy.sort((x, y) => { return parseFloat(y.data[0]) - parseFloat(x.data[0]) })[copy.length - 1] result = classifies.map(group=>{
result = [{
element: last.element, const sort = group.sort((x, y) => {
time: bus.timeFormate(new Date(last.data[0]), 'yyyy-MM-dd hh:mm:ss'), return parseFloat(y.data[0]) - parseFloat(x.data[0])
value: last.data[1] - first.data[1] })
}] 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 break
} }
} }

View File

@@ -147,7 +147,8 @@ const cn = {
reloadTimeout: '重新启动服务器花了太多时间,安装可能有一些问题', reloadTimeout: '重新启动服务器花了太多时间,安装可能有一些问题',
hadConfig: '已经有人开始配置系统', hadConfig: '已经有人开始配置系统',
invalidCode: '身份验证无效,请按照{page}中的描述继续', invalidCode: '身份验证无效,请按照{page}中的描述继续',
welcomePage: '欢迎页面' welcomePage: '欢迎页面',
inited: '系统已经被初始化',
}, },
webshell: { webshell: {
shellTitle: '本地 Shell', shellTitle: '本地 Shell',

View File

@@ -153,7 +153,8 @@ const en = {
reloadTimeout: 'It took too much time to restart the server, there may be some problems when you install', 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', hadConfig: 'Someone has started to configure the system',
invalidCode: "The authentication is invalid ,please follow the description in {page} 'To continue'", 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: { webshell: {
shellTitle: 'Local Shell', shellTitle: 'Local Shell',

View File

@@ -237,6 +237,16 @@ export default {
} else { } else {
this.getValidateCode() this.getValidateCode()
this.$get('setup/checkCode?code=' + this.validateCode).then(response => { 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) { if (response.code == 200) {
this.activeStep = 1 this.activeStep = 1
this.step = 1 this.step = 1

View File

@@ -439,7 +439,7 @@
<button @click="preview" id="chart-box-preview" class="nz-btn nz-btn-size-normal-new nz-btn-style-normal-new" v-else> <button @click="preview" id="chart-box-preview" class="nz-btn nz-btn-size-normal-new nz-btn-style-normal-new" v-else>
<span>{{$t('overall.preview')}}</span> <span>{{$t('overall.preview')}}</span>
</button> </button>
<button id="chart-box-save" v-has="'panel_chart_save'" :class="{'nz-btn-disabled':prevent_opt.save}" :disabled="prevent_opt.save" class="nz-btn nz-btn-size-normal-new nz-btn-style-normal-new" @click="confirmAdd" > <button id="chart-box-save" v-has="'panel_chart_add'" :class="{'nz-btn-disabled':prevent_opt.save}" :disabled="prevent_opt.save" class="nz-btn nz-btn-size-normal-new nz-btn-style-normal-new" @click="confirmAdd" >
<span>{{$t('overall.save')}}</span> <span>{{$t('overall.save')}}</span>
</button> </button>
</div> </div>