消毒机设备
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.
 
 
 
 
 

92 lines
2.8 KiB

<script lang="ts" setup>
import { syncSendCmd } from 'apis/system'
import { FtMessageBox } from 'libs/messageBox'
import { useDeviceStore } from 'stores/deviceStore'
import { useSealStore } from 'stores/sealStore'
import { computed, onMounted, ref } from 'vue'
import { useHomeStore } from '@/stores/homeStore'
const selected = ref<string[]>([])
// 级联数据:[{ label, value, children: [{ label, value }] }]
const cascaderOptions = ref<{ label: string, value: string, children: { label: string, value: string }[] }[]>([])
const homeStore = useHomeStore()
const deviceStore = useDeviceStore()
// 拉取配置并构建 cascaderOptions
const getPressureConfig = async () => {
if (__DEVICE_TYPE__ !== useDeviceStore().deviceTypeMap.LargeSpaceDM_B) {
const res = await syncSendCmd({ className: 'PipelinePressureControl', fnName: 'getConfig' })
if (res.ackcode === 0) {
homeStore.updatePressureConfig(res.rely)
const { typeDisplayNames, types, intensitys } = res.rely
cascaderOptions.value = typeDisplayNames.map((name: string, idx: number) => {
const children = (intensitys[types[idx]] || []).map((val: string) => ({ label: `${val}%`, value: val }))
return { label: name, value: types[idx], children }
})
// 初始化当前状态
const stateRes = await syncSendCmd({ className: 'PipelinePressureControl', fnName: 'getState' })
if (stateRes.ackcode === 0) {
const { type, intensity } = stateRes.rely
selected.value = intensity ? [type, intensity] : [type]
}
}
}
}
onMounted(getPressureConfig)
const deviceType = computed(() => {
return __DEVICE_TYPE__
})
const sealStore = useSealStore()
const sealInfo = computed(() => sealStore.sealInfo)
// 用户选择后立即更新压力配置(支持仅选择类型的情况)
const confirm = async (val: string[]) => {
// 判断设备当前的状态
if (sealInfo.value.workState === 'stopping' || sealInfo.value.workState === 'idle') {
if (!val || !val.length)
return
await homeStore.updatePressure(val)
}
else {
FtMessageBox.error('密封性测试中,禁止修改正负压')
}
}
</script>
<template>
<div v-if="deviceType === deviceStore.deviceTypeMap.PipeDM" class="pressure-wrapper">
<el-cascader
v-model="selected"
:options="cascaderOptions"
placeholder="请选择"
class="pressure-cascader"
input-props="{ style: 'text-align: center;' }"
popper-class="pressure-cascader-popper"
@change="confirm"
/>
</div>
</template>
<style scoped>
.pressure-wrapper {
display: flex;
justify-content: center;
padding: 0.5rem 0;
}
.pressure-cascader {
width: 100%;
max-width: 7.5rem;
}
</style>
<!-- 全局样式作用于弹出面板 -->
<style>
.pressure-cascader-popper .el-cascader-menu__item {
text-align: center;
}
</style>