|
|
<template> <div class="seal_test_container"> <div class="title_wrap"> <img class="icon" :src="SealPng" alt="" /> <div class="title">实时压力表</div> </div> <div class="echarts_box" id="seal_echarts"></div> <div class="oper_box"> <img class="air_img" :src="StopAir" alt="" /> <img class="air_img" :src="StartAir" alt="" /> </div> </div> </template>
<script setup> import * as echarts from 'echarts' import { ref, onMounted, onBeforeUnmount } from 'vue' import SealPng from '@/assets/img/seal/seal.png' import StartAir from '@/assets/img/seal/start.png' import StopAir from '@/assets/img/seal/stop.png' import DisStart from '@/assets/img/seal/dis_start.png' import DisStop from '@/assets/img/seal/dis_stop.png' import { useSealStore } from '@/store'
const sealStore = useSealStore()
const sealCharts = ref(null) const sealOptions = ref({ series: [ { type: 'gauge', min: 0, max: 800, progress: { show: true, width: 18, itemStyle: { color: '#3442aa', }, }, pointer: { itemStyle: { color: '#3442aa', }, }, axisLine: { lineStyle: { width: 18, }, }, axisTick: { show: false, }, splitLine: { length: 15, lineStyle: { width: 2, color: '#999', }, }, axisLabel: { distance: 25, color: '#999', fontSize: 20, }, anchor: { show: true, showAbove: true, size: 25, itemStyle: { borderWidth: 10, borderColor: '#3442aa', }, }, title: { show: false, }, detail: { valueAnimation: true, fontSize: 40, color: '#3442aa', formatter: '{value} KPa', offsetCenter: [0, '70%'], }, data: [ { value: sealStore.currentAirPressure, }, ], }, ], })
const timer = ref(null) onBeforeUnmount(() => { timer.value = null }) onMounted(() => { sealCharts.value = echarts.init(document.getElementById('seal_echarts')) sealCharts.value.setOption(sealOptions.value) timer.value = setInterval(() => { sealCharts.value.setOption({ series: [ { type: 'gauge', min: 0, max: 800, progress: { show: true, width: 18, itemStyle: { color: '#3442aa', }, }, pointer: { itemStyle: { color: '#3442aa', }, }, axisLine: { lineStyle: { width: 18, }, }, axisTick: { show: false, }, splitLine: { length: 15, lineStyle: { width: 2, color: '#999', }, }, axisLabel: { distance: 25, color: '#999', fontSize: 20, }, anchor: { show: true, showAbove: true, size: 25, itemStyle: { borderWidth: 10, borderColor: '#3442aa', }, }, title: { show: false, }, detail: { valueAnimation: true, fontSize: 40, color: '#3442aa', formatter: '{value} KPa', offsetCenter: [0, '70%'], }, data: [ { value: sealStore.currentAirPressure, }, ], }, ], }) }, 1000) }) </script>
<style lang="scss" scoped> .seal_test_container { margin-bottom: 19px; height: 580px; box-sizing: border-box; border-radius: 16px; display: flex; align-items: center; margin-right: 30px; width: 1220px; height: 580px; box-sizing: border-box; border-radius: 16px; background: #ffffff; position: relative; .title_wrap { position: absolute; left: 28px; top: 28px; width: 141px; height: 31px; box-sizing: border-box; display: flex; align-items: center; .title { font-family: 思源黑体; font-size: 20px; font-weight: bold; line-height: normal; letter-spacing: 0.02em; font-feature-settings: 'kern' on; color: #000000; margin-left: 9px; } .icon { width: 30px; height: 30px; } } .oper_box { position: absolute; left: 28px; bottom: 28px; width: 1164px; box-sizing: border-box; padding: 0 120px; height: 110px; display: flex; align-items: center; justify-content: space-between; .air_img { width: 341px; height: 110px; } } .echarts_box { height: 580px; position: absolute; left: 0; top: -36px; width: 1220px; } } </style>
|