Browse Source

完善工艺

feature/layout_0214
LiLongLong 5 months ago
parent
commit
4a3cc7df86
  1. 4
      src/services/ore/oreManage.ts
  2. 10
      src/services/task/task.ts
  3. 132
      src/views/graphite/components/AddLiquid.vue
  4. 2
      src/views/graphite/components/CraftList.vue
  5. 10
      src/views/graphite/components/HeatPosition.vue
  6. 67
      src/views/graphite/index.vue

4
src/services/ore/oreManage.ts

@ -37,3 +37,7 @@ export function deleteCraft(ids: string) {
export function getCraftList(ids: string) { export function getCraftList(ids: string) {
return httpRequest<BaseResponse>({ url: `/api/crafts/list/${ids}`, method: "GET" }); return httpRequest<BaseResponse>({ url: `/api/crafts/list/${ids}`, method: "GET" });
} }
export function craftStart(params:any) {
return httpRequest<BaseResponse>({ url: `/api/crafts/start`, method: "POST", params });
}

10
src/services/task/task.ts

@ -1,4 +1,14 @@
import httpRequest, { type BaseResponse } from "../httpRequest"; import httpRequest, { type BaseResponse } from "../httpRequest";
import { addTxnRecord } from "../txn";
import type { OperationCmd } from "../globalCmd/globalCmd";
export function saveTaskName(params: { name: String}) { export function saveTaskName(params: { name: String}) {
return httpRequest<BaseResponse<string>>({ url: `/api/tasks/`, method: "POST", params }); return httpRequest<BaseResponse<string>>({ url: `/api/tasks/`, method: "POST", params });
} }
//批量加热
export function startHeat(params: { command: OperationCmd; params: [] }) {
const commandId = addTxnRecord({ ...params, category: "task" });
return httpRequest<BaseResponse<string>>({ url: "/api/cmd/startHeat", params, method: "POST" });
}

132
src/views/graphite/components/AddLiquid.vue

@ -1,61 +1,59 @@
<template> <template>
<div> <div>
<div>
<div class="title">添加溶液</div>
</div>
<div class="title">添加溶液</div>
<!--选择试管区--> <!--选择试管区-->
<div class="liquid_tube">
<div class="select_tube_title">
请选择加液试管
</div>
<div class="select_tube">
<div class="inner-circle" v-for="(tubeItem, index) in tubeList" :key="index" :style="{'background': tubeItem.color}" @click="onChooseTube(tubeItem, index)"></div>
</div>
<div class="tube_num">已选择{{ selectedTubeList.length }}个试管</div>
</div>
<div class="liquid_main">
<div class="liquid_area" v-for="(solution, index) in containerList" :key="index">
<!--左溶液瓶区-->
<div>
<div class="liquid_percentage">
<div class="percent_num">300ml</div>
<div class="liquid_color" style="background-color:#26D574;"></div>
</div>
<div class="liquid_name">硫酸</div>
<section>
<div class="liquid_tube">
<div class="select_tube_title">
请选择加液试管
</div> </div>
<!--右操作区-->
<div>
<div class="liquid_edit">
<div >
<van-icon name="edit" />
<span>请输入添加值</span>
</div>
<br/>
<div class="liquid_field">
<img :src="AddSvg" class="liquid_input_img"/>
<input type="text" :key="index" v-model="solution.solutionNum" placeholder="请输入" class="liquid_input"/>
<div class="ml">ml</div>
<div class="select_tube">
<div class="inner-circle" v-for="(tubeItem, index) in tubeList" :key="index" :style="{'background': tubeItem.color}" @click="onChooseTube(tubeItem, index)"></div>
</div>
<div class="tube_num">已选择{{ selectedTubeList.length }}个试管</div>
</div>
<div class="liquid_main">
<div class="liquid_area" v-for="(solution, index) in solutionList" :key="index">
<!--左溶液瓶区-->
<div>
<div class="liquid_percentage">
<div class="percent_num">300ml</div>
<div class="liquid_color" style="background-color:#26D574;"></div>
</div> </div>
<br/>
<div>
<button class="add_btn" @click="onSolutionToTube(solution)">加酸</button>
<div class="liquid_name">{{ solution.name }}</div>
</div>
<!--右操作区-->
<div>
<div class="liquid_edit">
<div >
<van-icon name="edit" />
<span>请输入添加值</span>
</div>
<div class="liquid_field">
<img :src="AddSvg" class="liquid_input_img"/>
<input type="text" :key="index" v-model="solution.solutionNum" placeholder="请输入" class="liquid_input"/>
<div class="ml">ml</div>
</div>
<div>
<button class="add_btn" @click="onSolutionToTube(solution)">加酸</button>
</div>
</div> </div>
<div class="add_result">{{ solution.name }}已添加100ml</div>
</div> </div>
<div class="add_result">硫酸已添加100ml</div>
</div> </div>
</div> </div>
</div>
<div class="liquid_queue">
<van-tag style="height: 2.5rem; border-radius: 10px;margin-left: 10px;" v-for="item in tubeQueue" closeable size="medium" type="primary" @close="delQueueSolution(item)">
{{ item.solutionName }}添加{{ item.solutionNum }}ml
</van-tag>
</div>
<div class="liquid_button">
<div class="liquid_queue">
<van-tag style="height: 2.5rem; border-radius: 10px;margin-left: 10px;" v-for="item in tubeQueue" closeable size="medium" type="primary" @close="delQueueSolution(item)">
{{ item.name }}添加{{ item.solutionNum }}ml
</van-tag>
</div>
</section>
<footer class="liquid_button">
<van-button class="btn" @click="onConfirm" type="primary">确认添加</van-button> <van-button class="btn" @click="onConfirm" type="primary">确认添加</van-button>
<van-button class="btn" @click="onCancel" style="margin-left: 50px;">取消添加</van-button> <van-button class="btn" @click="onCancel" style="margin-left: 50px;">取消添加</van-button>
</div>
</footer>
</div> </div>
</template> </template>
<script setup> <script setup>
@ -64,12 +62,13 @@
import { useSettingStore } from "@/stores/setting"; import { useSettingStore } from "@/stores/setting";
const settingStore = useSettingStore(); const settingStore = useSettingStore();
const emits = defineEmits(['cancel', 'onAddSolution']) const emits = defineEmits(['cancel', 'onAddSolution'])
const containerList = ref([])
const solutionList = ref([])
const selectedTubeList = ref([]) const selectedTubeList = ref([])
const tubeQueue = ref([]) const tubeQueue = ref([])
const selectedColor = '#4F85FB' const selectedColor = '#4F85FB'
const emptyColor = '#FFFFFF' const emptyColor = '#FFFFFF'
const tubeList = ref([]) const tubeList = ref([])
const onConfirm = () => { const onConfirm = () => {
// //
emits('onAddSolution', tubeQueue.value) emits('onAddSolution', tubeQueue.value)
@ -78,12 +77,18 @@
onMounted(()=>{ onMounted(()=>{
// //
containerList.value = settingStore.containerConf;
console.log('---', containerList.value)
const containerList = settingStore.containerConf;
const liquidMap = settingStore.liquidIdMap
containerList.forEach(item => {
if(item.type == 0){
solutionList.value.push({
id: item.id,//ID()
name: liquidMap[item.solutionId] && liquidMap[item.solutionId].name,
solutionId : item.solutionId,//ID
})
}
})
tubeBaseConfig(); tubeBaseConfig();
// while(solutionList.value.length != 8){
// solutionList.value.push({id:solutionList.value.length + 1})
// }
}) })
function tubeBaseConfig(){ function tubeBaseConfig(){
@ -98,6 +103,8 @@
const onChooseTube = (tubeItem, index) => { const onChooseTube = (tubeItem, index) => {
if(!tubeItem.id)return if(!tubeItem.id)return
//
tubeItem.tubeNum = index + 1
// //
if(tubeItem.isSelected){// if(tubeItem.isSelected){//
tubeItem.color = emptyColor tubeItem.color = emptyColor
@ -119,15 +126,16 @@
} }
// //
const onSolutionToTube = ({solutionId, solutionName, solutionNum})=> {
const onSolutionToTube = ({solutionId, name, solutionNum})=> {
if(!solutionNum)return; if(!solutionNum)return;
// //
selectedTubeList.value.forEach(item => {
selectedTubeList.value.forEach((item) => {
tubeQueue.value.push({ tubeQueue.value.push({
tubeId: item.id,
id:item.id,
solutionId, solutionId,
solutionNum,
solutionName,
volume:solutionNum,
name,
tubeNum: item.tubeNum
}) })
}) })
@ -229,7 +237,7 @@
.liquid_name{ .liquid_name{
margin-left: 2rem; margin-left: 2rem;
margin-top: .875rem;
margin-top: .5rem;
font-size: .75rem; font-size: .75rem;
color: #393F46; color: #393F46;
} }
@ -253,6 +261,7 @@
border: 1px solid #E4E5F1; border: 1px solid #E4E5F1;
font-size: .7rem; font-size: .7rem;
height: 2rem; height: 2rem;
margin-top:2px;
} }
} }
@ -264,6 +273,7 @@
width: 6.625rem; width: 6.625rem;
height: 1.625rem; height: 1.625rem;
border-radius: 100px; border-radius: 100px;
margin-top:5px;
} }
} }
@ -294,8 +304,8 @@
.add_result{ .add_result{
font-size: .75rem; font-size: .75rem;
color: #393f46; color: #393f46;
margin-top: .625rem;
margin-left: 1.375rem;
margin-top: 0.2rem;
margin-left: 2rem;
} }
.liquid_input{ .liquid_input{

2
src/views/graphite/components/CraftList.vue

@ -80,9 +80,7 @@
} }
const onCancel = () => { const onCancel = () => {
emits('selectedCraft', currentItem.value)
emits('changeVisible') emits('changeVisible')
} }
</script> </script>

10
src/views/graphite/components/HeatPosition.vue

@ -49,11 +49,7 @@
<div class="temp_text">120</div> <div class="temp_text">120</div>
<button <button
class="btn-light text-sm px-4" class="btn-light text-sm px-4"
@click="
() => {
onChooseCraft();
}
"
@click="onChooseCraft"
> >
选择 选择
</button> </button>
@ -114,7 +110,7 @@ const props = defineProps({
heatInfo: Object, heatInfo: Object,
tubeIndex: Number, tubeIndex: Number,
}); });
const emits = defineEmits(["onSelectedTray", "onSetHeatAreaTemp"]);
const emits = defineEmits(["onSelectedTray", "onSetHeatAreaTemp", 'onSelectCraft']);
onMounted(() => {}); onMounted(() => {});
@ -149,6 +145,7 @@ const changeVisible = () => {
// //
const onChooseCraft = () => { const onChooseCraft = () => {
onSelectTray()
craftVisible.value = true; craftVisible.value = true;
}; };
const setTemperature = () => { const setTemperature = () => {
@ -170,6 +167,7 @@ const onHandleTube = (tubeInfo: any) => {
// //
const onHandleSelectedCraft = (craftData:any) => { const onHandleSelectedCraft = (craftData:any) => {
emits('onSelectCraft', craftData)
changeVisible(); changeVisible();
} }

67
src/views/graphite/index.vue

@ -6,7 +6,8 @@
:heatInfo="{ ...item, index }" :heatInfo="{ ...item, index }"
:tubeIndex="index + 1" :tubeIndex="index + 1"
@onSelectedTray="onSelectedTray" @onSelectedTray="onSelectedTray"
@onSetHeatAreaTemp = "onSetHeatAreaTemp"
@onSetHeatAreaTemp = "onSetHeatAreaTemp"
@onSelectCraft="(craftData)=>{onSelectCraft(item, craftData)}"
></HeatPosition> ></HeatPosition>
</div> </div>
<!--执行中状态的遮罩层--> <!--执行中状态的遮罩层-->
@ -52,7 +53,7 @@
@click="onChooseCaft" @click="onChooseCaft"
>选择工艺</van-button >选择工艺</van-button
> >
<van-button size="large" class="btn_size op_exec_craft"
<van-button size="large" class="btn_size op_exec_craft" @click="onCraftStart"
>执行工艺</van-button >执行工艺</van-button
> >
<van-button <van-button
@ -82,7 +83,7 @@
> >
</div> </div>
</div> </div>
<van-overlay :show="liquidVisible" style="z-index: 9999">
<van-overlay :show="liquidVisible" v-if="liquidVisible" style="z-index: 9999">
<div class="liquid"> <div class="liquid">
<div class="addLiquid"> <div class="addLiquid">
<AddLiquid <AddLiquid
@ -132,6 +133,7 @@ import {
taskCmd, taskCmd,
type OperationCmd, type OperationCmd,
} from "@/services/globalCmd/globalCmd"; } from "@/services/globalCmd/globalCmd";
import { craftStart } from "@/services/ore/oreManage";
import { getTxnRecord } from "@/services/txn"; import { getTxnRecord } from "@/services/txn";
import { useSettingStore } from "@/stores/setting"; import { useSettingStore } from "@/stores/setting";
@ -183,24 +185,24 @@ onMounted(() => {
// //
const selectedTrayList = ref<any>([]); const selectedTrayList = ref<any>([]);
const selectedTrayObj: any = {}; const selectedTrayObj: any = {};
const onSelectedTray = (tubeItem: any, type:string) => {
heatList.value[tubeItem.index] = tubeItem;
const onSelectedTray = (heatAreaItem: any, type:string) => {
heatList.value[heatAreaItem.index] = heatAreaItem;
//selectedTrayList //selectedTrayList
let ids = selectedTrayList.value.map((tube:any) =>tube.id) let ids = selectedTrayList.value.map((tube:any) =>tube.id)
if(type == 'isClick'){// if(type == 'isClick'){//
if(ids.includes(tubeItem.id)){
tubeItem.isSelect = false;
selectedTrayList.value = selectedTrayList.value.filter((selectedItem:any) => selectedItem.id != tubeItem.id)
if(ids.includes(heatAreaItem.id)){
heatAreaItem.isSelect = false;
selectedTrayList.value = selectedTrayList.value.filter((selectedItem:any) => selectedItem.id != heatAreaItem.id)
}else{ }else{
tubeItem.isSelect = true;
selectedTrayList.value.push(tubeItem)
heatAreaItem.isSelect = true;
selectedTrayList.value.push(heatAreaItem)
} }
}else{ }else{
tubeItem.isSelect = true;
heatAreaItem.isSelect = true;
} }
heatList.value.forEach((item:any) => { heatList.value.forEach((item:any) => {
if(item.id == tubeItem.id){
item = tubeItem
if(item.id == heatAreaItem.id){
item = heatAreaItem
} }
}) })
@ -214,6 +216,34 @@ const onSetHeatAreaTemp = (dataInfo:any) => {
selectedTrayList.value = Object.values(selectedTrayObj); selectedTrayList.value = Object.values(selectedTrayObj);
} }
//
const onSelectCraft = (item:any, craftInfo:any) => {
item.isSelect = true;
item.craftInfo = craftInfo
onSelectedTray(item,'isMove')
console.log('加热区选择的工艺===', item,craftInfo)
}
//
const onCraftStart = () => {
if (!selectedTrayList.value.length) {
ElMessage.error("请选择目标加热区");
return;
}
//
//
selectedTrayList.value.forEach((item:any) => {
const params = {
craftId: item.craftInfo.id,
heatId: item.id
}
craftStart(params).then(res => {
ElMessage.success('执行工艺的指令已发送')
})
})
}
const tubeBaseConfig = () => { const tubeBaseConfig = () => {
//16 //16
for (let i = 0; i < 16; i++) { for (let i = 0; i < 16; i++) {
@ -234,11 +264,14 @@ const onAddLiquid = () => {
// //
const onHandleSelectedCraft = (craftData:any) => { const onHandleSelectedCraft = (craftData:any) => {
changeVisible(); 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) => { tubeList.forEach((item: any) => {
if (ids.includes(item.id)) { if (ids.includes(item.id)) {
item.default = defaultColor; item.default = defaultColor;
@ -279,7 +312,7 @@ const onMoveToHeat = () => {
//1 //1
if (!selectedTrayList.value.length) { if (!selectedTrayList.value.length) {
ElMessage.error("请选择目标加热区"); ElMessage.error("请选择目标加热区");
return;
return;
} }
//2 //2
if (selectedTrayList.value.length != 1) { if (selectedTrayList.value.length != 1) {
@ -289,7 +322,7 @@ const onMoveToHeat = () => {
let selectedDataItem = selectedTrayList.value[0]; let selectedDataItem = selectedTrayList.value[0];
//2, mock TODO //2, mock TODO
let heatAearStatus: any = statusStore.status?.trayStatus || graphiteMock.heatAreaStatus;
let heatAearStatus: any = statusStore.status?.heater ? statusStore.status?.heater[selectedDataItem.index].trayStatus : graphiteMock.heatAreaStatus;
if (!heatAearStatus[selectedDataItem.index]) { if (!heatAearStatus[selectedDataItem.index]) {
ElMessage.error("选择的加热区已有试管架,重新选择加热区"); ElMessage.error("选择的加热区已有试管架,重新选择加热区");
return; return;
@ -473,7 +506,7 @@ const onStartHeat = () => {
} }
}) })
}) })
onSendCmd("startHeat", cmdList)
// onSendCmd("startHeat", cmdList)
} }
const onSendCmd = (command:OperationCmd,params:any)=> { const onSendCmd = (command:OperationCmd,params:any)=> {

Loading…
Cancel
Save