Browse Source

fix:首页按钮权限修改

master
guoapeng 2 months ago
parent
commit
e9ce32556a
  1. 2
      src/apis/crafts.ts
  2. 1
      src/apis/system.ts
  3. 290
      src/components/check/index.vue
  4. 20
      src/components/home/SelectCraft/index.vue
  5. 25
      src/components/home/Tube/index.vue
  6. 21
      src/layouts/default.vue
  7. 10
      src/stores/homeStore.ts
  8. 4
      src/types/point.d.ts
  9. 244
      src/views/home/index.vue
  10. 3
      src/views/login/index.vue

2
src/apis/crafts.ts

@ -16,7 +16,7 @@ export const updateCraft = (params: Craft): Promise<null> => http.put(`/crafts`,
export const delCraft = (ids: string): Promise<null> => http.delete(`/crafts/${ids}`)
// 开始执行工艺
export const startCraft = (params: { heatId: string }): Promise<null> => http.post(`/crafts/start`, params)
export const startCraft = (params: { heatId?: string, craftId?: number }): Promise<null> => http.post(`/crafts/start`, params)
export const pauseCraft = (params: { heatId: string }): Promise<null> => http.post(`/crafts/pause`, params)
export const resumeCraft = (params: { heatId: string }): Promise<null> => http.post(`/crafts/resume`, params)

1
src/apis/system.ts

@ -4,3 +4,4 @@ export const debugControl = <T>(params: System.CmdControlParams<T>): Promise<nul
export const control = <T>(params: System.CmdControlParams<T>): Promise<null> => http.post('/cmd', params)
export const getStatus = (): Promise<System.SystemStatus> => http.get('/sys/device-status')
export const getPoint = (): Promise<string> => http.get('/cmd/step/gantry-point')
export const requireOutTray = (): Promise<{ moduleCode: string }[]> => http.get('/self-test/require-out-tray')

290
src/components/check/index.vue

@ -1,9 +1,11 @@
<script lang="ts" setup>
import { getSelfFinish, getSelfStatus } from 'apis/self'
import { requireOutTray } from 'apis/system'
import { ElMessageBox } from 'element-plus'
import { socket } from 'libs/socket'
import { useHomeStore } from 'stores/homeStore'
import { useSystemStore } from 'stores/systemStore'
import { onMounted, ref } from 'vue'
import { onMounted, ref, watch } from 'vue'
const emits = defineEmits(['close'])
const homeStore = useHomeStore()
@ -25,20 +27,59 @@ const checkMap = ref(new Map([
['dualRobotOrigin', { status: '', name: '加液机械臂回原点', params: { commandId: '', command: `dual_robot_origin`, params: {} } }],
]))
const checkList = ref<any[]>([])
onMounted(async () => {
socket.init(receiveMessage1, 'cmd_debug')
socket.init(receiveMessage2, 'cmd_response')
socket.init(receiveMessageSelfMove, 'self_move_test')
const res = await getSelfStatus()
for (const key in res) {
const entry = checkMap.value.get(key)
if (entry) {
entry.status = res[key] ? 'success' : ''
entry.status = res[key] ? 'success' : 'error'
}
}
console.log(checkMap)
await getCheckItem()
await ElMessageBox.confirm(
'设备转运机械臂x、y、z需进行初始化,请确认机械臂行进路径无杂物,夹爪没有在夹取物品',
'提示',
{
confirmButtonText: '确认',
showClose: false,
showCancelButton: false,
closeOnClickModal: false,
closeOnPressEscape: false,
type: 'warning',
customClass: 'init-message',
},
)
const keys = [...checkMap.value.keys()]
checkList.value.push(checkMap.value.get(keys[0]), checkMap.value.get(keys[1]), checkMap.value.get(keys[2]))
})
watch(() => checkList.value, async (newVal) => {
console.log('checkList', newVal)
if (newVal.length === 3 && newVal.every(item => item.status === 'success')) {
await ElMessageBox.confirm(
'加热模组升降、拍子存放模组升降、电动门升降、摇匀模组、加液机械臂需进行初始化,请确认升降范围无杂物',
'提示',
{
confirmButtonText: '确认',
showClose: false,
showCancelButton: false,
closeOnClickModal: false,
closeOnPressEscape: false,
type: 'warning',
customClass: 'init-message',
},
)
const keys = [...checkMap.value.keys()]
for (let i = 3; i < keys.length; i++) {
checkList.value.push(checkMap.value.get(keys[i]))
}
}
}, { deep: true })
let currentCommandId = ''
const receiveMessage1 = (data: Socket.cmdData) => {
@ -46,69 +87,119 @@ const receiveMessage1 = (data: Socket.cmdData) => {
}
const receiveMessage2 = (data: Socket.cmdData) => {
data.commandId === currentCommandId && systemStore.pushSystemList(data)
const item = checkList.value.find(item => item.params.commandId === currentCommandId)
if (data.commandId === item.params.commandId && ['success', 'error'].includes(data.status)) {
const item = checkList.value.find(item => item.params.commandId === data.commandId)
if (item && data.commandId === item.params.commandId && ['success', 'error'].includes(data.status)) {
item.status = data.status
}
}
const checkList = ref<any[]>([])
const getCheckItem = async () => {
console.log('checkList', checkList.value.length)
const keys = [...checkMap.value.keys()]
if (!keys.length) {
return
}
const value = checkMap.value.get(keys[0])
if (value?.params) {
value.params.commandId = currentCommandId = Date.now().toString()
}
const index = checkList.value.push(value)
if (value?.status !== 'success') {
await homeStore.sendControl(value!.params)
const item1 = heatList.value.find(item => item.params.commandId === data.commandId)
if (item1 && data.commandId === item1.params.commandId && ['success', 'error'].includes(data.status)) {
item.status = data.status
}
const poll = setInterval(async () => {
if (['success', 'error'].includes(checkList.value[index - 1].status)) {
checkMap.value.delete(keys[0])
await getCheckItem()
clearInterval(poll)
}
}, 500)
}
const alginHandle = async () => {
let index = 0
const algin = async (item: any) => {
if (!item) {
return
}
if (item.status !== 'success') {
item.params.commandId = currentCommandId = Date.now().toString()
item.status = ''
await homeStore.sendControl(item.params)
const poll = setInterval(async () => {
if (['success', 'error'].includes(item.status)) {
await algin(checkList.value[index++])
clearInterval(poll)
}
}, 1000)
}
}
await algin(checkList.value[index])
const commandHandle = async (data: any) => {
data.params.commandId = currentCommandId = Date.now().toString()
await homeStore.sendControl(data!.params)
}
const onConfirm = async () => {
await getSelfFinish(true)
emits('close')
}
const percentage = ref(0)
const checkHandle = async () => {
activeStep.value = 1
await ElMessageBox.confirm(
'设备即将开始自检',
'提示',
{
confirmButtonText: '确认',
showClose: false,
showCancelButton: false,
closeOnClickModal: false,
closeOnPressEscape: false,
type: 'warning',
customClass: 'init-message',
},
)
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
command: 'move_test',
params: {},
}
await homeStore.sendControl(params)
}
const checkTextList = ref<string[]>([])
const receiveMessageSelfMove = (data: any) => {
checkTextList.value.push(data.title)
percentage.value = data.schedule
}
const activeStep = ref(0)
const heatList = ref([
{
name: 'A-1',
status: 'success',
command: 'heat_module_01',
params: { commandId: '', command: `tray_out`, params: { heatId: 'heat_module_01' } },
},
{
name: 'A-2',
status: 'success',
command: 'heat_module_02',
params: { commandId: '', command: `tray_out`, params: { heatId: 'heat_module_02' } },
},
{
name: 'A-3',
status: 'success',
command: 'heat_module_03',
params: { commandId: '', command: `tray_out`, params: { heatId: 'heat_module_03' } },
},
{
name: 'A-4',
status: 'success',
command: 'heat_module_04',
params: { commandId: '', command: `tray_out`, params: { heatId: 'heat_module_04' } },
},
{
name: 'A-5',
status: 'success',
command: 'heat_module_05',
params: { commandId: '', command: `tray_out`, params: { heatId: 'heat_module_05' } },
},
{
name: 'A-6',
status: 'success',
command: 'heat_module_06',
params: { commandId: '', command: `tray_out`, params: { heatId: 'heat_module_06' } },
},
])
const checkHandle1 = async () => {
const res = await requireOutTray()
res.forEach((item) => {
const heatItem = heatList.value.find(heatItem => heatItem.command === item.moduleCode)
heatItem!.status = 'error'
})
activeStep.value = 2
}
</script>
<template>
<FtDialog visible title="设备初始化" width="40%">
<div class="check-main">
<FtDialog visible title="设备初始化" width="60%">
<el-steps style="max-width: 600px" :active="activeStep" finish-status="success">
<el-step title="初始化" />
<el-step title="自检" />
<el-step title="设备状态" />
</el-steps>
<div v-if="activeStep === 0" class="check-main">
<div v-for="item in checkList" :key="item.name" class="check-item">
<el-tag>{{ item.name }}</el-tag>
<el-icon v-if="item.status === 'success'" color="#26D574">
@ -120,14 +211,53 @@ const onConfirm = async () => {
<el-icon v-else-if="item.status === ''" class="el-icon--loading">
<Loading />
</el-icon>
<ft-button v-if="item.status !== 'success'" size="small" type="primary" :click-handle="() => commandHandle(item)">
回原点
</ft-button>
</div>
</div>
<div v-if="activeStep === 1" class="check-box">
<div class="progress-box">
<p>自检进度: </p>
<el-progress
:stroke-width="20"
:percentage="percentage"
/>
</div>
<ul>
<li v-for="item in checkTextList" :key="item">
{{ item }}
</li>
</ul>
</div>
<div v-if="activeStep === 2" class="check-box">
<div v-for="item in heatList" :key="item.name" class="check-item">
<el-tag>{{ item.name }}</el-tag>
<el-icon v-if="item.status === 'success'" color="#26D574">
<CircleCheckFilled />
</el-icon>
<el-icon v-else-if="item.status === 'error'" color="#FE0A0A">
<CircleCloseFilled />
</el-icon>
<el-icon v-else-if="item.status === ''" class="el-icon--loading">
<Loading />
</el-icon>
<ft-button v-if="item.status !== 'success'" size="small" type="primary" :click-handle="() => commandHandle(item)">
移出托盘
</ft-button>
</div>
</div>
<template #footer>
<div style="height: 40px">
<FtButton v-if="checkList.length === 13 && checkList.every(item => item.status !== 'success')" type="primary" :click-handle="alginHandle">
重试
<FtButton v-if="activeStep === 0 && checkList.length === 13 && checkList.every(item => item.status === 'success')" type="primary" :click-handle="checkHandle">
下一步
</FtButton>
<FtButton v-if="checkList.length === 13 && checkList.every(item => item.status === 'success')" :click-handle="onConfirm">
<FtButton v-if="activeStep === 1 && percentage === 100" type="primary" :click-handle="checkHandle1">
下一步
</FtButton>
<FtButton v-if="activeStep === 2" :click-handle="onConfirm">
关闭
</FtButton>
</div>
@ -136,22 +266,48 @@ const onConfirm = async () => {
</template>
<style scoped>
.check-box {
height: 45vh;
ul {
li {
margin: 3px 0;
}
}
}
.progress-box {
width: 100%;
display: flex;
align-items: center;
p {
margin-right: 10px;
}
span {
margin-left: 10px;
}
.el-progress {
flex: 1;
}
}
.check-main{
height: 60vh;
height: 65vh;
overflow: auto;
.check-item {
display: flex;
align-items: center;
margin-bottom: 10px;
.el-tag {
flex: 1;
}
.el-icon {
margin: 0 10px;
font-size: 18px;
}
}
.check-item {
width: 100%;
display: flex;
align-items: center;
margin-bottom: 10px;
.el-tag {
flex: 1;
}
.el-icon {
margin: 0 10px;
font-size: 18px;
}
}
.check-status{
display: grid;
grid-template-columns: 2fr 1fr 1fr;

20
src/components/home/SelectCraft/index.vue

@ -1,5 +1,5 @@
<script setup lang="ts">
import { setCraft } from 'apis/crafts'
import { startCraft } from 'apis/crafts'
import { getOreList } from 'apis/ore'
import { FtMessage } from 'libs/message'
import { useHomeStore } from 'stores/homeStore'
@ -13,9 +13,7 @@ onMounted(() => {
getOres()
})
const form = ref({
craftId: undefined,
})
const form = ref<{ craftId?: number }>({})
const formRef = ref()
const rules = {
@ -30,13 +28,11 @@ const okHandle = async () => {
if (!valid) {
return
}
for (let i = 0; i < homeStore.heatAreaList.filter(item => item.selected).length; i++) {
await setCraft({
heatId: homeStore.heatAreaList.filter(item => item.selected)[i].value,
craftId: form.value.craftId,
})
}
FtMessage.success('工艺已设定')
await startCraft({
heatId: useHomeStore().heatAreaList.find(item => item.selected)?.value,
craftId: form.value.craftId,
})
FtMessage.success('工艺已开始')
emits('ok')
}
catch (error) {
@ -58,7 +54,7 @@ const getOres = async () => {
<template>
<FtDialog visible title="选择工艺" width="40%" :ok-handle="okHandle" @cancel="cancel">
<el-form ref="formRef" label-width="auto" :model="form" :rules="rules">
<el-form-item label="加热区">
<el-form-item v-if=" homeStore.heatAreaList.filter(item => item.selected).length" label="加热区">
<el-tag v-for="item in homeStore.heatAreaList.filter(item => item.selected)" :key="item.value" class="mask-tag">
{{ item.label }}
</el-tag>

25
src/components/home/Tube/index.vue

@ -138,21 +138,20 @@ defineExpose({
</div>
<span v-for="item in 16" :key="item" class="tube-inner" :class="{ 'tube-inner-active': tray?.tubes.find(tu => tu.tubeNum === item)?.exists }" :index="item" />
</div>
<div v-if="data.targetTemperature" class="temperature-box" @click="setTemperature">
<div class="temperature-box">
<span>
<span>目标温度: </span>
<span>{{ data.targetTemperature }}</span>
<span>当前温度: </span>
<span>{{ data.temperature || '--' }}</span>
<span></span>
</span>
<span v-show="data.heating" style="color: #FE0A0A ">加热中</span>
<span v-show="data.fanOpen" style="color: #14A656 ">散热中</span>
<!-- <span v-show="!data.heating" style="color: #1677FF">未加热</span> -->
</div>
<div v-else class="temperature-box" style="justify-content: center" @click="setTemperature">
点击设置目标温度
<span v-show="data.fanOpen" style="color: #14A656 ">降温中</span>
</div>
<div class="footer">
<span :class="{ 'active-footer': hearInfo?.selected }"> {{ data.temperature || '--' }}</span>
<div class="tem-box" @click="setTemperature">
<span :class="{ 'active-footer': hearInfo?.selected }"> {{ data.targetTemperature || '--' }}</span>
<el-icon><Setting /></el-icon>
</div>
<ft-button size="small" :type="hearInfo?.selected ? 'primary' : 'default'" @click="tubeSelect">
选择
</ft-button>
@ -299,4 +298,12 @@ defineExpose({
border: 1px solid #0256FF;
color: #0256FF;
}
.tem-box {
display: flex;
align-items: center;
.el-icon {
margin-left: 5px;
}
}
</style>

21
src/layouts/default.vue

@ -4,7 +4,6 @@ import logoutIcon from 'assets/images/logout.svg'
import Check from 'components/check/index.vue'
import Liquid from 'components/home/Liquid/index.vue'
import Stop from 'components/Stop/index.vue'
import { ElMessageBox } from 'element-plus'
import { useActivateDebug } from 'hooks/useActivateDebug'
import { isClose } from 'libs/socket'
import { formatDateTime } from 'libs/utils'
@ -26,24 +25,6 @@ const timeInterval = setInterval(() => {
onMounted(async () => {
if (!systemStore.systemStatus.selfTest && systemStore.systemStatus.currentUser?.username !== 'test') {
await ElMessageBox.confirm(
'<p>即将对设备进行初始化, 请确保以下内容: </p>'
+ '<ul>'
+ '<li>1. 设备内部无杂物</li>'
+ '<li>2. 夹爪没有夹取物品</li>'
+ '<li>3. 加液区无试管架<li>'
+ '</ul> ',
'提示',
{
confirmButtonText: '确认',
showClose: false,
dangerouslyUseHTMLString: true,
showCancelButton: false,
closeOnClickModal: false,
type: 'warning',
customClass: 'init-message',
},
)
isCheck.value = true
}
})
@ -86,7 +67,7 @@ const statusMap = {
name: '指令执行成功',
},
fail: {
type: 'error',
type: 'danger',
name: '指令执行异常',
},
}

10
src/stores/homeStore.ts

@ -41,8 +41,14 @@ export const useHomeStore = defineStore('home', {
}),
actions: {
selectChange(index: number) {
this.heatAreaList[index].selected = !this.heatAreaList[index].selected
console.log(this.heatAreaList)
this.heatAreaList.forEach((item: Home.HeatArea, i: number) => {
if (i === index) {
item.selected = !item.selected
}
else {
item.selected = false
}
})
},
async sendControl(params: System.CmdControlParams<{ [key: string]: any }>) {
if (!params.commandId) {

4
src/types/point.d.ts

@ -5,7 +5,7 @@ declare namespace Point {
type: string
}
interface UpdateParams {
id: number
position: string
id?: number
position?: string
}
}

244
src/views/home/index.vue

@ -1,5 +1,4 @@
<script setup lang="ts">
import { startCraft } from 'apis/crafts'
import { stopTask } from 'apis/home'
import AddLiquid from 'components/home/AddLiquid/index.vue'
import FillSolution from 'components/home/FillSolution/index.vue'
@ -59,39 +58,14 @@ const stopExperimentHandle = async () => {
const selectCraftVisible = ref(false)
const selectCraft = () => {
const count = homeStore.heatAreaList.filter(item => item.selected).length
if (!count) {
FtMessage.warning('请选择加热区')
return
}
// const count = homeStore.heatAreaList.filter(item => item.selected).length
// if (!count) {
// FtMessage.warning('')
// return
// }
selectCraftVisible.value = true
}
const executeCraftHandle = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length) {
FtMessage.warning('请选择加热区')
return
}
const craftError: string[] = []
selectedHeatAreas.forEach((item) => {
const trays = systemStore.systemStatus.tray?.find(h => h.heatModuleId === item.value)
if (trays?.crafts?.state !== 'READY') {
craftError.push(item.label)
}
})
if (craftError.length) {
FtMessage.warning(`${craftError.join(',')}的工艺不是等待执行的状态`)
return
}
for (let i = 0; i < selectedHeatAreas.length; i++) {
await startCraft({
heatId: selectedHeatAreas[i].value,
})
}
FtMessage.success('工艺已开始执行')
}
const setTemperatureVisible = ref(false)
const currentTemperatureData = ref<{ id: string, label: string | undefined }>({
id: '',
@ -99,10 +73,6 @@ const currentTemperatureData = ref<{ id: string, label: string | undefined }>({
})
provide('currentTemperatureData', currentTemperatureData)
const setTemperature = (data: System.HeatArea) => {
const craft = systemStore.systemStatus.tray?.find(item => item.heatModuleId === data.moduleCode)?.crafts
if (craft?.craft) {
FtMessage.warning(`当前加热区已绑定工艺`)
}
currentTemperatureData.value = {
id: data.moduleCode,
label: homeStore.heatAreaList.find(item => item.value === data.moduleCode)?.label,
@ -112,19 +82,11 @@ const setTemperature = (data: System.HeatArea) => {
const fillSolutionVisible = ref(false)
const filled_solution = async () => {
if (!systemStore.systemStatus.solutionModule.idle) {
FtMessage.warning('加液区正在工作,请稍后操作')
return
}
fillSolutionVisible.value = true
}
const addLiquidVisible = ref(false)
const addLiquid = async () => {
if (!systemStore.systemStatus.solutionModule.idle) {
FtMessage.warning('加液区正在工作,请稍后操作')
return
}
await ElMessageBox.confirm(
'管路是否已预充?',
'提示',
@ -155,10 +117,6 @@ const addLiquid = async () => {
}
const door_open = async () => {
if (systemStore.systemStatus.door.open) {
FtMessage.warning('门已经是开启状态了')
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
@ -169,10 +127,6 @@ const door_open = async () => {
}
const door_close = async () => {
if (!systemStore.systemStatus.door.open) {
FtMessage.warning('门已经是关闭状态了')
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
@ -182,20 +136,11 @@ const door_close = async () => {
await homeStore.sendControl(params)
}
const selectedHeatArea = computed(() => {
return homeStore.heatAreaList.find(item => item.selected)
})
const move_to_heat_area = async () => {
// if (systemStore.systemStatus.solutionModule.trayStatus === 0) {
// FtMessage.warning('')
// return
// }
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length || selectedHeatAreas.length > 1) {
FtMessage.warning('请选择一个加热区')
return
}
if (systemStore.systemStatus.heatModule.find(item => item.moduleCode === selectedHeatAreas[0].value)?.trayStatus === 1) {
FtMessage.warning('所选加热区有托盘')
return
}
await ElMessageBox.confirm(
'请确认加液区是否有托盘?',
'提示',
@ -213,22 +158,13 @@ const move_to_heat_area = async () => {
commandId: currentCommandId,
command: 'move_to_heat_area',
params: {
heatId: selectedHeatAreas[0].value,
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
}
const move_to_solution_area = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length || selectedHeatAreas.length > 1) {
FtMessage.warning('请选择一个加热区')
return
}
if (systemStore.systemStatus.heatModule.find(item => item.moduleCode === selectedHeatAreas[0].value)?.trayStatus === 0) {
FtMessage.warning('所选加热区无托盘')
return
}
await ElMessageBox.confirm(
'请确认加液区无托盘?',
'提示',
@ -249,200 +185,79 @@ const move_to_solution_area = async () => {
commandId: currentCommandId,
command: 'move_to_solution_area',
params: {
heatId: selectedHeatAreas[0].value,
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
}
const heat_start = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length) {
FtMessage.warning('请选择加热区')
return
}
const temperatureError: string[] = []
const heatingError: string[] = []
const fanError: string[] = []
selectedHeatAreas.forEach((item) => {
const heatModule = systemStore.systemStatus.heatModule.find(h => h.moduleCode === item.value)
if (!heatModule?.targetTemperature) {
temperatureError.push(item.label)
}
if (heatModule?.heating) {
heatingError.push(item.label)
}
if (heatModule?.fanOpen) {
fanError.push(item.label)
}
})
if (temperatureError.length) {
FtMessage.warning(`${temperatureError.join(', ')}的加热区未设置温度`)
return
}
if (heatingError.length) {
FtMessage.warning(`${heatingError.join(', ')}的加热区已经在加热了`)
return
}
if (fanError.length) {
FtMessage.warning(`${heatingError.join(', ')}的加热区正在散热中`)
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
command: 'heat_start',
params: {
heatId: selectedHeatAreas.map(item => item.value),
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
}
const heat_stop = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length) {
FtMessage.warning('请选择加热区')
return
}
const heatingError: string[] = []
selectedHeatAreas.forEach((item) => {
const heatModule = systemStore.systemStatus.heatModule.find(h => h.moduleCode === item.value)
if (!heatModule?.heating) {
heatingError.push(item.label)
}
})
if (heatingError.length) {
FtMessage.warning(`${heatingError.join(', ')}的加热区未在加热`)
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
command: 'heat_stop',
params: {
heatId: selectedHeatAreas.map(item => item.value),
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
}
const fan_start = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length) {
FtMessage.warning('请选择加热区')
return
}
const fanError: string[] = []
const heatingError: string[] = []
selectedHeatAreas.forEach((item) => {
const heatModule = systemStore.systemStatus.heatModule.find(h => h.moduleCode === item.value)
if (heatModule?.fanOpen) {
fanError.push(item.label)
}
if (heatModule?.heating) {
heatingError.push(item.label)
}
})
if (fanError.length) {
FtMessage.warning(`${fanError.join(', ')}的加热区已经在散热了`)
return
}
if (heatingError.length) {
FtMessage.warning(`${fanError.join(', ')}的加热区正在散热中`)
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
command: 'fan_start',
params: {
heatId: selectedHeatAreas.map(item => item.value),
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
}
const fan_stop = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length) {
FtMessage.warning('请选择加热区')
return
}
const fanError: string[] = []
selectedHeatAreas.forEach((item) => {
const heatModule = systemStore.systemStatus.heatModule.find(h => h.moduleCode === item.value)
if (!heatModule?.fanOpen) {
fanError.push(item.label)
}
})
if (fanError.length) {
FtMessage.warning(`${fanError.join(', ')}的加热区没有在散热`)
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
command: 'fan_stop',
params: {
heatId: selectedHeatAreas.map(item => item.value),
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
}
const tray_up = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length) {
FtMessage.warning('请选择加热区')
return
}
const trayUpError: string[] = []
selectedHeatAreas.forEach((item) => {
const heatModule = systemStore.systemStatus.heatModule.find(h => h.moduleCode === item.value)
if (heatModule?.trayUp === 1) {
trayUpError.push(item.label)
}
})
if (trayUpError.length) {
FtMessage.warning(`${trayUpError.join(', ')}的加热区托盘已抬起`)
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
command: 'tray_up',
params: {
heatId: selectedHeatAreas.map(item => item.value),
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
}
const tray_down = async () => {
const selectedHeatAreas = homeStore.heatAreaList.filter(item => item.selected)
if (!selectedHeatAreas.length) {
FtMessage.warning('请选择加热区')
return
}
const trayUpError: string[] = []
selectedHeatAreas.forEach((item) => {
const heatModule = systemStore.systemStatus.heatModule.find(h => h.moduleCode === item.value)
if (heatModule?.trayUp === 0) {
trayUpError.push(item.label)
}
})
if (trayUpError.length) {
FtMessage.warning(`${trayUpError.join(', ')}的加热区托盘未抬起`)
return
}
currentCommandId = Date.now().toString()
const params = {
commandId: currentCommandId,
command: 'tray_down',
params: {
heatId: selectedHeatAreas.map(item => item.value),
heatId: selectedHeatArea.value?.value,
},
}
await homeStore.sendControl(params)
@ -525,13 +340,8 @@ const take_photo = async () => {
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<ft-button size="large" @click="selectCraft">
选择工艺
</ft-button>
</el-col>
<el-col :span="8">
<ft-button size="large" :click-handle="executeCraftHandle">
<el-col :span="16">
<ft-button size="large" style="width: 100%" :click-handle="selectCraft">
执行工艺
</ft-button>
</el-col>
@ -560,12 +370,12 @@ const take_photo = async () => {
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<ft-button size="large" :click-handle="move_to_heat_area" :disabled="!systemStore.systemStatus.gantryArm.idle">
<ft-button size="large" :click-handle="move_to_heat_area" :disabled="!selectedHeatArea">
移至加热
</ft-button>
</el-col>
<el-col :span="8">
<ft-button size="large" :click-handle="move_to_solution_area" :disabled="!systemStore.systemStatus.gantryArm.idle">
<ft-button size="large" :click-handle="move_to_solution_area" :disabled="!selectedHeatArea">
移至加液
</ft-button>
</el-col>
@ -577,34 +387,34 @@ const take_photo = async () => {
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<ft-button size="large" :click-handle="heat_start">
<ft-button size="large" :click-handle="heat_start" :disabled="!selectedHeatArea">
开始加热
</ft-button>
</el-col>
<el-col :span="8">
<ft-button size="large" :click-handle="heat_stop">
<ft-button size="large" :click-handle="heat_stop" :disabled="!selectedHeatArea">
停止加热
</ft-button>
</el-col>
<el-col :span="8">
<ft-button size="large" :click-handle="tray_up">
<ft-button size="large" :click-handle="tray_up" :disabled="!selectedHeatArea">
抬起托盘
</ft-button>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<ft-button size="large" :click-handle="fan_start">
<ft-button size="large" :click-handle="fan_start" :disabled="!selectedHeatArea">
开始散热
</ft-button>
</el-col>
<el-col :span="8">
<ft-button size="large" :click-handle="fan_stop">
<ft-button size="large" :click-handle="fan_stop" :disabled="!selectedHeatArea">
停止散热
</ft-button>
</el-col>
<el-col :span="8">
<ft-button size="large" :click-handle="tray_down">
<ft-button size="large" :click-handle="tray_down" :disabled="!selectedHeatArea">
降下托盘
</ft-button>
</el-col>

3
src/views/login/index.vue

@ -31,9 +31,8 @@ const loginHandle = async () => {
if (!valid) {
return
}
const res = await login(sys.loginForm)
await login(sys.loginForm)
setToken('login success')
sys.updateSystemUser({ username: res.username })
await router.push('/')
}
catch (e) {

Loading…
Cancel
Save