From 1e6d58b2f620f96f2e2dbff01413a9c2967ede13 Mon Sep 17 00:00:00 2001 From: wangfei <3597712270@qq.com> Date: 星期四, 26 十二月 2024 15:56:45 +0800 Subject: [PATCH] 掰片模块三个页面及功能 --- UI-Project/src/views/Identify/identifwutwo.vue | 254 ++++++++++++-------------------------------------- 1 files changed, 63 insertions(+), 191 deletions(-) diff --git a/UI-Project/src/views/Identify/identifwutwo.vue b/UI-Project/src/views/Identify/identifwutwo.vue index 5b4b87a..e633e48 100644 --- a/UI-Project/src/views/Identify/identifwutwo.vue +++ b/UI-Project/src/views/Identify/identifwutwo.vue @@ -1,47 +1,30 @@ <template> <div style="height: 500px;"> - <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="currentPage" - :page-size="pageSize" - :size="size" - :disabled="disabled" - layout="prev, pager, next, jumper" - :total="totalPages" - @current-change="handleCurrentChange" - /> - </div> <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" + :key="rect.glassId" class="rect" - @click="showDialog(rect.glass_id)" + @click="showDialog(rect.glassId)" :style="{ position: 'absolute', - top: `${rect.y_axis}px`, left: `${rect.x_axis}px`, width: `${rect.width}px`, height: `${rect.height}px`, - backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.glass_state) - }" - > - <!-- 绠ご --> - <!-- <div id="arrow"></div> - <div id="line"></div> --> + top: `${rect.yAxis}px`, left: `${rect.xAxis}px`, width: `${rect.edgWidth}px`, height: `${rect.edgHeight}px`, + backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.state) + }"> <div class="centered-text"> - <div>{{ rect.glass_id }}</div> + <div>{{ rect.glassId }}</div> <div>{{ rect.widtha }}*{{ rect.heighta }}</div> </div> </div> </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" + <el-button :disabled="currentGlassRect?.state === 8 || currentGlassRect?.state === 9" type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)" style="width: 140px;margin-left: 10px;"> {{ $t('order.dilapidation') }} </el-button> - <el-button :disabled="currentGlassRect?.glass_state === 9 || currentGlassRect?.glass_state === 8" type="danger" + <el-button :disabled="currentGlassRect?.state === 9 || currentGlassRect?.state === 8" type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;"> <el-icon class="el-icon--right"> <Upload/> @@ -54,40 +37,65 @@ </template> <script setup lang="ts"> import {ElMessage} from 'element-plus' -import {computed, onMounted, onUnmounted, ref} from 'vue'; +import {onBeforeUnmount, computed, onMounted, onUnmounted, ref} from 'vue'; import request from "@/utils/request" import {host, WebSocketHost} from '@/utils/constants' +import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; import {useI18n} from 'vue-i18n' const {t} = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') const blind = ref(false) -const olWidth = ref(); -const olHeight = ref(); -const glass_id = ref(); -const inputValue = ref(''); -const currentGlassId = ref(null); // 瀛樺偍褰撳墠鐐瑰嚮鐭╁舰鐨� glass_id -const currentstate = ref(null); +const currentGlassId = 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 +let socket = null; +const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/currentCutDrawingTwo`; +const handleMessage = (data: any) => { + 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.glassId === rect.glassId); + if (existingRect) { + return { + ...existingRect, + xAxis: (6000 - (rect.xAxis + rect.edgWidth)) * scaleFactor, + yAxis: rect.yAxis * scaleFactory, + edgWidth: rect.edgWidth * scaleFactor, + edgHeight: rect.edgHeight * scaleFactory, + widtha: rect.edgWidth, + heighta: rect.edgHeight, + state: rect.state, + // 淇濇寔 isActive 鐘舵�佷笉鍙� + }; + } else { + // 濡傛灉涓嶅瓨鍦紝鍒欐坊鍔犳柊鐭╁舰锛岄粯璁� isActive 涓� false + return { + ...rect, + xAxis: (6000 - (rect.xAxis + rect.edgWidth)) * scaleFactor, + yAxis: rect.yAxis * scaleFactory, + edgWidth: rect.edgWidth * scaleFactor, + edgHeight: rect.edgHeight * scaleFactory, + widtha: rect.edgWidth, + heighta: rect.edgHeight, + state: rect.state, + isActive: false, + glassId: rect.glassId, + }; + } + }); + adjustedRects.value = newRects; + } else if (data.currentCutTerritory == '') { + adjustedRects.value = []; + } +} const currentGlassRect = computed(() => { - return adjustedRects.value.find(rect => rect.glass_id === currentGlassId.value); + return adjustedRects.value.find(rect => rect.glassId === 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 + rect.glassId === glassId ? {...rect, isActive: true} : rect ); } const handleDialogClose = () => { @@ -102,111 +110,42 @@ const response = await request.post('/cacheGlass/taskCache/identControls', { glassId: currentGlassId.value, state: 8, - line: 1001, + line: 2, + remark: '鎺扮墖', workingProcedure: '鍒囧壊', }) if (response.code == 200) { ElMessage.success(response.message); - // window.location.reload() blind.value = false; updateRectStatus(currentGlassId.value, 8); - findEngineering() } else { - // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭� ElMessage.error(response.msg); } } catch (error) { - // 澶勭悊閿欒 console.error(error); } } // 浜哄伐鎷胯蛋 const handleManualTake = async () => { try { - // var url="/cacheGlass/taskCache/identControls?identId="+currentGlassId.value+'&controlsId='+200; - // console.log(url); - // const response = await request.post(url) const response = await request.post('/cacheGlass/taskCache/identControls', { glassId: currentGlassId.value, state: 9, - line: 1001, + line: 2, workingProcedure: '鍒囧壊', + remark: '鎺扮墖', }) if (response.code == 200) { - // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫 ElMessage.success(response.message); - // window.location.reload() blind.value = false; updateRectStatus(currentGlassId.value, 9); - findEngineering() } else { - // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭� ElMessage.error(response.msg); } } catch (error) { - // 澶勭悊閿欒 console.error(error); } } -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; - } - currentPage.value = 1; - } - } 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: @@ -226,67 +165,16 @@ // 鏇存柊鐭╁舰鐘舵�� function updateRectStatus(glassId: string, status: number) { adjustedRects.value.forEach(rect => { - if (rect.glass_id === glassId) { - rect.glass_state = status; // 鏇存柊鐭╁舰鐨勭姸鎬� + if (rect.glassId === glassId) { + rect.state = status; // 鏇存柊鐭╁舰鐨勭姸鎬� } }); } -const connectWebSocket = () => { - if (!webSocket) { - const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`; - 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(); - } + socket = initializeWebSocket(socketUrl, handleMessage); }); -onUnmounted(() => { - if (webSocket) { - webSocket.close(); - } +onBeforeUnmount(() => { + closeWebSocket(); }); </script> <style scoped> @@ -301,22 +189,6 @@ align-items: center; height: 100%; /* 纭繚div鍗犳嵁鏁翠釜鐭╁舰鐨勯珮搴� */ font-size: small; -} -#rect { - position: relative; /* 纭繚绠ご鍙互鐩稿浜庣煩褰㈠畾浣� */ - /* 鍏朵粬鏍峰紡 */ -} -#arrow { - position: absolute; - top: 70%; /* 绠ご浣嶄簬鐭╁舰涓棿 */ - left: 200px; /* 绠ご鍦ㄧ煩褰㈠乏渚т竴浜涜窛绂� */ - transform: translateY(-50%); /* 鍨傜洿灞呬腑 */ - width: 0; - height: 0; - border-top: 10px solid transparent; /* 涓婅竟妗� */ - border-bottom: 10px solid transparent; /* 涓嬭竟妗� */ - border-right: 20px solid #911005; /* 鍙宠竟妗嗭紝褰㈡垚绠ご */ - /* 鏍规嵁闇�瑕佽皟鏁磋竟妗嗗ぇ灏忓拰棰滆壊 */ } #line { position: absolute; -- Gitblit v1.8.0