Browse Source

rebase master

feature/layout_0214
LiLongLong 5 months ago
parent
commit
5210d020cd
  1. 7
      src/services/task/task.ts
  2. 7
      src/views/graphite/components/HeatPosition.vue
  3. 241
      src/views/graphite/index.vue
  4. 4
      vite.config.ts

7
src/services/task/task.ts

@ -4,7 +4,12 @@ import type { OperationCmd } from "../globalCmd/globalCmd";
export function saveTaskName(params: { name: String}) {
return httpRequest<BaseResponse<string>>({ url: `/api/tasks/`, method: "POST", params });
return httpRequest<BaseResponse<any>>({ url: `/api/tasks/`, method: "POST", params });
}
//结束实验
export function stopTask(params: { taskId: String}) {
return httpRequest<BaseResponse<string>>({ url: `/api/tasks/stop`, method: "POST", params });
}
//批量加热

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

@ -25,11 +25,11 @@
:style="{ background: tube.color || 'rgb(212, 212, 212)' }"
></div>
<!--执行中状态的遮罩层-->
<div class="craft_executing_modal" v-if="trayInfo.state == 1">
<div class="craft_executing_modal" v-if="trayInfo.executing_craft">
<div class="loading">
<img :src="LoadingSvg" />
</div>
<div class="tray_craft">工艺名称</div>
<div class="tray_craft">{{ trayInfo.craftInfo.name }}</div>
<div class="tray_exce">工艺执行中</div>
</div>
</section>
@ -222,8 +222,9 @@ const onHandleSelectedCraft = (craftData:any) => {
z-index: 9999;
margin-top: -11rem;
.loading {
margin-left: 4.2rem;
margin-top: 4rem;
display: flex;
justify-content: center;
}
.tray_craft {
font-size: 1rem;

241
src/views/graphite/index.vue

@ -38,13 +38,17 @@
</div>
<!--操作区-->
<div class="graphite_btn_container">
<van-button size="large" class="btn_size op_open_door" @click="onOPen"
<van-button v-if="doorStatus" size="large" class="btn_size op_open_door" @click="onCloseDoor"
>关门</van-button
>
<van-button v-else size="large" class="btn_size op_open_door" @click="onOPenDoor"
>开门</van-button
>
<van-button size="large" class="btn_size op_start_task" @click="taskNameVisible = true"
>开始实验</van-button
>
<van-button size="large" class="btn_size op_stop_task"
<van-button size="large" class="btn_size op_stop_task" @click="onEndTask"
>结束实验</van-button
>
<van-button
@ -62,7 +66,8 @@
@click="onAddLiquid"
>添加溶液</van-button
>
<van-button size="large" class="btn_size op_shake_up">摇匀</van-button>
<van-button v-if="!isSharking" size="large" class="btn_size op_shake_up" @click="onStartShakingTube">摇匀</van-button>
<van-button v-else size="large" class="btn_size op_shake_up" @click="onStopShakingTube">结束摇匀</van-button>
<van-button
size="large"
class="btn_size op_move_heat"
@ -75,10 +80,14 @@
<van-button size="large" class="btn_size op_move_exception" @click="onMoveToSpecial"
>移至特殊</van-button
>
<van-button size="large" class="btn_size op_start_heat" @click="onStartHeat"
<van-button v-if="!isHeating" size="large" class="btn_size op_start_heat" @click="onStartHeat"
>开始加热</van-button
>
<van-button size="large" class="btn_size op_up_tray"
<van-button v-else size="large" class="btn_size op_start_heat" @click="onStopHeat"
>停止加热</van-button
>
<van-button size="large" class="btn_size op_up_tray" @click="onUpTray"
>抬起托盘</van-button
>
</div>
@ -105,20 +114,25 @@
开始新实验
</div>
<div class="task_name_content">
实验名称<input v-model="taskName" class="task_input">
<div class='mt-3'>实验名称</div>
<div class="task_auto">
<input v-model="taskName" placeholder="实验名称" class="task_input" />
<div v-if="!taskName" style="color:red;font-size: 1rem;">请输入实验名称</div>
</div>
</div>
<br/>
<footer class="task_button">
<button class="btn-dark px-2 py-1 min-w-20" @click="onSave">保存</button>
<button class="px-4 py-1 min-w-20" @click="onCancel">取消</button>
<button class="cancel_btn" @click="onCancel">取消</button>
</footer>
</div>
</OverlayModal>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted, onUnmounted, watch } from "vue";
import { ref, reactive, onMounted, onUnmounted, effect } from "vue";
//@ts-ignore
import { ElMessage } from "element-plus";
import { createWebSocket, sharedWsUrl } from "@/services/socket";
@ -127,7 +141,7 @@ import OverlayModal from "@/components/OverlayModal.vue";
import CraftList from "@/views/graphite/components/CraftList.vue";
import { graphiteMock } from "./components/mock";
import { useStatusStore } from "@/stores/status";
import { saveTaskName } from '@/services/task/task';
import { saveTaskName, stopTask } from '@/services/task/task';
import {
CmdDescMap,
taskCmd,
@ -141,6 +155,7 @@ const settingStore = useSettingStore();
//
const statusStore = useStatusStore();
const heatAearStatusList = ref(statusStore.status?.heater || [])
const heatList: any = ref([]);
const craftVisible = ref(false);
const switchModule = ref(false);
@ -149,6 +164,7 @@ const selectedColor = "#4F85FB";
const emptyColor = "#FFFFFF";
const defaultColor = "#189952";
const taskName = ref('')
onMounted(() => {
//6
heatList.value = settingStore.heatAreaConfig.map((item:any) => {
@ -162,6 +178,7 @@ onMounted(() => {
const wsClient = createWebSocket(sharedWsUrl);
const subscription = wsClient.dataOb.subscribe((data) => {
if (data.type === "cmd") {
console.log('data--首页上报的事件--', data)
const cmdInfo = getTxnRecord(data.data.commandId, "task");
if (cmdInfo) {
const cmdName = CmdDescMap[cmdInfo.command];
@ -221,7 +238,6 @@ const onSelectCraft = (item:any, craftInfo:any) => {
item.isSelect = true;
item.craftInfo = craftInfo
onSelectedTray(item,'isMove')
console.log('加热区选择的工艺===', item,craftInfo)
}
//
const onCraftStart = () => {
@ -229,19 +245,36 @@ const onCraftStart = () => {
ElMessage.error("请选择目标加热区");
return;
}
//
//
selectedTrayList.value.forEach((item:any) => {
let hasCraft = true;
let len = selectedTrayList.value.length;
for(let i = 0; i < len; i++){
let item = selectedTrayList.value[i]
if(!item.craftInfo){
hasCraft = false;
ElMessage.error('选择的加热区未选择工艺')
break;
}
const params = {
craftId: item.craftInfo.id,
heatId: item.id
}
craftStart(params).then(res => {
ElMessage.success('执行工艺的指令已发送')
})
ElMessage.success('已执行工艺的指令')
})
}
if(hasCraft){
//heatList
const selectedIds = selectedTrayList.value.map((item:any) => item.id)
heatList.value.forEach((item:any) => {
if(selectedIds.includes(item.id)){
item.executing_craft = true;
}
});
}
}
const tubeBaseConfig = () => {
@ -262,8 +295,14 @@ const onAddLiquid = () => {
};
//
const onHandleSelectedCraft = (craftData:any) => {
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) => {
@ -287,6 +326,16 @@ const changeVisible = () => {
//
const onChooseCaft = () => {
//1
if (!selectedTrayList.value.length) {
ElMessage.error("请选择目标加热区");
return;
}
//2
if (selectedTrayList.value.length != 1) {
ElMessage.error("只能选择一个加热区");
return;
}
craftVisible.value = true;
};
@ -321,9 +370,10 @@ const onMoveToHeat = () => {
}
let selectedDataItem = selectedTrayList.value[0];
//2, mock TODO
let heatAearStatus: any = statusStore.status?.heater ? statusStore.status?.heater[selectedDataItem.index].trayStatus : graphiteMock.heatAreaStatus;
if (!heatAearStatus[selectedDataItem.index]) {
//2,
let trayStatus = heatAearStatusList.value[selectedDataItem.index].trayStatus;
// trayStatus: 012
if (trayStatus == 0) {
ElMessage.error("选择的加热区已有试管架,重新选择加热区");
return;
}
@ -433,12 +483,15 @@ const onMoveToSpecial = () => {
//
const taskNameVisible = ref(false)
const taskId = ref()
const onSave = ()=> {
if(!taskName.value)return;
const params = {
name: taskName.value
}
saveTaskName(params).then(res => {
if(res.success){
taskId.value = res.data.id;
ElMessage.success('保存成功')
onCancel()
}else{
@ -447,25 +500,60 @@ const onSave = ()=> {
})
}
//
const onEndTask = () => {
const params = {
taskId: taskId.value
}
stopTask(params).then(res=> {
heatList.value.forEach((item:any) => {
item.executing_craft = false;
});
if(res.success){
ElMessage.success('实验已停止')
}else{
ElMessage.error('实验停止失败')
}
}).catch(e=>{
ElMessage.error(e)
})
}
const onCancel = ()=> {
taskNameVisible.value = false;
}
//
const onOPen = () => {
const doorStatus = ref(false)// true: false
const onOPenDoor = () => {
const params = {};
const command: OperationCmd = "openDoor";
taskCmd({ command, params }).then((res) => {
if (res.success) {
ElMessage.success("指令已发送,请稍等");
doorStatus.value = true;
} else {
ElMessage.error(res.msg);
}
});
};
//
const onCloseDoor = () => {
const params = {};
const command: OperationCmd = "closeDoor";
taskCmd({ command, params }).then((res) => {
if (res.success) {
ElMessage.success("指令已发送,请稍等");
doorStatus.value = false;
} else {
ElMessage.error(res.msg);
}
});
}
//
const isHeating = ref(false)
const onStartHeat = () => {
//
if (!selectedTrayList.value.length) {
@ -496,19 +584,116 @@ const onStartHeat = () => {
}
//
const cmdList:any = []
selectedTrayList.value.forEach((heatArea:any) => {
cmdList.push({
command:'startHeat',
params:{
areaId : heatArea.id
const params = {
areaId : heatArea.id,
temperature: heatArea.temperature
}
})
taskCmd({ command: 'startHeat', params }).then((res) => {
if (res.success) {
ElMessage.success("指令已发送,请稍等");
isHeating.value = true;
} else {
ElMessage.error(res.msg);
}
});
})
// onSendCmd("startHeat", cmdList)
}
//
const onStopHeat = () => {
//
if (!selectedTrayList.value.length) {
ElMessage.error("请选择目标加热区");
return;
}
selectedTrayList.value.forEach((heatArea:any) => {
const params = {
areaId : heatArea.id,
}
taskCmd({ command: 'stopHeat', params }).then((res) => {
if (res.success) {
ElMessage.success("指令已发送,请稍等");
isHeating.value = false;
} else {
ElMessage.error(res.msg);
}
});
})
}
//
const isSharking = ref(false)
const onStartShakingTube = () => {
const params = {}
taskCmd({ command:'startShakeUp', params}).then((res) => {
if (res.success) {
ElMessage.success("指令已发送,请稍等");
isSharking.value = true;
} else {
ElMessage.error(res.msg);
}
});
}
//
const onStopShakingTube = () => {
const params = {}
taskCmd({ command:'stopShakeUp', params}).then((res) => {
if (res.success) {
ElMessage.success("指令已发送,请稍等");
isSharking.value = false;
} else {
ElMessage.error(res.msg);
}
});
}
//
const onUpTray = () => {
if (!selectedTrayList.value.length) {
ElMessage.error("请选择目标加热区");
return;
}
//
selectedTrayList.value.forEach((heatAreaItem:any) => {
const params = {
areaId: heatAreaItem.id
}
taskCmd({ command:'upTray', params }).then((res) => {
if (res.success) {
ElMessage.success("指令已发送,请稍等");
} else {
ElMessage.error(res.msg);
}
});
})
}
// selectedValue: 0 | 1 | 2; // 012
const updateheatAearStatus = (selectedValue:any, areaId:string) => {
let heaterList = statusStore.status?.heater
if(heaterList){
heaterList.forEach(item => {
if(item.heaterId == areaId){
item.trayStatus = selectedValue
}
})
const data:any = {
...statusStore.status,
heater:[...heaterList]
}
statusStore.setStatus(data)
}
}
const onSendCmd = (command:OperationCmd,params:any)=> {
//
taskCmd({ command, params }).then((res) => {
@ -717,6 +902,7 @@ const onSendCmd = (command:OperationCmd,params:any)=> {
margin-left: 1.5rem;
font-size: 1.25rem;
color: #40474E;
display: flex;
.task_input{
border: 1px solid #dcdcdc;
border-radius: 8px;
@ -729,4 +915,9 @@ const onSendCmd = (command:OperationCmd,params:any)=> {
justify-content: center;
}
}
.cancel_btn{
border: 1px solid rgb(226, 226, 226);
width: 5rem;
margin-left: 2rem;
}
</style>

4
vite.config.ts

@ -17,8 +17,8 @@ export default defineConfig({
host: "0.0.0.0",
port: 5174,
proxy: {
"/api": {
target: "http://192.168.1.125:8080",
'/api': {
target: 'http://192.168.1.125:8080',
changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, ''),
},

Loading…
Cancel
Save