|
@ -46,10 +46,10 @@ |
|
|
size="large" |
|
|
size="large" |
|
|
class="btn_size op_select_craft" |
|
|
class="btn_size op_select_craft" |
|
|
@click="onChooseCaft" |
|
|
@click="onChooseCaft" |
|
|
>选择工艺</van-button |
|
|
|
|
|
|
|
|
>{{ craftName }}</van-button |
|
|
> |
|
|
> |
|
|
<van-button size="large" class="btn_size op_exec_craft" @click="onCraftStart" |
|
|
|
|
|
>执行工艺</van-button |
|
|
|
|
|
|
|
|
<van-button size="large" class="btn_size op_exec_craft" @click="onCraftStart()" |
|
|
|
|
|
>{{ exeCraftName }}</van-button |
|
|
> |
|
|
> |
|
|
<van-button |
|
|
<van-button |
|
|
size="large" |
|
|
size="large" |
|
@ -111,7 +111,6 @@ |
|
|
<input v-model="taskName" placeholder="实验名称" class="task_input" /> |
|
|
<input v-model="taskName" placeholder="实验名称" class="task_input" /> |
|
|
<div v-if="!taskName" style="color:red;font-size: 1rem;">请输入实验名称</div> |
|
|
<div v-if="!taskName" style="color:red;font-size: 1rem;">请输入实验名称</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<br/> |
|
|
<br/> |
|
@ -124,14 +123,14 @@ |
|
|
</div> |
|
|
</div> |
|
|
</template> |
|
|
</template> |
|
|
<script lang="ts" setup> |
|
|
<script lang="ts" setup> |
|
|
import { ref, reactive, onMounted, onUnmounted } from "vue"; |
|
|
|
|
|
|
|
|
import { ref, reactive, onMounted, onUnmounted, watch } from "vue"; |
|
|
//@ts-ignore |
|
|
//@ts-ignore |
|
|
import {ElMessage, ElMessageBox} from "element-plus"; |
|
|
import {ElMessage, ElMessageBox} from "element-plus"; |
|
|
import { createWebSocket, sharedWsUrl } from "@/services/socket"; |
|
|
import { createWebSocket, sharedWsUrl } from "@/services/socket"; |
|
|
import { HeatPosition, TakePickture, AddLiquid } from "./components"; |
|
|
import { HeatPosition, TakePickture, AddLiquid } from "./components"; |
|
|
import OverlayModal from "@/components/OverlayModal.vue"; |
|
|
import OverlayModal from "@/components/OverlayModal.vue"; |
|
|
import CraftList from "@/views/graphite/components/CraftList.vue"; |
|
|
import CraftList from "@/views/graphite/components/CraftList.vue"; |
|
|
import { graphiteMock } from "./components/mock"; |
|
|
|
|
|
|
|
|
import { injectFluid } from "@/services/task/task"; |
|
|
import { useStatusStore } from "@/stores/status"; |
|
|
import { useStatusStore } from "@/stores/status"; |
|
|
import {getIngTask, saveTaskName, stopTask} from '@/services/task/task'; |
|
|
import {getIngTask, saveTaskName, stopTask} from '@/services/task/task'; |
|
|
import { |
|
|
import { |
|
@ -139,24 +138,33 @@ import { |
|
|
taskCmd, |
|
|
taskCmd, |
|
|
type OperationCmd, |
|
|
type OperationCmd, |
|
|
} from "@/services/globalCmd/globalCmd"; |
|
|
} from "@/services/globalCmd/globalCmd"; |
|
|
import { craftStart } from "@/services/ore/oreManage"; |
|
|
|
|
|
|
|
|
import { craftStart, craftStop } from "@/services/ore/oreManage"; |
|
|
import { getTxnRecord } from "@/services/txn"; |
|
|
import { getTxnRecord } from "@/services/txn"; |
|
|
import { useSettingStore } from "@/stores/setting"; |
|
|
import { useSettingStore } from "@/stores/setting"; |
|
|
|
|
|
import { useCraftStore } from "@/stores/craft"; |
|
|
|
|
|
|
|
|
|
|
|
const craftStore = useCraftStore() |
|
|
|
|
|
const craftInfo = ref(craftStore.craftInfo) |
|
|
const settingStore = useSettingStore(); |
|
|
const settingStore = useSettingStore(); |
|
|
|
|
|
|
|
|
|
|
|
const craftName = ref('选择工艺') |
|
|
|
|
|
const exeCraftName = ref('执行工艺') |
|
|
|
|
|
watch(()=>craftStore.craftInfo, (newVal)=>{ |
|
|
|
|
|
craftInfo.value = newVal |
|
|
|
|
|
if(newVal?.status == 1){ |
|
|
|
|
|
craftName.value = '暂停工艺' |
|
|
|
|
|
exeCraftName.value = '停止工艺' |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
//设备的全局状态 |
|
|
//设备的全局状态 |
|
|
const statusStore = useStatusStore(); |
|
|
const statusStore = useStatusStore(); |
|
|
const heatAearStatusList = ref(statusStore.status?.heatArea || []) |
|
|
const heatAearStatusList = ref(statusStore.status?.heatArea || []) |
|
|
const heatList: any = ref([]); |
|
|
const heatList: any = ref([]); |
|
|
const craftVisible = ref(false); |
|
|
const craftVisible = ref(false); |
|
|
const switchModule = ref(false); |
|
|
|
|
|
let tubeList = reactive<any>([]); |
|
|
let tubeList = reactive<any>([]); |
|
|
const selectedColor = "#4F85FB"; |
|
|
const selectedColor = "#4F85FB"; |
|
|
const emptyColor = "#FFFFFF"; |
|
|
const emptyColor = "#FFFFFF"; |
|
|
const defaultColor = "#189952"; |
|
|
|
|
|
const taskName = ref('') |
|
|
const taskName = ref('') |
|
|
|
|
|
|
|
|
|
|
|
let globeStatus:any = 0; |
|
|
onMounted(() => { |
|
|
onMounted(() => { |
|
|
//6个加热区数据 |
|
|
//6个加热区数据 |
|
|
heatList.value = settingStore.heatAreaConfig.map((item:any) => { |
|
|
heatList.value = settingStore.heatAreaConfig.map((item:any) => { |
|
@ -176,17 +184,17 @@ onMounted(() => { |
|
|
tubeBaseConfig(); |
|
|
tubeBaseConfig(); |
|
|
//连接socket |
|
|
//连接socket |
|
|
const wsClient = createWebSocket(sharedWsUrl); |
|
|
const wsClient = createWebSocket(sharedWsUrl); |
|
|
let globeStatus:any = 0; |
|
|
|
|
|
const subscription = wsClient.dataOb.subscribe((data) => { |
|
|
const subscription = wsClient.dataOb.subscribe((data) => { |
|
|
if(!globeStatus){//为了只输入一行,不想后台一直打印此处日志 TODO |
|
|
if(!globeStatus){//为了只输入一行,不想后台一直打印此处日志 TODO |
|
|
console.log('globeStatus====', data) |
|
|
console.log('globeStatus====', data) |
|
|
} |
|
|
} |
|
|
globeStatus = 1; |
|
|
globeStatus = 1; |
|
|
if (data.type === "cmd") { |
|
|
if (data.type === "cmd") { |
|
|
console.log('data--首页上报的事件--', data) |
|
|
|
|
|
const cmdInfo = getTxnRecord(data.data.commandId, "task"); |
|
|
const cmdInfo = getTxnRecord(data.data.commandId, "task"); |
|
|
if (cmdInfo) { |
|
|
if (cmdInfo) { |
|
|
const cmdName = CmdDescMap[cmdInfo.command]; |
|
|
|
|
|
|
|
|
const command:any = cmdInfo.command; |
|
|
|
|
|
//@ts-ignore |
|
|
|
|
|
const cmdName = CmdDescMap[command]; |
|
|
const result = data.data.success |
|
|
const result = data.data.success |
|
|
? "执行完毕" |
|
|
? "执行完毕" |
|
|
: `执行失败 ${data.data.message}`; |
|
|
: `执行失败 ${data.data.message}`; |
|
@ -225,11 +233,20 @@ const onSelectedTray = (heatAreaItem: any, type:string) => { |
|
|
heatList.value.forEach((item:any) => { |
|
|
heatList.value.forEach((item:any) => { |
|
|
if(item.id == heatAreaItem.id){ |
|
|
if(item.id == heatAreaItem.id){ |
|
|
item = heatAreaItem |
|
|
item = heatAreaItem |
|
|
|
|
|
onHeadleCraft(item) |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
|
console.log('selectedTrayList---', selectedTrayList.value) |
|
|
|
|
|
|
|
|
console.log('hasCraftInfo---', hasCraftInfo.value) |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
//选择的加热区是否选择了工艺 |
|
|
|
|
|
let hasCraftInfo = ref(false) |
|
|
|
|
|
const onHeadleCraft = (areaItem:any)=>{ |
|
|
|
|
|
if(areaItem.craftInfo){ |
|
|
|
|
|
hasCraftInfo.value = true; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//设置加热区温度 |
|
|
//设置加热区温度 |
|
|
const onSetHeatAreaTemp = (dataInfo:any) => { |
|
|
const onSetHeatAreaTemp = (dataInfo:any) => { |
|
|
selectedTrayObj[dataInfo.id] = dataInfo; |
|
|
selectedTrayObj[dataInfo.id] = dataInfo; |
|
@ -249,7 +266,6 @@ const onCraftStart = () => { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//可能会选择多个加热区执行工艺, 批量发送指令 |
|
|
//可能会选择多个加热区执行工艺, 批量发送指令 |
|
|
let hasCraft = true; |
|
|
let hasCraft = true; |
|
|
let len = selectedTrayList.value.length; |
|
|
let len = selectedTrayList.value.length; |
|
@ -261,14 +277,23 @@ const onCraftStart = () => { |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
const params = { |
|
|
const params = { |
|
|
craftId: item.craftInfo.id, |
|
|
|
|
|
|
|
|
craftId:null, |
|
|
heatId: item.id |
|
|
heatId: item.id |
|
|
} |
|
|
} |
|
|
|
|
|
if(craftInfo.value?.status == 1){ |
|
|
|
|
|
craftStop(params).then(res => { |
|
|
|
|
|
ElMessage.success('已停止执行工艺的指令') |
|
|
|
|
|
}) |
|
|
|
|
|
return |
|
|
|
|
|
}else{ |
|
|
|
|
|
params.craftId = item.craftInfo.id |
|
|
craftStart(params).then(res => { |
|
|
craftStart(params).then(res => { |
|
|
ElMessage.success('已执行工艺的指令') |
|
|
ElMessage.success('已执行工艺的指令') |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if(hasCraft){ |
|
|
if(hasCraft){ |
|
|
//给选择加热区heatList加一个正在执行工艺的标识 |
|
|
//给选择加热区heatList加一个正在执行工艺的标识 |
|
|
const selectedIds = selectedTrayList.value.map((item:any) => item.id) |
|
|
const selectedIds = selectedTrayList.value.map((item:any) => item.id) |
|
@ -280,6 +305,11 @@ const onCraftStart = () => { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//停止工艺 |
|
|
|
|
|
const onCraftStop = () => { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const tubeBaseConfig = () => { |
|
|
const tubeBaseConfig = () => { |
|
|
//默认为16个 |
|
|
//默认为16个 |
|
|
for (let i = 0; i < 16; i++) { |
|
|
for (let i = 0; i < 16; i++) { |
|
@ -302,30 +332,21 @@ const onAddLiquid = () => { |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
//选择的工艺 |
|
|
|
|
|
const onHandleSelectedCraft = (craftInfo:any) => { |
|
|
|
|
|
if(selectedTrayList.value.length == 1){ |
|
|
|
|
|
let item = selectedTrayList.value[0] |
|
|
|
|
|
item.isSelect = true; |
|
|
|
|
|
item.craftInfo = craftInfo |
|
|
|
|
|
onSelectedTray(item,'isMove') |
|
|
|
|
|
changeVisible(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const onAddSolution = (data: any) => { |
|
|
const onAddSolution = (data: any) => { |
|
|
let ids = data.map((item: any) => item.id); |
|
|
let ids = data.map((item: any) => item.id); |
|
|
//批量发送加液指令 |
|
|
//批量发送加液指令 |
|
|
data.forEach((item:any) => { |
|
|
|
|
|
onSendCmd('injectFluid', item) |
|
|
|
|
|
}); |
|
|
|
|
|
tubeList.forEach((item: any) => { |
|
|
|
|
|
if (ids.includes(item.id)) { |
|
|
|
|
|
item.default = defaultColor; |
|
|
|
|
|
item.color = defaultColor; |
|
|
|
|
|
item.isSelected = true; |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
const params = { |
|
|
|
|
|
injectFluids:data |
|
|
|
|
|
} |
|
|
|
|
|
injectFluid(params) |
|
|
|
|
|
globeStatus = 0 |
|
|
|
|
|
// tubeList.forEach((item: any) => { |
|
|
|
|
|
// if (ids.includes(item.id)) { |
|
|
|
|
|
// item.default = defaultColor; |
|
|
|
|
|
// item.color = defaultColor; |
|
|
|
|
|
// item.isSelected = true; |
|
|
|
|
|
// } |
|
|
|
|
|
// }); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const changeVisible = () => { |
|
|
const changeVisible = () => { |
|
@ -339,14 +360,26 @@ const onChooseCaft = () => { |
|
|
ElMessage.error("请选择目标加热区"); |
|
|
ElMessage.error("请选择目标加热区"); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
//2、只能选择一个加热区 |
|
|
|
|
|
if (selectedTrayList.value.length != 1) { |
|
|
|
|
|
ElMessage.error("只能选择一个加热区"); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
craftVisible.value = true; |
|
|
craftVisible.value = true; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
//选择的工艺 |
|
|
|
|
|
const onHandleSelectedCraft = (craftInfo:any) => { |
|
|
|
|
|
selectedTrayList.value.forEach((item:any) => { |
|
|
|
|
|
item.isSelect = true; |
|
|
|
|
|
item.craftInfo = craftInfo |
|
|
|
|
|
onSelectedTray(item,'isMove') |
|
|
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
const selectedIds = selectedTrayList.value.map((item:any) => item.id) |
|
|
|
|
|
heatList.value.forEach((item:any) => { |
|
|
|
|
|
if(selectedIds.includes(item.id)){ |
|
|
|
|
|
item.craftInfo = craftInfo; |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
changeVisible(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const onChooseTube = (tubeItem: any, index: any) => { |
|
|
const onChooseTube = (tubeItem: any, index: any) => { |
|
|
if (!tubeItem.id) return; |
|
|
if (!tubeItem.id) return; |
|
|
//@ts-ignore |
|
|
//@ts-ignore |
|
|