固定资产项目前端文件
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

154 lines
3.3 KiB

import { Component, ElementRef, Input, ViewChild } from '@angular/core'
import { ApiService } from 'app/services'
import { SharedModule } from 'app/shared/shared.module'
import { NzSafeAny } from 'ng-zorro-antd/core/types'
import { finalize } from 'rxjs'
import { init, EChartsType } from 'echarts'
@Component({
selector: 'app-asset-operational-statistics',
standalone: true,
imports: [SharedModule],
templateUrl: './asset-operational-statistics.component.html',
styleUrl: './asset-operational-statistics.component.less',
})
export class AssetOperationalStatisticsComponent {
constructor(private api: ApiService) {}
@ViewChild('openTimeChart') openTimeChart?: ElementRef<HTMLDivElement>
@ViewChild('runningStatusChart') runningStatusChart?: ElementRef<HTMLDivElement>
@Input() assetId!: number
data: NzSafeAny
type = 1
loading = false
ngOnInit() {
this.onChange()
}
onChange() {
this.loading = true
this.api
.operationalStatistics({ id: this.assetId, type: this.type })
.pipe(
finalize(() => {
this.loading = false
}),
)
.subscribe((res) => {
// console.log('res', res)
this.data = res.body
if (this.data) {
setTimeout(() => {
this.renderBar()
this.renderPie()
})
}
})
}
barRef?: EChartsType
renderBar() {
if (this.openTimeChart?.nativeElement) {
if (!this.barRef) {
this.barRef = init(this.openTimeChart?.nativeElement)
}
const name: string[] = []
const value: number[] = []
this.data?.openLogs.forEach((i: NzSafeAny) => {
name.push(i.name)
value.push(i.value)
})
this.barRef.setOption({
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
},
xAxis: {
type: 'category',
data: name,
},
yAxis: {
type: 'value',
},
series: [
{
data: value,
type: 'bar',
},
],
})
}
}
pieRef?: EChartsType
renderPie() {
if (this.runningStatusChart?.nativeElement) {
if (!this.pieRef) {
this.pieRef = init(this.runningStatusChart?.nativeElement)
}
let data: NzSafeAny[] = []
const odata: NzSafeAny[] = this.data?.runLogs ?? []
const total = odata.reduce((a: number, b: any) => a + Math.abs(b.value), 0)
data = odata.map((i: NzSafeAny) => {
const value = Math.abs(i.value)
const percent = ((value / total) * 100).toFixed(2)
return {
...i,
percent,
value,
}
})
console.log('data', data)
this.pieRef.setOption({
tooltip: {
trigger: 'item',
},
legend: {
orient: 'scroll',
formatter: function (name: string, d: any) {
const item = data.find((i: NzSafeAny) => i.name === name)
return name + ' | ' + item?.percent + '%' + ' ' + item?.value + '小时'
},
},
series: [
{
name: '运行状态',
type: 'pie',
radius: ['40%', '70%'],
// center: ['40%', '50%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2,
},
label: {
show: false,
position: 'center',
},
emphasis: {
label: {
show: true,
fontSize: 30,
fontWeight: 'bold',
},
},
labelLine: {
show: false,
},
data: data,
},
],
})
}
}
}