Browse Source

time

master
maochaoying 2 years ago
parent
commit
19a534f239
  1. 234
      src/components/SealTest bak.vue
  2. 382
      src/components/SealTest.vue
  3. 279
      src/components/SealTest_bak.vue
  4. 18
      src/store/modules/seal.js

234
src/components/SealTest bak.vue

@ -0,0 +1,234 @@
<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>

382
src/components/SealTest.vue

@ -1,13 +1,75 @@
<template>
<div class="seal_test_container">
<div class="title_wrap">
<img class="icon" :src="SealPng" alt="" />
<div class="title">实时压力表</div>
<div class="left_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">
<div class="air_box">
<p class="box"></p>
<p class="tit">测试前气压</p>
<p class="num">
{{
sealStore.oldAirPressure != null
? sealStore.oldAirPressure
: '--'
}}KPa
</p>
</div>
<img
class="air_img"
v-if="!testStore.airCompressor"
@click="changeAirStatus(2)"
:src="StartAir"
alt=""
/>
<img
class="air_img"
@click="changeAirStatus(1)"
v-else
:src="StopAir"
alt=""
/>
</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 class="right_container">
<div class="header">
<div class="left">
<img :src="TestIcon" class="icon" alt="" />
<p class="title">密封测试</p>
</div>
<p class="en">SEAL</p>
</div>
<div class="oper_box">
<div class="emp_box">
<div class="title">测试时间</div>
<div class="num">{{ resultTime ? resultTime : '未开始' }}</div>
</div>
<div class="emp_box">
<div class="title">气压差值</div>
<div class="num">
{{
sealStore.differenceValue ? sealStore.differenceValue : '未开始'
}}
</div>
</div>
<img
:src="StartTest"
v-if="!sealStore.isStartTest"
class="test_png"
@click="handleStartTest('1')"
alt=""
/>
<img
@click="handleStartTest('2')"
:src="StopTest"
v-else
class="test_png"
alt=""
/>
</div>
</div>
</div>
</template>
@ -17,12 +79,16 @@ 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 TestIcon from '@/assets/img/seal/test.png'
import StartTest from '@/assets/img/seal/starttest.png'
import StopTest from '@/assets/img/seal/stoptest.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'
import { someAirSwitchJSON } from '@/mock/command'
import { useSealStore, useTestStore, useWebSocketStore } from '@/store'
const sealStore = useSealStore()
const testStore = useTestStore()
const websocketStore = useWebSocketStore()
const sealCharts = ref(null)
const sealOptions = ref({
@ -91,9 +157,85 @@ const sealOptions = ref({
],
})
const n_sec = ref(0) //
const n_min = ref(0) //
const n_hour = ref(0) //
const resultTime = ref('')
const timerStart = ref(null)
const timerFunc = () => {
timerStart.value = setInterval(() => {
var str_sec = n_sec.value
var str_min = n_min.value
var str_hour = n_hour.value
if (n_sec.value < 10) {
str_sec = '0' + n_sec.value
}
if (n_min.value < 10) {
str_min = '0' + n_min.value
}
if (n_hour.value < 10) {
str_hour = '0' + n_hour.value
}
resultTime.value = str_hour + ':' + str_min + ':' + str_sec
n_sec.value = n_sec.value + 1
if (n_sec.value > 59) {
n_sec.value = 0
n_min.value = n_min.value + 1
}
if (n_min.value > 59) {
n_min.value = 0
n_hour.value = n_hour.value + 1
}
}, 1000)
}
const changeAirStatus = flag => {
if (flag == 1) {
if (!testStore.airCompressor) {
websocketStore.sendCommandMsg(someAirSwitchJSON(0, 1))
websocketStore.sendCommandMsg(someAirSwitchJSON(1, 1))
testStore.updateAirCompressor(true)
}
} else {
if (testStore.airCompressor) {
websocketStore.sendCommandMsg(someAirSwitchJSON(0, 0))
websocketStore.sendCommandMsg(someAirSwitchJSON(1, 0))
testStore.updateAirCompressor(false)
}
}
}
const handleStartTest = flag => {
if (flag == '1') {
// oldAirPressure
// getStatecurrentAirPressure
//
timerFunc()
sealStore.updateIsStartTest(true)
}
if (flag == '2') {
// oldAirPressurenull
sealStore.updateOldAirPressure(null)
// null
clearInterval(timerStart.value)
timerStart.value = null
resultTime.value = null
n_sec.value = 0
n_min.value = 0
n_hour.value = 0
sealStore.updateIsStartTest(false)
}
}
const timer = ref(null)
onBeforeUnmount(() => {
timer.value = null
timerStart.value = null
clearInterval(timer.value)
clearInterval(timerStart.value)
})
onMounted(() => {
sealCharts.value = echarts.init(document.getElementById('seal_echarts'))
@ -176,59 +318,185 @@ onMounted(() => {
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;
.left_container {
margin-right: 30px;
width: 766px;
height: 580px;
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;
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;
}
}
.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;
.oper_box {
position: absolute;
left: 28px;
bottom: 28px;
width: 710px;
height: 110px;
display: flex;
align-items: center;
justify-content: space-between;
.air_img {
width: 341px;
height: 110px;
}
.air_box {
width: 341px;
height: 110px;
border-radius: 16px;
background: #f6f6f6;
display: flex;
align-items: center;
justify-content: center;
.box {
width: 16px;
height: 16px;
background: #4359b9;
margin-right: 6px;
}
.tit {
font-family: 思源黑体;
font-size: 20px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.06em;
font-feature-settings: 'kern' on;
color: #3d3d3d;
margin-right: 8px;
}
.num {
font-family: Source Han Sans;
font-size: 30px;
font-weight: bold;
line-height: normal;
letter-spacing: 0.06em;
font-feature-settings: 'kern' on;
color: #4359b9;
}
}
}
.echarts_box {
height: 580px;
position: absolute;
left: 0;
top: -36px;
width: 100%;
}
}
.echarts_box {
.right_container {
height: 580px;
position: absolute;
left: 0;
top: -36px;
width: 1220px;
box-sizing: border-box;
border-radius: 16px;
background: #ffffff;
flex: 1;
padding: 32px 42px;
.header {
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
width: 340px;
height: 45px;
border-radius: 245px;
background: #06518b;
padding-left: 17px;
padding-right: 24px;
margin-bottom: 20px;
.left {
display: flex;
align-items: center;
.icon {
width: 16px;
height: 16px;
}
.title {
font-family: 思源黑体;
font-size: 14px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.1em;
margin-left: 9px;
color: #ffffff;
}
}
.en {
font-family: 思源黑体;
font-size: 12px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.1em;
color: #ffffff;
}
}
.oper_box {
width: 340px;
height: 455px;
border-radius: 16px;
background: #f6f6f6;
box-sizing: border-box;
padding: 20px;
.emp_box {
width: 300px;
height: 162px;
border-radius: 12px;
background: #fff;
margin-bottom: 20px;
box-sizing: border-box;
padding-top: 16px;
padding-left: 27px;
padding-right: 27px;
display: flex;
flex-direction: column;
.title {
font-family: Source Han Sans;
font-size: 16px;
font-weight: 500;
line-height: normal;
letter-spacing: 0.06em;
font-feature-settings: 'kern' on;
color: #06518b;
}
.num {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-family: 思源黑体;
font-size: 30px;
font-weight: bold;
line-height: normal;
letter-spacing: 0.1em;
color: #000000;
}
}
.test_png {
width: 300px;
height: 50px;
}
}
}
}
</style>

279
src/components/SealTest_bak.vue

@ -1,279 +0,0 @@
<template>
<div class="seal_test_container">
<div class="left_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">
<div class="air_box">
<p class="box"></p>
<p class="tit">测试前气压</p>
<p class="num">--KPa</p>
</div>
<img class="air_img" :src="StartAir" alt="" />
</div>
</div>
<div class="right_container">
<div class="header">
<div class="left">
<img :src="TestIcon" class="icon" alt="" />
<p class="title">密封测试</p>
</div>
<p class="en">SEAL</p>
</div>
<div class="oper_box">
<div class="emp_box"></div>
<div class="emp_box"></div>
<img :src="StartTest" class="test_png" alt="" />
</div>
</div>
</div>
</template>
<script setup>
import * as echarts from 'echarts'
import { ref, onMounted } from 'vue'
import SealPng from '@/assets/img/seal/seal.png'
import StartAir from '@/assets/img/seal/start.png'
import TestIcon from '@/assets/img/seal/test.png'
import StartTest from '@/assets/img/seal/starttest.png'
import StopTest from '@/assets/img/seal/stoptest.png'
import StopAir from '@/assets/img/seal/stop.png'
const sealCharts = ref(null)
const sealOptions = ref({
series: [
{
type: 'gauge',
progress: {
show: true,
width: 18,
itemStyle: {
color: 'red',
},
},
pointer: {
itemStyle: {
color: 'red',
},
},
axisLine: {
lineStyle: {
width: 18,
color: [[1, '#ffd1d1']],
},
},
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: 'red',
},
},
title: {
show: false,
},
detail: {
valueAnimation: true,
fontSize: 40,
color: 'red',
formatter: '{value} KPa',
offsetCenter: [0, '70%'],
},
data: [
{
value: 68,
},
],
},
],
})
onMounted(() => {
sealCharts.value = echarts.init(document.getElementById('seal_echarts'))
sealCharts.value.setOption(sealOptions.value)
})
</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;
.left_container {
margin-right: 30px;
width: 766px;
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: 710px;
height: 110px;
display: flex;
align-items: center;
justify-content: space-between;
.air_img {
width: 341px;
height: 110px;
}
.air_box {
width: 341px;
height: 110px;
border-radius: 16px;
background: #f6f6f6;
display: flex;
align-items: center;
justify-content: center;
.box {
width: 16px;
height: 16px;
background: #4359b9;
margin-right: 6px;
}
.tit {
font-family: 思源黑体;
font-size: 20px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.06em;
font-feature-settings: 'kern' on;
color: #3d3d3d;
margin-right: 8px;
}
.num {
font-family: Source Han Sans;
font-size: 30px;
font-weight: bold;
line-height: normal;
letter-spacing: 0.06em;
font-feature-settings: 'kern' on;
color: #4359b9;
}
}
}
.echarts_box {
height: 580px;
position: absolute;
left: 0;
top: -36px;
width: 100%;
}
}
.right_container {
height: 580px;
box-sizing: border-box;
border-radius: 16px;
background: #ffffff;
flex: 1;
padding: 32px 42px;
.header {
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
width: 340px;
height: 45px;
border-radius: 245px;
background: #06518b;
padding-left: 17px;
padding-right: 24px;
margin-bottom: 20px;
.left {
display: flex;
align-items: center;
.icon {
width: 16px;
height: 16px;
}
.title {
font-family: 思源黑体;
font-size: 14px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.1em;
margin-left: 9px;
color: #ffffff;
}
}
.en {
font-family: 思源黑体;
font-size: 12px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.1em;
color: #ffffff;
}
}
.oper_box {
width: 340px;
height: 455px;
border-radius: 16px;
background: #f6f6f6;
box-sizing: border-box;
padding: 20px;
.emp_box {
width: 300px;
height: 162px;
border-radius: 12px;
background: #fff;
margin-bottom: 20px;
}
.test_png {
width: 300px;
height: 50px;
}
}
}
}
</style>

18
src/store/modules/seal.js

@ -6,6 +6,8 @@ export const useSealStore = defineStore({
return {
// 0~800kPa
currentAirPressure: 0,
isStartTest: false,
oldAirPressure: null,
}
},
// actions
@ -13,5 +15,21 @@ export const useSealStore = defineStore({
updateCurrentAirPressure(currentAirPressure) {
this.currentAirPressure = currentAirPressure
},
updateIsStartTest(isStartTest) {
this.isStartTest = isStartTest
},
updateOldAirPressure(oldAirPressure) {
this.oldAirPressure = oldAirPressure
},
},
getters: {
differenceValue(state) {
if (state.isStartTest) {
if (state.oldAirPressure != null && state.currentAirPressure) {
return Math.abs(state.oldAirPressure - state.currentAirPressure)
}
}
return null
},
},
})
Loading…
Cancel
Save