|
|
@ -24,17 +24,6 @@ |
|
|
|
拍照 |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- <div v-else style="display: flex;justify-content: center;"> |
|
|
|
<div class="home_tube"> |
|
|
|
<div |
|
|
|
class="inner-circle" |
|
|
|
v-for="(tubeItem, index) in tubeList" |
|
|
|
:key="index" |
|
|
|
:style="{ background: tubeItem.color }" |
|
|
|
|
|
|
|
></div> |
|
|
|
</div> |
|
|
|
</div> --> |
|
|
|
<!--操作区--> |
|
|
|
<div class="graphite_btn_container"> |
|
|
|
<van-button v-if="doorStatus" size="large" class="btn_size op_open_door" @click="onCloseDoor">关门</van-button> |
|
|
@ -102,6 +91,7 @@ import { ref, reactive, onMounted, onUnmounted, watch } from "vue"; |
|
|
|
import { ElMessage, ElMessageBox } from "element-plus"; |
|
|
|
import { createWebSocket, sharedWsUrl } from "@/services/socket"; |
|
|
|
import HeatPosition from "./components/HeatPosition.vue"; |
|
|
|
import * as R from "ramda"; |
|
|
|
//@ts-ignore |
|
|
|
import AddLiquid from "./components/AddLiquid.vue"; |
|
|
|
import OverlayModal from "@/components/OverlayModal.vue"; |
|
|
@ -146,9 +136,10 @@ watch( |
|
|
|
); |
|
|
|
|
|
|
|
watch(()=>statusStore.status,(newVal)=>{ |
|
|
|
console.log('newVal---', newVal) |
|
|
|
if(newVal){ |
|
|
|
onUpateHeatAreaUI() |
|
|
|
console.log('newVal------status---', newVal) |
|
|
|
heatAearStatusList.value = newVal.heatArea |
|
|
|
updateHeatList() |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
@ -159,21 +150,10 @@ let tubeList = reactive<any>([]); |
|
|
|
const selectedColor = "#4F85FB"; |
|
|
|
const emptyColor = "#FFFFFF"; |
|
|
|
const taskName = ref(""); |
|
|
|
let deviceData = <any>{} |
|
|
|
onMounted(() => { |
|
|
|
//6个加热区数据 |
|
|
|
heatList.value = settingStore.heatAreaConfig.map((item:any) => { |
|
|
|
//添加一个字段,默认为未选中 |
|
|
|
item.isSelect = false; |
|
|
|
heatAearStatusList.value.forEach((areaItem:any) => { |
|
|
|
if(areaItem.hardwareId == item.hardwareId){ |
|
|
|
item = { |
|
|
|
...item, |
|
|
|
heatAearStatus:areaItem |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
return item; |
|
|
|
}); |
|
|
|
initHeatList() |
|
|
|
//设备16个试管的基础数据 |
|
|
|
tubeBaseConfig(); |
|
|
|
//连接socket |
|
|
@ -193,10 +173,14 @@ onMounted(() => { |
|
|
|
type: data.data.success ? "success" : "error", |
|
|
|
}); |
|
|
|
} |
|
|
|
}else if(data.type === "status"){ |
|
|
|
let allStatusData = data.data; |
|
|
|
if (!R.equals(allStatusData, deviceData)) { |
|
|
|
deviceData = allStatusData; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
wsClient.connect(); |
|
|
|
|
|
|
|
onUnmounted(() => { |
|
|
|
subscription.unsubscribe(); |
|
|
|
}); |
|
|
@ -213,7 +197,6 @@ const onSelectedTray = (heatAreaItem: any, type: string) => { |
|
|
|
//点击加热区 |
|
|
|
if (ids.includes(heatAreaItem.id)) { |
|
|
|
heatAreaItem.isSelect = false; |
|
|
|
|
|
|
|
selectedTrayList.value = selectedTrayList.value.filter((selectedItem: any) => selectedItem.id != heatAreaItem.id); |
|
|
|
} else { |
|
|
|
heatAreaItem.isSelect = true; |
|
|
@ -223,14 +206,43 @@ const onSelectedTray = (heatAreaItem: any, type: string) => { |
|
|
|
} else { |
|
|
|
heatAreaItem.isSelect = true; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// heatList.value.forEach((item: any) => { |
|
|
|
// if (item.id == heatAreaItem.id) { |
|
|
|
// item = heatAreaItem; |
|
|
|
const initHeatList = () => { |
|
|
|
heatList.value = settingStore.heatAreaConfig.map((item:any) => { |
|
|
|
//添加一个字段,默认为未选中 |
|
|
|
item.isSelect = false; |
|
|
|
heatAearStatusList.value.forEach((areaItem:any) => { |
|
|
|
if(areaItem.hardwareId == item.hardwareId){ |
|
|
|
item = { |
|
|
|
...item, |
|
|
|
heatAearStatus:areaItem |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
return item; |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
// } |
|
|
|
// }); |
|
|
|
}; |
|
|
|
const updateHeatList = () => { |
|
|
|
const selectedIds = selectedTrayList.value.map((item: any) => item.id); |
|
|
|
heatList.value = heatList.value.map((item:any) => { |
|
|
|
//添加一个字段,默认为未选中 |
|
|
|
heatAearStatusList.value.forEach((areaItem:any) => { |
|
|
|
if(areaItem.hardwareId == item.hardwareId){ |
|
|
|
item = { |
|
|
|
...item, |
|
|
|
heatAearStatus:areaItem |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
if(selectedIds.includes(item.id)){ |
|
|
|
item.isSelect = true; |
|
|
|
} |
|
|
|
return item; |
|
|
|
}); |
|
|
|
console.log('heatList.value---', heatList.value) |
|
|
|
} |
|
|
|
|
|
|
|
//选择的加热区是否选择了工艺 |
|
|
|
let hasCraftInfo = ref(false); |
|
|
@ -302,8 +314,6 @@ const onCraftStart = () => { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
//停止工艺 |
|
|
|
const onCraftStop = () => {}; |
|
|
|
|
|
|
|
const tubeBaseConfig = () => { |
|
|
|
//默认为16个 |
|
|
@ -318,12 +328,12 @@ const tubeBaseConfig = () => { |
|
|
|
//添加溶液 |
|
|
|
const liquidVisible = ref(false); |
|
|
|
const onAddLiquid = () => { |
|
|
|
//检查加液区是否有试管。 |
|
|
|
//检查加液区是否有托盘。 |
|
|
|
const liquidArea = statusStore.status?.liquidArea; |
|
|
|
if (liquidArea) { |
|
|
|
liquidVisible.value = true; |
|
|
|
if (liquidArea.liquidTray) { |
|
|
|
liquidVisible.value = true; |
|
|
|
} else { |
|
|
|
ElMessage.error("加液区未检测到托盘,无法进行加液操作"); |
|
|
|
ElMessage.error("加液区未检测到托盘,无法进行加液操作"); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
@ -393,23 +403,6 @@ const onHandleSelectedCraft = (craftInfo: any) => { |
|
|
|
changeVisible(); |
|
|
|
}; |
|
|
|
|
|
|
|
const onChooseTube = (tubeItem: any, index: any) => { |
|
|
|
if (!tubeItem.id) return; |
|
|
|
//@ts-ignore |
|
|
|
let list = [...tubeList]; |
|
|
|
for (let i = 0; i < list.length; i++) { |
|
|
|
let item = list[i]; |
|
|
|
if (index == i) { |
|
|
|
item.color = selectedColor; |
|
|
|
item.isSelected = true; |
|
|
|
} else { |
|
|
|
item.color = item.default ? item.default : emptyColor; |
|
|
|
item.isSelected = false; |
|
|
|
} |
|
|
|
} |
|
|
|
tubeList = [...list]; |
|
|
|
}; |
|
|
|
|
|
|
|
//移至加热 |
|
|
|
const onMoveToHeat = () => { |
|
|
|
//1、是否选择了加热区 |
|
|
@ -422,6 +415,12 @@ const onMoveToHeat = () => { |
|
|
|
ElMessage.error("只能选择一个加热区"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
//3、判断加液区有没有托盘 |
|
|
|
if(!deviceData.liquidArea.liquidTray){ |
|
|
|
ElMessage.error("加液区没有托盘"); |
|
|
|
return; |
|
|
|
} |
|
|
|
let selectedDataItem = selectedTrayList.value[0]; |
|
|
|
//2、判断选择的加热区是否已经有了试管架, 加热区是否有试管是通过设备上报的数据获取的 |
|
|
|
let hardwareId = selectedDataItem.hardwareId; |
|
|
@ -452,40 +451,24 @@ const onMoveToHeat = () => { |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
//指令完成成更新UI |
|
|
|
// let list = [...heatList.value]; |
|
|
|
// list.forEach((item: any) => { |
|
|
|
// if (item.id == selectedDataItem.id) { |
|
|
|
// item.tubeList = JSON.parse(JSON.stringify(tubeList)); |
|
|
|
// selectedDataItem.tubeList = JSON.parse(JSON.stringify(tubeList)); |
|
|
|
// //标注该加热区是选中状态 |
|
|
|
// item.isSelect = true; |
|
|
|
// } |
|
|
|
// }); |
|
|
|
// tubeList.forEach((item: any) => { |
|
|
|
// item.color = ""; |
|
|
|
// item.default = ""; |
|
|
|
// }); |
|
|
|
// console.log('list--222-', list) |
|
|
|
// heatList.value = [...list]; |
|
|
|
}; |
|
|
|
|
|
|
|
//移至加热指令完成后更新加热区UI |
|
|
|
const onUpateHeatAreaUI = () => { |
|
|
|
//1、是否选择了加热区 |
|
|
|
if (!selectedTrayList.value.length) { |
|
|
|
ElMessage.error("请选择目标加热区"); |
|
|
|
return; |
|
|
|
} |
|
|
|
//2、只能选择一个加热区 |
|
|
|
if (selectedTrayList.value.length != 1) { |
|
|
|
ElMessage.error("只能选择一个加热区"); |
|
|
|
return; |
|
|
|
} |
|
|
|
let selectedDataItem = selectedTrayList.value[0]; |
|
|
|
//指令完成成更新UI |
|
|
|
let list = [...heatList.value]; |
|
|
|
list.forEach((item: any) => { |
|
|
|
if (item.id == selectedDataItem.id) { |
|
|
|
item.tubeList = JSON.parse(JSON.stringify(tubeList)); |
|
|
|
selectedDataItem.tubeList = JSON.parse(JSON.stringify(tubeList)); |
|
|
|
//标注该加热区是选中状态 |
|
|
|
item.isSelect = true; |
|
|
|
} |
|
|
|
}); |
|
|
|
tubeList.forEach((item: any) => { |
|
|
|
item.color = ""; |
|
|
|
item.default = ""; |
|
|
|
}); |
|
|
|
heatList.value = [...list]; |
|
|
|
console.log('heatList.value---', heatList.value) |
|
|
|
} |
|
|
|
|
|
|
|
//移至加液区(操作区) |
|
|
|
const currentSelectedTube = ref({}); |
|
|
|
const onMoveToOperationArea = () => { |
|
|
@ -500,10 +483,17 @@ const onMoveToOperationArea = () => { |
|
|
|
ElMessage.error("只能选择一个加热区"); |
|
|
|
return false; |
|
|
|
} |
|
|
|
//3、判断加液区有没有托盘 |
|
|
|
if(deviceData && deviceData.liquidArea.liquidTray){ |
|
|
|
ElMessage.error("加液区已存在托盘"); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
let selectedDataItem = selectedTrayList.value[0]; |
|
|
|
console.log('selectedDataItem----', selectedDataItem) |
|
|
|
currentSelectedTube.value = selectedDataItem; |
|
|
|
//3、选择的加热区有没有试管架 |
|
|
|
if (!selectedDataItem.tubeList || !selectedDataItem.tubeList.length) { |
|
|
|
if (selectedDataItem.heatAearStatus.trayStatus == 0) { |
|
|
|
ElMessage.error("选择的加热区没有试管架"); |
|
|
|
return false; |
|
|
|
} |
|
|
@ -513,13 +503,12 @@ const onMoveToOperationArea = () => { |
|
|
|
}; |
|
|
|
onSendCmd("moveToActionArea", params); |
|
|
|
//更新UI |
|
|
|
heatList.value.forEach((item: any) => { |
|
|
|
if (item.id == selectedDataItem.id) { |
|
|
|
tubeList = [...item.tubeList]; |
|
|
|
item.isSelect = false; |
|
|
|
} |
|
|
|
}); |
|
|
|
onSelectedTray(selectedDataItem, "isMove"); |
|
|
|
// heatList.value.forEach((item: any) => { |
|
|
|
// if (item.id == selectedDataItem.id) { |
|
|
|
// tubeList = [...item.tubeList]; |
|
|
|
// } |
|
|
|
// }); |
|
|
|
// onSelectedTray(selectedDataItem, "isMove"); |
|
|
|
return true; |
|
|
|
}; |
|
|
|
|
|
|
|