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) {
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 { addTxnRecord } from "../txn";
import type { OperationCmd } from "../globalCmd/globalCmd";
export function saveTaskName(params: { name: String}) {
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>
<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 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>
<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 class="add_result">{{ solution.name }}已添加100ml</div>
</div>
<div class="add_result">硫酸已添加100ml</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="onCancel" style="margin-left: 50px;">取消添加</van-button>
</div>
</footer>
</div>
</template>
<script setup>
@ -64,12 +62,13 @@
import { useSettingStore } from "@/stores/setting";
const settingStore = useSettingStore();
const emits = defineEmits(['cancel', 'onAddSolution'])
const containerList = ref([])
const solutionList = ref([])
const selectedTubeList = ref([])
const tubeQueue = ref([])
const selectedColor = '#4F85FB'
const emptyColor = '#FFFFFF'
const tubeList = ref([])
const onConfirm = () => {
//
emits('onAddSolution', tubeQueue.value)
@ -78,12 +77,18 @@
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();
// while(solutionList.value.length != 8){
// solutionList.value.push({id:solutionList.value.length + 1})
// }
})
function tubeBaseConfig(){
@ -98,6 +103,8 @@
const onChooseTube = (tubeItem, index) => {
if(!tubeItem.id)return
//
tubeItem.tubeNum = index + 1
//
if(tubeItem.isSelected){//
tubeItem.color = emptyColor
@ -119,15 +126,16 @@
}
//
const onSolutionToTube = ({solutionId, solutionName, solutionNum})=> {
const onSolutionToTube = ({solutionId, name, solutionNum})=> {
if(!solutionNum)return;
//
selectedTubeList.value.forEach(item => {
selectedTubeList.value.forEach((item) => {
tubeQueue.value.push({
tubeId: item.id,
id:item.id,
solutionId,
solutionNum,
solutionName,
volume:solutionNum,
name,
tubeNum: item.tubeNum
})
})
@ -229,7 +237,7 @@
.liquid_name{
margin-left: 2rem;
margin-top: .875rem;
margin-top: .5rem;
font-size: .75rem;
color: #393F46;
}
@ -253,6 +261,7 @@
border: 1px solid #E4E5F1;
font-size: .7rem;
height: 2rem;
margin-top:2px;
}
}
@ -264,6 +273,7 @@
width: 6.625rem;
height: 1.625rem;
border-radius: 100px;
margin-top:5px;
}
}
@ -294,8 +304,8 @@
.add_result{
font-size: .75rem;
color: #393f46;
margin-top: .625rem;
margin-left: 1.375rem;
margin-top: 0.2rem;
margin-left: 2rem;
}
.liquid_input{

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

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

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

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

67
src/views/graphite/index.vue

@ -6,7 +6,8 @@
:heatInfo="{ ...item, index }"
:tubeIndex="index + 1"
@onSelectedTray="onSelectedTray"
@onSetHeatAreaTemp = "onSetHeatAreaTemp"
@onSetHeatAreaTemp = "onSetHeatAreaTemp"
@onSelectCraft="(craftData)=>{onSelectCraft(item, craftData)}"
></HeatPosition>
</div>
<!--执行中状态的遮罩层-->
@ -52,7 +53,7 @@
@click="onChooseCaft"
>选择工艺</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
@ -82,7 +83,7 @@
>
</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="addLiquid">
<AddLiquid
@ -132,6 +133,7 @@ import {
taskCmd,
type OperationCmd,
} from "@/services/globalCmd/globalCmd";
import { craftStart } from "@/services/ore/oreManage";
import { getTxnRecord } from "@/services/txn";
import { useSettingStore } from "@/stores/setting";
@ -183,24 +185,24 @@ onMounted(() => {
//
const selectedTrayList = ref<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
let ids = selectedTrayList.value.map((tube:any) =>tube.id)
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{
tubeItem.isSelect = true;
selectedTrayList.value.push(tubeItem)
heatAreaItem.isSelect = true;
selectedTrayList.value.push(heatAreaItem)
}
}else{
tubeItem.isSelect = true;
heatAreaItem.isSelect = true;
}
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);
}
//
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 = () => {
//16
for (let i = 0; i < 16; i++) {
@ -234,11 +264,14 @@ const onAddLiquid = () => {
//
const onHandleSelectedCraft = (craftData:any) => {
changeVisible();
}
const onAddSolution = (data: any) => {
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;
@ -279,7 +312,7 @@ const onMoveToHeat = () => {
//1
if (!selectedTrayList.value.length) {
ElMessage.error("请选择目标加热区");
return;
return;
}
//2
if (selectedTrayList.value.length != 1) {
@ -289,7 +322,7 @@ const onMoveToHeat = () => {
let selectedDataItem = selectedTrayList.value[0];
//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]) {
ElMessage.error("选择的加热区已有试管架,重新选择加热区");
return;
@ -473,7 +506,7 @@ const onStartHeat = () => {
}
})
})
onSendCmd("startHeat", cmdList)
// onSendCmd("startHeat", cmdList)
}
const onSendCmd = (command:OperationCmd,params:any)=> {

Loading…
Cancel
Save