From b804d88d626d1df675a3278c859b37758c55432b Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期四, 18 十二月 2025 13:42:06 +0800
Subject: [PATCH] 1、增加流程卡进度查询,可根据工程号,流程卡号,玻璃id查看进度情况 2、钢化界面增加颜色对应注释,版图增加落架顺序 3、两个大理片界面笼子上色块显示修改为根据玻璃宽度显示 4、中空大理片右侧缺片情况显示优化 5、是否除膜从领取工程取消,在中空领取任务时选择除膜膜系(不除膜时不选择膜系),当配方中是需要除膜时并且选择的膜系与小片膜系一样时发送除膜信息 6、中空领取任务界面流程卡数量不等于已配对数量时高亮显示 7、磨边队列当后面玻璃磨边完成扫码但前面玻璃还未扫到码时高亮显示

---
 UI-Project/src/views/Identify/identifwu.vue |  337 ++++++++++++++++++++++---------------------------------
 1 files changed, 137 insertions(+), 200 deletions(-)

diff --git a/UI-Project/src/views/Identify/identifwu.vue b/UI-Project/src/views/Identify/identifwu.vue
index 651915c..ed5edab 100644
--- a/UI-Project/src/views/Identify/identifwu.vue
+++ b/UI-Project/src/views/Identify/identifwu.vue
@@ -1,47 +1,35 @@
 <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 style="height: 600px;">
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 850px;">
+    <div style="display: flex;margin-left: 40%;margin-bottom: 5px;">
+    <div style="text-align: center;"> {{ $t('processCard.layoutID') }}锛歿{ ava }}-{{ avanum }} </div>
+     <el-button @click="handleAllDamage" style="margin-left: 80%;margin-top: -5px;">{{$t('order.dilapidation')}}</el-button>
     </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.yAxisa}px`, left: `${rect.xAxisa}px`, width: `${rect.width}px`, height: `${rect.height}px`,
+              backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.state)
+               }">
             <div class="centered-text">
-              <div>{{ rect.glass_id }}</div>
-              <div>{{ rect.widtha }}*{{ rect.heighta }}</div>
+              <div style="font-size: 10px;font-weight: bold;">{{ rect.glassId }}</div>
+              <div style="font-size: 10px;font-weight: bold;">{{ rect.flowCardId }}</div>
+              <div style="font-size: 15px;font-weight: bold;">{{ 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/>
@@ -53,228 +41,207 @@
   </div>
 </template>
 <script setup lang="ts">
-import {ElMessage} from 'element-plus'
-import {computed, onMounted, onUnmounted, ref} from 'vue';
+import {avatarEmits,  ElMessage, ElMessageBox } from 'element-plus'
+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  
+const ava = ref('');
+const avanum = ref('');
+const realwidth = ref('');
+const realheight = ref('');
+let socket = null;
 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 = () => {
   adjustedRects.value = adjustedRects.value.map(rect => ({
     ...rect,
     isActive: false
   }));
 }
+// 涓�閿牬鎹熸墍鏈夌幓鐠�
+const handleAllDamage = async () => {
+  try {
+      const confirmResult = await ElMessageBox.confirm(
+      t('order.dilapidationWhether'),
+      t('workOrder.prompt'),
+      {
+        confirmButtonText: t('workOrder.yes'),
+        cancelButtonText: t('workOrder.cancel'),
+        type: 'warning',
+      }
+    );
+    // 绛涢�夊嚭state涓嶆槸8鍜�9鐨勭幓鐠僆D
+    const glassIdList = adjustedRects.value
+      .filter(rect => rect.state !== 8 && rect.state !== 9)
+      .map(rect => rect.glassId);
+    if (glassIdList.length === 0) {
+      ElMessage.warning(t('order.noGlassToDamage')); // 娌℃湁鍙牬鎹熺殑鐜荤拑
+      return;
+    }
+    const response = await request.post('/cacheGlass/taskCache/identControlsByPatternSequence', {
+      glassIdList: glassIdList,
+      state: 8,
+      line: 1,
+      workingProcedure: '鍒囧壊',
+      remark: '鎺扮墖'
+    });
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      // 鏇存柊鎵�鏈夌幓鐠冪姸鎬�
+      glassIdList.forEach(glassId => {
+        updateRectStatus(glassId, 8);
+      });
+    } else {
+      ElMessage.error(response.msg);
+    }
+  } catch (error) {
+    console.error(error);
+    ElMessage.error(t(''));
+  }
+};
 // 鐮存崯
 const handleDamage = async () => {
   try {
     const response = await request.post('/cacheGlass/taskCache/identControls', {
       glassId: currentGlassId.value,
       state: 8,
-      line: 1001,
+      line: 1,
+      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: 1,
       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:
-      return '#e1f3d8';
-    case 100:
-      return '#c8c9cc';
-    case 110:
-      return '#b3e19d';
-    case 120:
-      return '#f89898';
+    case 0:  
+      return '#7AC5CD';
+    case 1:
+      return '#95d475';
+    case -1:
+      return '#99BBFF';
+    case 2:  
+      return 'lightblue';
+    case 3:  
+      return '#eebe77';  
+    case 4:  
+      return '#CD6090';
     case 8:
       return '#911005';
     case 9:
-      return '#f3d19e';
+      return '#4682B4';
+    default:
+      return '#CDAF95'; 
   }
 }
-
 // 鏇存柊鐭╁舰鐘舵��
 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;
+const socketUrl = `ws://${window.ipConfig.serverUrl}/api/cacheGlass/api/talk/currentCutDrawingOne`;
+const handleMessage = (data: any) => {
+  if (data.engineer != null) {
+  ava.value = data.engineer[0]
+  }else{
+    ava.value = ''
+  }
+  if (data.engineer != null) {
+    avanum.value = data.sequence[0]
+  }else{
+    avanum.value = ''
+  }
+      console.log(data.upPattenUsage);
+      console.log(data.currentCutTerritory);
+      if (data.upPattenUsage && data.upPattenUsage.length > 0) {
+        realwidth.value = data.upPattenUsage[0].width;
+        realheight.value = data.upPattenUsage[0].height;
+        const realx = realwidth.value;
+        const realy = realheight.value;
+      window.localStorage.setItem('widthreturna', realy)
+        const scaleFactora = 1621.78 / realx;
+        const scaleFactorya = 750 / realy;
+      window.localStorage.setItem('scaleFactorb', scaleFactora)
+      window.localStorage.setItem('scaleFactoryb', scaleFactorya)
+      }
       if (data.currentCutTerritory && data.currentCutTerritory.length > 0) {
+        let scaleFactor = window.localStorage.getItem('scaleFactorb')
+        let scaleFactory = window.localStorage.getItem('scaleFactoryb')
+        let widthreturn = window.localStorage.getItem('widthreturna')
         const newRects = data.currentCutTerritory[0].map(rect => {
-          const existingRect = adjustedRects.value.find(r => r.glass_id === rect.glass_id);
-
+          const existingRect = adjustedRects.value.find(r => r.glassId === rect.glassId);
           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,
+              xAxisa: rect.xAxis * scaleFactor,
+              yAxisa: (widthreturn - (rect.yAxis + rect.edgHeight)) * scaleFactory,
+              width: rect.edgWidth * scaleFactor,
+              height: rect.edgHeight * scaleFactory,
+              widtha: rect.edgWidth,
+              heighta: rect.edgHeight,
+              state: rect.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,
+              xAxisa: rect.xAxis * scaleFactor,
+              yAxisa: (widthreturn - (rect.yAxis + rect.edgHeight)) * scaleFactory,
+              width: rect.edgWidth * scaleFactor,
+              height: rect.edgHeight * scaleFactory,
+              widtha: rect.edgWidth,
+              heighta: rect.edgHeight,
+              state: rect.state,
               isActive: false,
-              glass_id: rect.glass_id,
+              glassId: rect.glassId,
             };
           }
         });
@@ -282,56 +249,27 @@
       } 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>
 .rect {
   border: 1px solid black; /* 璁剧疆鐭╁舰鐨勮竟妗� */
   /* background-color: lightblue; 璁剧疆鐭╁舰鐨勮儗鏅壊   */
 }
-
 .centered-text {
   /* 璁剧疆鏂囧瓧灞呬腑鏍峰紡 */
   /* display: flex; */
   justify-content: center;
   align-items: center;
   height: 100%; /* 纭繚div鍗犳嵁鏁翠釜鐭╁舰鐨勯珮搴� */
-  font-size: small;
+  /* font-size: large; */
 }
-
-#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;
   top: 70%; /* 鐩寸嚎浣嶄簬鐭╁舰涓棿 */
@@ -341,5 +279,4 @@
   width: 240px; /* 鐩寸嚎鐨勯暱搴︼紝鏍规嵁闇�瑕佽皟鏁� */
   background-color: #911005; /* 鐩寸嚎鐨勯鑹� */
 }
-
 </style>
\ No newline at end of file

--
Gitblit v1.8.0