From dbde3162fd361dcba4316b58754ccecf39a81a9f Mon Sep 17 00:00:00 2001 From: wxw <Administrator@DESKTOP-5BIMHQ3> Date: 星期一, 09 六月 2025 08:52:18 +0800 Subject: [PATCH] 修改问题 --- Web/src/views/device/deviceInfo/index.vue | 410 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 391 insertions(+), 19 deletions(-) diff --git a/Web/src/views/device/deviceInfo/index.vue b/Web/src/views/device/deviceInfo/index.vue index e6526f7..d950189 100644 --- a/Web/src/views/device/deviceInfo/index.vue +++ b/Web/src/views/device/deviceInfo/index.vue @@ -20,6 +20,18 @@ <el-switch v-model="state.boDemo" active-text="" inactive-text="婕旂ず妯″紡" @change="handleSwitchChange('boDemo', $event)"></el-switch> </el-card> + <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> + <el-switch v-model="state.boDrumReversal" active-text="" inactive-text="婊氬姩鍙嶈浆" + @change="handleSwitchChange('boDrumReversal', $event)"></el-switch> + </el-card> + <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> + <el-switch v-model="state.boOutLock" active-text="" inactive-text="鍑哄簱閿佸畾" + @change="handleSwitchChange('boOutLock', $event)"></el-switch> + </el-card> + <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> + <el-switch v-model="state.boEnterLock" active-text="" inactive-text="鍏ュ簱閿佸畾" + @change="handleSwitchChange('boEnterLock', $event)"></el-switch> + </el-card> </el-collapse-item> <el-collapse-item title="鍫嗗灈鏈�" name="2"> @@ -48,7 +60,7 @@ <el-button type="primary" :plain="floorStates.isPlain3" @click="floorTogglePlain(3)">涓夊眰骞抽潰</el-button> </div> - <div style="margin: 40px; height: 50%;"> + <div style="margin: 40px; height: 58%;"> <div class="grid-container-line"> <div v-for="cell in cellsDataLine" :key="cell.Id"> <div v-if="cell.IsShow === 0" class="grid-item-line"> @@ -71,6 +83,165 @@ </div> </div> </div> + <div style="margin: 10px 40px;height: 30%; width: 100%; "> + <el-row> + <el-col :span="9"> + <div> + <el-form label-position="right" label-width="40px" style=""> + <el-form-item label="宸ヤ綅"> + <el-input id="locaText" :disabled="lockInputStatus" + v-model="stationValue.locatNo" + style="width: 200px; margin-right: 10px;"></el-input> + <el-button @click="textLock(stationValue)">{{ lockText }}</el-button> + <el-button @click="write('zidong', stationValue)">鑷姩</el-button> + <el-button @click="write('shoudong', stationValue)">鎵嬪姩</el-button> + <el-button @mousedown="writeDown('huifu', stationValue)" + @mouseup="writeUp('huifu', stationValue)">鎶ヨ鎭㈠</el-button> + </el-form-item> + + <el-form-item> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('1diandong', stationValue)" + @mouseup="writeUp('1diandong', stationValue)">1鐐瑰姩</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('2diandong', stationValue)" + @mouseup="writeUp('2diandong', stationValue)">2鐐瑰姩</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('3diandong', stationValue)" + @mouseup="writeUp('3diandong', stationValue)">3鐐瑰姩</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('4diandong', stationValue)" + @mouseup="writeUp('4diandong', stationValue)">4鐐瑰姩</el-button> + </el-form-item> + + <el-form-item> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('1liandong', stationValue)" + @mouseup="writeUp('1liandong', stationValue)">1鑱斿姩</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('2liandong', stationValue)" + @mouseup="writeUp('2liandong', stationValue)">2鑱斿姩</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('3liandong', stationValue)" + @mouseup="writeUp('3liandong', stationValue)">3鑱斿姩</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('4liandong', stationValue)" + @mouseup="writeUp('4liandong', stationValue)">4鑱斿姩</el-button> + </el-form-item> + + <el-form-item> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('yizaisheng', stationValue)" + @mouseup="writeUp('yizaisheng', stationValue)">绉绘牻涓婂崌</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('fanzhuansheng', stationValue)" + @mouseup="writeUp('fanzhuansheng', stationValue)">缈昏浆鏈轰笂鍗�</el-button> + </el-form-item> + + <el-form-item> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('yizaijiang', stationValue)" + @mouseup="writeUp('yizaijiang', stationValue)">绉绘牻涓嬮檷</el-button> + <el-button size="large" :disabled="lockStatus" + @mousedown="writeDown('fanzhuanjiang', stationValue)" + @mouseup="writeUp('fanzhuanjiang', stationValue)">缈昏浆鏈轰笅闄�</el-button> + </el-form-item> + + </el-form> + </div> + </el-col> + <el-col :span="15"> + <div> + <el-form label-position="right" label-width="60px" style="" :inline="true"> + <el-row :gutter="23"> + <el-col :span="8"> + <el-form-item> + <el-button @click="write('UpTask', stationValue)">鏇存敼浠诲姟</el-button> + <el-button + @click="writeTaskInfo('writeTask', stationValue)">浠诲姟鍐欏叆</el-button> + <el-button + @click="writeTaskInfo('writeTaskDelete', stationValue)">浠诲姟娓呯┖</el-button> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="浠诲姟鍙�"> + <el-input v-model="stationValue.taskNo" + style="width: 200px; "></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鎵樼洏鍙�"> + <el-input v-model="stationValue.palletNo" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="璧峰宸ヤ綅"> + <el-input v-model="stationValue.startLoction" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鐩爣宸ヤ綅"> + <el-input v-model="stationValue.endLoction" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="璧峰鎺�"> + <el-input v-model="stationValue.startPai" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="璧峰鍒�"> + <el-input v-model="stationValue.startLie" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="璧峰灞�"> + <el-input v-model="stationValue.startCeng" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鐩爣鎺�"> + <el-input v-model="stationValue.endPai" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鐩爣鍒�"> + <el-input v-model="stationValue.endLie" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鐩爣灞�"> + <el-input v-model="stationValue.endCeng" + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + + <el-col :span="6"> + <el-form-item label="缂犺啘淇″彿"> + <el-input v-model="stationValue.chanMo" disabled + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鎷嗚啘淇″彿"> + <el-input v-model="stationValue.chaiMo" disabled + style="width: 200px; margin-right: 10px;"></el-input> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + </el-col> + </el-row> + </div> </el-col> </el-row> </div> @@ -79,18 +250,52 @@ <script lang="ts" setup> import { ref, reactive, onMounted } from 'vue'; import { listStatus, listPosition } from '/@/api/wcs/wcsPlc'; +import { GetLocationInfo, WriteLocationInfo, WriteInfo, WriteTaskInfo } from '/@/api/wcs/wcsDevice'; import { signalR } from './signalR'; import { cellsDataLine, cellsDataOne, cellsDataTwo, cellsDataThree } from './data'; +import { ElMessage } from "element-plus"; +// export default{ + +// } const state = ref<any>({}); const stackers = ref<any>({}); const conveyors = ref<any>({}); + + +const lockText = ref("閿佸畾"); +const lockStatus = ref(true); +const lockInputStatus = ref(false); + +const stationValue = ref<any>({ + locatNo: '',//宸ヤ綅 + layer: '',//妤煎眰 + typeName: '',//鎿嶄綔绫诲瀷鍚嶇О + funcName: '',//浜嬩欢缁撴灉 true/false + + taskNo: '', + palletNo: '', + startLoction: '', + endLoction: '', + startPai: '', + startLie: '', + startCeng: '', + endPai: '', + endLie: '', + endCeng: '', + + chanMo: '', + chaiMo: '', + +}); + + // 鏌ヨ鐘舵�� const handleQuery = async () => { var res = await listStatus(); state.value = res.data.result.modService; stackers.value = res.data.result.listPlc.filter(s => s.type == 0); - conveyors.value = res.data.result.listPlc.filter(s => s.type == 1 || s.type == 4); + conveyors.value = res.data.result.listPlc.filter(s => s.type == 1); var res2 = await listPosition(); res2.data.result.forEach(s => { @@ -100,13 +305,14 @@ if (foundCell) { //淇敼楂樺害 foundCell.BoxHeight = s.boxHeight; + foundCell.EndLocat = s.endLocat; } } else if (s.type == 1) { // 鏇存柊杈撻�佺嚎鏁版嵁 - updateCellData(cellsDataOne, s); - updateCellData(cellsDataTwo, s); - updateCellData(cellsDataThree, s); + updateCellData(cellsDataOne.value, s); + updateCellData(cellsDataTwo.value, s); + updateCellData(cellsDataThree.value, s); } }); }; @@ -135,31 +341,68 @@ signalR.off('UpdateService'); signalR.on('UpdateService', (data: any) => { state.value = data; + if (data.error) { + ElMessage({ + message: data.error, + type: "error", + }); + } }); signalR.off('PublicPosition'); signalR.on('PublicPosition', (data: any) => { - if (data.type == 1) { // 鏇存柊杈撻�佺嚎鏁版嵁 - updateCellData(cellsDataOne, data); - updateCellData(cellsDataTwo, data); - updateCellData(cellsDataThree, data); + updateCellData(cellsDataOne.value, data); + updateCellData(cellsDataTwo.value, data); + updateCellData(cellsDataThree.value, data); } else if (data.type == 0) { // 鏇存柊鍫嗗灈鏈烘暟鎹� - const foundCell = cellsDataLine.value.find(cell => cell.Code === data.stationNum); - if (foundCell) { - //淇敼楂樺害 - foundCell.BoxHeight = data.boxHeight; - } + updateStacker(data) + // const foundCell = cellsDataLine.value.find(cell => cell.Code === data.stationNum); + // if (foundCell) { + // //淇敼楂樺害 + // foundCell.BoxHeight = data.boxHeight; + // } } + }); + + signalR.onreconnected(() => { + console.log('閲嶈繛鎴愬姛plc***'); + handleQuery(); }); }); const handleSwitchChange = (field: string, value: boolean) => { const param = { [field]: value }; - debugger; signalR.invoke('UpdateService', param); }; +//鏇存柊鍫嗗灈鏈� +// updateStacker({ stationNum: '10', boxHeight: 200 }) +function updateStacker(data: any) { + const foundCell = cellsDataLine.value.find(cell => cell.Code === data.stationNum); + if (foundCell) { + foundCell.EndLocat = data.endLocat; + const startHeight = foundCell.BoxHeight; + const targetHeight = data.boxHeight; + const duration = 1000; // 鍔ㄧ敾鎸佺画鏃堕棿锛堟绉掞級 + const interval = 50; // 鏇存柊闂撮殧锛堟绉掞級 + const step = (targetHeight - startHeight) / (duration / interval); + + const update = () => { + if ((step > 0 && foundCell.BoxHeight < targetHeight) || (step < 0 && foundCell.BoxHeight > targetHeight)) { + foundCell.BoxHeight += step; + if ((step > 0 && foundCell.BoxHeight >= targetHeight) || (step < 0 && foundCell.BoxHeight <= targetHeight)) { + foundCell.BoxHeight = targetHeight; // 纭繚鏈�缁堝�煎噯纭� + clearInterval(timer); + } + } else { + clearInterval(timer); + } + }; + + const timer = setInterval(update, interval); + } +} // 鏇存柊杈撻�佺嚎鏁版嵁鐨勯�氱敤鍑芥暟 function updateCellData(cellsData: any[], data: any) { @@ -177,7 +420,7 @@ const activeName = ['1', '2', '3']; //杈撻�佺嚎鏁版嵁 -let cellsData = ref(cellsDataOne); +let cellsData = cellsDataOne.value; // 灞傚钩闈㈢姸鎬� @@ -189,8 +432,7 @@ //鍒囨崲灞傚钩闈� function floorTogglePlain(buttonNumber) { - const floorData = [cellsDataOne, cellsDataTwo, cellsDataThree]; - + const floorData = [cellsDataOne.value, cellsDataTwo.value, cellsDataThree.value]; if (buttonNumber >= 1 && buttonNumber <= 3) { const index = buttonNumber - 1; floorStates.value = { @@ -198,9 +440,139 @@ isPlain2: index !== 1, isPlain3: index !== 2 }; - cellsData.value = floorData[index]; + cellsData = floorData[index]; } } + + +const textLock = async (row: any) => { + if (lockText.value == "閿佸畾") { + lockStatus.value = true; + lockInputStatus.value = true; + lockText.value = "瑙i攣"; + if (floorStates.value.isPlain1 == false) { + row.layer = 1; + } else if (floorStates.value.isPlain2 == false) { + row.layer = 2; + } + else if (floorStates.value.isPlain3 == false) { + row.layer = 3; + } + row.typeName = "suoding"; + + console.log(row); + var res = await WriteLocationInfo(row); + var res2 = await GetLocationInfo(row); + let rowData = JSON.parse(JSON.stringify(res2.data.result)); + stationValue.value = res2.data.result; + // stationValue.value = { + // locatNo: '',//宸ヤ綅 + // layer:'',//妤煎眰 + // typeName:'',//鎿嶄綔绫诲瀷鍚嶇О + // funcName:null,//浜嬩欢缁撴灉 true/false + + // taskNo:'', + // palletNo:'', + // startLoction:'', + // endLoction:'', + // startPai:'', + // startLie:'', + // startCeng:'', + // endPai:'', + // endLie:'', + // endCeng:'', + // } + + + console.log(res2.data.result); + console.log(rowData); + + } else { + lockStatus.value = true; + lockInputStatus.value = false; + lockText.value = "閿佸畾"; + } + +} + +const write = async (type: string, row: any) => { + if (lockStatus.value == false) { + ElMessage.success("璇峰厛閿佸畾"); + return; + } + if (floorStates.value.isPlain1 == false) { + row.layer = 1; + } else if (floorStates.value.isPlain2 == false) { + row.layer = 2; + } + else if (floorStates.value.isPlain3 == false) { + row.layer = 3; + } + row.typeName = type; + + console.log(row); + var res = await WriteInfo(row); + console.log(res.data.result); + ElMessage.success(res.data.result); +} + +const writeDown = async (type: string, row: any) => { + if (lockStatus.value == false) { + ElMessage.success("璇峰厛閿佸畾"); + return; + } + if (floorStates.value.isPlain1 == false) { + row.layer = 1; + } else if (floorStates.value.isPlain2 == false) { + row.layer = 2; + } + else if (floorStates.value.isPlain3 == false) { + row.layer = 3; + } + row.typeName = type; + row.funcName = "true"; + var res = await WriteInfo(row); + console.log(type + "鎸変笅浜嬩欢"); + + // ElMessage.success(res.data.result); +} +const writeUp = async (type: string, row: any) => { + if (lockStatus.value == false) { + ElMessage.success("璇峰厛閿佸畾"); + return; + } + if (floorStates.value.isPlain1 == false) { + row.layer = 1; + } else if (floorStates.value.isPlain2 == false) { + row.layer = 2; + } + else if (floorStates.value.isPlain3 == false) { + row.layer = 3; + } + row.typeName = type; + row.funcName = "false"; + var res = await WriteInfo(row); + console.log(type + "鎶捣浜嬩欢"); + + // ElMessage.success('asdf'+ res.data.result); +} + +const writeTaskInfo = async (type: string, row: any) => { + if (floorStates.value.isPlain1 == false) { + row.layer = 1; + } else if (floorStates.value.isPlain2 == false) { + row.layer = 2; + } + else if (floorStates.value.isPlain3 == false) { + row.layer = 3; + } + row.typeName = type; + var res = await WriteTaskInfo(row); + console.log(type + "鎶捣浜嬩欢"); + + // ElMessage.success('asdf'+ res.data.result); +} + </script> <style scoped> -- Gitblit v1.8.0