|
@@ -12,18 +12,21 @@ import { NzProgressModule } from 'ng-zorro-antd/progress'; |
|
|
import { NzBadgeModule } from 'ng-zorro-antd/badge'; |
|
|
import { NzBadgeModule } from 'ng-zorro-antd/badge'; |
|
|
import { Subscription } from 'rxjs'; |
|
|
import { Subscription } from 'rxjs'; |
|
|
import { IMqttMessage, MqttService } from 'ngx-mqtt'; |
|
|
import { IMqttMessage, MqttService } from 'ngx-mqtt'; |
|
|
|
|
|
import { ChartComponentComponent } from './chart-component/chart-component.component'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Component({ |
|
|
@Component({ |
|
|
selector: 'app-data-v-s1', |
|
|
selector: 'app-data-v-s1', |
|
|
standalone: true, |
|
|
standalone: true, |
|
|
imports: [NzBadgeModule, NzProgressModule, AgGridAngular, DataVCardComponent, DataVTitleComponent, ...SHARED_IMPORTS], |
|
|
|
|
|
templateUrl: './s1.component.html', |
|
|
templateUrl: './s1.component.html', |
|
|
styleUrls: ['./s1.component.less'] |
|
|
|
|
|
|
|
|
styleUrls: ['./s1.component.less'], |
|
|
|
|
|
imports: [NzBadgeModule, NzProgressModule, AgGridAngular, DataVCardComponent, DataVTitleComponent, ...SHARED_IMPORTS, ChartComponentComponent] |
|
|
}) |
|
|
}) |
|
|
export class DataVS1Component implements OnInit { |
|
|
export class DataVS1Component implements OnInit { |
|
|
private readonly http = inject(_HttpClient); |
|
|
private readonly http = inject(_HttpClient); |
|
|
private readonly modal = inject(ModalHelper); |
|
|
private readonly modal = inject(ModalHelper); |
|
|
|
|
|
|
|
|
private c1OptionC = { |
|
|
|
|
|
|
|
|
chart_options1 = {} |
|
|
|
|
|
c1OptionC: echarts.EChartsOption = { |
|
|
series: [ |
|
|
series: [ |
|
|
{ |
|
|
{ |
|
|
type: 'gauge', |
|
|
type: 'gauge', |
|
@@ -234,7 +237,7 @@ export class DataVS1Component implements OnInit { |
|
|
const messagePayload = JSON.parse(message.payload.toString()); |
|
|
const messagePayload = JSON.parse(message.payload.toString()); |
|
|
console.log('Received message as object: ', messagePayload.msg); |
|
|
console.log('Received message as object: ', messagePayload.msg); |
|
|
|
|
|
|
|
|
this.c1OptionC.series[0].data[0].value = messagePayload.c1_value; |
|
|
|
|
|
|
|
|
|
|
|
this.c1Chart.setOption(this.c1OptionC); |
|
|
this.c1Chart.setOption(this.c1OptionC); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
@@ -472,6 +475,122 @@ export class DataVS1Component implements OnInit { |
|
|
] |
|
|
] |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.chart_options1 = { |
|
|
|
|
|
title: { |
|
|
|
|
|
textStyle: { |
|
|
|
|
|
color: "#ffffff" |
|
|
|
|
|
}, |
|
|
|
|
|
text: '全水', |
|
|
|
|
|
subtext: '(kg/kg)', |
|
|
|
|
|
}, |
|
|
|
|
|
legend: { |
|
|
|
|
|
data: ['测量值', '上限值', '下限值',] |
|
|
|
|
|
}, |
|
|
|
|
|
calculable: true, |
|
|
|
|
|
xAxis: [ |
|
|
|
|
|
{ |
|
|
|
|
|
axisLine: { |
|
|
|
|
|
lineStyle: { |
|
|
|
|
|
color: [ |
|
|
|
|
|
[0.25, '#74FAFB'], |
|
|
|
|
|
[0.5, '#74FAFB'], |
|
|
|
|
|
[0.75, '#74FAFB'], |
|
|
|
|
|
[1, '#74FAFB'] |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
position: 'bottom', |
|
|
|
|
|
type: 'category', |
|
|
|
|
|
data: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
yAxis: [ |
|
|
|
|
|
{ |
|
|
|
|
|
type: 'value' |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
series: [ |
|
|
|
|
|
{ |
|
|
|
|
|
name: '测量值', |
|
|
|
|
|
type: 'line', |
|
|
|
|
|
data: [100, 155, 139, 199, 220, 160, 120, 182.2, 150, 155, 160, 180], |
|
|
|
|
|
markPoint: { |
|
|
|
|
|
data: [ |
|
|
|
|
|
{ name: '最大值', value: 220, xAxis: 4, yAxis: 220 }, |
|
|
|
|
|
{ name: '最小值', value: 100, xAxis: 0, yAxis: 100 } |
|
|
|
|
|
] |
|
|
|
|
|
}, |
|
|
|
|
|
markLine: { |
|
|
|
|
|
data: [{ type: 'average', name: '平均值' }] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
type: 'custom', |
|
|
|
|
|
name: 'error', |
|
|
|
|
|
itemStyle: { |
|
|
|
|
|
borderWidth: 1.5 |
|
|
|
|
|
}, |
|
|
|
|
|
renderItem: function (_params: any, api: any) { |
|
|
|
|
|
var xValue = api.value(0); |
|
|
|
|
|
var highPoint = api.coord([xValue, api.value(1)]); |
|
|
|
|
|
var lowPoint = api.coord([xValue, api.value(2)]); |
|
|
|
|
|
var halfWidth = api.size([1, 0])[0] * 0.1; |
|
|
|
|
|
var style = api.style({ |
|
|
|
|
|
stroke: api.visual('color'), |
|
|
|
|
|
fill: undefined |
|
|
|
|
|
}); |
|
|
|
|
|
return { |
|
|
|
|
|
type: 'group', |
|
|
|
|
|
children: [ |
|
|
|
|
|
{ |
|
|
|
|
|
type: 'line', |
|
|
|
|
|
transition: ['shape'], |
|
|
|
|
|
shape: { |
|
|
|
|
|
x1: highPoint[0] - halfWidth, |
|
|
|
|
|
y1: highPoint[1], |
|
|
|
|
|
x2: highPoint[0] + halfWidth, |
|
|
|
|
|
y2: highPoint[1] |
|
|
|
|
|
}, |
|
|
|
|
|
style: style |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
type: 'line', |
|
|
|
|
|
transition: ['shape'], |
|
|
|
|
|
shape: { |
|
|
|
|
|
x1: highPoint[0], |
|
|
|
|
|
y1: highPoint[1], |
|
|
|
|
|
x2: lowPoint[0], |
|
|
|
|
|
y2: lowPoint[1] |
|
|
|
|
|
}, |
|
|
|
|
|
style: style |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
type: 'line', |
|
|
|
|
|
transition: ['shape'], |
|
|
|
|
|
shape: { |
|
|
|
|
|
x1: lowPoint[0] - halfWidth, |
|
|
|
|
|
y1: lowPoint[1], |
|
|
|
|
|
x2: lowPoint[0] + halfWidth, |
|
|
|
|
|
y2: lowPoint[1] |
|
|
|
|
|
}, |
|
|
|
|
|
style: style |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
}; |
|
|
|
|
|
}, |
|
|
|
|
|
encode: { |
|
|
|
|
|
x: 0, |
|
|
|
|
|
y: [1, 2] |
|
|
|
|
|
}, |
|
|
|
|
|
data: errorData, |
|
|
|
|
|
z: 100 |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var optionD2; |
|
|
var optionD2; |
|
|
optionD2 = { |
|
|
optionD2 = { |
|
|
title: { |
|
|
title: { |
|
|