167 lines
3.4 KiB
Vue
167 lines
3.4 KiB
Vue
![]() |
<template>
|
|||
|
<div class="half-height-chart-container">
|
|||
|
<dv-border-box-10 class="border-box">
|
|||
|
<div class="chart-title">事件高发场景/区域分布</div>
|
|||
|
<div ref="barChart" class="chart"></div>
|
|||
|
</dv-border-box-10>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
|
|||
|
<script setup>
|
|||
|
import { ref, onMounted } from 'vue'
|
|||
|
import * as echarts from 'echarts'
|
|||
|
|
|||
|
const barChart = ref(null)
|
|||
|
|
|||
|
onMounted(() => {
|
|||
|
const barOption = {
|
|||
|
backgroundColor: 'transparent',
|
|||
|
tooltip: {
|
|||
|
trigger: 'axis',
|
|||
|
axisPointer: { type: 'shadow' },
|
|||
|
backgroundColor: 'rgba(0,0,0,0.8)',
|
|||
|
borderColor: 'rgba(64, 158, 255, 0.8)',
|
|||
|
borderWidth: 1,
|
|||
|
textStyle: { color: '#fff' }
|
|||
|
},
|
|||
|
legend: {
|
|||
|
data: ['检测数据1', '检测数据2'],
|
|||
|
bottom: 10, // 距离底部10px
|
|||
|
left: 'center', // 水平居中
|
|||
|
textStyle: {
|
|||
|
color: '#fff',
|
|||
|
fontSize: 12
|
|||
|
},
|
|||
|
itemWidth: 12,
|
|||
|
itemHeight: 8,
|
|||
|
itemGap: 30
|
|||
|
},
|
|||
|
grid: {
|
|||
|
left: '2%',
|
|||
|
right: '4%',
|
|||
|
bottom: '15%', // 增加底部间距给图例留空间
|
|||
|
top: '5%',
|
|||
|
containLabel: true
|
|||
|
},
|
|||
|
xAxis: {
|
|||
|
type: 'value',
|
|||
|
min: 0,
|
|||
|
max: 250,
|
|||
|
interval: 50,
|
|||
|
axisLine: {
|
|||
|
lineStyle: {
|
|||
|
color: 'rgba(124, 208, 255, 0.5)'
|
|||
|
}
|
|||
|
},
|
|||
|
splitLine: {
|
|||
|
lineStyle: {
|
|||
|
color: 'rgba(124, 208, 255, 0.1)',
|
|||
|
type: 'dashed'
|
|||
|
}
|
|||
|
},
|
|||
|
axisLabel: {
|
|||
|
color: 'rgba(124, 208, 255, 0.8)',
|
|||
|
fontSize: 12
|
|||
|
}
|
|||
|
},
|
|||
|
yAxis: {
|
|||
|
type: 'category',
|
|||
|
data: [
|
|||
|
'办公走廊/楼道区',
|
|||
|
'会议室区域',
|
|||
|
'值班岗亭区',
|
|||
|
'边检通道区',
|
|||
|
'港口泊位区'
|
|||
|
],
|
|||
|
axisLine: {
|
|||
|
lineStyle: {
|
|||
|
color: 'rgba(124, 208, 255, 0.5)'
|
|||
|
}
|
|||
|
},
|
|||
|
axisLabel: {
|
|||
|
color: 'rgba(124, 208, 255, 0.8)',
|
|||
|
fontSize: 12
|
|||
|
},
|
|||
|
axisTick: {
|
|||
|
show: false
|
|||
|
}
|
|||
|
},
|
|||
|
series: [
|
|||
|
{
|
|||
|
name: '检测数据1',
|
|||
|
type: 'bar',
|
|||
|
barWidth: 15,
|
|||
|
label: {
|
|||
|
show: true,
|
|||
|
position: 'right',
|
|||
|
color: '#FFA500',
|
|||
|
fontSize: 12,
|
|||
|
formatter: '{c}'
|
|||
|
},
|
|||
|
itemStyle: {
|
|||
|
color: '#FFA500',
|
|||
|
borderRadius: [0, 4, 4, 0]
|
|||
|
},
|
|||
|
data: [120, 150, 200, 100, 150]
|
|||
|
},
|
|||
|
{
|
|||
|
name: '检测数据2',
|
|||
|
type: 'bar',
|
|||
|
barWidth: 15,
|
|||
|
label: {
|
|||
|
show: true,
|
|||
|
position: 'right',
|
|||
|
color: '#00FFC0',
|
|||
|
fontSize: 12,
|
|||
|
formatter: '{c}'
|
|||
|
},
|
|||
|
itemStyle: {
|
|||
|
color: '#00FFC0',
|
|||
|
borderRadius: [0, 4, 4, 0]
|
|||
|
},
|
|||
|
data: [100, 120, 100, 80, 100]
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
|
|||
|
const chartInstance = echarts.init(barChart.value)
|
|||
|
chartInstance.setOption(barOption)
|
|||
|
|
|||
|
window.addEventListener('resize', () => {
|
|||
|
chartInstance.resize()
|
|||
|
})
|
|||
|
})
|
|||
|
</script>
|
|||
|
|
|||
|
<style scoped>
|
|||
|
.half-height-chart-container {
|
|||
|
width: 100%;
|
|||
|
height: 40vh; /* 关键修改:高度设为视口高度的50% */
|
|||
|
padding: 15px 30px;
|
|||
|
box-sizing: border-box;
|
|||
|
margin-top: 20px;
|
|||
|
}
|
|||
|
|
|||
|
.border-box {
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
border-radius: 4px;
|
|||
|
/* padding: 20px; */
|
|||
|
box-sizing: border-box;
|
|||
|
}
|
|||
|
|
|||
|
.chart-title {
|
|||
|
font-size: 16px;
|
|||
|
color: #7cd0ff;
|
|||
|
text-align: center;
|
|||
|
padding-top: 15px;
|
|||
|
font-weight: 500;
|
|||
|
letter-spacing: 1px;
|
|||
|
}
|
|||
|
|
|||
|
.chart {
|
|||
|
width: 100%;
|
|||
|
height: calc(100% - 30px);
|
|||
|
padding: 20px;
|
|||
|
}
|
|||
|
</style>
|