From d5d0d1c7a84b996b9bbcebfaf2c2c95f1a5a3678 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期五, 11 十月 2024 08:39:15 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- UI-Project/src/views/Identify/identify.vue | 342 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 183 insertions(+), 159 deletions(-) diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue index 59982e5..e785987 100644 --- a/UI-Project/src/views/Identify/identify.vue +++ b/UI-Project/src/views/Identify/identify.vue @@ -2,23 +2,18 @@ <div style="display: flex;"> <el-input v-model="inputValue" style="margin-left: 15px;margin-top: 10px;width: 240px" placeholder="璇疯緭鍏ュ伐绋嬪彿" @blur="handleBlur"/> <el-pagination - v-model:current-page="currentPage3" - v-model:page-size="pageSize3" + v-model:current-page="currentPage" + :page-size="pageSize" :size="size" :disabled="disabled" - :background="background" layout="prev, pager, next, jumper" - :total="1000" - @size-change="handleSizeChange" + :total="totalPages" @current-change="handleCurrentChange" /> </div> - <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> - <el-scrollbar height="550px" > - <div id="app" style="margin-top: 20px;"> - <!-- <div - :style="{ width: `${olWidth}px`, height: `${olHeight}px`,position: 'relative',}" - > --> + <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;" v-loading="loading"> + <el-scrollbar height="750px" width="1400px" style="background-color: #e9e9eb;"> + <div style="position: relative;"> <div v-for="(rect, index) in adjustedRects" :key="rect.glass_id" @@ -26,36 +21,33 @@ @click="showDialog(rect.glass_id)" :style="{ position: 'absolute', top: `${rect.y_axis}px`, left: `${rect.x_axis}px`, width: `${rect.width}px`, height: `${rect.height}px`, - backgroundColor: getRectColor(rect.glass_state) + backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.glass_state) }" > <!-- 绠ご --> <!-- <div id="arrow"></div> <div id="line"></div> --> - <!-- <div class="centered-text" >NG24030401B01</div> --> <div class="centered-text"> - <div>{{ rect.process_id }}</div> - <div style="margin-top: 50px;margin-left: -85px;">{{ rect.widtha }}*{{ rect.heighta }}</div> + <div>{{ rect.glass_id }}</div> + <div>{{ rect.widtha }}*{{ rect.heighta }}</div> </div> </div> - <!-- 鐐瑰嚮寮瑰嚭 --> - <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;"> - <el-button type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> + </div> + </el-scrollbar> + <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose"> + <el-button :disabled="currentGlassRect?.glass_state === 8 || currentGlassRect?.glass_state === 9" type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> {{ $t('order.dilapidation') }} </el-button> - <el-button type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> + <el-button :disabled="currentGlassRect?.glass_state === 9 || currentGlassRect?.glass_state === 8" type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> <el-icon class="el-icon--right"><Upload /></el-icon> - {{ $t('order.Takeaway') }}</el-button> + {{ $t('order.takeaway') }}</el-button> </el-dialog> - </div> - <!-- </div> --> - </el-scrollbar> </el-card> </template> <script setup lang="ts"> import { Delete, Upload } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' -import { ref, onMounted, onBeforeUnmount,onUnmounted,watchEffect } from 'vue'; +import { ref, onMounted, onBeforeUnmount,onUnmounted, computed } from 'vue'; import request from "@/utils/request" import { WebSocketHost ,host} from '@/utils/constants' import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; @@ -65,72 +57,54 @@ const blind = ref(false) const olWidth = ref(); const olHeight = ref(); -const process_id = ref(); // 鐢ㄤ簬瀛樺偍process_id鐨勫搷搴斿紡寮曠敤 const glass_id = ref(); const inputValue = ref(''); const currentGlassId = ref(null); // 瀛樺偍褰撳墠鐐瑰嚮鐭╁舰鐨� glass_id +const currentstate = ref(null); const adjustedRects = ref([]); +const raw = ref([]); +let webSocket: WebSocket | null = null; +const totalPages = ref(0); +const pageSize = ref(1); +const currentPage = ref(''); +const disabled = false; +const size = 'small'; +const rawData = ref([]); // const handleBind = (row) => { // blind.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗� // }; // 鏄剧ず瀵硅瘽妗嗗苟璁剧疆褰撳墠 glass_id -function showDialog(glassId: number) { +const currentGlassRect = computed(() => { + return adjustedRects.value.find(rect => rect.glass_id === currentGlassId.value); +}); +function showDialog(glassId: number) { currentGlassId.value = glassId; blind.value = true; + adjustedRects.value = adjustedRects.value.map(rect => + rect.glass_id === glassId ? { ...rect, isActive: true } : rect + ); } -// onMounted(async () => { -// try { -// const response = await request.post('/cacheGlass/taskCache/currentCutTerritory'); // 鏇挎崲涓轰綘鐨凙PI绔偣 -// if (response.code === 200) { -// // const process_id = response.data[0].process_id -// const rawRects = response.data; // 璁剧疆鐭╁舰鏁版嵁 -// console.log(response.data); -// const { olWidth: newolWidth, olHeight: newolHeight, process_id: newprocess_id ,glass_id:newglass_id } = response.data; // 鑾峰彇灏哄 -// olWidth.value = newolWidth; // 璁剧疆瀹瑰櫒瀹藉害 -// olHeight.value = newolHeight; // 璁剧疆瀹瑰櫒楂樺害 -// process_id.value = newprocess_id; -// glass_id.value = newglass_id; - -// adjustedRects.value = rawRects.map(rect => ({ -// ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬� -// x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3 -// y_axis: (rect.y_axis*100) * 0.003, -// width: (rect.width*100) * 0.002 , -// widtha: rect.width , -// heighta: rect.height , -// height:( rect.height*100) * 0.002 , -// glass_state: rect.glass_state -// })); -// console.log(adjustedRects.value); - - -// // console.log( (rect.width*100) / 300 ); -// } else { -// // console.error('Failed to fetch rectangles from API.'); -// console.error('Failed to fetch rects from API.'); -// } -// } catch (error) { -// // console.error('Error fetching rectangles :', error); -// console.error('Error fetching rects :', error); -// } -// }); +const handleDialogClose = () => { + adjustedRects.value = adjustedRects.value.map(rect => ({ + ...rect, + isActive: false + })); +} // 鐮存崯 const handleDamage = async () => { try { - // var url="/cacheGlass/taskCache/identControls?identId="+currentGlassId.value+'&controlsId='+201; - // console.log(url); - // const response = await request.post(url) const response = await request.post('/cacheGlass/taskCache/identControls', { - identId: currentGlassId.value, - controlsId: 201, + glassId: currentGlassId.value, + state: 8, line: 1001, - machine: '璇嗗埆', + workingProcedure: '鍒囧壊', }) if (response.code == 200) { ElMessage.success(response.message); // window.location.reload() blind.value = false; - updateRectStatus(currentGlassId.value, 201); + updateRectStatus(currentGlassId.value, 8); + findEngineering() } else { // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭� ElMessage.error(response.msg); @@ -148,18 +122,19 @@ // console.log(url); // const response = await request.post(url) const response = await request.post('/cacheGlass/taskCache/identControls', { - identId: currentGlassId.value, - controlsId: 200, + glassId: currentGlassId.value, + state: 9, line: 1001, - machine: '璇嗗埆', + workingProcedure: '鍒囧壊', }) if (response.code == 200) { // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫 ElMessage.success(response.message); // window.location.reload() blind.value = false; - updateRectStatus(currentGlassId.value, 200); - } else { + updateRectStatus(currentGlassId.value, 9); + findEngineering() + } else { // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭� ElMessage.error(response.msg); } @@ -169,60 +144,82 @@ console.error(error); } } -const handleBlur = async () => { - if (inputValue.value !== '') { - try { - var url="/cacheGlass/taskCache/cutTerritory?current="+inputValue.value; - const response = await request.post(url) - if (response.data && response.data.currentCutTerritory) { - // 鍋囪杩斿洖鐨勬暟鎹渶瑕佽皟鏁村潗鏍囧拰灏哄 - adjustedRects.value = response.data.currentCutTerritory.map(rect => ({ - ...rect, - x_axis: 1360 - (rect.x_axis + rect.width) * 0.37, - y_axis: (rect.y_axis * 100) * 0.003, - width: (rect.width * 100) * 0.002, - height: (rect.height * 100) * 0.002, - widtha: rect.width , - heighta: rect.height , - glass_state: rect.glass_state - })); +const handleBlur = async () => { + if (inputValue.value) { + var url="/cacheGlass/taskCache/cutTerritory?current="+inputValue.value; + const response = await request.post(url) + if (response.code === 200) { + const rawRects = response.data[0]; + rawData.value = response.data; + totalPages.value = rawData.value.length; + const scaleFactor = 1621.78/6000; + const scaleFactory = 750/3300; + adjustedRects.value = rawRects.map(rect => ({ + ...rect, + x_axis: (6000 -(rect.x_axis + rect.width)) * scaleFactor, + y_axis: rect.y_axis * scaleFactory, + width: rect.width * scaleFactor , + widtha: rect.width , + heighta: rect.height , + height: rect.height * scaleFactory, + glass_state: rect.glass_state + })); + // 濡傛灉WebSocket宸茶繛鎺ワ紝鍒欏叧闂� + if (webSocket) { + webSocket.close(); + webSocket = null; } - } catch (error) { - console.error('璇锋眰鏁版嵁澶辫触:', error); + currentPage.value = 1; } - } -}; -// const handleBlur = async () => { -// if (inputValue.value !=''){ -// try { -// var url="/cacheGlass/taskCache/cutTerritory?current="+inputValue.value; -// const response = await request.post(url) -// console.log(response.data.length); -// if (response.code == 200) { -// adjustedRects.value = response.data -// ElMessage.success(response.message); -// } else { -// ElMessage.error(response.msg); -// } -// } -function getRectColor(state: number): string { - switch (state) { - case 0: - return '#e1f3d8'; - case 100: - return '#c8c9cc'; - case 110: - return '#b3e19d'; - case 120: - return '#f89898'; - case 200: - return 'lightblue'; - case 201: - return '#f3d19e'; - default: - return '#911005'; // 榛樿棰滆壊 - } -} + } else{ + connectWebSocket(); + } +}; +const findEngineering = async () => { + if (inputValue.value) { + var url="/cacheGlass/taskCache/cutTerritory?current="+inputValue.value; + const response = await request.post(url) + if (response.code === 200) { + rawData.value = response.data; + } + } else{ + } +}; + +const handleCurrentChange = (val: number) => { + currentPage.value = val; + // window.localStorage.setItem('pagenumber', currentPage.value). + const page = currentPage.value - 1 + const scaleFactor = 1621.78/6000; + const scaleFactory = 750/3300; + adjustedRects.value = rawData.value[page]?.map(rect => ({ + // adjustedRects.value = rawRects.map(rect => ({ + ...rect, + x_axis: (6000 -(rect.x_axis + rect.width)) * scaleFactor, + y_axis: rect.y_axis * scaleFactory, + width: rect.width * scaleFactor , + widtha: rect.width , + heighta: rect.height , + height: rect.height * scaleFactory, + glass_state: rect.glass_state + })); +}; +function getRectColor(state: number): string { + switch (state) { + case 0: + return '#e1f3d8'; + case 100: + return '#c8c9cc'; + case 110: + return '#b3e19d'; + case 120: + return '#f89898'; + case 8: + return '#911005'; + case 9: + return '#f3d19e'; + } +} // 鏇存柊鐭╁舰鐘舵�� function updateRectStatus(glassId: string, status: number) { adjustedRects.value.forEach(rect => { @@ -231,38 +228,64 @@ } }); } -let socket = null; +const connectWebSocket = () => { + if (!webSocket) { const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`; -const handleMessage = (data) => { - // adjustedRects.value = data.currentCutTerritory[0] - adjustedRects.value = data.currentCutTerritory[0].map(rect => ({ - ...rect, - x_axis: 1360 -(rect.x_axis + rect.width) * 0.37, - // x_axis: (rect.x_axis*100) * 0.003, - y_axis: (rect.y_axis*100) * 0.003, - width: (rect.width*100) * 0.002 , - widtha: rect.width , - heighta: rect.height , - height:( rect.height*100) * 0.002 , - glass_state: rect.glass_state - })); -}; -onMounted(() => { - socket = initializeWebSocket(socketUrl, handleMessage); -}); - onUnmounted(() => { - if (socket) { - closeWebSocket(socket); - } - }); - watchEffect(() => { - if (inputValue.value === '') { - handleMessage(); + webSocket = new WebSocket(socketUrl); + webSocket.onmessage = (event) => { + const data = JSON.parse(event.data); + const scaleFactor = 1621.78/6000; + const scaleFactory = 750/3300; + if (data.currentCutTerritory && data.currentCutTerritory.length > 0) { + const newRects = data.currentCutTerritory[0].map(rect => { + const existingRect = adjustedRects.value.find(r => r.glass_id === rect.glass_id); + + if (existingRect) { + return { + ...existingRect, + x_axis: (6000 - (rect.x_axis + rect.width)) * scaleFactor, + y_axis: rect.y_axis * scaleFactory, + width: rect.width * scaleFactor, + height: rect.height * scaleFactory, + widtha: rect.width, + heighta: rect.height, + glass_state: rect.glass_state, + // 淇濇寔 isActive 鐘舵�佷笉鍙� + }; + } else { + // 濡傛灉涓嶅瓨鍦紝鍒欐坊鍔犳柊鐭╁舰锛岄粯璁� isActive 涓� false + return { + ...rect, + x_axis: (6000 - (rect.x_axis + rect.width)) * scaleFactor, + y_axis: rect.y_axis * scaleFactory, + width: rect.width * scaleFactor, + height: rect.height * scaleFactory, + widtha: rect.width, + heighta: rect.height, + glass_state: rect.glass_state, + isActive: false, + glass_id: rect.glass_id, + }; + } + }); + adjustedRects.value = newRects; + } else if (data.currentCutTerritory == '') { + adjustedRects.value = []; + } + }; + } +}; +onMounted(() => { + // 鍒濆鏃讹紝濡傛灉杈撳叆妗嗕负绌猴紝鍒欒繛鎺ebSocket + if (!inputValue.value) { + connectWebSocket(); } -}); -onBeforeUnmount(() => { - console.log("鍏抽棴浜�") - closeWebSocket(); +}); + +onUnmounted(() => { + if (webSocket) { + webSocket.close(); + } }); </script> @@ -273,11 +296,12 @@ } .centered-text { /* 璁剧疆鏂囧瓧灞呬腑鏍峰紡 */ - display: flex; + /* display: flex; */ justify-content: center; - align-items: center; + align-items: center; height: 100%; /* 纭繚div鍗犳嵁鏁翠釜鐭╁舰鐨勯珮搴� */ -} + font-size: small; +} #rect { position: relative; /* 纭繚绠ご鍙互鐩稿浜庣煩褰㈠畾浣� */ /* 鍏朵粬鏍峰紡 */ -- Gitblit v1.8.0