1
0
forked from dyf/dyf-vue-ui
Files
dyf-vue-ui/src/views/homeIndex/components/AlarmEvent.vue

140 lines
4.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 图表容器设置宽高 -->
<div class="vchartPage">
<div ref="chartRef" class="chartRef"></div>
</div>
</template>
<script setup lang="ts">
import * as echarts from 'echarts'; // 引入 ECharts
const chartRef = ref<HTMLDivElement | null>(null); // 图表容器的 ref
const echartData = ref<any>({});
const props = defineProps({
alarmOverview: {
type: Object,
required: true,
},
});
watch(() => props.alarmOverview, (newVal) => {
echartData.value = newVal;
console.log('newVal:', newVal);
}, { immediate: true, deep: true });
onMounted(() => {
setTimeout(() => {
if (chartRef.value) {
const {
forcedAlarms,
intrusionImpactAlarms,
autoAlarms,
geoFenceAlarms
} = echartData.value;
// 初始化 ECharts 实例
const myChart = echarts.init(chartRef.value);
// 配置图表参数
const option = {
tooltip: {
trigger: 'axis', // 触发方式:坐标轴触发
},
grid: {
left: '5%',
right: '5%',
bottom: '3%',
top: '15%',
containLabel: true, // 网格包含坐标轴标签
},
xAxis: {
type: 'category',
data: ['强制报警', '撞击闯入', '自动报警', '电子围栏告警'], // X 轴类目
axisLine: {
lineStyle: {
color: 'rgba(255, 255, 255, 0.1)', // X 轴线颜色
},
},
axisLabel: {
color: '#DEEFFF', // X 轴文字颜色
},
},
yAxis: {
type: 'value',
axisLine: {
lineStyle: {
color: '#1e3a8a', // Y 轴线颜色
},
},
axisLabel: {
color: '#DEEFFF', // Y 轴标签文字颜色
},
splitLine: {
lineStyle: {
color: 'rgba(255, 255, 255, 0.1)', // Y 轴分割
type: 'dashed', // 分割线为虚线
},
},
},
series: [
{
name: '报警次数',
type: 'bar',
data: [forcedAlarms, intrusionImpactAlarms, autoAlarms, geoFenceAlarms],
barWidth: '20px', // 柱子宽度
// 为不同柱子设置渐变色
itemStyle: {
color: function (params: any) {
const colorList = [
// 强制报警:蓝色渐变
new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#0F3352' },
{ offset: 1, color: '#00A8FF' },
]),
// 撞击闯入:黄色渐变
new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#0F3352' },
{ offset: 1, color: '#E4B90C' },
]),
// 自动报警:青蓝渐变
new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#0F3352' },
{ offset: 1, color: '#15DBCB' },
]),
// 电子围栏告警:红色渐变
new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#0F3352' },
{ offset: 1, color: '#F00C0C' },
]),
];
return colorList[params.dataIndex];
},
borderRadius: 4
},
},
],
};
// 将配置项设置到图表实例
myChart.setOption(option);
// 窗口resize时图表自适应
window.addEventListener('resize', () => {
myChart.resize();
});
}
}, 200)
});
</script>
<style scoped lang="scss">
.vchartPage {
margin-top:4.8vh;
}
.chartRef {
width: 100%;
height: 24.5vh;
}
</style>