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.
529 lines
15 KiB
529 lines
15 KiB
<script setup lang="ts">
|
|
import { ElMessageBox } from 'element-plus'
|
|
import { FtMessage } from 'libs/message'
|
|
import { sendControl } from 'libs/utils'
|
|
import { useSystemStore } from 'stores/useSystemStore'
|
|
import { computed, h, ref } from 'vue'
|
|
import { useRouter } from 'vue-router'
|
|
|
|
const router = useRouter()
|
|
const systemStore = useSystemStore() // 使用 systemStore
|
|
|
|
const startWork = () => {
|
|
ElMessageBox({
|
|
title: '提示',
|
|
message: h('div', null, [
|
|
h('p', null, '请确认清洗/预充/除湿均已完成 '),
|
|
h('p', null, '请确认外部氮气压力大于0.35Mpa'),
|
|
]),
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
showCancelButton: true,
|
|
showClose: false,
|
|
}).then(() => {
|
|
setTimeout(() => {
|
|
router.push('/spray')
|
|
}, 100)
|
|
})
|
|
}
|
|
|
|
const humidity = ref()
|
|
const slideTemperature = ref()
|
|
const nozzleTemperature = ref()
|
|
const speed = ref()
|
|
const clearSpeed = ref()
|
|
|
|
const slideStart = () => {
|
|
if (!systemStore.systemSensor.slideTemperature) {
|
|
FtMessage.error('未检测到当前温度')
|
|
return
|
|
}
|
|
if (!slideTemperature.value) {
|
|
FtMessage.error('请输入目标温度')
|
|
return
|
|
}
|
|
if (slideTemperature.value > 100 || slideTemperature.value < 0) {
|
|
FtMessage.error('温度参数有误')
|
|
return
|
|
}
|
|
if (slideTemperature.value <= systemStore.systemSensor.slideTemperature) {
|
|
FtMessage.info('当前不需要加热')
|
|
return
|
|
}
|
|
ElMessageBox.confirm('载玻台即将开始加热', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
showCancelButton: true,
|
|
showClose: false,
|
|
})
|
|
.then(async () => {
|
|
slideStartRef.value.setLoading(true)
|
|
const params = {
|
|
cmdCode: 'slide_plat_heat_start',
|
|
cmdId: '',
|
|
params: {
|
|
temperature: slideTemperature.value,
|
|
},
|
|
}
|
|
await sendControl(params)
|
|
systemStore.updateSlideTemperature(slideTemperature.value)
|
|
slideStartRef.value.setLoading(false)
|
|
})
|
|
.catch(() => {
|
|
FtMessage.error('取消加热')
|
|
})
|
|
}
|
|
const nozzleStart = () => {
|
|
if (!systemStore.systemSensor.nozzleTemperature) {
|
|
FtMessage.error('未检测到当前温度')
|
|
return
|
|
}
|
|
if (!nozzleTemperature.value) {
|
|
FtMessage.error('请输入目标温度')
|
|
return
|
|
}
|
|
if (nozzleTemperature.value > 100 || nozzleTemperature.value < 0) {
|
|
FtMessage.error('温度参数有误')
|
|
return
|
|
}
|
|
if (nozzleTemperature.value <= systemStore.systemSensor.nozzleTemperature) {
|
|
FtMessage.info('当前不需要加热')
|
|
return
|
|
}
|
|
ElMessageBox.confirm('即将开始加热', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
showCancelButton: true,
|
|
showClose: false,
|
|
})
|
|
.then(async () => {
|
|
nozzleStartRef.value.setLoading(true)
|
|
const params = {
|
|
cmdCode: 'nozzle_heat_start',
|
|
cmdId: '',
|
|
params: {
|
|
temperature: nozzleTemperature.value,
|
|
},
|
|
}
|
|
await sendControl(params)
|
|
systemStore.updateTargetNozzleTemperature(nozzleTemperature.value)
|
|
nozzleStartRef.value.setLoading(false)
|
|
})
|
|
.catch(() => {
|
|
FtMessage.error('取消加热')
|
|
})
|
|
}
|
|
const slideStartRef = ref()
|
|
const nozzleStartRef = ref()
|
|
const dehumidifierStartRef = ref()
|
|
const dehumidifierStart = () => {
|
|
if (!systemStore.systemSensor.humidity) {
|
|
FtMessage.error('未检测到当前湿度')
|
|
return
|
|
}
|
|
if (!humidity.value) {
|
|
FtMessage.error('请输入目标湿度')
|
|
return
|
|
}
|
|
if (humidity.value > 100 || humidity.value < 0) {
|
|
FtMessage.error('湿度参数有误')
|
|
return
|
|
}
|
|
if (humidity.value >= systemStore.systemSensor.humidity) {
|
|
FtMessage.info('当前不需要除湿')
|
|
return
|
|
}
|
|
ElMessageBox.confirm('即将开始除湿,请确认关闭注射泵门和玻片托盘出口门', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
showCancelButton: true,
|
|
showClose: false,
|
|
})
|
|
.then(async () => {
|
|
dehumidifierStartRef.value.setLoading(true)
|
|
const params = {
|
|
cmdCode: 'dehumidifier_start',
|
|
cmdId: '',
|
|
params: {
|
|
humidity: humidity.value,
|
|
},
|
|
}
|
|
await sendControl(params)
|
|
systemStore.updateTargetHumidity(humidity.value)
|
|
dehumidifierStartRef.value.setLoading(false)
|
|
})
|
|
.catch(() => {
|
|
FtMessage.error('取消除湿')
|
|
})
|
|
}
|
|
const cleanRemainingTime = computed(() => systemStore.cleanRemainingTime)
|
|
const syringePipelineWashRef = ref()
|
|
const syringePipelineWash = async () => {
|
|
if (!clearSpeed.value) {
|
|
FtMessage.error('请输入清洗速度')
|
|
return
|
|
}
|
|
if (clearSpeed.value > 100) {
|
|
FtMessage.error('清洗速度最大为100 uL/min')
|
|
return
|
|
}
|
|
ElMessageBox({
|
|
title: '提示',
|
|
message: h('div', null, [h('p', null, '请检查废液瓶是否已满 '), h('p', null, '请检查设备内是否有异物')]),
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
showCancelButton: true,
|
|
showClose: false,
|
|
})
|
|
.then(async () => {
|
|
syringePipelineWashRef.value.setLoading(true)
|
|
const params = {
|
|
cmdCode: 'syringe_pipeline_wash',
|
|
cmdId: '',
|
|
params: {
|
|
speed: clearSpeed.value,
|
|
},
|
|
}
|
|
console.log('sendControl', params)
|
|
await sendControl(params)
|
|
syringePipelineWashRef.value.setLoading(false)
|
|
systemStore.startCleanTimer()
|
|
})
|
|
.catch(() => {
|
|
FtMessage.error('取消清洗')
|
|
systemStore.stopCleanTimer()
|
|
})
|
|
}
|
|
|
|
const nozzlePipelineWashRef = ref()
|
|
const nozzlePipelineWash = () => {
|
|
if (!clearSpeed.value) {
|
|
FtMessage.error('请输入清洗速度')
|
|
return
|
|
}
|
|
if (clearSpeed.value > 100) {
|
|
FtMessage.error('清洗速度最大为100 uL/min')
|
|
return
|
|
}
|
|
ElMessageBox({
|
|
title: '提示',
|
|
message: h('div', null, [h('p', null, '请检查废液瓶是否已满 '), h('p', null, '请检查设备内是否有异物')]),
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
showCancelButton: true,
|
|
showClose: false,
|
|
}).then(async () => {
|
|
nozzlePipelineWashRef.value.setLoading(true)
|
|
const params = {
|
|
cmdCode: 'nozzle_pipeline_wash',
|
|
cmdId: '',
|
|
params: {
|
|
speed: clearSpeed.value,
|
|
},
|
|
}
|
|
try {
|
|
await sendControl(params)
|
|
}
|
|
finally {
|
|
nozzlePipelineWashRef.value.setLoading(false)
|
|
}
|
|
})
|
|
}
|
|
console.log(nozzlePipelineWash)
|
|
const preRemainingTime = computed(() => systemStore.preRemainingTime)
|
|
const matrixPrefillRef = ref()
|
|
const matrixPrefill = () => {
|
|
if (!speed.value) {
|
|
FtMessage.error('请输入预充速度')
|
|
return
|
|
}
|
|
if (speed.value > 100) {
|
|
FtMessage.error('预充速度最大为100 uL/min')
|
|
return
|
|
}
|
|
ElMessageBox({
|
|
title: '提示',
|
|
message: h('div', null, [h('p', null, '请检查废液瓶是否已满 '), h('p', null, '请检查设备内是否有异物')]),
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
showCancelButton: true,
|
|
showClose: false,
|
|
})
|
|
.then(async () => {
|
|
matrixPrefillRef.value.setLoading(true)
|
|
const params = {
|
|
cmdCode: 'matrix_prefill',
|
|
cmdId: '',
|
|
params: {
|
|
speed: speed.value,
|
|
},
|
|
}
|
|
systemStore.startPreTimer()
|
|
await sendControl(params)
|
|
matrixPrefillRef.value.setLoading(false)
|
|
})
|
|
.catch(() => {
|
|
FtMessage.error('取消预充')
|
|
systemStore.stopPreTimer()
|
|
})
|
|
}
|
|
|
|
const pipelineWashStop = async () => {
|
|
const params = {
|
|
cmdCode: 'syringe_pipeline_wash_stop',
|
|
cmdId: '',
|
|
}
|
|
systemStore.stopCleanTimer()
|
|
await sendControl(params)
|
|
}
|
|
|
|
const matrixPrefillStop = async () => {
|
|
const params = {
|
|
cmdCode: 'matrix_prefill_stop',
|
|
cmdId: '',
|
|
}
|
|
systemStore.stopPreTimer()
|
|
await sendControl(params)
|
|
}
|
|
|
|
const dehumidifierStop = async () => {
|
|
const params = {
|
|
cmdCode: 'dehumidifier_stop',
|
|
cmdId: '',
|
|
}
|
|
await sendControl(params)
|
|
}
|
|
const slideStop = async () => {
|
|
const params = {
|
|
cmdCode: 'slide_plat_heat_stop',
|
|
cmdId: '',
|
|
}
|
|
await sendControl(params)
|
|
}
|
|
const nozzleStop = async () => {
|
|
const params = {
|
|
cmdCode: 'nozzle_heat_stop',
|
|
cmdId: '',
|
|
}
|
|
await sendControl(params)
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<el-card>
|
|
<template #header>
|
|
<div class="card-header">
|
|
<div class="num-box">
|
|
1
|
|
</div>
|
|
<span> 清洗管道</span>
|
|
</div>
|
|
</template>
|
|
<div style="display: flex; align-items: center; margin-top: 10px">
|
|
<div style="display: flex; align-items: center; width: fit-content; margin-right: 30px">
|
|
<span>清洗速度</span>
|
|
<el-input v-model="clearSpeed" type="number" style="width: 100px; margin: 0 10px" />
|
|
<span>uL/min</span>
|
|
</div>
|
|
<ft-button
|
|
ref="syringePipelineWashRef"
|
|
type="primary"
|
|
:click-handle="syringePipelineWash"
|
|
:disabled="
|
|
systemStore.systemStatus.spraying
|
|
|| systemStore.systemStatus.cleaningSyringePipeline
|
|
|| systemStore.systemStatus.cleaningNozzlePipeline
|
|
|| systemStore.systemStatus.prefilling
|
|
"
|
|
>
|
|
清洗注射器管路
|
|
</ft-button>
|
|
<!-- <ft-button -->
|
|
<!-- ref="nozzlePipelineWashRef" type="primary" :click-handle="nozzlePipelineWash" :disabled="systemStore.systemStatus.spraying -->
|
|
<!-- || systemStore.systemStatus.cleaningSyringePipeline -->
|
|
<!-- || systemStore.systemStatus.cleaningNozzlePipeline -->
|
|
<!-- || systemStore.systemStatus.prefilling" -->
|
|
<!-- > -->
|
|
<!-- 清洗喷嘴管路 -->
|
|
<!-- </ft-button> -->
|
|
<ft-button
|
|
:click-handle="pipelineWashStop"
|
|
:disabled="
|
|
!systemStore.systemStatus.cleaningSyringePipeline && !systemStore.systemStatus.cleaningNozzlePipeline
|
|
"
|
|
>
|
|
停止清洗
|
|
</ft-button>
|
|
<span> 清洗计时: {{ cleanRemainingTime }}</span>
|
|
</div>
|
|
</el-card>
|
|
<el-card>
|
|
<template #header>
|
|
<div class="card-header">
|
|
<div class="num-box">
|
|
2
|
|
</div>
|
|
<span> 预充管道</span>
|
|
</div>
|
|
</template>
|
|
<div style="display: flex; align-items: center; margin-top: 10px">
|
|
<div style="display: flex; align-items: center; width: fit-content; margin-right: 30px">
|
|
<span>预充速度</span>
|
|
<el-input v-model="speed" type="number" style="width: 100px; margin: 0 10px" />
|
|
<span>uL/min</span>
|
|
</div>
|
|
<ft-button
|
|
ref="matrixPrefillRef"
|
|
type="primary"
|
|
:click-handle="matrixPrefill"
|
|
:disabled="
|
|
systemStore.systemStatus.spraying
|
|
|| systemStore.systemStatus.cleaningSyringePipeline
|
|
|| systemStore.systemStatus.cleaningNozzlePipeline
|
|
|| systemStore.systemStatus.prefilling
|
|
"
|
|
>
|
|
开始预充
|
|
</ft-button>
|
|
<ft-button :click-handle="matrixPrefillStop" :disabled="!systemStore.systemStatus.prefilling">
|
|
结束预充
|
|
</ft-button>
|
|
<span> 预充计时: {{ preRemainingTime }}</span>
|
|
</div>
|
|
</el-card>
|
|
<el-card>
|
|
<template #header>
|
|
<div class="card-header">
|
|
<div class="num-box">
|
|
3
|
|
</div>
|
|
<span> 环境设置</span>
|
|
</div>
|
|
</template>
|
|
<div style="display: flex; align-items: center; margin-top: 10px">
|
|
<div style="display: flex; align-items: center; width: 20%; margin-right: 30px">
|
|
<span>当前湿度</span>
|
|
<span class="num-text">{{ systemStore.systemSensor.humidity }}</span>
|
|
<span>%RH</span>
|
|
</div>
|
|
<div style="display: flex; align-items: center; width: 30%; margin-right: 30px">
|
|
<span>要求湿度</span>
|
|
<el-input v-model="humidity" type="number" style="width: 100px; margin: 0 10px" />
|
|
<span>%RH</span>
|
|
</div>
|
|
<ft-button ref="dehumidifierStartRef" type="primary" :click-handle="dehumidifierStart">
|
|
开始除湿
|
|
</ft-button>
|
|
<ft-button :click-handle="dehumidifierStop" :disabled="!systemStore.systemStatus.dehumidifierRunning">
|
|
停止除湿
|
|
</ft-button>
|
|
</div>
|
|
<div style="display: flex; align-items: center; margin-top: 10px">
|
|
<div style="display: flex; align-items: center; width:20%; margin-right: 30px">
|
|
<span>载玻台温度</span>
|
|
<span class="num-text">{{ systemStore.systemSensor.slideTemperature }}</span>
|
|
<span>℃</span>
|
|
</div>
|
|
<div style="display: flex; align-items: center; width: 30%; margin-right: 30px">
|
|
<span>要求温度</span>
|
|
<el-input v-model="slideTemperature" type="number" style="width: 100px; margin: 0 10px" />
|
|
<span>℃</span>
|
|
</div>
|
|
<ft-button ref="slideStartRef" type="primary" :click-handle="slideStart">
|
|
开始加热
|
|
</ft-button>
|
|
<ft-button :click-handle="slideStop" :disabled="!systemStore.systemStatus.slidePlatHeating">
|
|
停止加热
|
|
</ft-button>
|
|
</div>
|
|
<div style="display: flex; align-items: center; margin-top: 10px">
|
|
<div style="display: flex; align-items: center; width: 20%; margin-right: 30px">
|
|
<span>喷头温度</span>
|
|
<span class="num-text">{{ systemStore.systemSensor.nozzleTemperature }}</span>
|
|
<span>℃</span>
|
|
</div>
|
|
<div style="display: flex; align-items: center; width: 30%; margin-right: 30px">
|
|
<span>要求温度</span>
|
|
<el-input v-model="nozzleTemperature" type="number" style="width: 100px; margin: 0 10px" />
|
|
<span>℃</span>
|
|
</div>
|
|
<ft-button ref="nozzleStartRef" type="primary" :click-handle="nozzleStart">
|
|
开始加热
|
|
</ft-button>
|
|
<ft-button :click-handle="nozzleStop" :disabled="!systemStore.systemStatus.nozzleHeating">
|
|
停止加热
|
|
</ft-button>
|
|
</div>
|
|
</el-card>
|
|
<div class="button-footer">
|
|
<ft-button type="primary" class="set-button" @click="startWork">
|
|
喷涂参数设置
|
|
</ft-button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped lang="scss">
|
|
.el-card {
|
|
margin: 30px;
|
|
color: var(--el-color-primary);
|
|
border-radius: 20px;
|
|
}
|
|
|
|
:deep(.el-card__body) {
|
|
padding: 40px;
|
|
}
|
|
|
|
.card-header {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.num-box {
|
|
margin: 0 20px;
|
|
width: 50px;
|
|
height: 50px;
|
|
border-radius: 50%;
|
|
background: var(--el-color-primary);
|
|
font-size: 30px;
|
|
color: #ffffff;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.button-footer {
|
|
display: flex;
|
|
justify-content: center;
|
|
margin: 50px;
|
|
}
|
|
|
|
.hint-text {
|
|
display: flex;
|
|
height: 400px;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
font-size: 50px;
|
|
color: var(--el-color-primary);
|
|
}
|
|
|
|
.num-text {
|
|
color: var(--el-color-primary);
|
|
font-weight: 900;
|
|
font-size: 70px;
|
|
}
|
|
|
|
:deep(.set-button) {
|
|
margin-top: 50px;
|
|
|
|
.my-button {
|
|
width: 500px;
|
|
height: 150px;
|
|
display: flex;
|
|
font-size: 50px;
|
|
justify-content: center;
|
|
}
|
|
}
|
|
</style>
|