统计报表优化

This commit is contained in:
白菜
2025-09-16 18:20:48 +08:00
parent e3224d37a1
commit 7f560cd140
2 changed files with 72 additions and 36 deletions

View File

@ -106,47 +106,53 @@ export default {
this.setOption(response?.data || [])
}).finally(()=>{this.loading=false;})
},
compareDate(date1,date2){
console.log('比较时间',date1,date2)
// 年2025-09/天2025-09-15/时2025-09-15/10:00
if(date1.indexOf(':') > -1 && date2.indexOf(':') > -1){
return parseInt(date1) - parseInt(date2)
}
const [date1_Y='',date1_M='',date1_D=''] = date1.split('-')//根据空格区分[年月日,小时]
const [date2_Y='',date2_M='',date2_D=''] = date2.split('-')//根据空格区分[年月日,小时]
return (date1_Y === date2_Y && date1_M === date2_M && date1_D - date2_D) || (date1_Y === date2_Y && date1_M - date2_M) || date1_Y - date2_Y
},
setOption(data) {
// [{
// "deviceId": "PCS04",
// "dataList": [
// {
// "statisDate": "2025-09-05",
// "activePower": null,
// "reactivePower": null,
// "uCurrent": 1.30,
// "vCurrent": 0.90,
// "wCurrent": 1.00,
// "deviceId": "PCS04"
// },
// {
// "statisDate": "2025-09-04",
// "activePower": null,
// "reactivePower": null,
// "uCurrent": 71.40,
// "vCurrent": 71.30,
// "wCurrent": 71.80,
// "deviceId": "PCS04"
// }
// ]
// }]
const ele = this.btnList.find((item)=>{return item.id === this.activeBtn})
const sourceBase = JSON.parse(JSON.stringify(ele.source))
// sourceBase={name:'堆平均维度',id:'1',attr:['temp'],source:['有功功率']},
const source=[]
const sourceTop = ['日期']
sourceBase.forEach((outer,outerIndex)=>{
data.forEach((item,itemIndex)=>{
sourceTop.push(`${item.deviceId}-${outer}`)
item.dataList.forEach((inner,innerIndex)=>{
if(itemIndex === 0 || innerIndex+1>source.length) {
source.push([inner.statisDate])
let map={},mapArr=[]
// 生成所有{日期:[],日期:[]}格式的对象和所有包含所有日期的[日期1,日期2...]
data.forEach((item)=>{
item.dataList.forEach((inner)=>{
// 日期格式
// 年2025-09/天2025-09-15/时2025-09-15/10:00
// 所有数据的日期格式一致
if(!map[inner.statisDate]) {
map[inner.statisDate] = []
mapArr.push(inner.statisDate)
}
source[innerIndex].push(inner[ele.attr[outerIndex]])
})
})
data.forEach((item,itemIndex)=>{
const dataTimeList = item.dataList.map(i =>i.statisDate)
const noDataTime = mapArr.filter(i=>!dataTimeList.includes(i))
sourceBase.forEach((outer,outerIndex)=>{
sourceTop.push(`${item.deviceId}-${outer}`)
noDataTime.forEach(i=>map[i].push(''))
item.dataList.forEach((inner,innerIndex)=>{
map[inner.statisDate].push(inner[ele.attr[outerIndex]])
})
})
})
mapArr = mapArr.sort((a,b)=>this.compareDate(a,b))
mapArr.forEach(item=>{
source.push([item,...map[item]])
})
source.unshift(sourceTop)
console.log('map=',map)
console.log('mapArr=',mapArr)
console.log('========',source)
this.chart.setOption({
grid: {

View File

@ -110,23 +110,53 @@ export default {
}).finally(()=>{this.loading=false;})
},
compareDate(date1,date2){
console.log('比较时间',date1,date2)
// 年2025-09/天2025-09-15/时2025-09-15/10:00
if(date1.indexOf(':') > -1 && date2.indexOf(':') > -1){
return parseInt(date1) - parseInt(date2)
}
const [date1_Y='',date1_M='',date1_D=''] = date1.split('-')//根据空格区分[年月日,小时]
const [date2_Y='',date2_M='',date2_D=''] = date2.split('-')//根据空格区分[年月日,小时]
return (date1_Y === date2_Y && date1_M === date2_M && date1_D - date2_D) || (date1_Y === date2_Y && date1_M - date2_M) || date1_Y - date2_Y
},
setOption(data) {
const ele = this.btnList.find((item)=>{return item.id === this.activeBtn})
const sourceBase = JSON.parse(JSON.stringify(ele.source))
// sourceBase={name:'堆平均维度',id:'1',attr:['temp'],source:['有功功率']},
const source=[]
const sourceTop = ['日期']
sourceBase.forEach((outer,outerIndex)=>{
data.forEach((item,itemIndex)=>{
sourceTop.push(`${item.deviceId}-${outer}`)
item.dataList.forEach((inner,innerIndex)=>{
if(itemIndex === 0 || innerIndex+1>source.length) {
source.push([inner.statisDate])
let map={},mapArr=[]
// 生成所有{日期:[],日期:[]}格式的对象和所有包含所有日期的[日期1,日期2...]
data.forEach((item)=>{
item.dataList.forEach((inner)=>{
// 日期格式
// 年2025-09/天2025-09-15/时2025-09-15/10:00
// 所有数据的日期格式一致
if(!map[inner.statisDate]) {
map[inner.statisDate] = []
mapArr.push(inner.statisDate)
}
source[innerIndex].push(inner[ele.attr[outerIndex]])
})
})
data.forEach((item,itemIndex)=>{
const dataTimeList = item.dataList.map(i =>i.statisDate)
const noDataTime = mapArr.filter(i=>!dataTimeList.includes(i))
sourceBase.forEach((outer,outerIndex)=>{
sourceTop.push(`${item.deviceId}-${outer}`)
noDataTime.forEach(i=>map[i].push(''))
item.dataList.forEach((inner,innerIndex)=>{
map[inner.statisDate].push(inner[ele.attr[outerIndex]])
})
})
})
mapArr = mapArr.sort((a,b)=>this.compareDate(a,b))
mapArr.forEach(item=>{
source.push([item,...map[item]])
})
source.unshift(sourceTop)
console.log('map=',map)
console.log('mapArr=',mapArr)
console.log('========',source)
this.chart.setOption({
grid: {