消毒机设备
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.
 
 
 
 
 

149 lines
3.8 KiB

<script lang="ts" setup>
import * as echarts from 'echarts'
import { formatDateTime } from 'libs/utils'
import { onMounted, ref, watch } from 'vue'
const props = defineProps<{
envData: any
}>()
const titles = {
Internal: '仓内',
WiredExtSensor: '探头',
WirelessExtSensor: '探头',
}
watch(
() => props.envData,
(newValue) => {
if (!chartRef.value) {
return
}
let myChart = echarts.getInstanceByDom(chartRef.value)
if (!myChart) {
myChart = echarts.init(chartRef.value, null, { renderer: 'svg' })
}
const option = {
title: {
text: (titles[newValue?.type || ''] || '') + (newValue.type !== 'Internal' ? newValue?.id || '' : ''),
left: 'center', // 水平居中
top: 0,
},
grid: {
top: 100,
},
tooltip: {
trigger: 'axis',
position: [10, 10],
formatter: (params: any[]) => {
if (!params || !params.length)
return ''
const time = params[0].axisValue
let html = `<div>${time}</div>`
params.forEach((item) => {
let unit = ''
switch (item.seriesName) {
case '温度':
unit = ' ℃'
break
case '相对湿度':
unit = ' %RH'
break
case 'H₂O₂浓度':
unit = ' ppm'
break
case 'H₂O₂相对饱和度':
unit = ' %RS'
break
}
// item.marker 就是 echarts 自动给你的小彩点
html += `<div>${item.marker} ${item.seriesName}: ${item.data}${unit}</div>`
})
return html
},
},
legend: {
data: ['温度', '相对湿度', 'H₂O₂浓度', 'H₂O₂相对饱和度'],
orient: 'horizontal', // 水平布局
itemWidth: 10, // 图例图形宽度
itemHeight: 10, // 图例图形高度
columnWidth: 80, // 每列宽度,可按需调整
top: '5%', // 距离容器顶部距离
left: 'center', // 水平居中
},
xAxis: {
type: 'category',
boundaryGap: false,
data: newValue.data?.map(item => formatDateTime('HH:mm:ss', item.timestamp)),
},
yAxis: {
type: 'value',
},
series: [
{
name: '温度',
type: 'line',
data: newValue.data?.map(item => item.temp.toFixed(2)),
symbol: 'circle',
symbolSize: 2,
lineStyle: {
color: '#1e90ff',
width: 1,
},
},
{
name: '相对湿度',
type: 'line',
data: newValue.data?.map(item => item.rh.toFixed(2)),
symbol: 'circle',
symbolSize: 2,
lineStyle: {
color: '#32cd32',
width: 1,
},
},
{
name: 'H₂O₂浓度',
type: 'line',
data: newValue.data?.map(item => item.h2o2.toFixed(2)),
symbol: 'circle',
symbolSize: 2,
lineStyle: {
color: '#ffd700',
width: 1,
},
},
{
name: 'H₂O₂相对饱和度',
type: 'line',
data: newValue.data?.map(item => item.rs.toFixed(2)),
symbol: 'circle',
symbolSize: 2,
lineStyle: {
color: '#ff0000',
width: 1,
},
},
],
}
myChart.setOption(option)
myChart.resize()
},
{
deep: true,
},
)
const chartRef = ref<HTMLElement | null>(null)
onMounted(() => {
echarts.init(chartRef.value, null, { renderer: 'svg' })
})
</script>
<template>
<div ref="chartRef" style="height: 100%; width: 50%" />
</template>
<style scoped></style>