From de46cb80b7c4d1fb74a4b72d8fc4406e7e3144e7 Mon Sep 17 00:00:00 2001
From: 严智鑫 <test>
Date: 星期一, 19 八月 2024 08:49:41 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 UI-Project/src/views/Returns/returns.vue                                                                                                     |    4 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java                                    |    9 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java                              |   10 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java                |   29 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java                      |    3 
 UI-Project/src/views/LoginView.vue                                                                                                           |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml                                  |   27 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml                                          |   20 
 UI-Project/src/lang/companyInfo.js                                                                                                           |   85 +
 UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue                                                                                    |   26 
 UI-Project/package.json                                                                                                                      |    5 
 UI-Project/src/views/UnLoadGlass/PrintFlow.vue                                                                                               |  444 ++++++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java                        |   10 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java                  |    4 
 UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue                                                                                    |   42 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java                   |    4 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java                                                                |    6 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java                              |    4 
 UI-Project/src/views/PurchaseReturn/purchaseStorage.vue                                                                                      |   29 
 UI-Project/src/assets/dpxsa.png                                                                                                              |    0 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml                           |    8 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java            |   23 
 UI-Project/src/utils/WebSocketService.js                                                                                                     |   13 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml                          |    2 
 UI-Project/src/layout/MainErpView.vue                                                                                                        |   46 
 UI-Project/src/views/Identify/identify.vue                                                                                                   |  245 +--
 UI-Project/src/views/Caching/cachingbefore.vue                                                                                               |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java             |    4 
 UI-Project/src/views/UnLoadGlass/loadmachinerack.vue                                                                                         |  494 +++++--
 UI-Project/src/views/Caching/cachingun.vue                                                                                                   |  275 ++--
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml                                                  |    4 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java                      |   27 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java              |    4 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java       |    5 
 UI-Project/src/views/largescreen/largescreen.vue                                                                                             |  511 ++++++-
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml                                 |    3 
 UI-Project/config.js                                                                                                                         |    3 
 UI-Project/src/views/StockBasicData/stockBasicData.vue                                                                                       |  119 +
 UI-Project/src/views/UnLoadGlass/Landingindication.vue                                                                                       |   55 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml                                                      |    5 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                               |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml                                               |    1 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                           |    3 
 UI-Project/src/lang/zh.js                                                                                                                    |   14 
 UI-Project/src/views/ReportWork/reportWork.vue                                                                                               |    6 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |   57 
 UI-Project/src/utils/constants.js                                                                                                            |    3 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml                                                  |   12 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml                                                  |   12 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java                     |    4 
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                                 |   81 
 /dev/null                                                                                                                                    |  144 --
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java                 |    2 
 UI-Project/src/views/GlassStorage/MaterialRackManagement.vue                                                                                 |    5 
 JsonFile/PlcdownGlass.json                                                                                                                   |    7 
 UI-Project/src/main.js                                                                                                                       |    4 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java         |    6 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java               |    9 
 UI-Project/package-lock.json                                                                                                                 |  670 +++++++++
 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue                                                                                       |  136 -
 60 files changed, 2,777 insertions(+), 1,014 deletions(-)

diff --git a/JsonFile/PlcdownGlass.json b/JsonFile/PlcdownGlass.json
index 98366a9..a5698c2 100644
--- a/JsonFile/PlcdownGlass.json
+++ b/JsonFile/PlcdownGlass.json
@@ -1,6 +1,6 @@
 {
 	"plcAddressBegin": "DB11.0",
-	"plcAddressLenght": "92",
+	"plcAddressLenght": "94",
 	"dataType": "word",
 	"parameteInfor": [
 
@@ -138,6 +138,11 @@
 			"codeId": "task_type",
 			"addressIndex": "90",
 			"addressLenght": "2"
+		},
+		{
+			"codeId": "alarm_signal",
+			"addressIndex": "92",
+			"addressLenght": "2"
 		}
 
 	]
diff --git a/UI-Project/config.js b/UI-Project/config.js
index b15a1a5..9a4f798 100644
--- a/UI-Project/config.js
+++ b/UI-Project/config.js
@@ -1,7 +1,10 @@
 export default {
  serverUrl: "10.153.19.150:88/api",
 //  serverUrl: "192.168.1.199:88/api",
+//  serverUrl: "127.0.0.1:88/api",
   serverUrl2: "10.153.19.150:88"
   // serverUrl2: "192.168.1.199:88"
+    // serverUrl2: "127.0.0.1:88"
+
   //serverUrl:"res.abeim.cn"
 }
\ No newline at end of file
diff --git a/UI-Project/package-lock.json b/UI-Project/package-lock.json
index d8cc8aa..d59de38 100644
--- a/UI-Project/package-lock.json
+++ b/UI-Project/package-lock.json
@@ -8,7 +8,7 @@
       "name": "northglass-mes",
       "version": "0.0.0",
       "dependencies": {
-        "@element-plus/icons-vue": "^2.1.0",
+        "@element-plus/icons-vue": "^2.3.1",
         "@vue-macros/reactivity-transform": "^0.3.23",
         "axios": "^1.6.8",
         "chart.js": "^4.4.3",
@@ -17,13 +17,16 @@
         "moment": "^2.30.1",
         "pinia": "^2.1.6",
         "pinia-plugin-persistedstate": "^3.2.0",
+        "qrcode": "^1.5.4",
         "sortablejs": "^1.15.1",
         "sweetalert2": "^11.10.7",
         "vue": "^3.3.4",
         "vue-draggable-plus": "^0.5.0",
         "vue-echarts": "^6.7.3",
         "vue-i18n": "^9.10.1",
+        "vue-print-nb": "^1.7.5",
         "vue-router": "^4.2.4",
+        "vue3-print-nb": "^0.1.4",
         "vxe-table": "^4.5.15",
         "xe-utils": "^3.5.14",
         "xlsx": "^0.18.5"
@@ -46,25 +49,28 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
-      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+      "version": "7.24.8",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+      "version": "7.24.7",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
-      "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "dependencies": {
+        "@babel/types": "^7.25.2"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -73,12 +79,12 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
-      "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz",
+      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.22.5",
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-string-parser": "^7.24.8",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -94,9 +100,9 @@
       }
     },
     "node_modules/@element-plus/icons-vue": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz",
-      "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
+      "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
       "peerDependencies": {
         "vue": "^3.2.0"
       }
@@ -558,6 +564,28 @@
         "node": ">=0.8"
       }
     },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
     "node_modules/anymatch": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
@@ -640,6 +668,14 @@
         "node": ">=8"
       }
     },
+    "node_modules/camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/cfb": {
       "version": "1.2.2",
       "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
@@ -686,6 +722,16 @@
         "fsevents": "~2.3.2"
       }
     },
+    "node_modules/cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
+      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      }
+    },
     "node_modules/codepage": {
       "version": "1.15.0",
       "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
@@ -693,6 +739,22 @@
       "engines": {
         "node": ">=0.8"
       }
+    },
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
     },
     "node_modules/combined-stream": {
       "version": "1.0.8",
@@ -749,6 +811,14 @@
         }
       }
     },
+    "node_modules/decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -756,6 +826,11 @@
       "engines": {
         "node": ">=0.4.0"
       }
+    },
+    "node_modules/dijkstrajs": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
+      "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
     },
     "node_modules/dom-zindex": {
       "version": "1.0.1",
@@ -795,6 +870,11 @@
       "peerDependencies": {
         "vue": "^3.2.0"
       }
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
     },
     "node_modules/esbuild": {
       "version": "0.18.20",
@@ -897,6 +977,18 @@
         "node": ">=8"
       }
     },
+    "node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/follow-redirects": {
       "version": "1.15.6",
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz",
@@ -929,6 +1021,14 @@
       "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
       "engines": {
         "node": ">=0.8"
+      }
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
       }
     },
     "node_modules/glob-parent": {
@@ -992,6 +1092,14 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -1035,6 +1143,17 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/lodash": {
@@ -1193,6 +1312,47 @@
       "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
     },
+    "node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/pathe": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
@@ -1283,6 +1443,14 @@
         "pathe": "^1.1.2"
       }
     },
+    "node_modules/pngjs": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
+      "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
     "node_modules/postcss": {
       "version": "8.4.31",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -1310,10 +1478,41 @@
         "node": "^10 || ^12 || >=14"
       }
     },
+    "node_modules/prettier": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
+      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+      "optional": true,
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
     "node_modules/proxy-from-env": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
+    "node_modules/qrcode": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz",
+      "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==",
+      "dependencies": {
+        "dijkstrajs": "^1.0.1",
+        "pngjs": "^5.0.0",
+        "yargs": "^15.3.1"
+      },
+      "bin": {
+        "qrcode": "bin/qrcode"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
     },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
@@ -1345,6 +1544,19 @@
       "engines": {
         "node": ">=8.10.0"
       }
+    },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
     },
     "node_modules/requires-port": {
       "version": "1.0.0",
@@ -1412,10 +1624,23 @@
       "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
       "dev": true
     },
+    "node_modules/set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+    },
     "node_modules/sortablejs": {
       "version": "1.15.1",
       "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.1.tgz",
       "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ=="
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
     "node_modules/source-map-js": {
       "version": "1.0.2",
@@ -1434,6 +1659,30 @@
       },
       "engines": {
         "node": ">=0.8"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/strip-literal": {
@@ -1750,6 +1999,37 @@
         "vue": "^3.0.0"
       }
     },
+    "node_modules/vue-print-nb": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
+      "integrity": "sha512-iNbNyUVRWz0Ha1UTiCKxMPtHLUDGgNI8e8xmD3xqm9RlXIUeX9bT7DgNAfY8vPzqyFRHqGjxLI1rycKH366ziQ==",
+      "dependencies": {
+        "vue": "^2.6.11"
+      }
+    },
+    "node_modules/vue-print-nb/node_modules/@vue/compiler-sfc": {
+      "version": "2.7.16",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
+      "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
+      "dependencies": {
+        "@babel/parser": "^7.23.5",
+        "postcss": "^8.4.14",
+        "source-map": "^0.6.1"
+      },
+      "optionalDependencies": {
+        "prettier": "^1.18.2 || ^2.0.0"
+      }
+    },
+    "node_modules/vue-print-nb/node_modules/vue": {
+      "version": "2.7.16",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz",
+      "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
+      "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
+      "dependencies": {
+        "@vue/compiler-sfc": "2.7.16",
+        "csstype": "^3.1.0"
+      }
+    },
     "node_modules/vue-router": {
       "version": "4.2.5",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz",
@@ -1762,6 +2042,14 @@
       },
       "peerDependencies": {
         "vue": "^3.2.0"
+      }
+    },
+    "node_modules/vue3-print-nb": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmmirror.com/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz",
+      "integrity": "sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==",
+      "dependencies": {
+        "vue": "^3.0.5"
       }
     },
     "node_modules/vxe-table": {
@@ -1790,6 +2078,11 @@
       "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
       "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
     },
+    "node_modules/which-module": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz",
+      "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
+    },
     "node_modules/wmf": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
@@ -1804,6 +2097,19 @@
       "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
       "engines": {
         "node": ">=0.8"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/xe-utils": {
@@ -1831,6 +2137,44 @@
         "node": ">=0.8"
       }
     },
+    "node_modules/y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz",
+      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+    },
+    "node_modules/yargs": {
+      "version": "15.4.1",
+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz",
+      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+      "dependencies": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^4.2.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^18.1.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "18.1.3",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz",
+      "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+      "dependencies": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/zrender": {
       "version": "5.6.0",
       "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
@@ -1848,27 +2192,30 @@
       "dev": true
     },
     "@babel/helper-string-parser": {
-      "version": "7.22.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
-      "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
+      "version": "7.24.8",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ=="
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
+      "version": "7.24.7",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w=="
     },
     "@babel/parser": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
-      "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw=="
+      "version": "7.25.3",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "requires": {
+        "@babel/types": "^7.25.2"
+      }
     },
     "@babel/types": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
-      "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+      "version": "7.25.2",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz",
+      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
       "requires": {
-        "@babel/helper-string-parser": "^7.22.5",
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-string-parser": "^7.24.8",
+        "@babel/helper-validator-identifier": "^7.24.7",
         "to-fast-properties": "^2.0.0"
       }
     },
@@ -1878,9 +2225,9 @@
       "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA=="
     },
     "@element-plus/icons-vue": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz",
-      "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
+      "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
       "requires": {}
     },
     "@esbuild/win32-ia32": {
@@ -2219,6 +2566,19 @@
       "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
       "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
     },
+    "ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+    },
+    "ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "requires": {
+        "color-convert": "^2.0.1"
+      }
+    },
     "anymatch": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
@@ -2286,6 +2646,11 @@
         "fill-range": "^7.0.1"
       }
     },
+    "camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+    },
     "cfb": {
       "version": "1.2.2",
       "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
@@ -2318,10 +2683,33 @@
         "readdirp": "~3.6.0"
       }
     },
+    "cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
+      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+      "requires": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      }
+    },
     "codepage": {
       "version": "1.15.0",
       "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
       "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
+    },
+    "color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "requires": {
+        "color-name": "~1.1.4"
+      }
+    },
+    "color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
     },
     "combined-stream": {
       "version": "1.0.8",
@@ -2361,10 +2749,20 @@
         "ms": "2.1.2"
       }
     },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
+    },
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+    },
+    "dijkstrajs": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
+      "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
     },
     "dom-zindex": {
       "version": "1.0.1",
@@ -2401,6 +2799,11 @@
         "memoize-one": "^6.0.0",
         "normalize-wheel-es": "^1.2.0"
       }
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
     },
     "esbuild": {
       "version": "0.18.20",
@@ -2484,6 +2887,15 @@
         "to-regex-range": "^5.0.1"
       }
     },
+    "find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "requires": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      }
+    },
     "follow-redirects": {
       "version": "1.15.6",
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz",
@@ -2503,6 +2915,11 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
       "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
     },
     "glob-parent": {
       "version": "5.1.2",
@@ -2550,6 +2967,11 @@
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
     },
+    "is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+    },
     "is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -2579,6 +3001,14 @@
       "version": "0.4.3",
       "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz",
       "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g=="
+    },
+    "locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "requires": {
+        "p-locate": "^4.1.0"
+      }
     },
     "lodash": {
       "version": "4.17.21",
@@ -2693,6 +3123,32 @@
       "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
     },
+    "p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "requires": {
+        "p-limit": "^2.2.0"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+    },
+    "path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+    },
     "pathe": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
@@ -2742,6 +3198,11 @@
         "pathe": "^1.1.2"
       }
     },
+    "pngjs": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz",
+      "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
+    },
     "postcss": {
       "version": "8.4.31",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -2752,10 +3213,26 @@
         "source-map-js": "^1.0.2"
       }
     },
+    "prettier": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz",
+      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+      "optional": true
+    },
     "proxy-from-env": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
+    "qrcode": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz",
+      "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==",
+      "requires": {
+        "dijkstrajs": "^1.0.1",
+        "pngjs": "^5.0.0",
+        "yargs": "^15.3.1"
+      }
     },
     "queue-microtask": {
       "version": "1.2.3",
@@ -2770,6 +3247,16 @@
       "requires": {
         "picomatch": "^2.2.1"
       }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
+    },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
     },
     "requires-port": {
       "version": "1.0.0",
@@ -2812,10 +3299,20 @@
       "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
       "dev": true
     },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+    },
     "sortablejs": {
       "version": "1.15.1",
       "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.1.tgz",
       "integrity": "sha512-P5Cjvb0UG1ZVNiDPj/n4V+DinttXG6K8n7vM/HQf0C25K3YKQTQY6fsr/sEGsJGpQ9exmPxluHxKBc0mLKU1lQ=="
+    },
+    "source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
     },
     "source-map-js": {
       "version": "1.0.2",
@@ -2828,6 +3325,24 @@
       "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
       "requires": {
         "frac": "~1.1.2"
+      }
+    },
+    "string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "requires": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      }
+    },
+    "strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "requires": {
+        "ansi-regex": "^5.0.1"
       }
     },
     "strip-literal": {
@@ -3014,12 +3529,50 @@
         "@vue/devtools-api": "^6.5.0"
       }
     },
+    "vue-print-nb": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
+      "integrity": "sha512-iNbNyUVRWz0Ha1UTiCKxMPtHLUDGgNI8e8xmD3xqm9RlXIUeX9bT7DgNAfY8vPzqyFRHqGjxLI1rycKH366ziQ==",
+      "requires": {
+        "vue": "^2.6.11"
+      },
+      "dependencies": {
+        "@vue/compiler-sfc": {
+          "version": "2.7.16",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
+          "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
+          "requires": {
+            "@babel/parser": "^7.23.5",
+            "postcss": "^8.4.14",
+            "prettier": "^1.18.2 || ^2.0.0",
+            "source-map": "^0.6.1"
+          }
+        },
+        "vue": {
+          "version": "2.7.16",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz",
+          "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
+          "requires": {
+            "@vue/compiler-sfc": "2.7.16",
+            "csstype": "^3.1.0"
+          }
+        }
+      }
+    },
     "vue-router": {
       "version": "4.2.5",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz",
       "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
       "requires": {
         "@vue/devtools-api": "^6.5.0"
+      }
+    },
+    "vue3-print-nb": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmmirror.com/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz",
+      "integrity": "sha512-LExI7viEzplR6ZKQ2b+V4U0cwGYbVD4fut/XHvk3UPGlT5CcvIGs6VlwGp107aKgk6P8Pgx4rco3Rehv2lti3A==",
+      "requires": {
+        "vue": "^3.0.5"
       }
     },
     "vxe-table": {
@@ -3041,6 +3594,11 @@
       "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
       "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
     },
+    "which-module": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz",
+      "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
+    },
     "wmf": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
@@ -3050,6 +3608,16 @@
       "version": "0.3.0",
       "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
       "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
+    },
+    "wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "requires": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      }
     },
     "xe-utils": {
       "version": "3.5.14",
@@ -3070,6 +3638,38 @@
         "word": "~0.3.0"
       }
     },
+    "y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz",
+      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+    },
+    "yargs": {
+      "version": "15.4.1",
+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz",
+      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+      "requires": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^4.2.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^18.1.2"
+      }
+    },
+    "yargs-parser": {
+      "version": "18.1.3",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz",
+      "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      }
+    },
     "zrender": {
       "version": "5.6.0",
       "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
diff --git a/UI-Project/package.json b/UI-Project/package.json
index 3a98cb7..feeda10 100644
--- a/UI-Project/package.json
+++ b/UI-Project/package.json
@@ -8,7 +8,7 @@
     "preview": "vite preview"
   },
   "dependencies": {
-    "@element-plus/icons-vue": "^2.1.0",
+    "@element-plus/icons-vue": "^2.3.1",
     "@vue-macros/reactivity-transform": "^0.3.23",
     "axios": "^1.6.8",
     "chart.js": "^4.4.3",
@@ -17,13 +17,16 @@
     "moment": "^2.30.1",
     "pinia": "^2.1.6",
     "pinia-plugin-persistedstate": "^3.2.0",
+    "qrcode": "^1.5.4",
     "sortablejs": "^1.15.1",
     "sweetalert2": "^11.10.7",
     "vue": "^3.3.4",
     "vue-draggable-plus": "^0.5.0",
     "vue-echarts": "^6.7.3",
     "vue-i18n": "^9.10.1",
+    "vue-print-nb": "^1.7.5",
     "vue-router": "^4.2.4",
+    "vue3-print-nb": "^0.1.4",
     "vxe-table": "^4.5.15",
     "xe-utils": "^3.5.14",
     "xlsx": "^0.18.5"
diff --git a/UI-Project/src/assets/dpxsa.png b/UI-Project/src/assets/dpxsa.png
new file mode 100644
index 0000000..c444062
--- /dev/null
+++ b/UI-Project/src/assets/dpxsa.png
Binary files differ
diff --git a/UI-Project/src/lang/companyInfo.js b/UI-Project/src/lang/companyInfo.js
new file mode 100644
index 0000000..1fc09b3
--- /dev/null
+++ b/UI-Project/src/lang/companyInfo.js
@@ -0,0 +1,85 @@
+import {defineStore} from "pinia";
+
+export default defineStore('companyInfo', {
+
+    state: () => ({
+        companyName: '甯稿窞甯傚悏鍒╃幓鐠冩湁闄愬叕鍙�',
+        address:'甯稿窞甯傚ぉ瀹佸尯閮戦檰闀囧ぇ鏄庡崡璺�8鍙�',
+        telephone:'022-59280088',
+        fax:'022-59280066',
+        widHeiLength:{//璁㈠崟瀹介珮闀垮害
+            regexp:/^(\d{1,4})$/,//姝e垯鍥涗綅鏁存暟
+            //regexp:/^(0|[1-9][0-9]{0,3}([.][0-9]{1,2})?)$/,//姝e垯0.00-9999.99
+            msg:'basicData.msg.range9999Dec'
+        },
+        orderIdType:'month',//鍚庣鐢熸垚璁㈠崟鍙风被鍨嬶紝day:姣忓ぉ鐢熸垚锛宮onth:姣忔湀鐢熸垚
+        deliveryIdType:'month',//鍚庣鐢熸垚鍙戣揣鍗曞彿绫诲瀷锛宒ay:姣忓ぉ鐢熸垚锛宮onth:姣忔湀鐢熸垚
+        columnName:'寮傚舰鍙傛暟',
+        selectOrderReviewShow:false, //璁㈠崟棣栭〉鍔犲伐鍗曞鏍告寜閽槸鍚︽樉绀�
+        productName:"product_abbreviation", //浜у搧鍒涘缓鏌ラ噸瀛楁
+        decValue:2,//璁㈠崟淇濆瓨闈㈢Н浣嶆暟
+        label:2,//鏍囩绫诲瀷
+        calculateType:2,//璁㈠崟璁$畻鏂瑰紡
+
+        //澶╂触
+        printLabel: {
+            custom: (item1) => {
+                return `<div class="row3" style="text-align: center;font-weight: bolder;">
+                  <label style="font-weight: bolder;font-size: 22px;margin-top: 28px;">W:${item1.width}</label>
+                  &nbsp;&nbsp;&nbsp;
+                  <label style="font-weight: bolder;font-size: 22px;margin-top: 28px;">H:${item1.height}</label>
+                </div>`
+            },
+            customSemi: (item1) => {
+                return `<div class="row3" style="text-align: center;font-weight: bolder;">
+                  <label style="font-weight: bolder;font-size: 10px;margin-top: 28px;">W:${item1.width}</label>
+                  &nbsp;&nbsp;&nbsp;
+                  <label style="font-weight: bolder;font-size: 10px;margin-top: 28px;">H:${item1.height}</label>
+                </div>`
+            },
+            labelType: '鎴愬搧鏍囩2',
+            labelValue:2,
+            labelType3: '鎴愬搧鏍囩3',
+            labelValue3:3,
+            printFlowCard: {
+                patch:'姝e搧',
+                lackOf:'娆″搧',
+                processingNote: (itemtextarea) => {
+                    return  `${itemtextarea.processing_note}`
+                },
+            },
+            hideButton:'false',
+            getSelectFlowCard:2,//鎵撳嵃娴佺▼鍗℃煡璇㈢姸鎬�
+            className:{
+                custom:{
+                    printFlowCardName: () => {
+                        return `printFlowCard_finished`
+                    },
+                    entiretyName: () => {
+                        return `entirety_finished`
+                    },
+                    contentRowName: () => {
+                        return `contentRow`
+                    }
+                },
+                semi:{
+                    printFlowCardName: () => {
+                        return `printFlowCard_semi`
+                    },
+                    entiretyName: () => {
+                        return `entirety_semi`
+                    },
+                    contentRowName: () => {
+                        return `contentRow`
+                    }
+                }
+
+            }
+        }
+
+
+    }),
+    actions: {
+        //
+    }
+})
\ No newline at end of file
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index d2c352b..ff52e1c 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -218,8 +218,10 @@
         process:'宸ュ簭',
         team:'鐝粍',
         basic:'璁惧',
-        add:'纭淇濆瓨',
+        makesure:'纭淇濆瓨',
         cancel:'鍙栨秷',
+        temperingtotal:'閽㈠寲鐐夋暟锛�',
+        glasstotal:'鐜荤拑鎬绘暟锛�',
     },
     workOrder:{
         glassID:'鐜荤拑ID',
@@ -237,6 +239,9 @@
         takemessage:'鏄惁鎷胯蛋璇ユ潯淇℃伅锛�',
         breakage:'鐮存崯',
         takeout:'鎷胯蛋',
+        glasstype:'鐜荤拑绫诲瀷',
+        line:'绾胯矾',
+        status:'鐘舵��',
     },
     processCard:{
         intofurnace:'杩涚倝涓�',
@@ -427,6 +432,13 @@
         allstatus: '鍏ㄩ儴鍏ュ簱鐘舵��',
         completedquantity: '瀹屾垚鏁伴噺',
         scrapquantity: '鎶ュ簾鏁伴噺',
+        number: '鏁伴噺',
+        method: '鍔犲伐鏂瑰紡',
+        innumber: '宸插叆鏁伴噺',
+        productstatus: '鐢熶骇鐘舵��',
+        projectnumber: '宸ョ▼鍙�',
+        right: '姝e父',
+        stop: '缁堟',
     },
     reportmanage:{
         productiontime :'鐢熶骇鏃堕棿',
diff --git a/UI-Project/src/layout/MainErpView.vue b/UI-Project/src/layout/MainErpView.vue
index 88c07a1..8fdf761 100644
--- a/UI-Project/src/layout/MainErpView.vue
+++ b/UI-Project/src/layout/MainErpView.vue
@@ -10,11 +10,11 @@
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
 const store = userInfo()
-
+const isCollapse = ref(false);  
 // const { $i18n } = useI18n(); // 鑾峰彇 i18n 瀹炰緥  
 const router = useRouter()
 const userStore = useUserInfoStore()
-const user = userStore.user.userName
+// const user = userStore.user.userName
 
 let userInfoStr = window.localStorage.getItem('userInfo')
 console.log(userInfoStr);
@@ -158,6 +158,9 @@
     openFlag = menuID
   }
 }
+function toggleCollapse() {  
+  isCollapse.value = !isCollapse.value;  
+} 
 </script>
  
 <template>
@@ -169,10 +172,6 @@
                alt=""
                style="max-width: 100%;max-height: 100%">
           <h3 style="margin: 1rem  ;font-weight: bold;width: 33vw;"> {{ $t('main.titleFirst') }}{{ userName }}{{ $t('main.titleLast') }}</h3>
-          <!-- <div class="header-left">
-            <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse"
-              style="height:30px;"></el-button>
-          </div> -->
           <span style="height: 70%;width: 78vw;margin-top: 1rem;">
             <!-- <el-button class="sys-quit"
                        @click="quit"
@@ -188,33 +187,23 @@
                 <SwitchButton size=""/>{{ $t('main.quit') }}
               </el-icon>
             </el-button>
+            <div class="header-left">
+              <el-button  @click="toggleCollapse"
+              style="height:30px;">鈽�</el-button>
+            <!-- <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse"
+              style="height:30px;"></el-button> -->
+          </div>
           </span>
         </div>
       </el-header>
       <div id="line"></div>
       <el-container>
-        <!-- <el-aside width="160px"
-                  style="height: 99%; background-color: #fff;">
-          <div class="menu">
-            <div v-for="items in menuList">
-              <div class='menu_title'
-                   @click="openMenu(items.id)">
-                <span>鈽�</span>
-                {{ items.menuName }}
-              </div>
-              <ul class='enter-x-left'
-                  v-show="openFlag==items.id">
-                <li v-for="menuItem in items.children"
-                    style="margin-bottom:2px">
-                  <router-link :to="{path:menuItem.url}">
-                    {{ menuItem.menuName }}
-                  </router-link>
-        </el-aside> -->
+      <el-aside :width="isCollapse ? '30px' : '200px'" style="background-color: #fff;">
         <el-row :span="20">
-            <el-menu :default-active="activePath" class="el-menu-vertical-demo" background-color="#fff">
+            <el-menu :default-active="activePath" class="el-menu-vertical-demo" >
               <div class="menu">
             <div v-for="items in menuList">
-              <div class='menu_title'
+              <div class='menu_title' v-show="!isCollapse"
                    @click="openMenu(items.id)">
                 <span>鈽�</span>
                 {{ items.menuName }}
@@ -232,12 +221,12 @@
                   </div>
             </el-menu>
           </el-row>
-        <el-main>
+</el-aside>
+<el-main>
           <div id="main">
             <router-view></router-view>
           </div>
         </el-main>
-
       </el-container>
     </el-container>
   </div>
@@ -463,4 +452,7 @@
     transform: translateX(0);
   }
 }
+.header-left{
+  margin-left: -350px;
+}
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/main.js b/UI-Project/src/main.js
index 7f48d13..30b5a74 100644
--- a/UI-Project/src/main.js
+++ b/UI-Project/src/main.js
@@ -15,7 +15,6 @@
 import * as echarts from "echarts"
 // echarts.registerMap('china', china)
 // Vue.prototype.$echarts = echarts
-
 // app.component("v-chart", Echarts)
 // app.config.globalProperties.$echarts = echarts
 const app = createApp(App)
@@ -29,5 +28,4 @@
     locale: zhCn,
 })
 app.use(i18n)
- 
-app.mount('#app')
\ No newline at end of file
+app.mount('#app')
diff --git a/UI-Project/src/utils/WebSocketService.js b/UI-Project/src/utils/WebSocketService.js
index 0c2d76f..695f679 100644
--- a/UI-Project/src/utils/WebSocketService.js
+++ b/UI-Project/src/utils/WebSocketService.js
@@ -1,4 +1,5 @@
 // WebSocketService.js
+
 let socket = null;
 export const initializeWebSocket = (socketUrl, messageHandler) => {
   let messages='' ;
@@ -6,10 +7,13 @@
       console.log("Your browser does not support WebSocket");
       return null;
     }
+  
     const socket = new WebSocket(socketUrl);
+  
     socket.onopen = function () {
       console.log("WebSocket is now open");
     };
+  
     socket.onmessage = (msg) => {
       if (!msg.data) {
         return;
@@ -21,14 +25,23 @@
         messages= messages.replace('<END>', '');
         const obj = JSON.parse(messages);
         messages='';
+        
       // 璋冪敤娑堟伅澶勭悊鍑芥暟锛屽皢鏁版嵁浼犻�掔粰 Vue 缁勪欢
       if (messageHandler) {
         messageHandler(obj);
       }
       }
+      
+      
+
+  
+      
     };
+  
     return socket;
   };
+  
+
   export const closeWebSocket = (socket) => {
     if (socket && socket.readyState === WebSocket.OPEN) {
         socket.close();
diff --git a/UI-Project/src/utils/constants.js b/UI-Project/src/utils/constants.js
index 67d36d2..b551cfb 100644
--- a/UI-Project/src/utils/constants.js
+++ b/UI-Project/src/utils/constants.js
@@ -1,3 +1,4 @@
-// export const WebSocketHost = "192.168.1.199";
+//  export const WebSocketHost = "192.168.1.199";
 export const WebSocketHost = "10.153.19.150";
+// export const WebSocketHost = "127.0.0.1";
 export const host = "88";
\ No newline at end of file
diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index e4c67f3..36a24cc 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -110,7 +110,7 @@
   <div style="height: 500px;">
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="240" ref="table" 
+        <el-table height="340" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue
index 7b55968..8e0a488 100644
--- a/UI-Project/src/views/Caching/cachingun.vue
+++ b/UI-Project/src/views/Caching/cachingun.vue
@@ -2,159 +2,152 @@
   <div style="height: 500px;">
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="240" ref="table" 
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+        <el-table height="340" ref="table" @selection-change="handleSelectionChange" :data="tableData"
+          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
           <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
           <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" />
           <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" />
           <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" />
-          <el-table-column
-            align="center"
-            :label="$t('sorter.startstatus')"
-            min-width="80"
-            prop="enable_state"
-          >
-          <template #default="scope">  
-          <el-tag  
-            :type="scope.row.enable_state === 1 ? 'success' : 'danger'"  
-            @click="toggleEnableState(scope.row)"  
-          >  
-            {{ scope.row.enable_state === 1 ?  $t('sorter.start') : $t('sorter.disable') }}
-          </el-tag>  
-        </template> 
-          <!-- <template #default="scope">
+          <el-table-column align="center" :label="$t('sorter.startstatus')" min-width="80" prop="enable_state">
+            <template #default="scope">
+              <el-tag :type="scope.row.enable_state === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)">
+                {{ scope.row.enable_state === 1 ? $t('sorter.start') : $t('sorter.disable') }}
+              </el-tag>
+            </template>
+            <!-- <template #default="scope">
             <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�"  }}</el-tag>
           </template> -->
           </el-table-column>
           <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain  @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button>
-              <el-button size="mini" type="text" plain  @click="opena(scope.row)">{{ $t('sorter.updown') }}</el-button>
+              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('sorter.deficiencieste')
+                }}</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('sorter.updown') }}</el-button>
             </template>
-        </el-table-column>
+          </el-table-column>
         </el-table>
       </div>
     </el-card>
-  <div class="awatch">
-    <img src="../../assets/woshihuancun.png" alt="" style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;"> 
-    <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
-    <div  
-      v-for="(rect, index) in adjustedRects"  
-      :key="rect"  
-      :style="{ position: 'absolute', 
-       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
+    <div class="awatch">
+      <img src="../../assets/woshihuancun.png" alt=""
+        style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;">
+      <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
+        <div v-for="(rect, index) in adjustedRects" :key="rect" :style="{
+      position: 'absolute',
+      top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
       backgroundColor: '#409EFF'
-       }"  
-    >
+    }">
+        </div>
+      </div>
     </div>
   </div>
-</div>
-</div>
 </template>
 <script setup>
-import {Search,Lock,Avatar} from "@element-plus/icons-vue";
-import {reactive} from "vue";
-import {useRouter} from "vue-router"
+import { Search, Lock, Avatar } from "@element-plus/icons-vue";
+import { reactive } from "vue";
+import { useRouter } from "vue-router"
 const router = useRouter()
 const adda = ref(false)
-import { WebSocketHost ,host} from '@/utils/constants'
+import { WebSocketHost, host } from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
+import { ref, onMounted, onBeforeUnmount, onUnmounted } from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
- 
+
 import { useI18n } from 'vue-i18n'
-  const { t } = useI18n()
+const { t } = useI18n()
 // import i18n from '@/i18n';
-const tableData = ref([])
+const tableData = reactive([]);
 const slot = ref('')
 const adjustedRects = ref([]);
-  
-onMounted(async () => {  
-  try {  
-    const response = await request.get('/unLoadGlass/downStorage/selectStorageCage'); // 鏇挎崲涓轰綘鐨凙PI绔偣  
-    if (response.code === 200) {  
-      const rawRects = response.data; // 璁剧疆鐭╁舰鏁版嵁  
-          tableData.value = response.data
-          console.log(response.data);
-          adjustedRects.value = rawRects.map(rect => ({  
-            ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-            width: rect.width * 0.5 ,
-            id: rect.id * 10,
-          })); 
-          console.log(adjustedRects.value);
-    } else {  
-      ElMessage.warning(res.msg)
-    }  
-  } catch (error) {  
-    // console.error('Error fetching rects :', error);  
-  }  
-}); 
-const open = async(row) => {
+
+onMounted(async () => {
   try {
-    const confirmResult = await ElMessageBox.confirm(  
-      t('sorter.information'), 
-      t('sorter.prompt'),  
-      {  
-        confirmButtonText: t('sorter.yes'), 
+    const response = await request.get('/unLoadGlass/downStorage/selectStorageCage'); // 鏇挎崲涓轰綘鐨凙PI绔偣  
+    if (response.code === 200) {
+      const rawRects = response.data; // 璁剧疆鐭╁舰鏁版嵁  
+      tableData.value = response.data
+      console.log(response.data);
+      adjustedRects.value = rawRects.map(rect => ({
+        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
+        width: rect.width * 0.5,
+        id: rect.id * 10,
+      }));
+      console.log(adjustedRects.value);
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  } catch (error) {
+    // console.error('Error fetching rects :', error);  
+  }
+});
+const open = async (row) => {
+  try {
+    const confirmResult = await ElMessageBox.confirm(
+      t('sorter.information'),
+      t('sorter.prompt'),
+      {
+        confirmButtonText: t('sorter.yes'),
         cancelButtonText: t('sorter.cancel'),
-        type: 'warning',  
-      } 
-    );  
-    if (confirmResult === 'confirm') {  
+        type: 'warning',
+      }
+    );
+    if (confirmResult === 'confirm') {
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
-      var url="/unLoadGlass/downStorage/deleteDownStorageCage?downStorageCageId="+row.id;
+      var url = "/unLoadGlass/downStorage/deleteDownStorageCage";
       console.log(url);
       const response = await request.post(url, {
-        esdId: row.esdId
+        glassId: row.glass_id,
+        state: 9,
+        line: 1001,
+        workingProcedure: '纾ㄨ竟鍓嶇悊鐗囩',
     })
     if (response.code === 200) {
       ElMessage.success(response.message);
-      } else {  
-        // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
+    } else {
+      // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
       ElMessage.error(response.message);
-        // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
-      }  
-    }  
-  } 
-  catch (error) {  
-    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
-    console.error('鍙戠敓閿欒:', error);  
+      // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
+    }
   }  
-};  
+  } 
+  catch (error) {
+  // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
+  console.error('鍙戠敓閿欒:', error);
+}  
+};
 // 浜哄伐涓嬬墖
-const opena = async(row) => {
+const opena = async (row) => {
   try {
-    const confirmResult = await ElMessageBox.confirm(  
-      t('sorter.infor'), 
-      t('sorter.prompt'),  
-      {  
-        confirmButtonText: t('sorter.yes'), 
+    const confirmResult = await ElMessageBox.confirm(
+      t('sorter.infor'),
+      t('sorter.prompt'),
+      {
+        confirmButtonText: t('sorter.yes'),
         cancelButtonText: t('sorter.cancel'),
-        type: 'warning',  
-      } 
-    );  
+        type: 'warning',
+      }
+    );
     if (confirmResult === 'confirm') {
       const response = await request.post("/unLoadGlass/downGlassTask/generateOutGlassTask", {
         glassId: row.glass_id
       })
-    if (response.code === 200) {
-      ElMessage.success(response.message);
-      } else {  
+      if (response.code === 200) {
+        ElMessage.success(response.message);
+      } else {
         // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
-      ElMessage.error(response.message);
+        ElMessage.error(response.message);
         // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
-      }  
-    }  
-  } 
-  catch (error) {  
+      }
+    }
+  }
+  catch (error) {
     // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
-    console.error('鍙戠敓閿欒:', error);  
-  }  
-};  
+    console.error('鍙戠敓閿欒:', error);
+  }
+};
 // const open = async(row) => {
 // const { t } = useI18n();
 //   try {
@@ -184,23 +177,23 @@
 //       }  
 //     }  
 //   } 
-  
-  
+
+
 //   catch (error) {  
 //     // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
 //     console.error('鍙戠敓閿欒:', error);  
 //   }  
 // };   
-const toggleEnableState = async (row) => {  
-  const newState = row.enable_state === 1 ? 0 : 1;  
+const toggleEnableState = async (row) => {
+  const newState = row.enable_state === 1 ? 0 : 1;
   // 鍙戦�佽姹傚埌鍚庣鏇存柊鐘舵�侊紙杩欓噷鐪佺暐浜嗗疄闄呯殑璇锋眰閫昏緫锛�  
-  const response = await request.post('/unLoadGlass/downStorage/updateDownStorageCage', { id: row.id, enableState: newState });  
+  const response = await request.post('/unLoadGlass/downStorage/updateDownStorageCage', { id: row.id, enableState: newState });
   if (response.code === 200) {
-      ElMessage.success(response.message);
-      } else {  
-      ElMessage.error(response.message);
-      }  
-  row.enable_state = newState;  
+    ElMessage.success(response.message);
+  } else {
+    ElMessage.error(response.message);
+  }
+  row.enable_state = newState;
 };
 
 
@@ -210,48 +203,60 @@
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
-  tableData.value = data.params2[0]
-  // tableData.splice(0, tableData.length, ...data.params2[0]);
+  tableData.splice(0, tableData.length, ...data.params2[0]);
   // tableData.value = data.params[0]
   // adjustedRects.value = data.EdgStorageCageinfos[0]
-  adjustedRects.value = data.params2[0].map(rect => ({  
-            ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-            width: rect.width * 0.5 ,
-            id: rect.id * 10,
-          })); 
+  adjustedRects.value = data.params2[0].map(rect => ({
+    ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
+    width: rect.width * 0.5,
+    id: rect.id * 10,
+  }));
 
 };
 onMounted(() => {
   socket = initializeWebSocket(socketUrl, handleMessage);
 });
-  onUnmounted(() => {
-    if (socket) {
+onUnmounted(() => {
+  if (socket) {
     closeWebSocket(socket);
-    }
-    });
+  }
+});
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
 <style scoped>
- 
-#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
-#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
-#dialog-footer{
+#dt {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 100px;
+}
+
+#dta {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 80%;
+}
+
+#dialog-footer {
   text-align: center;
   margin-top: -15px;
 }
-#message{
+
+#message {
   text-align: center;
   align-items: center;
   color: black;
-   width: 200px;
-   height: 100px;
-   background-color: #337ecc;
-   margin-left: 28%;
+  width: 200px;
+  height: 100px;
+  background-color: #337ecc;
+  margin-left: 28%;
 }
-.awatch{
+
+.awatch {
   height: 460px;
   width: 1500px;
   max-width: 100%;
diff --git a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
index c41ce56..7a0d18c 100644
--- a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
+++ b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
@@ -4,7 +4,7 @@
       <div
         slot="header"
         class="clearfix"
-        style="display: flex; align-items: center"
+        style="display: flex; align-items: center;margin-top: -20px;"
       >
         <!-- 宸︿晶鎸夐挳缁� -->
         <div>
@@ -16,9 +16,8 @@
           >
           <el-button type="success" size="mini">鍚婅浣嶅叆搴�</el-button>
         </div>
-
         <!-- 鍙充晶閫夋嫨妗� -->
-        <el-form-item style="margin-top: 15px; width: 150px">
+        <el-form-item style="margin-top: 15px; width: 150px;margin-left: 10px;">
           <el-select v-model="formData2.dzw" placeholder="璇烽�夋嫨鍚婅浣�">
             <el-option label="鍚婅浣�1" value="鍚婅浣�1"></el-option>
             <el-option label="鍚婅浣�2" value="鍚婅浣�2"></el-option>
diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue
index 59982e5..d973668 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: 600px;" v-loading="loading">
+      <el-scrollbar height="550px" width="1200px" style="background-color: #e9e9eb;">
+  <div style="position: relative;">  
     <div  
       v-for="(rect, index) in adjustedRects"  
       :key="rect.glass_id"  
@@ -32,13 +27,13 @@
      <!-- 绠ご -->  
      <!-- <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> 
-  <!-- 鐐瑰嚮寮瑰嚭 -->
+   </div>
+  </el-scrollbar>
   <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;">
           {{ $t('order.dilapidation') }}
@@ -47,15 +42,12 @@
           <el-icon class="el-icon--right"><Upload /></el-icon>
           {{ $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,11 +57,18 @@
 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 adjustedRects = ref([]);
+const raw = ref([]);
+let webSocket: WebSocket | null = null;  
+const totalPages = ref(0);
+const pageSize = ref(1);
+const currentPage = ref(1);
+const disabled = false;
+const size = 'small';
+const rawData = ref([]); 
 // const handleBind = (row) => {
 //   blind.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
 // };
@@ -78,42 +77,6 @@
   currentGlassId.value = glassId;  
   blind.value = true;  
 }  
-// 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 handleDamage = async () => {
   try  {
@@ -121,16 +84,16 @@
     //   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); 
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.msg);
@@ -148,17 +111,17 @@
     //   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); 
+      updateRectStatus(currentGlassId.value, 9); 
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.msg);
@@ -170,41 +133,53 @@
   }
 }
 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  
-        }));
+  if (inputValue.value) {  
+    var url="/cacheGlass/taskCache/cutTerritory?current="+inputValue.value;
+    const response = await request.post(url)
+    if (response.code === 200) {
+      console.log(response.data);
+      
+      const rawRects = response.data[0];
+      rawData.value = response.data;
+      totalPages.value = rawData.value.length;
+      const scaleFactor =  1621.78/6000; 
+      adjustedRects.value = rawRects.map(rect => ({  
+        ...rect,
+        x_axis: (6000 -(rect.x_axis + rect.width)) * scaleFactor,
+        y_axis: rect.y_axis * 0.17,
+        width: rect.width * scaleFactor ,
+        widtha: rect.width ,
+        heighta: rect.height ,
+        height: rect.height * 0.165 ,
+        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);
-//     }
-// }
+  } else{
+    connectWebSocket();
+  } 
+}; 
+const handleCurrentChange = (val: number) => {  
+  currentPage.value = val;
+  const page = currentPage.value - 1
+      const scaleFactor =  1621.78/6000; 
+      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 * 0.17,
+        width: rect.width * scaleFactor ,
+        widtha: rect.width ,
+        heighta: rect.height ,
+        height: rect.height * 0.165 ,
+        glass_state: rect.glass_state
+      }));  
+};
 function getRectColor(state: number): string {  
   switch (state) {  
     case 0:  
@@ -215,12 +190,12 @@
       return '#b3e19d';  
     case 120:  
       return '#f89898';  
-    case 200: 
-      return 'lightblue';  
-    case 201:  
+    case 8: 
+      return '#911005';  
+    case 9:  
       return '#f3d19e';  
-    default:  
-      return '#911005'; // 榛樿棰滆壊  
+    // default:  
+    //   return '#911005'; // 榛樿棰滆壊  
   }  
 } 
 // 鏇存柊鐭╁舰鐘舵��  
@@ -231,38 +206,45 @@
     }  
   });  
 }
-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 => ({  
+    webSocket = new WebSocket(socketUrl);  
+    webSocket.onmessage = (event) => {  
+      const data = JSON.parse(event.data);   
+      const scaleFactor =  1621.78/6000; 
+        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 ,
+        x_axis: (6000 -(rect.x_axis + rect.width)) * scaleFactor,
+        y_axis: rect.y_axis * 0.17,
+        width: rect.width * scaleFactor ,
         widtha: rect.width ,
         heighta: rect.height ,
-        height:( rect.height*100) * 0.002 ,
+        height: rect.height * 0.165 ,
         glass_state: rect.glass_state
-      }));  
-};
-onMounted(() => {
-  socket = initializeWebSocket(socketUrl, handleMessage);
-});
-  onUnmounted(() => {
-    if (socket) {
-    closeWebSocket(socket);
-    }
-    });
-  watchEffect(() => {  
-  if (inputValue.value === '') {  
-    handleMessage();  
+      }));
+    };  
+    webSocket.onerror = (error) => {  
+      console.error('WebSocket Error:', error);  
+    };
+    webSocket.onclose = () => {  
+      console.log('WebSocket Connection Closed');  
+      // 鍙互閫夋嫨閲嶆柊杩炴帴  
+    };  
   }  
-}); 
-onBeforeUnmount(() => {
-  console.log("鍏抽棴浜�")
-  closeWebSocket();
+};  
+  
+onMounted(() => {  
+  // 鍒濆鏃讹紝濡傛灉杈撳叆妗嗕负绌猴紝鍒欒繛鎺ebSocket  
+  if (!inputValue.value) {  
+    connectWebSocket();  
+  }  
+});  
+  
+onUnmounted(() => {  
+  if (webSocket) {  
+    webSocket.close();  
+  }  
 });
 </script>  
   
@@ -273,11 +255,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; /* 纭繚绠ご鍙互鐩稿浜庣煩褰㈠畾浣� */  
   /* 鍏朵粬鏍峰紡 */  
diff --git a/UI-Project/src/views/LoginView.vue b/UI-Project/src/views/LoginView.vue
index 7f7bb7d..6431f47 100644
--- a/UI-Project/src/views/LoginView.vue
+++ b/UI-Project/src/views/LoginView.vue
@@ -61,12 +61,10 @@
           .then((res) => {
             if (res['code'] == 200) {
               store.$patch({user: res.data})
-              console.log(res.data)
- 
               router.push('/main')
               ElMessage.success(t('login.loginSuccessful'))
             } else {
-              ElMessage.error(res['msg'])
+              // ElMessage.error(res['msg'])
               store.$patch({
               user: null,
               })
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
index f0b25de..1b332f2 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -3,7 +3,7 @@
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
 import request from "@/utils/request"
-import { ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue';  
+import { ref, onMounted, onBeforeUnmount } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
@@ -22,13 +22,12 @@
 const adjustedRectsb = ref([]);
 const currentGlassId = ref(null);
 const currenttemperingFeedSequence = ref(null);
-let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
 const handleMessage = (data) => {
 // 杩涚倝涓�
   if(data.intoGlass!=null){
     adjustedRects1.value =  data.intoGlass[0].map(rect => {  
-      console.log( adjustedRects1.value);
+      const scaleFactor =  794.67/5087; 
         let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
         let newX = rect.yCoordinate; 
       if (rect.width < rect.height) {
@@ -39,39 +38,26 @@
         heighta = rect.height;
       }
       if (rect.angle === 0) {  
-    adjustedWidth = widtha * 0.12;
+    adjustedWidth = widtha * scaleFactor;
     adjustedHeight = heighta * 0.1;
-    adjustedWidtha = widtha;  
-    adjustedHeighta = heighta;  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;   
     newX = 5087 - (rect.yCoordinate + widtha); 
     } else {  
-    adjustedWidth = heighta * 0.12;  
+    adjustedWidth = heighta * scaleFactor;  
     adjustedHeight = widtha * 0.1;  
-    adjustedWidtha = heighta;  
-    adjustedHeighta = widtha;  
-    newX = 5087 - (rect.yCoordinate + heighta);  
-  }  
-  // if (rect.angle === 0) {  
-  //         adjustedWidth = heighta * 0.12;  
-  //         adjustedHeight = widtha * 0.1;  
-  //         adjustedWidtha = heighta;  
-  //         adjustedHeighta = widtha;  
-  //         newX = 5087 - (rect.xCoordinate + heighta); 
-  //       } else {  
-  //         adjustedWidth = widtha * 0.12;  
-  //         adjustedHeight = heighta * 0.1;  
-  //         adjustedWidtha = widtha;  
-  //         adjustedHeighta = heighta;  
-  //         newX = 5087 - (rect.xCoordinate + widtha); 
-  //       }  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;  
+    newX = 5087 - (rect.yCoordinate + heighta); 
+  } 
         return {  
         ...rect, 
-        xcoordinate: newX * 0.12,
+        xcoordinate: newX * scaleFactor,
         ycoordinate: rect.xCoordinate * 0.1,
         width: adjustedWidth,  
         height: adjustedHeight,  
-        widtha: adjustedWidtha, 
-        heighta: adjustedHeighta,
+        widtha: rect.width, 
+        heighta: rect.height,
       };  
       });
       }else{
@@ -79,7 +65,7 @@
       }
   if(data.intoGlass2!=null){
     adjustedRects2.value =  data.intoGlass2[0].map(rect => {  
-      console.log( adjustedRects2.value);
+      const scaleFactor =  794.67/5087; 
       let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
       let newX = rect.yCoordinate; 
       if (rect.width < rect.height) {
@@ -90,39 +76,26 @@
         heighta = rect.height;
       }
       if (rect.angle === 0) {  
-    adjustedWidth = widtha * 0.12;
+    adjustedWidth = widtha * scaleFactor;
     adjustedHeight = heighta * 0.1;
-    adjustedWidtha = widtha;  
-    adjustedHeighta = heighta;  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;  
     newX = 5087 - (rect.yCoordinate + widtha); 
     } else {  
-    adjustedWidth = heighta * 0.12;  
+    adjustedWidth = heighta * scaleFactor;  
     adjustedHeight = widtha * 0.1;  
-    adjustedWidtha = heighta;  
-    adjustedHeighta = widtha;  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;  
     newX = 5087 - (rect.yCoordinate + heighta);  
-  }  
-  //     if (rect.angle === 0) {  
-  //         adjustedWidth = heighta * 0.12;  
-  //         adjustedHeight = widtha * 0.1;  
-  //         adjustedWidtha = heighta;  
-  //         adjustedHeighta = widtha;  
-  //         newX = 5087 - (rect.xCoordinate + heighta); 
-  // } else {  
-  //         adjustedWidth = widtha * 0.12;  
-  //         adjustedHeight = heighta * 0.1;  
-  //         adjustedWidtha = widtha;  
-  //         adjustedHeighta = heighta;  
-  //         newX = 5087 - (rect.xCoordinate + widtha); 
-  // }  
+  } 
         return {  
         ...rect, 
-        xcoordinate: newX * 0.12,
+        xcoordinate: newX * scaleFactor,
         ycoordinate: rect.xCoordinate * 0.1,
         width: adjustedWidth,  
         height: adjustedHeight,  
-        widtha: adjustedWidtha, 
-        heighta: adjustedHeighta,
+        widtha: rect.width, 
+        heighta: rect.height,
       };  
       });
       }else{
@@ -131,6 +104,7 @@
   // 杩涚倝鍓�
   if(data.waitingGlass!=null){
     adjustedRectsa.value = data.waitingGlass[0].map(rect => {  
+      const scaleFactor =  1621.78/5190; 
   let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; 
   let newX = rect.yCoordinate; 
       if (rect.width < rect.height) {
@@ -141,26 +115,26 @@
         heighta = rect.height;
       }
   if (rect.angle === 0) {  
-    adjustedWidth = widtha * 0.24;  
+    adjustedWidth = widtha * scaleFactor;  
     adjustedHeight = heighta * 0.16;
-    adjustedWidtha = widtha;  
-    adjustedHeighta = heighta;  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;  
     newX = 5190 - (rect.yCoordinate + widtha); 
     } else {  
-    adjustedWidth = heighta * 0.24;  
+    adjustedWidth = heighta * scaleFactor;  
     adjustedHeight = widtha * 0.16;  
-    adjustedWidtha = heighta;  
-    adjustedHeighta = widtha;  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;  
     newX = 5190 - (rect.yCoordinate + heighta);  
   }  
   return {  
     ...rect, 
-    x: newX * 0.24,  
+    x: newX * scaleFactor,  
     y: rect.xCoordinate * 0.16,  
     width: adjustedWidth,  
     height: adjustedHeight,  
-    widtha: adjustedWidtha, 
-    heighta: adjustedHeighta,
+    widtha: rect.width, 
+    heighta: rect.height,
   };  
 });
   }else{
@@ -169,7 +143,8 @@
     // 宸插嚭鐐�
   if(data.outGlass!=null){
     adjustedRectsb.value = data.outGlass[0].map(rect => {  
-  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
+      const scaleFactor =  1621.78/5190; 
+      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
   let newX = rect.yCoordinate; 
       if (rect.width < rect.height) {
         widtha = rect.height;
@@ -179,26 +154,26 @@
         heighta = rect.height;
       }
   if (rect.angle === 0) {  
-    adjustedWidth = widtha * 0.24;  
+    adjustedWidth = widtha * scaleFactor;  
     adjustedHeight = heighta * 0.16;  
-    adjustedWidtha = widtha;  
-    adjustedHeighta = heighta;  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;  
     // newX = 5190 - (rect.yCoordinate + widtha); 
   } else {  
-    adjustedWidth = heighta * 0.24;  
+    adjustedWidth = heighta * scaleFactor;  
     adjustedHeight = widtha * 0.16;  
-    adjustedWidtha = heighta;  
-    adjustedHeighta = widtha;  
+    // adjustedWidtha = heighta;  
+    // adjustedHeighta = widtha;  
     // newX = 5190 - (rect.yCoordinate + heighta);  
   }  
   return {  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        x: newX * 0.24,
+        x: newX * scaleFactor,
         y: rect.xCoordinate * 0.16,
         width: adjustedWidth,  
         height: adjustedHeight,  
-        widtha: adjustedWidtha, 
-        heighta: adjustedHeighta,
+        widtha: rect.width, 
+        heighta: rect.height,
   };  
 });
   }else{
@@ -206,13 +181,8 @@
       }
 };
 onMounted(() => {
-  socket = initializeWebSocket(socketUrl, handleMessage);
+  initializeWebSocket(socketUrl, handleMessage);
 });
-  onUnmounted(() => {
-    if (socket) {
-    closeWebSocket(socket);
-    }
-    });
 function updateRectColors() {  
   adjustedRectsa.value.forEach(rect => {  
     if (rect.glassId === glassId) {  
@@ -408,7 +378,7 @@
    </div>
    </el-card>
 </div>
-
+ 
 <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;">
         <el-button type="warning" plain :icon="Delete" @click="handleDamage"  style="width: 140px;margin-left: 10px;">
           {{ $t('order.dilapidation') }}
@@ -422,8 +392,8 @@
   background-color:  #529b2e;
   text-align: center;
   display: inline-block;
-	/* align-items:center; */
-	/* justify-content:center; */
+    /* align-items:center; */
+    /* justify-content:center; */
   margin-left: 20px;
 }
 #boxb{
@@ -432,16 +402,16 @@
   /* display:flex; */
   text-align: center;
   display: inline-block;
-	align-items:center;
-	justify-content:center;
+    align-items:center;
+    justify-content:center;
   margin-left: 20px;
 }
 #box{
   border: 1px solid black;
   background-color:  #337ecc;
   display:flex;
-	align-items:center;
-	justify-content:center;
+    align-items:center;
+    justify-content:center;
 }
 #home-card {
     width: 100%;
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
index 5164c6a..8f28ec9 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
@@ -36,7 +36,8 @@
   // 鏇存柊 tableData 鐨勬暟鎹�
   if(data.overGlass!=null){
     adjustedRects.value =  data.overGlass[0].map(rect => {  
-  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;
+      const scaleFactor =  1621.78/5190; 
+      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;
       let newX = rect.yCoordinate; 
       if (rect.width < rect.height) {
         widtha = rect.height;
@@ -46,34 +47,34 @@
         heighta = rect.height;
       }
     if (rect.angle === 0) {  
-    adjustedWidth = widtha * 0.24;  
+    adjustedWidth = widtha * scaleFactor;  
     adjustedHeight = heighta * 0.16;  
-    adjustedWidtha = widtha;  
-    adjustedHeighta = heighta;  
+    // adjustedWidtha = widtha;  
+    // adjustedHeighta = heighta;  
     // newX = 5190 - (rect.yCoordinate + rect.width); 
   } else {  
-    adjustedWidth = heighta * 0.24;  
+    adjustedWidth = heighta * scaleFactor;  
     adjustedHeight = widtha * 0.16;  
-    adjustedWidtha = heighta;  
-    adjustedHeighta = widtha;  
+    // adjustedWidtha = heighta;  
+    // adjustedHeighta = widtha;  
     // newX = 5190 - (rect.yCoordinate + rect.height);  
   }  
   return {  
     ...rect, 
-    xcoordinate: newX * 0.24, 
+    xcoordinate: newX * scaleFactor, 
     ycoordinate: rect.xCoordinate * 0.16,
     width: adjustedWidth,  
     height: adjustedHeight,  
-    widtha: adjustedWidtha, 
-    heighta: adjustedHeighta,
+    widtha: rect.width, 
+    heighta: rect.height,
   };  
 });
   }
 };
 function updateRectColors() {  
-  adjustedRectsa.value.forEach(rect => {  
+  adjustedRects.value.forEach(rect => {  
     if (rect.glassId === glassId) {  
-      rect.state = 5;
+      rect.state = 8;
     }
   });  
 }  
@@ -83,7 +84,7 @@
       return '#eebe77';  
     case 4:  
       return '#CD6090';
-    case 5:  
+    case 8:  
       return '#911005';  
   }  
 }
@@ -99,7 +100,7 @@
     glassId: currentGlassId.value,
     // temperingFeedSequence: currenttemperingFeedSequence.value,
     line: 4001,
-    status: 2,
+    status: 8,
     workingProcedure: '閽㈠寲',
     })
     if (response.code == 200) {
diff --git a/UI-Project/src/views/ReportWork/reportWork.vue b/UI-Project/src/views/ReportWork/reportWork.vue
index 67b04ab..7b6a6e9 100644
--- a/UI-Project/src/views/ReportWork/reportWork.vue
+++ b/UI-Project/src/views/ReportWork/reportWork.vue
@@ -18,9 +18,9 @@
     </el-select>
     <el-select v-model="report.workingProcedure" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;" >
       <el-option :label="$t('reportmanage.all')" value="0"></el-option>
-      <el-option :label="$t('reportmanage.incise')" value="1"></el-option>
-      <el-option :label="$t('reportmanage.edging')" value="2"></el-option>
-      <el-option :label="$t('reportmanage.steel')" value="3"></el-option>
+      <el-option :label="$t('reportmanage.incise')" value="鍒囧壊"></el-option>
+      <el-option :label="$t('reportmanage.edging')" value="纾ㄨ竟"></el-option>
+      <el-option :label="$t('reportmanage.steel')" value="閽㈠寲"></el-option>
     </el-select>
     <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire') }}</el-button>
     <el-button type="success" style="margin-left: 10px;" @click="handleConfirm">{{ $t('reportmanage.signingwork') }}</el-button>
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
index bcbbd2e..ad2298d 100644
--- a/UI-Project/src/views/Returns/returns.vue
+++ b/UI-Project/src/views/Returns/returns.vue
@@ -710,7 +710,7 @@
    
   </div>
     <el-button :disabled="!canSelectProject" style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="dialogFormVisible = true">{{ $t('basicData.selectproject') }}</el-button>
-    <el-button :style="{ backgroundColor: canStartLoading ? 'green' : 'initial',color: canStartLoading ? 'white' : 'black', }" style="margin-top: 5px;margin-left: 20px;"  @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
+    <el-button :disabled="!canSelectProject" :style="{ backgroundColor: canStartLoading ? 'green' : 'initial',color: canStartLoading ? 'white' : 'black', }" style="margin-top: 5px;margin-left: 20px;"  @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
     <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
     <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
     <!-- <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" @click="handleBindb">鍋滄浠诲姟</el-button> -->
@@ -718,7 +718,7 @@
     <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
     <el-table
-    height="150"
+    height="350"
      ref="table" 
      :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
       :data="tableData"
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index 9837905..75c4a83 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -40,7 +40,6 @@
 const adjustedRectsh = ref([]);
 const currentRow = reactive({}); // 褰撳墠琛岀殑鏁版嵁 
 const inputValuesa = reactive({});
-
 const add = ref(false)
 const flowCardId = ref('');
 const gap = ref('');
@@ -76,7 +75,8 @@
 const cell8=ref(true);
 const cell9=ref(true);
 const selectedRow = ref(null); // 瀛樺偍閫変腑鐨勮鏁版嵁  
-
+const temperingtotal = ref(0);
+const glasstotal = ref(0);
     // 褰撳墠椤电爜鍜屾瘡椤垫樉绀虹殑鏉℃暟
     const currentPage = ref(1);
     const itemsPerPage = computed(() => {
@@ -271,7 +271,7 @@
       } 
     ); 
     if (confirmResult === 'confirm') {  
-      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+0, row)
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+8, row)
     if (response.code === 200) {
      tableData.value = response.data;
      ElMessage.success(response.message);
@@ -296,7 +296,7 @@
       } 
     ); 
     if (confirmResult === 'confirm') {  
-      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+1, row)
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+9, row)
     if (response.code === 200) {
      tableData.value = response.data;
      ElMessage.success(response.message);
@@ -346,7 +346,7 @@
       } 
     ); 
     if (confirmResult === 'confirm') {  
-      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+0, row)
+      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+8, row)
     if (response.code === 200) {
       ElMessage.success(response.message);
       } else {  
@@ -397,7 +397,7 @@
       } 
     ); 
     if (confirmResult === 'confirm') {  
-      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+1, row)
+      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+9, row)
     if (response.code === 200) {
       ElMessage.success(response.message);
       } else {  
@@ -525,6 +525,12 @@
     if (response.code == 200) {
       ElMessage.success(response.message);
       tableDatagh.value = response.data
+      temperingtotal.value = response.data.length
+      let totalCount = 0;  
+      response.data.forEach(item => { 
+        totalCount += item.count || 0;
+      });
+      glasstotal.value = totalCount;
     } else {
       ElMessage.error(response.message);
     }
@@ -594,7 +600,10 @@
   // 鏇存柊 tableData 鐨勬暟鎹�
   if(data.bigStorageCageDetailsOutTask!=null){
     tableDatac.value = data.bigStorageCageDetailsOutTask[0]
+    console.log(data.bigStorageCageDetailsOutTask[0])
     adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined);
+    // console.log(data.bigStorageCageDetailsOutTask[0]);
+    
   } else {
     tableDatac.value = '',
     adjusta.value = ''
@@ -620,6 +629,7 @@
    }
 if(data.temperingGlassInfoList!=null){
   tableDatab.value = data.temperingGlassInfoList[0]
+  console.log(tableDatab.value)
 }else{
     tableDatab.value = ''
       }
@@ -770,7 +780,7 @@
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
         <el-table height="100px" ref="table" 
         :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="bigStorageCageOutTask.glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="120" />
+          <el-table-column prop="bigStorageCageOutTask.glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="140" />
           <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" :label="$t('searchOrder.startposition')" min-width="120" />
           <el-table-column prop="bigStorageCageOutTask.endSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" />
           <el-table-column prop="bigStorageCageOutTask.trainNumber" align="center" :label="$t('searchOrder.trips')" min-width="120" />
@@ -780,10 +790,10 @@
             <el-tag type="success" >{{ scope.row.bigStorageCageOutTask.taskState==0? $t('searchOrder.filmenter') : $t('searchOrder.infilm') }}</el-tag>
           </template>
           </el-table-column>
-          <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/>
+          <!-- <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/> -->
           <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="100"/>
           <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="100"/>
-          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120"/>
+          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="140"/>
           <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="150"/>
           <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="140"/>
           <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="100"/>
@@ -793,11 +803,11 @@
           <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100"/>
           <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120"/>
           <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="100"/>
-          <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150">
+          <!-- <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150">
             <template #default="scope">
               <el-button size="mini" type="text" plain @click="finish(scope.row)">{{ $t('searchOrder.completetask') }}</el-button>
             </template>
-        </el-table-column>
+        </el-table-column> -->
         </el-table>
       </div>
     </el-card>
@@ -806,7 +816,7 @@
         <el-table height="100px" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" :label="$t('searchOrder.intoglassid')" min-width="120" />
+          <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" :label="$t('searchOrder.intoglassid')" min-width="140" />
           <el-table-column prop="bigStorageCageFeedTask.targetSlot" align="center" :label="$t('searchOrder.targetlocation')" min-width="120" />
           <!-- <el-table-column prop="task_type" align="center" label="浠诲姟绫诲瀷" min-width="120" />娌℃湁杩斿洖瀛楁 -->
           <el-table-column prop="bigStorageCageFeedTask.taskState" align="center" :label="$t('searchOrder.taskstatus')" min-width="120">
@@ -815,10 +825,10 @@
           </template>
           </el-table-column>
           <el-table-column prop="bigStorageCageFeedTask.line" align="center" :label="$t('searchOrder.line')" min-width="120" />
-          <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/>
+          <!-- <el-table-column prop="id" align="center" :label="$t('searchOrder.tabid')" min-width="150"/>  -->
           <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="100"/>
           <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="100"/>
-          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120"/>
+          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="140"/>
           <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="150"/>
           <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="140"/>
           <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="100"/>
@@ -828,11 +838,11 @@
           <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100"/>
           <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120"/>
           <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="100"/>
-          <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150">
+          <!-- <el-table-column fixed="right" :label="$t('searchOrder.endtask')" align="center" width="150">
             <template #default="scope">
               <el-button size="mini" type="text" plain @click="finish(scope.row)">{{ $t('searchOrder.completetask') }}</el-button>
             </template>
-        </el-table-column>
+        </el-table-column> -->
         </el-table>
       </div>
     </el-card>
@@ -840,7 +850,7 @@
             <div v-for="(item, index) in tableDatae" :key="index" id="occupy">  
                <el-col style="text-align:left;font-weight: bold;">#{{ item.device_id }}</el-col>  
                <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">  
-                 <span>{{ $t('searchOrder.Usage') }}</span><span>{{ item.percentage }}</span>  
+                 <span>{{ $t('searchOrder.Usage') }}</span><span>{{ item.percentage }}%</span>  
                </el-col>  
                <hr style="width:80%;margin: 0 auto;" />  
                <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">  
@@ -1247,7 +1257,7 @@
                 >  
           <!-- <el-table-column prop="menuName" label="浜岀骇鑿滃崟鏍�" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/>   -->
           <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="130"/>  
-          <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="130" />
+          <!-- <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="130" /> -->
           <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="130" />
           <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="80" />
           <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" />
@@ -1343,9 +1353,12 @@
   </div> -->
     <el-table  ref="table" style="margin-top: 20px;height: 500px;"
         :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="id" fixed align="center" :label="$t('searchOrder.sheetID')" min-width="150"/>
-          <el-table-column prop="flowcardId" fixed align="center" :label="$t('searchOrder.processcards')" min-width="120" />
-          <el-table-column prop="glassType" align="center" :label="$t('searchOrder.processcardtype')" min-width="150" />
+          <!-- <el-table-column prop="id" fixed align="center" :label="$t('searchOrder.sheetID')" min-width="150"/>
+            -->
+          <el-table-column prop="glassId" fixed align="center" :label="$t('searchOrder.glassID')" min-width="150"/>
+           
+          <el-table-column prop="flowCardId" fixed align="center" :label="$t('searchOrder.processcards')" min-width="120" />
+          <!-- <el-table-column prop="glassType" align="center" :label="$t('searchOrder.processcardtype')" min-width="150" /> -->
           <el-table-column prop="width" align="center" :label="$t('searchOrder.width')"  min-width="80" />
           <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" />
           <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" />
@@ -1379,16 +1392,36 @@
         </el-tag>  
       </template> 
           </el-table-column>
-          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150">
+          <!-- <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150">
             <template #default="scope">
               <el-button size="mini" type="text" plain @click="brokea(scope.row)">{{ $t('searchOrder.breakage') }}</el-button>
               <el-button size="mini" type="text" plain @click="brokeb(scope.row)">{{ $t('searchOrder.takeout') }}</el-button>
               <el-button size="mini" type="text" plain @click="deletea(scope.row)">{{ $t('searchOrder.delete') }}</el-button>
             </template>
-        </el-table-column>
+        </el-table-column> -->
         </el-table>
 </el-dialog>
 <el-dialog v-model="dialogFormVisiblec" top="5vh" width="85%" :title="$t('searchOrder.temperingqueries')">
+  <div style="margin-bottom: 20px">
+      <el-form>
+        <el-row style="margin-top: -15px;margin-bottom: -2px;">
+          <el-col :span="4">
+              <div id="dt" style="font-size: 15px;">
+              <el-form-item :label="$t('searchOrder.temperingtotal')"  style="width: 14vw">
+                {{ temperingtotal }}
+              </el-form-item>
+              </div>
+          </el-col>
+          <el-col :span="5">
+            <div id="dta" style="font-size: 15px;">
+          <el-form-item :label="$t('searchOrder.glasstotal')" style="width: 14vw">
+                {{ glasstotal }}
+              </el-form-item>
+              </div>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
     <el-table  ref="table" style="margin-top: 20px;height: 500px;"
         :data="tableDatagh" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="engineer_id" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/>
@@ -1420,7 +1453,7 @@
         <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleConfirm">
-          {{ $t('searchOrder.add') }}
+          {{ $t('searchOrder.makesure') }}
         </el-button>
         <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button>
       </div>
diff --git a/UI-Project/src/views/StockBasicData/stockBasicData.vue b/UI-Project/src/views/StockBasicData/stockBasicData.vue
index 5135e96..2e08076 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicData.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -20,20 +20,52 @@
 const requestData = {  
   line: 2001  
 };  
-request.post("/cacheGlass/taskCache/selectEdgTask",{
-  ...requestData,  
+const timeRange = ref([])
+const selectValuesa = reactive([]);
+// request.post("/cacheGlass/taskCache/selectEdgTask",{
+//   ...requestData,  
 
-}).then((res) => {
-          if (res.code == 200) {
+// }).then((res) => {
+//           if (res.code == 200) {
             
-          console.log(res.data);
-          tableData.value = res.data
-          console.log(res.data[0].slot);
-          } else {
-          ElMessage.warning(res.msg)
+//           console.log(res.data);
+//           tableData.value = res.data
+//           console.log(res.data[0].slot);
+//           } else {
+//           ElMessage.warning(res.msg)
         
-          }
-          });
+//           }
+//           });
+
+// 纾ㄨ竟浠诲姟鏌ヨ
+const setEdgGlassInfoRequest = async () => {
+  let celllist=[]
+  let stateList=[]
+  if(selectValuesa[0]!=null&&selectValuesa[0]!='undefined'){
+    if(selectValuesa[0]!=""){
+      celllist=[selectValuesa[0]];
+    }
+  }
+  if(selectValuesa[1]!=null&&selectValuesa[1]!='undefined'){
+    if(selectValuesa[1]!=""){
+      stateList=[selectValuesa[1]];
+    }
+  }
+console.log(timeRange.value[0],timeRange.value[1]);
+  const response = await request.post("/cacheGlass/edgGlassTaskInfo/setEdgGlassInfoRequest", {
+    cellList: celllist,
+    stateList: stateList,
+    beginDate: timeRange.value[0],
+    endDate: timeRange.value[1],
+  })
+  if (response.code === 200) {
+    ElMessage.success(response.message);
+  } else {
+    ElMessage.error(response.message);
+  }
+
+}
+
 // 鐮存崯
  const open = async(row) => { 
   try {
@@ -49,10 +81,10 @@
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
-        glassId: row.GlassId,
-        controlsId: 300,
-        line: 2001,
-        machine: '鍐峰姞宸�',
+        glassId: row.glassId,
+        state: 8,
+        line: row.line,
+        workingProcedure: '鍐峰姞宸�',
     })
     if (response.code === 200) {
       ElMessage.success(response.message);
@@ -62,9 +94,9 @@
         // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
       }  
     }  
-  } catch (error) {  
-    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
-    console.error('鍙戠敓閿欒:', error);  
+  } catch (error) { 
+    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑 
+    console.error('鍙戠敓閿欒:', error); 
   }  
 };  
 // 鎷胯蛋 
@@ -82,10 +114,10 @@
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
-        glassId: row.GlassId,
-        controlsId: 301,
-        line: 2001,
-        machine: '鍐峰姞宸�',
+        glassId: row.glassId,
+        state: 9,
+        line: row.line,
+        workingProcedure: '鍐峰姞宸�',
     })
     if (response.code === 200) {
       ElMessage.success(response.message);
@@ -105,7 +137,7 @@
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
-  tableData.value = data.EdgTasks1[0]
+  tableData.value = data.edgTasks[0]
 };
 onMounted(() => {
   socket = initializeWebSocket(socketUrl, handleMessage);
@@ -123,17 +155,42 @@
 <template>
   <div>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
+      <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('璇烽�夋嫨绾胯矾')" clearable style="margin-left: 20px;margin-bottom: 10px;">
+            <el-option label="纾ㄨ竟涓�绾�" value="2001"></el-option>
+            <el-option label="纾ㄨ竟浜岀嚎" value="2002"></el-option>
+          </el-select>
+
+          <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('璇烽�夋嫨鐘舵��')" clearable style="margin-left: 20px;margin-bottom: 10px;" >
+            <el-option label="鏈(杈�" value="0"></el-option>
+            <el-option label="纾ㄨ竟涓�" value="1"></el-option>
+            <el-option label="宸茬(杈�" value="2"></el-option>
+          </el-select>
+          <span class="demonstration" style="margin-left: 20px;margin-bottom: 10px;">鏃堕棿娈�</span>
+            <el-date-picker v-model="timeRange" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�"  style="margin-left: 20px;margin-bottom: 10px;" value-format = "YYYY-MM-DD hh:mm:ss"
+            
+              end-placeholder="缁撴潫鏃ユ湡">
+            </el-date-picker>
+          <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="setEdgGlassInfoRequest()">{{
+        $t('reportmanage.inquire')
+      }}</el-button>
+
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="240" ref="table" 
+        <el-table height="750" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" />
-          <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" />
-          <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" />
-          <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
-          <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" />
-          <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" />
-          <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" />
+        <el-table-column prop="glassId" align="center" :label="$t('workOrder.glassID')" min-width="180" />
+          <el-table-column prop="width" align="center" :label="$t('workOrder.width')" min-width="120" />
+          <el-table-column prop="height" align="center" :label="$t('workOrder.height')" min-width="80" />
+          <el-table-column prop="thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
+          <el-table-column prop="glassType" align="center" :label="$t('workOrder.glasstype')" min-width="120" />
+          <el-table-column prop="line" align="center" :label="$t('workOrder.line')" min-width="120" />
+          <el-table-column prop="status" :label="$t('workOrder.status')" align="center" width="200">
+            <template #default="scope">
+              {{ scope.row.status==0?"鏈(杈�":scope.row.status==1?"纾ㄨ竟涓�":"宸茬(杈�" }}
+            </template>
+        </el-table-column>
+
+
           <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200">
             <template #default="scope">
               <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button>
diff --git a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
index 57e6567..aef4c24 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
@@ -20,20 +20,20 @@
 const requestData = {  
   line: 2002
 };  
-request.post("/cacheGlass/taskCache/selectEdgTask",{
-  ...requestData,  
+// request.post("/cacheGlass/taskCache/selectEdgTask",{
+//   ...requestData,  
 
-}).then((res) => {
-          if (res.code == 200) {
+// }).then((res) => {
+//           if (res.code == 200) {
             
-          console.log(res.data);
-          tableData.value = res.data
-          console.log(res.data[0].slot);
-          } else {
-          ElMessage.warning(res.msg)
+//           console.log(res.data);
+//           tableData.value = res.data
+//           console.log(res.data[0].slot);
+//           } else {
+//           ElMessage.warning(res.msg)
         
-          }
-          });
+//           }
+//           });
 // 鐮存崯
  const open = async(row) => {  
   try {
@@ -49,8 +49,8 @@
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
-        glassId: row.GlassId,
-        controlsId: 300,
+        glassId: row.glass_id,
+        controlsId: 8,
         line: 2002,
         machine: '鍐峰姞宸�',
     })
@@ -82,8 +82,8 @@
     if (confirmResult === 'confirm') {  
       // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
       const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
-        glassId: row.GlassId,
-        controlsId: 301,
+        glassId: row.glass_id,
+        controlsId: 9,
         line: 2002,
         machine: '鍐峰姞宸�',
     })
@@ -128,13 +128,11 @@
         <el-table height="240" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" />
-          <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" />
-          <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" />
-          <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
-          <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" />
-          <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" />
-          <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" />
+          <el-table-column prop="glass_id" align="center" :label="$t('workOrder.glassID')" min-width="180" />
+          <el-table-column prop="width" align="center" :label="$t('workOrder.width')" min-width="120" />
+          <el-table-column prop="height" align="center" :label="$t('workOrder.height')" min-width="80" />
+          <el-table-column prop="thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
+          <el-table-column prop="glass_type" align="center" :label="$t('workOrder.glasstype')" min-width="120" />
           <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200">
             <template #default="scope">
               <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button>
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindication.vue b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
index 06aa4d0..e3d52c3 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindication.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -30,10 +30,8 @@
     </div>
   </div>
 </template>
-
 <script  setup>
 import { ref, watchEffect ,onMounted,onUnmounted} from 'vue';
-
 import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
@@ -44,71 +42,58 @@
 const racks = ref([
   { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456',downGlassInfoList:"" } },
  
+  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} },
+
   { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678',downGlassInfoList:"" } },
- 
-  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} }
+
   
 ]);
-
 watchEffect(() => {
   // 瑙﹀彂鏁版嵁鍙樺寲鏃堕噸鏂版覆鏌�
 });
-
-
 const calculateItemXPosition = (rack, item, index) => {
   if (index === 0 ) {
     return rack.x;
   } else if (index === 1 ) {
-    return rack.x + rack.width - item.width;
-  } else {
     return rack.x + (rack.width - item.width) / 2;
+  } else {
+    return rack.x + rack.width - item.width;
   }
 };
-
 const calculateItemYPosition = (rack, item, index) => {
   if (index === 0 ) {
     return rack.y + (rack.height - item.height) / 2;
   } else if (index === 1) {
-    return rack.y + (rack.height - item.height) / 2;
-  } else {
     return rack.y + rack.height - item.height;
+  } else {
+    return rack.y + (rack.height - item.height) / 2;
   }
 };
-
-
 const fetchFlowCardId = async () => {
   try {
     const response = await request.get('unLoadGlass/downWorkStation/getwo');
-    
     if (response.code === 200) {
       console.log(response); 
       // 閬嶅巻鍝嶅簲鏁版嵁骞舵浛鎹acks鏁扮粍涓殑item灞炴��
       response.data.forEach((itemData, index) => {
   if (index < racks.value.length) {
     const rack = racks.value[index];
-    const newItem = {
+      rack.fillColor = itemData.item.fullCardColor === 'red' ? '#911005' : '#6a6da9';
+      const newItem = {
       content: itemData.item.content,
       fillColor: itemData.item.fillColor,
       width: itemData.item.width === 0 ? "" : 10,
       height: itemData.item.height === 0 ? "" : 90,
       downGlassInfoList:itemData.item.downGlassInfoList
     };
-
-    if (index === 2 && itemData.item.width > 0) {
+    if (index === 1 && itemData.item.width > 0) {
       newItem.width = 100;
       newItem.height = 20;
     }
-
     rack.item = newItem;
-
     console.log(racks.value); // 鎵撳嵃鏇存柊鍚庣殑 racks 鍊�
   }
 });
-
-
-
-      
-     
     } else {
       ElMessage.error(response.msg);
     }
@@ -121,28 +106,23 @@
 //const socketUrl = `ws://${WebSocketHost}:88/api/unLoadGlass/api/talk/unloadglass2`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
-
   // 鏇存柊 tableData 鐨勬暟鎹�
-
   data.glassinfo[0].forEach((itemData, index) => {
   if (index < racks.value.length) {
     const rack = racks.value[index];
-    const newItem = {
+      rack.fillColor = itemData.item.fullCardColor === 'red' ? '#911005' : '#6a6da9';
+      const newItem = {
       content: itemData.item.content,
       fillColor: itemData.item.fillColor,
       width: itemData.item.width === 0 ? "" : 10,
       height: itemData.item.height === 0 ? "" : 90,
       downGlassInfoList:itemData.item.downGlassInfoList
     };
-
-    if (index === 2 && itemData.item.width > 0) {
+    if (index === 1 && itemData.item.width > 0) {
       newItem.width = 100;
       newItem.height = 20;
     }
-
     rack.item = newItem;
-
-
    // console.log("鏄剧ず鍥�1",racks.value); // 鎵撳嵃鏇存柊鍚庣殑 racks 鍊�
   }
 });
@@ -169,9 +149,7 @@
       <td>${info.height}</td>
     </tr>`;
   });
-
   tableContent += '</table>';
-
   Swal.fire({
     // title: '鐜荤拑淇℃伅',
     title: t('reportWork.glassinformation'),
@@ -181,8 +159,6 @@
     }
   });
 };
-
-
     const showRectInfo = (rack) => {
       const content = rack.item.content;
       console.log(rack.item.downGlassInfoList[0].flowCardId)
@@ -191,14 +167,9 @@
     const downGlassInfoList = rack.item.downGlassInfoList;
       console.log(downGlassInfoList)
       showCustomAlert(downGlassInfoList);
-
    }
- 
     };
-
-
 </script>
-
 <style scoped>
 .glass-rack {
   /* margin-left: 10px; */
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
index 9d4fb7a..1817bb6 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -30,10 +30,8 @@
     </div>
   </div>
 </template>
-
 <script setup>
 import { ref, watchEffect ,onMounted,onUnmounted} from 'vue';
-
 import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
@@ -44,9 +42,9 @@
 const racks = ref([
   { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
  
+  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } },
+  
   { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678' } },
- 
-  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
   
 ]);
 
@@ -58,9 +56,9 @@
   if (index === 0) {
     return rack.x;
   } else if (index === 1) {
-    return rack.x + rack.width - item.width;
-  } else {
     return rack.x + (rack.width - item.width) / 2;
+  } else {
+    return rack.x + rack.width - item.width;
   }
 };
 
@@ -68,9 +66,9 @@
   if (index === 0) {
     return rack.y + (rack.height - item.height) / 2;
   } else if (index === 1) {
-    return rack.y + (rack.height - item.height) / 2;
-  } else {
     return rack.y + rack.height - item.height;
+  } else {
+    return rack.y + (rack.height - item.height) / 2;
   }
 };
 
@@ -85,14 +83,16 @@
       response.data.forEach((itemData, index) => {
   if (index < racks.value.length) {
     const rack = racks.value[index];
-    const newItem = {
+      rack.fillColor = itemData.item.fullCardColor === 'red' ? '#911005' : '#6a6da9';
+      const newItem = {
       content: itemData.item.content,
       fillColor: itemData.item.fillColor,
       width: itemData.item.width === 0 ? "" : 10,
       height: itemData.item.height === 0 ? "" : 90
     };
+    console.log(itemData.item.fullCardColor);
 
-    if (index === 2 && itemData.item.width > 0) {
+    if (index === 1 && itemData.item.width > 0) {
       newItem.width = 100;
       newItem.height = 20;
     }
@@ -125,7 +125,8 @@
   data.glassinfo2[0].forEach((itemData, index) => {
   if (index < racks.value.length) {
     const rack = racks.value[index];
-    const newItem = {
+      rack.fillColor = itemData.item.fullCardColor === 'red' ? '#911005' : '#6a6da9';
+      const newItem = {
       content: itemData.item.content,
       fillColor: itemData.item.fillColor,
       width: itemData.item.width === 0 ? "" : 10,
@@ -133,7 +134,7 @@
       downGlassInfoList:itemData.item.downGlassInfoList
     };
 
-    if (index === 2 && itemData.item.width > 0) {
+    if (index === 1 && itemData.item.width > 0) {
       newItem.width = 100;
       newItem.height = 20;
     }
@@ -178,7 +179,6 @@
     }
   });
 };
-
 
     const showRectInfo = (rack) => {
       const content = rack.item.content;
diff --git a/UI-Project/src/views/UnLoadGlass/PrintFlow.vue b/UI-Project/src/views/UnLoadGlass/PrintFlow.vue
new file mode 100644
index 0000000..235e147
--- /dev/null
+++ b/UI-Project/src/views/UnLoadGlass/PrintFlow.vue
@@ -0,0 +1,444 @@
+<script setup>
+import { useI18n } from 'vue-i18n'
+  const { t } = useI18n()
+  let language = ref(localStorage.getItem('lang') || 'zh')
+import {Search} from "@element-plus/icons-vue";
+import {useRouter} from "vue-router"
+const router = useRouter()
+import request from "@/utils/request"
+import { WebSocketHost ,host} from '@/utils/constants'
+import { ref, onMounted , onBeforeUnmount, reactive, computed,onUnmounted } from "vue";
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
+import { ElMessage, ElMessageBox } from 'element-plus'
+import companyInfo from "@/lang/companyInfo";
+import QRCode from "qrcode";
+
+
+const company = companyInfo()
+const printMerge = null
+let props = defineProps({
+  printFlowCardId: null,
+  printLayer: null,
+})
+let produceList = ref([])
+const handleGetQRCode = async () => {
+  for (let i = 0; i < produceList.value.length; i++) {
+    const technologyNumber = produceList.value[i].detail[0].technologyNumber.toString(); // 杞崲涓哄瓧绗︿覆浠ヤ究澶勭悊姣忎釜瀛楃
+    produceList.value[i].detail[0]["qrcodeList"] = []; // 鍒濆鍖栦竴涓┖鏁扮粍鐢ㄦ潵瀛樺偍 QR Code
+
+    for (let j = 0; j < technologyNumber.length; j++) {
+      const processId = produceList.value[i].detail[0].process_id;
+      const url = `${processId}/${technologyNumber[j]}`;
+
+      // 鐢熸垚 QR Code 骞跺瓨鍌ㄥ埌鏁扮粍涓�
+      const qrcodeData = await QRCode.toDataURL(url);
+      produceList.value[i].detail[0]["qrcodeList"].push({
+        qrcode: qrcodeData,
+        technologyNumber: technologyNumber[j]
+      });
+
+    }
+  }
+};
+
+
+//鏍规嵁杈撳叆鐨勬暟閲忛噸鏂版眹鎬�
+const handleSummary = () => {
+  for (let i = 0; i < produceList.value.length; i++) {
+    //鏁伴噺
+    let totalQuantity = 0;
+    //闈㈢Н
+    let totalArea = 0;
+    //閲嶉噺
+    let totalWeight = 0;
+    // 瀵规瘡涓泦鍚堜腑鐨� detailList 杩涜璁$畻
+    produceList.value[i].detailList.forEach(collection => {
+      totalQuantity += collection.quantity * 1;
+      //姣忎釜搴忓彿闈㈢Н
+      collection.total_area = parseFloat((collection.width * collection.height * collection.quantity / 1000000).toFixed(2))
+      totalArea += collection.total_area * 1;
+      totalWeight += collection.width * collection.height * collection.quantity / 1000000 * collection.separation * 2.5 * 1;
+      //姣忎釜搴忓彿鍛ㄩ暱
+      collection.perimeter = parseFloat(((collection.width * 2 + collection.height * 2) * collection.quantity / 1000).toFixed(3))
+    });
+    // 杈撳嚭姣忎釜闆嗗悎涓殑鎬绘暟閲�
+    produceList.value[i].detail[0].quantity = totalQuantity
+    produceList.value[i].detail[0].gross_area = totalArea
+    produceList.value[i].detail[0].weight = totalWeight
+  }
+}
+
+
+// const printFlowCard = () => {
+//   // 闇�瑕佹墦鍗扮殑灞�閮ㄥ尯鍩熻祴浜�"print-wrap"鐨刬d
+//   let el = document.getElementById("printFlowCard");
+//   let doc = document;
+//   let body = doc.body || doc.getElementsByTagName("body")[0];
+//   let printId = "print-" + Date.now();
+
+//   // 鍒涘缓鏃犲壇浣滅敤鐨勬墦鍗板鍣�(鍥犱笉纭畾椤甸潰鐨勬墦鍗板厓绱犳湁鏃犲叾瀹冩牱寮�)
+//   let content = doc.createElement("div");
+//   content.id = printId;
+
+//   // 鏍峰紡鎺у埗涓庢墦鍗版棤鍏崇殑鍏冪礌闅愯棌
+//   let style = doc.createElement("style");
+//   style.innerHTML =
+//       "body>#" +
+//       printId +
+//       "{display:none}@media print{" +
+//       "@page {" +
+//       "    size: auto; " +
+//       "    margin: 5mm 5mm 5mm 5mm; " +
+//       "  }body>:not(#" +
+//       printId +
+//       "){display:none !important}body>#" +
+//       printId +
+//       "{display:block;padding-top:1px}}";
+//   //
+//   content.innerHTML = el.outerHTML;
+//   // // console.log("el.outerHTML", el.outerHTML);
+//   body.appendChild(style);
+
+//   // 涓巗tyle鍏冪礌璁剧疆鐨勬牱寮忕浉閰嶅悎
+//   // 鎶婃墦鍗板唴瀹圭殑鍏冪礌娣诲姞鍒癰ody(浣滀负body鐨勫瓙鍏冪礌锛屽彲鐢╞ody鐨勫瓙閫夋嫨鍣� '>' 鎺у埗鎵撳嵃鏍峰紡)
+//   body.appendChild(content);
+//   setTimeout(() => {
+//     window.print();
+//     body.removeChild(content);
+//     body.removeChild(style);
+//   }, 20);
+// }
+
+onMounted(async () => {
+  console.log(props.printFlowCardId,props.printLayer)
+  try {
+    
+    const response = await request.post('/unLoadGlass/downGlassInfo/downGlassPrint',{
+        flowCardId:props.printFlowCardId,
+        layer:props.printLayer
+    });
+    if (response.code == 200) {
+      
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      produceList.value = response.data;
+      ElMessage.success(response.message);
+      for (let j = 0; j < produceList.value.length; j++) {
+            let sumWeight = 0
+            produceList.value[j].detailList.forEach((item, index) => {
+              // 瑙f瀽 separation 瀛楁鐨� JSON 瀛楃涓�
+              let separationObj = JSON.parse(item.separation);
+
+              // 鑾峰彇 thickness 鐨勫師濮嬪��
+              let thicknessValue = separationObj.thickness;
+
+              // 鍘婚櫎 'mm' 鍗曚綅
+              let thicknessWithoutUnit = thicknessValue.replace('mm', '');
+
+              item.separation = thicknessWithoutUnit
+
+              sumWeight += item.width * item.height * item.quantity / 1000000 * item.separation * 2.5 * 1;
+
+            });
+            produceList.value[j].detail[0].weight = sumWeight
+          }
+          handleGetQRCode()
+          handleSummary()
+          // printFlowCard();
+
+          
+      
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.message);
+    }
+  } catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}); 
+</script>
+<template>
+    <div id="printFlowCard">
+    <table v-for="(item,id) in produceList" id="contentTable" :key="id">
+      <thead>
+      <tr v-for="(itemFlow,index) in item.detail" :key="index">
+        <td  v-if="like='1'"  colspan="26">
+          <div style="float: left;"><input style="border: none;font-size: 28px;width: 70px;margin: 5px  "/></div>
+          <div id="bj" style="float: right;font-size: 28px">{{ id + 1 }}</div>
+          <div>{{ company.companyName }}</div>
+          <div>鐢熶骇娴佺▼鍗�</div>
+          <div v-if="itemFlow.technologyNumber!=''" style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumber }} 
+          </div>
+          <div v-else style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumber }} 
+          </div>
+        </td>
+        <td v-else colspan="24">
+          <div style="float: left;"><input style="border: none;font-size: 28px;width: 70px  "/></div>
+          <div id="bj" style="float: right;font-size: 28px">{{ id + 1 }}</div>
+          <div>{{ company.companyName }}</div>
+          <div>鐢熶骇娴佺▼鍗�</div>
+          <div v-if="itemFlow.technologyNumber!=''" style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumber }} 鍏� {{ flowCardCount }} 鏋�
+          </div>
+          <div v-else style="text-align: right;font-weight: bolder">娴佺▼鍗″彿锛� {{
+              itemFlow.process_id
+            }}/{{ itemFlow.technologyNumber }} 鍏� {{ flowCardCount }} 鏋�
+          </div>
+        </td>
+      </tr>
+      <tr v-for="(items,index) in item.detail" :key="index">
+        <td class="tdNowrap">瀹㈡埛鍚嶇О锛�</td>
+        <td colspan="2">{{ items.customer_name }}</td>
+        <td class="tdNowrap">椤圭洰鍚嶇О锛�</td>
+        <td colspan="2">{{ items.project }}</td>
+        <td class="tdNowrap">宸ヨ壓娴佺▼锛�</td>
+        <td colspan="19" v-if="like='1'" style="width: 500px">{{ items.process }}</td>
+        <td colspan="17" v-else style="width: 500px">{{ items.process }}</td>
+      </tr>
+      <tr v-for="(itemTr,index) in item.detail" :key="index">
+        <td class="tdNowrap">纾ㄨ竟绫诲瀷锛�</td>
+        <td colspan="2">{{ itemTr.edging_type }}</td>
+        <td class="tdNowrap">鍗曠墖鍚嶇О锛�</td>
+        <td colspan="2">{{ itemTr.glass_child }}</td>
+        <td class="tdNowrap">浜у搧鍚嶇О锛�</td>
+        <td v-if="like=='1'" colspan="19">{{ itemTr.product_name }}</td>
+        <td v-else colspan="17">{{ itemTr.product_name }}</td>
+      </tr>
+      <tr>
+        <td rowspan='2'>搴忓彿</td>
+        <td rowspan='2'>缂栧彿</td>
+        <td v-if="like!=null" rowspan="2">灏忕墖椤哄簭</td>
+        <td v-else style="display: none;" rowspan="2">灏忕墖椤哄簭</td>
+        <td rowspan='2'>瀹�*楂�</td>
+        <td rowspan='2'>鏁伴噺</td>
+        <td rowspan='2'>闈㈢Н</td>
+        <td rowspan='2'>鍛ㄩ暱</td>
+        <td rowspan='2'>鍗婂緞</td>
+        <td rowspan='2'>澶囨敞</td>
+        <td v-for="(itemPr,index) in item.processList" :key="index" colspan="2">{{ itemPr.process }}</td>
+      </tr>
+      <tr>
+
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+        <td>{{ company.printLabel.printFlowCard.patch }}</td>
+        <td>{{ company.printLabel.printFlowCard.lackOf }}</td>
+      </tr>
+      </thead>
+      <tbody>
+
+      <tr v-for="(itemDatile,index) in item.detailList" :key="index">
+        <td>{{ itemDatile.order_number }}</td>
+        <td>{{ itemDatile.s01Value }}</td>
+        <td v-if="like=='1'">{{ itemDatile.technology_number }}</td>
+        <td v-else style="display: none"></td>
+        <td>{{ itemDatile.child_width }}</td>
+        <td class="item" style="width: 5%;height: 100%;">
+          <!-- <el-input v-model="itemDatile.quantity" style="border: none" @keyup="handleSummary()"></el-input> -->
+          {{ itemDatile.quantity }}
+        </td>
+        <!-- <td class="item" style="width: 5%;height: 100%;">
+          {{ itemDatile.quantity1 }}
+        </td> -->
+        <td>{{ itemDatile.total_area }}</td>
+        <td>{{ itemDatile.perimeter }}</td>
+        <td>{{ itemDatile.bend_radius }}</td>
+        <td>{{ itemDatile.remarks }}</td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+      </tr>
+      </tbody>
+      <tfoot>
+      <tr style="height: 14px">
+        <td v-for="(itemsum,index) in item.detail" :key="index" colspan="26">
+          鏁伴噺锛�
+          <label>{{ itemsum.quantity }}</label>
+          闈㈢Н锛�
+          <label>{{ parseFloat(itemsum.gross_area.toFixed(2)) }}</label>
+          閲嶉噺锛�
+          <label>{{ parseFloat(itemsum.weight.toFixed(2)) }}</label>
+        </td>
+      </tr>
+      <tr v-for="(itemtextarea,index) in item.detail" :key="index">
+        <td v-if="like='1'" colspan="4" rowspan="6" style="width: 480px;height: 100px ">
+          <div style="width: 100%;height: 100%;"><textarea style="height: 99%;width: 99%;border: none;;font-size: 11px">{{itemtextarea.otherRemarks}}</textarea>
+          </div>
+        </td>
+        <td v-else colspan="6" rowspan="2" style="width: 480px;height: 100px ">
+          <!--          <div style="width: 100%;height: 100%"><textarea style="height: 99%;width: 99%;font-size: 11px">{{ itemtextarea.processing_note }}</textarea>-->
+          <!--          </div>-->
+           <div style="width: 100%;height: 100%;"><textarea style="height: 99%;width: 99%;border: none;;font-size: 11px">{{itemtextarea.otherRemarks}}</textarea>
+           </div>
+        </td>
+        <td colspan="2">瀹屽伐绛惧悕</td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+      </tr>
+      <tr>
+        <td colspan="2">鐢熶骇鏃ユ湡</td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+      </tr>
+      <tr>
+        <td colspan="2">璐ㄦ绛惧悕</td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+        <td colspan="2"></td>
+      </tr>
+      <tr v-for="(qrCodeItem,index) in item.detail" :key="index">
+        <td colspan="23">
+          <span style="display: flex;">
+            <span v-for="(qrCodeItems,index) in qrCodeItem.qrcodeList" :key="index" style="display: flex;width: 35%">
+            <div class='qrCode' style="width: 80px;height: 80px;">
+            <img :src=qrCodeItems.qrcode>
+          </div>
+          <span style="float: left;font-weight: bolder">{{
+              qrCodeItem.process_id + "/" + qrCodeItems.technologyNumber
+            }}</span>
+          </span>
+          </span>
+        </td>
+
+      </tr>
+      </tfoot>
+    </table>
+  </div>
+</template>
+<style scoped>
+* {
+  margin: 0;
+  padding: 0;
+  text-align: center;
+}
+
+
+#printFlowCard {
+  text-align: center;
+font-weight: bolder;
+ height: 600px;
+}
+
+#contentTable {
+  border-collapse: collapse;
+  border: 1px solid black;
+  width: 100%;
+}
+
+#contentTable thead {
+  font-size: 13px;
+  font-weight: bolder;
+}
+
+#contentTable thead div {
+  font-size: 15px;
+  font-weight: bolder;
+}
+
+#contentTable tr td {
+  border: 1px solid black;
+  height: 18px;
+  font-weight: bolder;
+}
+
+#contentTable tbody {
+  white-space: nowrap;
+
+}
+
+.tdNowrap {
+  white-space: nowrap;
+
+}
+
+#contentTable tfoot {
+  font-size: 12px;
+  font-weight: bolder;
+}
+
+input{
+  font-weight: bolder;
+}
+
+
+@page {
+  size: auto;  /* auto is the initial value */
+  margin: 10mm 2mm 10mm 1mm;  /* this affects the margin in the printer settings */
+
+}
+
+@media print {
+  table {
+    page-break-before: always;
+    page-break-inside: auto;
+  }
+
+ #contentTable thead {
+   display: table-header-group;
+  }
+
+  tfoot {
+    display: table-footer-group;
+    page-break-inside: avoid;
+  }
+}
+
+.qrCode img {
+  width: 100%;
+  height: 100%;
+}
+
+</style>
\ No newline at end of file
diff --git a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
index c0fbde6..7b035df 100644
--- a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
+++ b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,40 +1,82 @@
 <script setup>
-import {Search} from "@element-plus/icons-vue";
-import {reactive, onMounted, onBeforeUnmount,onUnmounted} from "vue";
+import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue";
 import {useRouter} from "vue-router"
-const router = useRouter()
-import { useI18n } from 'vue-i18n'
-  const { t } = useI18n()
-  let language = ref(localStorage.getItem('lang') || 'zh')
-import { ref } from 'vue'
-import { ElMessage, ElMessageBox } from 'element-plus'
+import {useI18n} from 'vue-i18n'
+import {ElMessage} from 'element-plus'
+import request from "@/utils/request";
+import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
+import {host, WebSocketHost} from '@/utils/constants'
+import PrintFlow from "@/views/UnLoadGlass/PrintFlow.vue";
 import Landingindication from "./Landingindication.vue";
 import Landingindicationtwo from "./Landingindicationtwo.vue";
-import request from "@/utils/request";
-import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
-import { WebSocketHost ,host} from '@/utils/constants'
+
+const router = useRouter()
+const {t} = useI18n()
+let language = ref(localStorage.getItem('lang') || 'zh')
+const printLoading = ref(true)
+const fullFlowCard = ref('')
+const autoPrint = ref(false)
+
 const dialogFormVisiblea = ref(false)
 const dialogFormVisiblea2 = ref(false)
+const dialogFormVisibleaDownGlass = ref(false)
 // 鏁版嵁
 const loading = ref(false);
 // 寮规鏄剧ず鎺у埗
 const dialogFormVisible = ref(false);
 // 琛ㄥ崟鏁版嵁
 const workstationId = ref('');
-const selectedProjectNoa = ref(null); // 褰撳墠閫変腑鐨勮鑹� 
+const workFlowCard = ref('');
+const selectedProjectNoa = ref(null); // 褰撳墠閫変腑鐨勮鑹�
 const flowCardId = ref('');
 const flowCardOptions = ref('[]');
 const tableData = reactive([]);
+const downGlass = ref([]);
+
+const selectValuesa = reactive({});
+const selectOptionsa = ref([]);
+const dialogTableVisible = ref(false)
+const printFlowCardId = ref('')
+const printLayer = ref('')
+const now = new Date();
+const timeRange = ref([])
+
+const handleChange = async () => {
+  console.log("瑙﹀彂寮�鍏�")
+  try {
+    const body = {
+      flag: autoPrint.value, // 浣跨敤 ganghua.value 鑾峰彇褰撳墠寮�鍏崇殑鐘舵��
+    };
+
+    var url = "/unLoadGlass/downWorkStation/autoPrint?flag=" + autoPrint.value;
+    const response = await request.post(url)
+    if (response.code == 200) {
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      ElMessage.success(response.message);
+      autoPrint.value = response.data
+    } else {
+      ElMessage.error(response.message);
+    }
+  } catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
+
+
+const handleInputChangea = (value, rowId) => {
+  // 鏇存柊瀵瑰簲琛岀殑 select 鍊�
+  selectValuesa[rowId] = value;
+};
 // 鏂规硶
 const handleSelectionChange = () => {
   // 澶勭悊琛ㄦ牸琛岄�夋嫨浜嬩欢
 };
 const handleBindRack = (row) => {
   workstationId.value = row.workstationId; // 鍋囪rackNumber鏄灦鍙峰瓧娈电殑灞炴�у悕
-  console.log(row.flowCardId);
   flowCardId.value = row.flowCardId;
   // 鍙戣捣鎺ュ彛璇锋眰鑾峰彇娴佺▼鍗″彿
-    fetchFlowCardId(); 
+  fetchFlowCardId();
   dialogFormVisiblea.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
 };
 //鑾峰彇娴佺▼鍗″彿
@@ -43,12 +85,12 @@
     const response = await request.get('unLoadGlass/downWorkStation/getflowCardId');
     console.log(response)
     if (response.code === 200) {
-   
-  flowCardOptions.value = response.data.filter(item => item !== null)
-.map(item => ({ flowcard_id: item.flow_card_id }));
-  console.log(flowCardOptions.value);
-}
- else {
+
+      flowCardOptions.value = response.data.filter(item => item !== null)
+          .map(item => ({flowcard_id: item.flow_card_id}));
+      console.log(flowCardOptions.value);
+    }
+    else {
       ElMessage.error(response.msg);
     }
   } catch (error) {
@@ -58,18 +100,18 @@
 //纭
 const handleConfirm = async () => {
   try {
-    const firstPart = flowCardId.value.split('|')[0].trim(); // 
-const twoPart = flowCardId.value.split('|')[1].trim(); // 
+    const firstPart = flowCardId.value.split('|')[0].trim(); //
+    const twoPart = flowCardId.value.split('|')[1].trim(); //
     const response = await request.post('unLoadGlass/downWorkStation/updateFlowCardId', {
       workstationId: workstationId.value,
       flowCardId: firstPart,
-      layer:twoPart
-    }); 
+      layer: twoPart
+    });
     console.log(response)
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       console.log('缁戝畾鎴愬姛');
-   
+
       ElMessage.success(response.message);
       updatePageData();
       dialogFormVisiblea.value = false;
@@ -91,33 +133,36 @@
 const handleBindRack2 = (row) => {
   workstationId.value = row.workstationId; // 鍋囪rackNumber鏄灦鍙峰瓧娈电殑灞炴�у悕
   dialogFormVisiblea2.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  workFlowCard.value=row.flowCardId;
 };
 //娓呴櫎鍐呭
 const handleclear = async () => {
-    try {
-        const response = await request.post('unLoadGlass/downWorkStation/clear', {
-            workstationId: workstationId.value,
-        });
+  try {
+    const response = await request.post('unLoadGlass/downWorkStation/clear', {
+      workstationId: workstationId.value,
+    });
 
-        console.log(response);
 
-        if (response.code === 200) {
-            // 娓呴櫎鎴愬姛鐨勯�昏緫
-            console.log('娓呴櫎鎴愬姛');
-            ElMessage.success(response.message);
-            dialogFormVisiblea2.value = false;
-        } else if (response.code === 500) {
-            // 娓呴櫎澶辫触鐨勯�昏緫
-            console.log('娓呴櫎澶辫触');
-            console.log(response.message); // 鎵撳嵃鏈嶅姟鍣ㄨ繑鍥炵殑閿欒淇℃伅
-            ElMessage.error(response.message);
-            dialogFormVisiblea2.value = false;
-        }
-    } catch (error) {
-        // console.log(error);
-         ElMessage.error("娓呴櫎澶辫触");
-            dialogFormVisiblea2.value = false;
+    if (response.code === 200) {
+      // 娓呴櫎鎴愬姛鐨勯�昏緫
+      console.log('娓呴櫎鎴愬姛');
+      ElMessage.success(response.message);
+      dialogFormVisiblea2.value = false;
+      if(fullFlowCard.value==workFlowCard.value){
+        fullFlowCard.value="";
+      }
+    } else if (response.code === 500) {
+      // 娓呴櫎澶辫触鐨勯�昏緫
+      console.log('娓呴櫎澶辫触');
+      console.log(response.message); // 鎵撳嵃鏈嶅姟鍣ㄨ繑鍥炵殑閿欒淇℃伅
+      ElMessage.error(response.message);
+      dialogFormVisiblea2.value = false;
     }
+  } catch (error) {
+    // console.log(error);
+    ElMessage.error("娓呴櫎澶辫触");
+    dialogFormVisiblea2.value = false;
+  }
 };
 // 鍙戦�佽幏鍙栬〃鏍兼暟鎹殑璇锋眰
 const fetchTableData = async () => {
@@ -143,9 +188,38 @@
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
+
   // 鏇存柊 tableData 鐨勬暟鎹�
-  tableData.splice(0, tableData.length, ...data.params[0]);
-//  console.log("鏇存柊鍚庢暟鎹�", data.params[0]);
+  if (data.downGlassInfos != null) {
+    downGlass.value = data.downGlassInfos[0][1];
+  }
+  if (data.engineerIdList != null) {
+    selectOptionsa.value = data.engineerIdList[0]
+  }
+  if (data.autoPrint != null) {
+    autoPrint.value = data.autoPrint[0];
+  }
+
+  
+  if (fullFlowCard.value == ""&&autoPrint.value==true) {
+    for (let i = 0; i < tableData.length; i++) {
+      if (tableData[i].totalQuantity != 0) {
+        if (tableData[i].totalQuantity == tableData[i].racksNumber + tableData[i].otherNumber && fullFlowCard.value != tableData[i].flowCardId) {
+          // printFlowCardId.value = tableData[i].flowCardId;
+          fullFlowCard.value = tableData[i].flowCardId;
+          open(tableData[i]);
+          break;
+        }
+      } else {
+        console.log("娌℃湁flowCardId")
+      }
+    }
+  }
+  if(data.params!=null){
+    tableData.splice(0, tableData.length, ...data.params[0]);
+  }
+
+  //  console.log("鏇存柊鍚庢暟鎹�", data.params[0]);
 };
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
@@ -153,40 +227,40 @@
   fetchTableData(); // 鑾峰彇鏁版嵁
   socket = initializeWebSocket(socketUrl, handleMessage);
 });
-  onUnmounted(() => {
-    if (socket) {
+onUnmounted(() => {
+  if (socket) {
     closeWebSocket(socket);
-    }
-    });
+  }
+});
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 
 
-const getTagType =(status) => {
-      return status === 1 ? 'success' : 'danger';
-      // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
-    }
- 
-    const toggleStatus = (row) => {
-      // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
-      row.enableState = 1 - row.enableState; // Toggle between 0 and 1
-      // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
-      updateRowStatus(row);
-    };
- 
-    const updateRowStatus = async (row) => {
+const getTagType = (status) => {
+  return status === 1 ? 'success' : 'danger';
+  // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
+}
+
+const toggleStatus = (row) => {
+  // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
+  row.enableState = 1 - row.enableState; // Toggle between 0 and 1
+  // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
+  updateRowStatus(row);
+};
+
+const updateRowStatus = async (row) => {
   try {
     // 鍋囪浣犵殑鍚庣 API 鎺ユ敹 PUT 璇锋眰锛屽苟涓旈渶瑕佷紶閫� row.id 鍜� row.enableState 鍙傛暟
-   
- 
+
+
     const response = await request.post('unLoadGlass/downWorkStation/updateDownWorkstation', {
       enableState: row.enableState,
       id: row.id
 
- 
-    }); 
+
+    });
     console.log('Updated row status:', response.data);
     // 鍙互鏍规嵁鍚庣杩斿洖鐨勬暟鎹繘琛岃繘涓�姝ュ鐞嗭紝姣斿鏇存柊鏈湴鐘舵�佺瓑
   } catch (error) {
@@ -194,11 +268,77 @@
     // 澶勭悊閿欒鎯呭喌锛屾瘮濡傛彁绀虹敤鎴锋洿鏂板け璐�
   }
 };
- 
+
+// 鏌ヨ鏁版嵁
+const selectDownGlassData = async () => {
+
+  const response = await request.post("/unLoadGlass/downGlassInfo/setDownGlassInfoRequest", {
+    workStationId: selectValuesa[0],
+    engineerId: selectValuesa[1],
+    beginDate: timeRange.value[0],
+    endDate: timeRange.value[1],
+  })
+  if (response.code === 200) {
+    ElMessage.success(response.message);
+  } else {
+    ElMessage.error(response.message);
+  }
+
+}
 
 
+const open = async (row) => {
 
+  printFlowCardId.value = row.flowCardId;
+  printLayer.value = row.layer
+  dialogTableVisible.value = true;
+  setTimeout(() => {
+    printFlowCard(); // 鏇挎崲鎴愪綘瑕佹墽琛岀殑鍑芥暟鍚�
+    dialogTableVisible.value = false;
+  }, 1000);
+  ;
 
+}
+
+const printFlowCard = () => {
+  // 闇�瑕佹墦鍗扮殑灞�閮ㄥ尯鍩熻祴浜�"print-wrap"鐨刬d
+  let el = document.getElementById("child");
+  let doc = document;
+  let body = doc.body || doc.getElementsByTagName("body")[0];
+  let printId = "print-" + Date.now();
+
+  // 鍒涘缓鏃犲壇浣滅敤鐨勬墦鍗板鍣�(鍥犱笉纭畾椤甸潰鐨勬墦鍗板厓绱犳湁鏃犲叾瀹冩牱寮�)
+  let content = doc.createElement("div");
+  content.id = printId;
+
+  // 鏍峰紡鎺у埗涓庢墦鍗版棤鍏崇殑鍏冪礌闅愯棌
+  let style = doc.createElement("style");
+  style.innerHTML =
+      "body>#" +
+      printId +
+      "{display:none}@media print{" +
+      "@page {" +
+      "    size: auto; " +
+      "    margin: 10mm 2mm 10mm 1mm; " +
+      "  }body>:not(#" +
+      printId +
+      "){display:none !important}body>#" +
+      printId +
+      "{display:block;padding-top:1px}}";
+  //
+  content.innerHTML = el.outerHTML;
+  // // console.log("el.outerHTML", el.outerHTML);
+  body.appendChild(style);
+
+  // 涓巗tyle鍏冪礌璁剧疆鐨勬牱寮忕浉閰嶅悎
+  // 鎶婃墦鍗板唴瀹圭殑鍏冪礌娣诲姞鍒癰ody(浣滀负body鐨勫瓙鍏冪礌锛屽彲鐢╞ody鐨勫瓙閫夋嫨鍣� '>' 鎺у埗鎵撳嵃鏍峰紡)
+  body.appendChild(content);
+  setTimeout(() => {
+    window.print();
+    body.removeChild(content);
+    body.removeChild(style);
+  }, 20);
+}
 
 
 // beforeUnmount(() => {
@@ -208,77 +348,132 @@
 </script>
 <template>
   <div>
+    <el-button style="margin-top: 10px;margin-left: 10px;margin-bottom: 10px;" id="searchButton" type="primary"
+               @click="dialogFormVisibleaDownGlass = true">钀芥灦璇︽儏
+    </el-button>
+    <el-switch style="margin-top: 10px;margin-left: 15px;margin-bottom: 10px;" v-model="autoPrint" class="mb-2" :inactive-text="$t('鑷姩鎵撳嵃')"
+               @change="handleChange"/>
     <el-card style="flex: 1;" v-loading="loading">
       <el-card style="flex: 1;margin-left: 4px;margin-top: 1px;" v-loading="loading">
-      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="200px" ref="table" 
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" />
-          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')" min-width="120" />
-          <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="150" />
-          <el-table-column prop="totalQuantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" />
-          <el-table-column prop="racksNumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
-          <el-table-column prop="layer" align="center" label="灞傛暟" min-width="120" />
-          <el-table-column prop="otherNumber" align="center" label="浜哄伐涓嬬墖鏁�" min-width="120" />
-          <!-- <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" /> -->
-          <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
-          <el-table-column
-            align="center"
-            :label="$t('reportWork.startstatus')"
-            min-width="80"
-            prop="enableState"
-          >
-          <template #default="scope">
-           
-            <el-tag :type="getTagType(scope.row.enableState)" @click="toggleStatus(scope.row)">
-          {{ scope.row.enableState === 1 ? $t('reportWork.enable') : $t('reportWork.unenable') }}
-        </el-tag>
-          </template>
-          </el-table-column>
-          <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200">
-            <template #default="scope">
-            <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�' " @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}</el-button>
-            <el-button size="mini" type="text" plain  @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear') }}</el-button>
-          </template>
-        </el-table-column>
-        </el-table>
-      </div>
-    </el-card>
-    <!-- workstationId: '1',
+        <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
+          <el-table height="200px" ref="table" @selection-change="handleSelectionChange" :data="tableData"
+                    :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+            <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80"/>
+            <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')"
+                             min-width="120"/>
+            <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="150"/>
+            <el-table-column prop="totalQuantity" align="center" :label="$t('reportWork.totalquantity')"
+                             min-width="120"/>
+            <el-table-column prop="racksNumber" align="center" :label="$t('reportWork.beendropped')" min-width="120"/>
+            <el-table-column prop="layer" align="center" label="灞傛暟" min-width="120"/>
+            <el-table-column prop="otherNumber" align="center" label="浜哄伐涓嬬墖鏁�" min-width="120"/>
+            <!-- <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" /> -->
+            <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
+            <el-table-column align="center" :label="$t('reportWork.startstatus')" min-width="80" prop="enableState">
+              <template #default="scope">
+                <el-tag :type="getTagType(scope.row.enableState)" @click="toggleStatus(scope.row)">
+                  {{ scope.row.enableState === 1 ? $t('reportWork.enable') : $t('reportWork.unenable') }}
+                </el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200">
+              <template #default="scope">
+                <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '宸插惎鐢�'"
+                           @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}
+                </el-button>
+                <el-button size="mini" type="text" plain @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear')
+                  }}</el-button>
+                <el-button @click="open(scope.row)" :disabled="scope.row.flowCardId == null">鎵撳嵃</el-button>
+              </template>
+
+            </el-table-column>
+          </el-table>
+
+        </div>
+        <el-dialog v-model="dialogFormVisibleaDownGlass" top="2vh" width="97%"
+                   :title="$t('searchOrder.cageinformation')">
+          <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('璇烽�夋嫨宸ヤ綅')" clearable>
+            <el-option label="鍏ㄩ儴" value="0"></el-option>
+            <el-option label="1" value="1"></el-option>
+            <el-option label="2" value="2"></el-option>
+            <el-option label="3" value="3"></el-option>
+            <el-option label="4" value="4"></el-option>
+            <el-option label="5" value="5"></el-option>
+            <el-option label="6" value="6"></el-option>
+            <el-option label="7" value="7"></el-option>
+            <el-option label="8" value="8"></el-option>
+            <el-option label="9" value="9"></el-option>
+            <el-option label="10" value="10"></el-option>
+          </el-select>
+
+          <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('basicData.plselectproject')" clearable
+                     @input="handleInputChangea($event, row.id)">
+            <el-option v-for="item in selectOptionsa" :key="item" :label="item" :value="item"/>
+          </el-select>
+
+          <span class="demonstration">鏃堕棿娈�</span>
+          <el-date-picker v-model="timeRange" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" value-format = "YYYY-MM-DD hh:mm:ss"
+                          end-placeholder="缁撴潫鏃ユ湡">
+          </el-date-picker>
+
+          <el-button type="primary" style="margin-left: 10px;" @click="selectDownGlassData()">{{
+              $t('reportmanage.inquire')
+            }}
+          </el-button>
+          <el-table height="200px" ref="table" @selection-change="handleSelectionChange" :data="downGlass"
+                    :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+            <el-table-column prop="workStationId" align="center" :label="$t('宸ヤ綅鍙�')" min-width="80"/>
+            <el-table-column prop="engineerId" align="center" :label="$t('宸ョ▼鍙�')" min-width="80"/>
+            <el-table-column prop="flowCardId" align="center" :label="$t('娴佺▼鍗″彿')" min-width="80"/>
+            <el-table-column prop="layer" align="center" :label="$t('灞�')" min-width="120"/>
+            <el-table-column prop="sequence" align="center" :label="$t('椤哄簭')" min-width="150"/>
+            <el-table-column prop="width" align="center" :label="$t('瀹�')" min-width="120"/>
+            <el-table-column prop="height" align="center" :label="$t('楂�')" min-width="120"/>
+            <el-table-column prop="Filmsid" align="center" :label="$t('鑶滅郴')" min-width="120"/>
+            <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="120"/>
+            <el-table-column prop="glassId" align="center" :label="$t('鐜荤拑id')" min-width="120"/>
+
+          </el-table>
+        </el-dialog>
+
+      </el-card>
+      <!-- workstationId: '1',
     workstationId: '1005',
     flowCardId: '183.6',
     totalquantity: '1991',
     racksnumber:"1",
     work_state: '寰呰瘑鍒�', -->
-  <div style="display: flex;" class="awatch">
-  <div id="main-body">
-      <Landingindication></Landingindication>
-    </div>
-  <div id="main-bodya">
-    <Landingindicationtwo></Landingindicationtwo>
-    </div>
-    </div>
+      <div style="display: flex;" class="awatch">
+        <div id="main-body">
+          <Landingindication></Landingindication>
+        </div>
+        <div id="main-bodya">
+          <Landingindicationtwo></Landingindicationtwo>
+        </div>
+      </div>
     </el-card>
+
   </div>
 
-    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
+  <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
     <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
-      <el-form  size="mini" label-width="100px">
-        <el-form  label-width="210px" label-position="right">
+      <el-form size="mini" label-width="100px">
+        <el-form label-width="210px" label-position="right">
           <el-form-item :label="$t('reportWork.shelfnumbera')" :required="true" style="width: 25vw">
-            <el-input v-model="workstationId" autocomplete="off"/>
+            <el-input v-model="workstationId" autocomplete="off" />
           </el-form-item>
           <el-form-item :label="$t('reportWork.cardnumbera')" :required="true" style="width: 25vw;">
-          <el-select v-model="flowCardId" :placeholder="$t('reportWork.incardnumber')">
-            <el-option v-for="item in flowCardOptions" :key="item.flowcard_id" :label="item.flowcard_id" :value="item.flowcard_id" />
-          </el-select>
-        </el-form-item>
-      </el-form>
+            <el-select v-model="flowCardId" :placeholder="$t('reportWork.incardnumber')">
+              <el-option v-for="item in flowCardOptions" :key="item.flowcard_id" :label="item.flowcard_id"
+                         :value="item.flowcard_id"/>
+            </el-select>
+          </el-form-item>
+        </el-form>
       </el-form>
     </div>
     <template #footer>
       <div id="dialog-footer">
+
         <el-button type="primary" @click="handleConfirm">
           {{ $t('reportWork.sure') }}
         </el-button>
@@ -296,32 +491,63 @@
       </div>
     </template>
   </el-dialog>
+
+  <el-dialog id="sizePrintCalrd" v-model="dialogTableVisible" destroy-on-close style="width: 75%;height:75% ">
+    <!-- <template #header="{ close, titleId, titleClass }">
+        <el-button  @click="printFlowCard" >鎵撳嵃</el-button>
+      </template> -->
+    <print-flow id="child" :printFlowCardId="printFlowCardId" :printLayer="printLayer"
+                style="width: 100%;height: 100%"/>
+  </el-dialog>
+
 </template>
 <style scoped>
-#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
-#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
-#dialog-footer{
+#dt {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 100px;
+}
+
+#dta {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 80%;
+}
+
+#dialog-footer {
   text-align: center;
   margin-top: -15px;
 }
-#message{
+
+#message {
   text-align: center;
   align-items: center;
   color: black;
-   width: 200px;
-   height: 100px;
-   background-color: #337ecc;
-   margin-left: 28%;
+  width: 200px;
+  height: 100px;
+  background-color: #337ecc;
+  margin-left: 28%;
 }
-.awatch{
+
+.awatch {
   max-width: 100%;
 }
-#main-body{
+
+#main-body {
   margin-top: -40px;
   margin-left: 150px;
 }
-#main-bodya{
+
+#main-bodya {
   margin-top: -40px;
   margin-left: 100px;
 }
+
+:deep(#sizePrintCalrd .el-dialog__body) {
+  height: 85%;
+  width: 100%;
+  overflow-y: auto;
+}
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/views/largescreen/largescreen.vue b/UI-Project/src/views/largescreen/largescreen.vue
index fb2ab1a..0ac8dc0 100644
--- a/UI-Project/src/views/largescreen/largescreen.vue
+++ b/UI-Project/src/views/largescreen/largescreen.vue
@@ -1,5 +1,5 @@
 <template>  
-  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
+  <el-card style="flex: 1;margin-left: 1px;margin-top: 10px;margin-right: 1px;" v-loading="loading">
     <el-scrollbar height="600px">
 <div id="top" style="height: 150px;display: flex;">  
   <div class="echarts-container">
@@ -9,7 +9,7 @@
 </div>
 </div> 
 <div style="display: flex;">
-<div id="centerleft" style="margin-top: 10px;height: 240px;width: 340px;background-color: #911005;">
+<!-- <div id="centerleft" style="margin-top: 10px;height: 240px;width: 340px;background-color: #911005;">
   <el-table height="240" ref="table" width="340px"
       @selection-change="handleSelectionChange"
       :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
@@ -24,18 +24,51 @@
           </template>
       </el-table-column>
       </el-table>
-</div> 
-<div id="center" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 750px;">
-  <img src="../../assets/d1a.png" alt="" style="margin-left: -10px; width: 100%;height: 100%;position: relative;"> 
+</div>  -->
+<div class="parter" style="margin-top: 10px;margin-left: 150px; height: 240px;width: 1000px;">
+    <img src="../../assets/dpxsa.png" style="margin-left: -10px; width: 100%;height: 100%;" alt="Your Image">
+  <div  class="moving-rect lipiana" v-show="woshia"></div>
+  <div  class="moving-rect lipianb" v-show="woshia"></div>
+  <div  class="moving-rect lipianc" v-show="woshic"></div>
+  <div  class="moving-rect lipiand" v-show="woshic"></div>
+  <div  class="moving-rect overlaya" v-show="flake"></div>
+  <div  class="moving-rect overlayb" v-show="flakeb"></div>
+  <div  class="moving-rect overlayc" v-show="flakec"></div>
+  <div  class="moving-rect overlayd" v-show="flaked"></div>
+  <div  class="moving-rect longa" v-show="dalipiana"></div>
+  <div  class="moving-rect longb" v-show="dalipianb"></div>
+  <div  class="moving-rect shangpianji" v-show="shangpian"></div>
+  <div  class="moving-rect xiapianji" v-show="xiapian"></div>
+  <div  class="moving-rect xiapianji1" v-show="xiapian1"></div>
+  <div  class="moving-rect xiapianji2" v-show="xiapian2"></div>
+  <div  class="moving-rect xiapianji3" v-show="xiapian3"></div>
+  <div  class="moving-rect xiapianji4" v-show="xiapian4"></div>
+  <div  class="moving-rect xiapianji5" v-show="xiapian5"></div>
+  <div  class="moving-rect xiapianji6" v-show="xiapian6"></div>
 </div>
-<div id="centerright" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 240px;background-color: #911005;">
+<!-- <div class="parter" style="margin-top: 10px;margin-left: 150px; height: 240px;width: 1000px;">
+    <img src="../../assets/dpxsa.png" style="margin-left: -10px; width: 100%;height: 100%;" alt="Your Image">
+    <div class="moving-rect vertical"></div>
+    <div class="moving-rect all"></div>
+    <div class="moving-rect horizontal"></div>
+    <div class="moving-rect xiao"></div>
+    <div class="moving-rect zhan"></div>
+    <div class="moving-rect tu"></div>
+    <div class="moving-rect zi"></div>
+    <div class="moving-rect xia"></div>
+    <div class="moving-rect zan"></div>
+    <div class="moving-rect fa"></div>
+    <div class="moving-rect hua"></div>
+    <div class="moving-rect shui"></div>
+</div> -->
+<!-- <div id="centerright" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 240px;background-color: #911005;">
   <el-table height="240" ref="table" width="340px"
       @selection-change="handleSelectionChange"
       :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
         <el-table-column prop="projectNo" align="center" :label="$t('large.projectnumber')" min-width="50" />
         <el-table-column prop="projectName" align="center" :label="$t('large.projectname')" min-width="50" />
       </el-table>
-</div> 
+</div>  -->
 </div>
 <div id="bottom" style="margin-top: 10px;height: 190px;background-color: #911005;">
 <el-table height="190" ref="table"
@@ -58,41 +91,50 @@
       </el-tag>  
     </template> 
         </el-table-column>
-        <el-table-column prop="deliveryDate" align="center" :label="$t('large.deliveryDate')" min-width="50" />
+        <el-table-column prop="deliveryDate" align="center" :label="$t('large.deliveryDate')" min-width="100" />
+        <el-table-column fixed="right" :label="$t('large.operate')" align="center" width="100">
+          <template #default="scope">
+            <el-button size="mini" type="text" plain @click="handleBinda(scope.row)">{{ $t('large.mes') }}</el-button>
+          </template>
+      </el-table-column>
       </el-table>
 </div>
 </el-scrollbar>
 </el-card>
-<el-dialog v-model="blinda" top="5vh" width="80%" :title="$t('large.brokeno')">
+<el-dialog v-model="blinda" top="5vh" width="85%">
   <el-table height="400" ref="table" 
       @selection-change="handleSelectionChange"
       :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-        <el-table-column prop="reportingWorkTime" fixed align="center" :label="$t('large.time')" min-width="110" />
-        <el-table-column prop="orderId" fixed align="center" :label="$t('large.number')" min-width="110" />
-        <el-table-column prop="reportingWorkId" align="center" :label="$t('large.jobnumber')" min-width="120" />
-        <el-table-column prop="productionId" align="center" :label="$t('large.productionnumber')" min-width="130" />
-        <el-table-column prop="processId" align="center" :label="$t('large.cardnumber')" min-width="140" />
-        <el-table-column prop="project" align="center" :label="$t('large.projectname')" min-width="110" />
-        <el-table-column prop="batch" align="center" :label="$t('large.batch')" min-width="110" />
-        <el-table-column prop="reviewer" align="center" :label="$t('large.detailID')" min-width="110" />
-        <el-table-column prop="orderSort" align="center" :label="$t('large.serialnumber')" min-width="110" />
-        <el-table-column prop="productName" align="center" :label="$t('large.productname')" :show-overflow-tooltip="true" min-width="220" />
-        <el-table-column prop="technologyNumber" align="center" :label="$t('large.serial')" min-width="110" />
-        <el-table-column prop="glassAddress" align="center" :label="$t('large.slicemarker')" min-width="130" />
-        <el-table-column prop="patchNum" align="center" :label="$t('large.numberpatches')" min-width="110" />
-        <el-table-column prop="width" align="center" :label="$t('large.width')" min-width="110" />
-        <el-table-column prop="height" align="center" :label="$t('large.height')" min-width="110" />
-        <el-table-column prop="shape" align="center" :label="$t('large.shape')" min-width="110" />
-        <el-table-column prop="responsibleProcess" align="center" :label="$t('large.responsibleprocess')" min-width="110" />
-        <el-table-column prop="patchProcesses" align="center" :label="$t('large.process')" min-width="110" />
-        <el-table-column prop="breakageQuantity" align="center" :label="$t('large.numberfractions')" min-width="110" />
-        <el-table-column prop="patchReason" align="center" :label="$t('large.breakreason')" min-width="110" />
-        <el-table-column prop="patchType" align="center" :label="$t('large.breaktype')" min-width="110" />
-        <el-table-column prop="responsiblePersonnel" align="center" :label="$t('large.responsiblepersonnel')" min-width="110" />
-        <el-table-column prop="responsibleEquipment" align="center" :label="$t('large.responsiblequipment')" min-width="110" />
-        <el-table-column prop="responsibleTeam" align="center" :label="$t('large.responsibleteam')" min-width="110" />
-        <el-table-column prop="patchArea" align="center" :label="$t('large.area')" min-width="110" />
-        <el-table-column prop="qualityInspector" align="center" :label="$t('large.inspector')" min-width="110" />
+        <el-table-column prop="orderId" fixed align="center" :label="$t('large.orderId')" min-width="110" />
+        <el-table-column prop="project"  align="center" :label="$t('large.project')" min-width="110" />
+        <el-table-column prop="processId"  align="center" :label="$t('large.cardnumber')" min-width="110" />
+        <el-table-column prop="orderNumber"  align="center" :label="$t('large.serialnumber')" min-width="110" />
+        <el-table-column prop="productName"  align="center" :label="$t('large.productname')" min-width="110" />
+        <el-table-column prop="width"  align="center" :label="$t('large.width')" min-width="100" />
+        <el-table-column prop="height"  align="center" :label="$t('large.height')" min-width="100" />
+        <el-table-column prop="area"  align="center" :label="$t('large.are')" min-width="100" />
+        <el-table-column prop="quantity"  align="center" :label="$t('large.number')" min-width="110" />
+        <el-table-column prop="numberPatches"  align="center" :label="$t('large.numberpatches')" min-width="110" />
+        <el-table-column prop="receivedQuantity"  align="center" :label="$t('large.innumber')" min-width="110" />
+        <el-table-column prop="terminationStatus"  align="center" :label="$t('large.productstatus')" min-width="110" />
+        <el-table-column
+          align="center"
+            :label="$t('large.productstatus')"
+            min-width="80"
+            prop="terminationStatus"
+          >
+          <template #default="scope">  
+          <el-tag  
+            :type="scope.row.terminationStatus === 0 ? 'success' : 'danger'"  
+          >  
+            {{ scope.row.terminationStatus === 0 ? $t('large.right') : $t('large.stop') }}
+          </el-tag>  
+        </template> 
+          </el-table-column> 
+        <el-table-column prop="packType"  align="center" :label="$t('large.quantity')" min-width="110" />
+        <el-table-column prop="projectNo"  align="center" :label="$t('large.projectnumber')" min-width="110" />
+        <!-- <el-table-column prop="processingNote" fixed align="center" :label="$t('large.method')" min-width="110" /> -->
+        <!-- <el-table-column prop="deliveryDate" fixed align="center" :label="$t('large.deliveryDate')" min-width="130" /> -->
       </el-table>
   <template #footer>
     <div id="dialog-footer" style="text-align: center;">
@@ -116,17 +158,51 @@
 const tableDatac = ref([])
 const adjustedRects = ref([]);  
 const chartRefs = ref([]);  
+const flake = ref(false)
+const flakeb = ref(false)
+const flakec = ref(false)
+const flaked = ref(false)
+const woshia = ref(false)
+const woshic = ref(false)
+const dalipiana = ref(false)
+const dalipianb = ref(false)
+const shangpian = ref(false)
+const xiapian = ref(false)
+const xiapian1 = ref(false)
+const xiapian2 = ref(false)
+const xiapian3 = ref(false)
+const xiapian4 = ref(false)
+const xiapian5 = ref(false)
+const xiapian6 = ref(false)
+
 const thisProcess = ref(); // 鐢ㄤ簬瀛樺偍process_id鐨勫搷搴斿紡寮曠敤 
 // 瀹氫箟涓�涓搷搴斿紡寮曠敤鏉ュ瓨鍌ㄥ浘琛ㄥ疄渚�    
 const chartDom = ref(null);  
 let chartInstance = null;  
 const blinda = ref(false)
-const handleBinda = (row) => {
-blinda.value = true;
-};
-const processesData = ref([
-
-]);
+const handleBinda = async (row) => {  
+  blinda.value = true;
+  await fetchFlowCardId(row.orderId);
+};  
+const processesData = ref([]);
+const fetchFlowCardId = async (orderId) => {
+  try  {
+    const response = await request.post('/loadGlass/order/order/selectOrderdetail',{
+      orderId: orderId
+    })
+    if (response.code == 200) {
+      ElMessage.success(response.message);
+      tableData.value = response.data;
+      console.log(tableData.value);
+    } else {
+      ElMessage.error(response.message);
+    }
+}
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
 function getStatusType(warehousing) {  
 switch (warehousing) {  
   case 0:  
@@ -148,30 +224,17 @@
 }  
 }  
 let socket = null;
+let socket2 = null;
+let socket3 = null;
+let socket4 = null;
+let socket5 = null;
+let socket6 = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`;
 const handleMessage = (data) => {
-tableData.value = data.awaitingRepairs[0]
+// tableData.value = data.awaitingRepairs[0]
 tableDatab.value = data.DoingTask[0]
 tableDatac.value = data.orders[0]
-// adjustedRects.value = data.device[0].map(rect => ({  
-//       ...rect, 
-//       completed: rect.completedQuantity,
-//       breakage: rect.breakageQuantity,
-//       thisProcess: rect.thisProcess,
-//     })); 
-};
-// let socket;
-// 璁剧疆鍥捐〃 DOM 寮曠敤  
-function setChartDom(index, el) {  
-if (!chartRefs.value[index]) {  
-  chartRefs.value[index] = { dom: el, chart: null };  
-} else {  
-  chartRefs.value[index].dom = el;  
-}  
-} 
-onMounted(() => {  
-socket = new WebSocket(socketUrl);  
-socket.onmessage = (event) => {  
+  socket.onmessage = (event) => {  
   const data = JSON.parse(event.data);  
   processesData.value = data.device[0].map(rect => ({  
     ...rect,  
@@ -180,12 +243,61 @@
     thisProcess: rect.thisProcess,  
   }));  
   renderPieCharts();
-  console.log(processesData.value);
-  // updateCharts();
+}
 };
+function setChartDom(index, el) {  
+if (!chartRefs.value[index]) {  
+  chartRefs.value[index] = { dom: el, chart: null };  
+} else {  
+  chartRefs.value[index].dom = el;  
+}  
+} 
+const socketUrl2 = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingIsRun`;
+const handleMessage2 = (data) => {
+  const tasks = data.temperingTaskType[0];  
+    flake.value = tasks.some(task => task.state == 1);
+    flakeb.value = tasks.some(task => task.state == 2);
+    flakec.value = tasks.some(task => task.state == 3);
+    flaked.value = tasks.some(task => task.state == 4);
+};
+// 鍗у紡鐞嗙墖
+const socketUrl3 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassIsRun`;
+const handleMessage3 = (data) => {
+  const tasks = data.taskCaches[0];  
+  woshia.value = tasks.some(task => task.line == 2001);  
+  woshic.value = tasks.some(task => task.line == 2002);  
+  console.log(tasks);
   
-// };  
-});  
+};
+// 澶х悊鐗囩
+const socketUrl4 = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/isRun`;
+const handleMessage4 = (data) => {
+  const tasks = data.bigStorageCageDetailsOutTask[0];  
+  const taskss = data.bigStorageCageDetailsFeedTask[0];  
+    dalipiana.value = tasks.some(task => task.slot !== null && task.slot !== undefined);  
+dalipianb.value = taskss.some(task => task.slot !== null && task.slot !== undefined);  
+};
+// 涓婄墖
+const socketUrl5 = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlassIsRun`;
+const handleMessage5 = (data) => {
+  if(data.engineering.length !==0 ){
+    shangpian.value = true;
+}
+};
+// 涓嬬墖
+const socketUrl6 = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unLoadGlassIsRun`;
+const handleMessage6 = (data) => {
+  const tasks = data.downWorkstation[0];  
+  if (tasks && tasks.length >= 6) {  
+    xiapian.value = tasks.some(task => task.racksNumber!== 0);  
+    xiapian1.value = tasks[0].racksNumber !== 0;
+    xiapian2.value = tasks[1].racksNumber !== 0;
+    xiapian3.value = tasks[2].racksNumber !== 0;
+    xiapian4.value = tasks[3].racksNumber !== 0;
+    xiapian5.value = tasks[4].racksNumber !== 0;
+    xiapian6.value = tasks[5].racksNumber !== 0;
+  }
+};
 const renderPieCharts = () => {
 processesData.value.forEach((data, index) => {
   const chart = echarts.init(document.getElementById('pieChart_' + index));
@@ -228,43 +340,290 @@
   chart.setOption(options);
 });
 };
-
-
-onUnmounted(() => {  
-socket.close();  
-});  
 onMounted(() => {
   socket = initializeWebSocket(socketUrl, handleMessage);
+  socket2 = initializeWebSocket(socketUrl2, handleMessage2);
+  socket3 = initializeWebSocket(socketUrl3, handleMessage3);
+  socket4 = initializeWebSocket(socketUrl4, handleMessage4);
+  socket5 = initializeWebSocket(socketUrl5, handleMessage5);
+  socket6 = initializeWebSocket(socketUrl6, handleMessage6);
 });
   onUnmounted(() => {
     if (socket) {
     closeWebSocket(socket);
     }
+    if (socket2) {
+    closeWebSocket2(socket2);
+    }
+    if (socket3) {
+    closeWebSocket3(socket3);
+    }
+    if (socket4) {
+    closeWebSocket4(socket4);
+    }
+    if (socket5) {
+    closeWebSocket5(socket5);
+    }
+    if (socket6) {
+    closeWebSocket6(socket6);
+    }
     });
 onBeforeUnmount(() => {
 console.log("鍏抽棴浜�")
 closeWebSocket();
+closeWebSocket2();
+closeWebSocket3();
+closeWebSocket4();
+closeWebSocket5();
+closeWebSocket6();
 });
 </script>  
 
 <style scoped>  
-
-
-
 .echarts-container {
 display: flex;
 flex-wrap: wrap;
 gap: 20px;
 }
-
 .echarts-item {
-width: 150px;
+width: 120px;
 height: 150px;
 margin: 20px;
 }
-
 .pie-chart {
 width: 100%;
 height: 100%;
 }
+.parter {
+    position: relative;
+    display: inline-block; /* 浣垮鍣ㄥぇ灏忛�傚簲鍥剧墖澶у皬 */
+  width: 1500px;
+  margin-left: -300px
+}
+img {
+    display: block; /* 璁╁浘鐗囦互鍧楃骇鍏冪礌鏄剧ず */
+    max-width: 100%; /* 纭繚鍥剧墖涓嶈秴鍑哄鍣� */
+}
+.moving-rect {
+    width: 100px;
+    height: 50px;
+    position: absolute;
+}
+.longa{
+  z-index: 1;
+  width: 33px;
+  height: 5px;
+  background-color: #529b2e;
+  margin-top: -15px;
+  margin-left: 130px;
+}
+.longb{
+  z-index: 1;
+  width: 33px;
+  height: 5px;
+  background-color: #529b2e;
+  margin-top: -15px;
+  margin-left: 235px;
+}
+.xiapianji1{
+  z-index: 1;
+  width: 12px;
+  height: 7px;
+  background-color: #529b2e;
+  margin-top: -206px;
+  margin-left: 173px;
+}
+.xiapianji2{
+  z-index: 1;
+  width: 12px;
+  height: 7px;
+  background-color: #529b2e;
+  margin-top: -206px;
+  margin-left: 217px;
+}
+.xiapianji3{
+  z-index: 1;
+  width: 12px;
+  height: 7px;
+  background-color: #529b2e;
+  margin-top: -195px;
+  margin-left: 196px;
+}
+.xiapianji4{
+  z-index: 1;
+  width: 12px;
+  height: 7px;
+  background-color: #529b2e;
+  margin-top: -206px;
+  margin-left: 270px;
+}
+.xiapianji5{
+  z-index: 1;
+  width: 12px;
+  height: 7px;
+  background-color: #529b2e;
+  margin-top: -206px;
+  margin-left: 314px;
+}
+.xiapianji6{
+  z-index: 1;
+  width: 12px;
+  height: 7px;
+  background-color: #529b2e;
+  margin-top: -195px;
+  margin-left: 293px;
+}
+.xiapianji {
+    width: 20px;
+    height: 10px;
+    background-color: #529b2e;
+    top: 9px;
+    left: 200px;
+    transform: translateX(-50%);
+    animation: move-xiapianji 6s infinite;
+}
+@keyframes move-xiapianji {
+    0% {
+      left: 200px;
+    }
+    100% {
+      left: calc(100% - 700px);
+    }
+}
+.lipiana {
+    width: 15px;
+    height: 9px;
+    background-color: #529b2e;
+    top: 190px;
+    right: 530px;
+    transform: translateX(-50%);
+    animation: move-lipiana 6s infinite;
+}
+@keyframes move-lipiana {
+    0% {
+      right: 530px;
+    }
+    100% {
+      right: calc(100% - 350px);
+    }
+}
+.lipianb {
+    width: 18px;
+    height: 10px;
+    background-color: #529b2e;
+    top: 160px;
+    left: 502px;
+    transform: translateX(-50%);
+    animation: move-lipianb 6s infinite;
+}
+@keyframes move-lipianb {
+    0% {
+        top: 160px;
+    }
+    100% {
+        top: calc(100% - 55px);
+    }
+}
+.lipianc {
+    width: 15px;
+    height: 9px;
+    background-color: #529b2e;
+    top: 215px;
+    right: 490px;
+    transform: translateX(-50%);
+    animation: move-lipianc 6s infinite;
+}
+@keyframes move-lipianc {
+    0% {
+      right: 490px;
+    }
+    100% {
+      right: calc(100% - 350px);
+    }
+}
+.lipiand {
+    width: 25px;
+    height: 10px;
+    background-color: #529b2e;
+    top: 160px;
+    left: 555px;
+    transform: translateX(-50%);
+    animation: move-lipiand 6s infinite;
+}
+@keyframes move-lipiand {
+    0% {
+        top: 160px;
+    }
+    100% {
+        top: calc(100% - 40px);
+    }
+}
+.overlaya {
+    width: 15px;
+    height: 9px;
+    background-color: #529b2e;
+    top: 213px;
+    right: 800px;
+    transform: translateX(-50%);
+    animation: move-overlaya 6s infinite;
+}
+@keyframes move-overlaya {
+    0% {
+      right: 880px;
+    }
+    100% {
+      right: calc(100% - 15px);
+    }
+}
+.overlayb {
+    width: 20px;
+    height: 10px;
+    background-color: #529b2e;
+    top: 110px;
+    left: 13px;
+    transform: translateX(-50%);
+    animation: move-overlayb 6s infinite;
+}
+@keyframes move-overlayb {
+    0% {
+        top: 160px;
+    }
+    100% {
+        top: calc(100% - 190px);
+    }
+}
+.overlayc {
+    width: 20px;
+    height: 10px;
+    background-color: #529b2e;
+    top: 7px;
+    left: 13px;
+    transform: translateX(-50%);
+    animation: move-overlayc 6s infinite;
+}
+@keyframes move-overlayc {
+    0% {
+      left: 20px;
+    }
+    100% {
+      left: calc(100% - 900px);
+    }
+}
+.shangpianji {
+    width: 20px;
+    height: 10px;
+    background-color: #529b2e;
+    top: 157px;
+    right: 90px;
+    transform: translateX(-50%);
+    animation: move-shangpianji 6s infinite;
+}
+@keyframes move-shangpianji {
+    0% {
+      right: 90px;
+    }
+    100% {
+      right: calc(100% - 770px);
+    }
+}
 </style>
\ No newline at end of file
diff --git a/hangzhoumesParent/JsonFile/PlcdownGlass.json b/hangzhoumesParent/JsonFile/PlcdownGlass.json
deleted file mode 100644
index 979dc66..0000000
--- a/hangzhoumesParent/JsonFile/PlcdownGlass.json
+++ /dev/null
@@ -1,144 +0,0 @@
-{
-	"plcAddressBegin": "DB11.0",
-	"plcAddressLenght": "100",
-	"dataType": "word",
-	"parameteInfor": [
-
-		{
-			"codeId": "requestWord",
-			"addressIndex": "0",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "requestID",
-			"addressIndex": "2",
-			"addressLenght": "30"
-		},
-		{
-			"codeId": "currentCell",
-			"addressIndex": "32",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "glassStatus08",
-			"addressIndex": "36",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G06_glass_status",
-			"addressIndex": "40",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G11_glass_status",
-			"addressIndex": "42",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G13_glass_status",
-			"addressIndex": "44",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G04_error_status",
-			"addressIndex": "48",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G05_error_status",
-			"addressIndex": "50",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G06_error_status",
-			"addressIndex": "52",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "robot_error_status",
-			"addressIndex": "54",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G08_error_status",
-			"addressIndex": "56",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G09_error_status",
-			"addressIndex": "58",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G10_error_status",
-			"addressIndex": "60",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G11_error_status",
-			"addressIndex": "62",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "robot_error_status",
-			"addressIndex": "64",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G13_error_status",
-			"addressIndex": "66",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "confirmationWord",
-			"addressIndex": "72",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G06_prohibit_film_production",
-			"addressIndex": "74",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G11_prohibit_film_production",
-			"addressIndex": "76",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G13_prohibit_film_production",
-			"addressIndex": "78",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "Glass_width",
-			"addressIndex": "82",
-			"addressLenght": "4"
-		},
-		{
-			"codeId": "Glass_height",
-			"addressIndex": "86",
-			"addressLenght": "4"
-		},
-		{
-			"codeId": "Glass_thickness",
-			"addressIndex": "90",
-			"addressLenght": "4"
-		},
-		{
-			"codeId": "Start_cell",
-			"addressIndex": "94",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "End_cell",
-			"addressIndex": "96",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "task_type",
-			"addressIndex": "98",
-			"addressLenght": "2"
-		}
-
-	]
-}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java
deleted file mode 100644
index a3b3e5a..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.pp.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.mes.pp.entity.DamageDetails;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author wu
- * @since 2024-07-26
- */
-public interface DamageDetailsService extends IService<DamageDetails> {
-
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java
deleted file mode 100644
index 0b53228..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.mes.pp.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.mes.pp.entity.ReportingWorkDetail;
-
-/**
- * <p>
- *  鏈嶅姟绫�
- * </p>
- *
- * @author wu
- * @since 2024-07-25
- */
-public interface ReportingWorkDetailService extends IService<ReportingWorkDetail> {
-
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
index 006c8f9..a323a39 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
@@ -31,7 +31,7 @@
 
         // 3銆佹暟鎹簮閰嶇疆
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8");
+        dsc.setUrl("jdbc:mysql://localhost:3306/pp?serverTimezone=GMT%2b8");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");
         dsc.setPassword("beibo.123/");
@@ -41,7 +41,7 @@
         // 4銆佸寘閰嶇疆
         PackageConfig pc = new PackageConfig();
         pc.setParent("com.mes");
-        pc.setModuleName("work_assignment"); //妯″潡鍚�
+        pc.setModuleName("flow_card"); //妯″潡鍚�
         pc.setController("controller");
         pc.setService("service");
         pc.setMapper("mapper");
@@ -50,7 +50,7 @@
         // 5銆佺瓥鐣ラ厤缃�
         StrategyConfig strategy = new StrategyConfig();
 
-        strategy.setInclude("work_assignment");
+        strategy.setInclude("flow_card");
 
         strategy.setNaming(NamingStrategy.underline_to_camel);//鏁版嵁搴撹〃鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
index 92cbb79..48ea8cc 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
@@ -4,12 +4,12 @@
     <insert id="saveBatch">
         INSERT INTO tempering_glass_info (glass_id, flow_card_id, glass_type, width, height, thickness, filmsid,
         ishorizontal, tempering_layout_id,
-        tempering_feed_sequence, x_coordinate, y_coordinate, angle, state, slot, engineer_id) VALUES
+        tempering_feed_sequence, x_coordinate, y_coordinate, angle, state, slot, engineer_id, deleted) VALUES
         <foreach collection="list" item="item" separator=",">
             (#{item.glassId}, #{item.flowCardId}, #{item.glassType}, #{item.width}, #{item.height}, #{item.thickness},
             #{item.filmsid},#{item.ishorizontal},
             #{item.temperingLayoutId}, #{item.temperingFeedSequence}, #{item.xCoordinate}, #{item.yCoordinate},
-            #{item.angle}, #{item.state}, #{item.slot}, #{item.engineerId})
+            #{item.angle}, #{item.state}, #{item.slot}, #{item.engineerId}, 0)
         </foreach>
     </insert>
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
index d2b47b8..3dcf2d7 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -88,7 +88,7 @@
 
     public static String engineerId = "";
 
-    @Scheduled(fixedDelay = 1000)
+//    @Scheduled(fixedDelay = 1000)
     public void plcHomeEdgTask() {
         Date startDate = new Date();
         log.info("鏈浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml
index e19d670..8ddf253 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml
@@ -13,6 +13,7 @@
         FROM task_cache
         <where>
             end_cell = #{line}
+            and deleted = 0
             AND task_type in
             <foreach collection="taskTypes" item="item" open='(' close=')' separator=','>
                 #{item}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java
index b6f1cbd..99d6bb8 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java
@@ -17,6 +17,6 @@
 public interface BigStorageCageMapper extends MPJBaseMapper<BigStorageCage> {
 
     List<Integer> queryFreeDeviceByUsed(@Param(value = "thickness") double thickness);
-
-    List<Integer> queryFreeDeviceByNotUsed(@Param(value = "thickness") double thickness);
+//
+//    List<Integer> queryFreeDeviceByNotUsed(@Param(value = "thickness") double thickness);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
index 9ba368b..14eb11a 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -34,5 +34,5 @@
 
     List<Integer> queryFreeDeviceByUsed(double thickness);
 
-    List<Integer> queryFreeDeviceByNotUsed(double thickness);
+//    List<Integer> queryFreeDeviceByNotUsed(double thickness);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
index 7138c20..a7531d2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -186,28 +186,32 @@
         TemperingGlassInfo temperingGlassInfo = temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper);
 
         LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper = new LambdaQueryWrapper<>();
-        bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getGlassId, glassId);
+        bigStorageCageDetailsWrapper
+                .eq(BigStorageCageDetails::getGlassId, glassId)
+                .eq(BigStorageCageDetails::getState,Const.GLASS_STATE_IN);
         BigStorageCageDetails bigStorageCageDetails = baseMapper.selectOne(bigStorageCageDetailsWrapper);
 
         if (temperingGlassInfo != null) {
             if (status == 0) {
-                temperingGlassInfo.setState(Const.TEMPERING_DAMAGE);
+                temperingGlassInfo.setState(Const.GLASS_STATE_DAMAGE);
             } else {
-                temperingGlassInfo.setState(Const.TEMPERING_TAKE);
+                temperingGlassInfo.setState(Const.GLASS_STATE_TAKE);
             }
             temperingGlassInfoMapper.updateById(temperingGlassInfo);
         }
+        Damage damage = new Damage();
         if (status == 0) {
             bigStorageCageDetails.setState(Const.GLASS_STATE_DAMAGE);
+            damage.setType(Const.GLASS_STATE_DAMAGE);
         } else {
             bigStorageCageDetails.setState(Const.GLASS_STATE_TAKE);
+            damage.setType(Const.GLASS_STATE_TAKE);
         }
         baseMapper.updateById(bigStorageCageDetails);
         bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot());
-        //todo:鎻掑叆鐮存崯鏁版嵁
-        Damage damage = new Damage();
         damage.setGlassId(bigStorageCageDetails.getGlassId());
         damage.setWorkingProcedure("鍐峰姞宸�");
+        damage.setLine(3001);
         damage.setRemark("澶х悊鐗囩鐮存崯");
         damage.setStatus(2);
         damageService.insertDamage(damage);
@@ -217,6 +221,7 @@
     @Override
     public List<BigStorageCageDetails> selectBigStorageCageDetails(String glassId) {
         LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>();
+        List<BigStorageCageDetails> bigStorageCageDetailsList=new ArrayList<>();
         glassInfoWrapper.eq(GlassInfo::getGlassId, glassId);
         GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper);
         BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
@@ -224,13 +229,10 @@
             BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
             bigStorageCageDetails.setState(1);
             bigStorageCageDetails.setGap(glassGap);
-            List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
+            bigStorageCageDetailsList = new ArrayList<>();
             bigStorageCageDetailsList.add(bigStorageCageDetails);
-            return bigStorageCageDetailsList;
-        } else {
-            return null;
         }
-
+        return bigStorageCageDetailsList;
     }
 
     //鐞嗙墖绗艰鎯呮坊鍔�
@@ -274,6 +276,9 @@
                 .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
                 .last("limit 1");
         if (glassInfo.getTemperingLayoutId() == 0) {
+            //todo:鍚屾祦绋嬭繘鍚屼竴鏍�
+//            wrapper.eq(BigStorageCageDetails::getFlowCardId,glassInfo.getFlowCardId())
+//                    .eq(BigStorageCageDetails::get)
             wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
         } else {
             wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1);
@@ -322,22 +327,22 @@
         }
 
         //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨
-        List<Integer> deviceNotUsedList = bigStorageCageService.queryFreeDeviceByNotUsed(glassInfo.getThickness());
-        for (Integer item : deviceNotUsedList) {
-            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
-                    .eq(BigStorageCage::getRemainWidth, slotWidth)
-                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
-                    .eq(BigStorageCage::getDeviceId, item)
-                    .last("limit 1"));
-            if (null != bigStorageCage) {
-                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板墿浣欐渶澶氬緱鏂瑰紡鑾峰彇淇℃伅鐗堝浘id:{},鏍煎瓙锛歿},鐜荤拑id锛歿}", glassInfo.getTemperingLayoutId(), bigStorageCage.getSlot(), glassInfo.getGlassId());
-                bigStorageDTO = new BigStorageDTO();
-                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
-                bigStorageDTO.setSlot(bigStorageCage.getSlot());
-                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
-                return bigStorageDTO;
-            }
-        }
+//        List<Integer> deviceNotUsedList = bigStorageCageService.queryFreeDeviceByNotUsed(glassInfo.getThickness());
+//        for (Integer item : deviceNotUsedList) {
+//            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+//                    .eq(BigStorageCage::getRemainWidth, slotWidth)
+//                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+//                    .eq(BigStorageCage::getDeviceId, item)
+//                    .last("limit 1"));
+//            if (null != bigStorageCage) {
+//                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板墿浣欐渶澶氬緱鏂瑰紡鑾峰彇淇℃伅鐗堝浘id:{},鏍煎瓙锛歿},鐜荤拑id锛歿}", glassInfo.getTemperingLayoutId(), bigStorageCage.getSlot(), glassInfo.getGlassId());
+//                bigStorageDTO = new BigStorageDTO();
+//                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+//                bigStorageDTO.setSlot(bigStorageCage.getSlot());
+//                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+//                return bigStorageDTO;
+//            }
+//        }
         Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
         return bigStorageDTO;
     }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
index d539f7c..e783646 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -77,5 +78,8 @@
     @ApiModelProperty(value = "鍒涘缓鏃堕棿", position = 8)
     private Date createTime;
 
+    @TableLogic
+    private int deleted;
+
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
index e5279a4..c4caf74 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -91,4 +92,7 @@
     @ApiModelProperty(value = "浠诲姟鐘舵��", position = 8)
     private Integer taskState;
 
+    @TableLogic
+    private int deleted;
+
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
index c007100..000519d 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
@@ -1,5 +1,6 @@
 package com.mes.edgglasstask.entity;
 
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -74,4 +75,7 @@
     @ApiModelProperty(value = "鏃堕棿", position = 9)
     private Date time;
 
+    @TableLogic
+    private int deleted;
+
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index d902299..7d8c5da 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -3,20 +3,20 @@
 
 spring:
   profiles:
-    active: prod
+    active: cz
   application:
     name: cacheVerticalGlass
 mybatis-plus:
   mapper-locations: classpath*:mapper/*.xml
-  configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 mes:
   sequence:
     order: false
-  minCount: 5
+  minCount: 20
   carWidth: 5000   #澶ц溅瀹藉害
   slotWidth: 5000   #澶ц溅瀹藉害
-  inCarMaxSize: 2     #杩涚墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
+  inCarMaxSize: 3     #杩涚墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
   outCarMaxSize: 3     #鍑虹墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
-  glassGap: 1000      #鐜荤拑闂磋窛
+  glassGap: 350  #鐜荤拑闂磋窛
   xMaxSize: 2850
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index be947ce..79dcea8 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -41,7 +41,8 @@
                              GROUP BY ENGINEER_ID, TEMPERING_LAYOUT_ID) T3 ON T2.ENGINEER_ID = T3.ENGINEER_ID
             AND T2.TEMPERING_LAYOUT_ID = T3.TEMPERING_LAYOUT_ID
             AND T2.COUNT = T3.COUNT
-        ORDER BY T2.ENGINEER_ID, T2.TEMPERING_LAYOUT_ID
+                 INNER JOIN ENGINEERING T4 ON T2.ENGINEER_ID=T4.ENGINEER_ID
+        ORDER BY T4.ID, T2.TEMPERING_LAYOUT_ID
     </select>
 
     <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
index c4affcd..954de19 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
@@ -15,6 +15,7 @@
                         SUM(case task_state when 2 then 1 else 0 end) as real_count
                  from big_storage_cage_feed_task
                  where task_state in (1, 2)
+                   and deleted = 0
                    and (target_slot = 0 or target_slot is null)
                  group by line
              ) t
@@ -36,6 +37,7 @@
                  WHERE LINE = #{line}
                    AND (target_slot = 0 or target_slot is null)
                    AND TASK_STATE IN (1, 2)
+                   and deleted = 0
              ) T
     </select>
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
index d9b1ce4..e8cc8c2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
@@ -6,24 +6,25 @@
     <select id="queryFreeDeviceByUsed" resultType="java.lang.Integer">
         SELECT T.DEVICE_ID
         FROM BIG_STORAGE_CAGE T
-                 LEFT JOIN (SELECT * FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE NOT IN (101, 200, 201)) T1
+                 LEFT JOIN (SELECT * FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE NOT IN (101, 8, 9)) T1
                            ON T.SLOT = T1.SLOT
         WHERE T.MAX_THICKNESS >= #{thickness}
           AND T.ENABLE_STATE = 1
         GROUP BY T.DEVICE_ID
-        ORDER BY COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID),
+        ORDER BY COUNT(DISTINCT T1.ENGINEER_ID), COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID),
                  COUNT(DISTINCT T1.SLOT)
     </select>
 
-    <select id="queryFreeDeviceByNotUsed" resultType="java.lang.Integer">
-        SELECT T.DEVICE_ID
-        FROM BIG_STORAGE_CAGE T
-                 LEFT JOIN (SELECT * FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE NOT IN (101, 200, 201)) T1
-                           ON T.SLOT = T1.SLOT
-        WHERE T.MAX_THICKNESS >= #{thickness}
-          AND T.ENABLE_STATE = 1
-        GROUP BY T.DEVICE_ID
-        ORDER BY COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID),
-                 COUNT(DISTINCT T.SLOT) - COUNT(DISTINCT T1.SLOT) DESC
-    </select>
+    <!--    <select id="queryFreeDeviceByNotUsed" resultType="java.lang.Integer">-->
+    <!--        SELECT T.DEVICE_ID-->
+    <!--        FROM BIG_STORAGE_CAGE T-->
+    <!--                 LEFT JOIN (SELECT * FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE NOT IN (101, 8, 9)) T1-->
+    <!--                           ON T.SLOT = T1.SLOT-->
+    <!--        WHERE T.MAX_THICKNESS >= #{thickness}-->
+    <!--          AND T.ENABLE_STATE = 1-->
+    <!--        GROUP BY T.DEVICE_ID-->
+    <!--        ORDER BY COUNT(DISTINCT T1.ENGINEER_ID)-->
+    <!--                 COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID),-->
+    <!--                 COUNT(DISTINCT T.SLOT) - COUNT(DISTINCT T1.SLOT) DESC-->
+    <!--    </select>-->
 </mapper>
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml
index 338e5e1..7e9084d 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageOutTaskMapper.xml
@@ -3,12 +3,14 @@
 <mapper namespace="com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper">
 
     <insert id="saveBatch">
-        INSERT INTO big_storage_cage_out_task ( glass_id, start_slot, end_slot, train_number, serial_number, task_state
-        )
+        INSERT INTO big_storage_cage_out_task ( glass_id, start_slot, end_slot, train_number, serial_number, width,
+        height, task_state,
+        deleted )
         values
         <foreach collection="list" item="item" separator=",">
             (#{item.glassId}, #{item.startSlot}, #{item.endSlot}, #{item.trainNumber}, #{item.serialNumber},
-            #{item.taskState})
+            #{item.width}, #{item.height},
+            #{item.taskState},0)
         </foreach>
     </insert>
 </mapper>
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
index 73cc34b..4d0abc8 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
@@ -53,10 +53,7 @@
     public Result <Integer> updateTemperingState(@RequestBody  Damage damage) {
         damageService.insertDamage(damage);
         TemperingGlassInfo temperingGlassInfo=new TemperingGlassInfo();
-        if(damage.getStatus()==2){
-            temperingGlassInfo.setState(5);
-
-        }
+        temperingGlassInfo.setState(damage.getStatus());
         temperingGlassInfo.setGlassId(damage.getGlassId());
         int result=temperingGlassInfoService.updateTemperingState(temperingGlassInfo);
         return Result.build(200, "鐮存崯鎴愬姛", result);
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
index ae0d119..246a786 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
@@ -4,18 +4,8 @@
       primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
-#        hangzhoumes:
-#          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
-#          username: root
-#          password: beibo.123/
-#          driver-class-name: com.mysql.cj.jdbc.Driver
-#        salve_hangzhoumes:
-#          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
-#          username: sa
-#          password: beibo.123/
-#          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
         hangzhoumes:
-          url: jdbc:mysql:127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
index c9a17a1..d3a8e05 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
@@ -1,5 +1,13 @@
 package com.mes.downglassinfo.controller;
 
+import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
+import com.mes.downglassinfo.service.DownGlassInfoService;
+import com.mes.utils.Result;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -7,5 +15,26 @@
 @RequestMapping("/downGlassInfo")
 public class DownGlassInfoController {
 
+    @Autowired
+    DownGlassInfoService downGlassInfoService;
+
+    /**
+     * 璁剧疆鏌ヨ鍙傛暟
+     *
+     * @param request
+     * @return
+     */
+    @PostMapping("/setDownGlassInfoRequest")
+    @ApiOperation(value = "璁剧疆钀芥灦鐜荤拑鏌ヨ鍙傛暟", notes = "璁剧疆钀芥灦鐜荤拑鏌ヨ鍙傛暟")
+    public Result<String> setDownGlassInfoRequest(@RequestBody DownGlassInfoRequest request) {
+        Result.success(downGlassInfoService.setDownGlassInfoRequest(request));
+        return Result.build(200, "鏌ヨ鎴愬姛", "1");
+
+    }
+
+    @PostMapping("/downGlassPrint")
+    public Result downGlassPrint(@RequestBody DownGlassInfo downGlassInfo) {
+        return Result.build(200, "鏌ヨ鎴愬姛", downGlassInfoService.downGlassPrint(downGlassInfo));
+    }
 
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
index add927c..55a4ee9 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
@@ -7,6 +7,7 @@
 import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * <p>
@@ -79,5 +80,14 @@
      */
     private String glassId;
 
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date gmtCreate;
+
+    /**
+     * 鐜荤拑绫诲瀷
+     */
+    private Integer glassType;
 
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
index e2da1a1..e82e684 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassTask.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -87,4 +88,7 @@
      * 鍒涘缓鏃堕棿
      */
     private Date CreateTime;
+
+    @TableLogic
+    private int deleted;
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
index 1a6ba68..da649b8 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
@@ -33,5 +33,13 @@
      * @param isDownload 鏄惁鑾峰彇鏈惤鏋剁幓鐠冧俊鎭�  True 宸茶惤鏋�  false 鏈惤鏋�
      * @return
      */
-    List<DownGlassInfoDTO> queryWorkStationIsIn(@Param(value = "isDownload") Boolean isDownload);
+    List<DownGlassInfoDTO> queryWorkStationIsIn(@Param(value = "workList") List<Integer> workList, @Param(value = "isDownload") Boolean isDownload);
+
+    /**
+     * 鑾峰彇
+     *
+     * @param workList
+     * @return
+     */
+    List<DownGlassInfoDTO> queryWorkStationFlowCard(@Param(value = "workList") List<Integer> workList);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
index 0830e6b..6e9c45d 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
@@ -2,9 +2,12 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.downglassinfo.entity.DownGlassInfo;
+import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
+import com.mes.downworkstation.entity.DownWorkstation;
 import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
 
 import java.util.List;
+import java.util.Map;
 
 public interface DownGlassInfoService extends IService<DownGlassInfo> {
 
@@ -31,7 +34,15 @@
      * @param isDownload true/false
      * @return
      */
-    List<DownGlassInfoDTO> queryWorkStationIsIn(Boolean isDownload);
+    List<DownGlassInfoDTO> queryWorkStationIsIn(List<Integer> workList, Boolean isDownload);
+
+    /**
+     * 鑾峰彇鎸囧畾鏋跺瓙宸茬粦瀹氭祦绋嬪崱鐨勬灦瀛愭湭钀界幓鐠冪殑鏁版嵁淇℃伅
+     *
+     * @param workList 鎸囧畾鐨勬灦瀛愬彿
+     * @return
+     */
+    List<DownGlassInfoDTO> queryWorkStationFlowCard(List<Integer> workList);
 
     /**
      * 鐢熸垚鍑虹墖浠诲姟
@@ -40,4 +51,18 @@
      * @return
      */
     boolean generateOutGlassTask(String glassId);
+
+    /**
+     * 璁剧疆鏋跺瓙瀹氭椂浠诲姟鏌ヨ鏉′欢
+     *
+     * @param request
+     * @return
+     */
+    String setDownGlassInfoRequest(DownGlassInfoRequest request);
+
+    List<Map<String, List<Map<String, Object>>>> downGlassPrint(DownGlassInfo downGlassInfo);
+
+    List<DownWorkstation> queryWorkStationIsFull();
+
+
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
index e7feaef..3a9e7f3 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
@@ -2,6 +2,7 @@
 
 import com.mes.downstorage.entity.DownStorageCage;
 import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downstorage.entity.request.CacheWornRequest;
 import com.mes.downstorage.service.DownStorageCageDetailsService;
 import com.mes.downstorage.service.DownStorageCageService;
 import com.mes.utils.Result;
@@ -61,8 +62,9 @@
     @ApiOperation("鍒犻櫎缂撳瓨鐞嗙墖绗间俊鎭�   鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑杩涜銆愭竻闄ゃ��")
     @PostMapping("/deleteDownStorageCage")
     @ResponseBody
-    public Result deleteDownStorageCage(@RequestBody DownStorageCageDetails downStorageCageDetails,int downStorageCageId) {
-        boolean isSucess=downStorageCageService.updateDownStorageCageDetails(downStorageCageId,downStorageCageDetails);
+    public Result deleteDownStorageCage(@RequestBody CacheWornRequest cacheWornRequest) {
+        downStorageCageService.deleteDownStorageCage(cacheWornRequest);
+//        boolean isSucess=downStorageCageService.updateDownStorageCageDetails(downStorageCageId,downStorageCageDetails);
         return Result.build(200,"鍒犻櫎鎴愬姛",1);
     }
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
index 54966ee..5d2a5d5 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -71,12 +71,19 @@
      */
     boolean DirectConnection(GlassInfo glassInfo);
 
+    /**
+     * 鑾峰彇褰撳墠闈炴湰鏋跺瓙鍙惤鏋剁殑鐜荤拑淇℃伅
+     *
+     * @param glassId
+     * @param workList G06/G11:浼犲叆G06瀹為檯鑾峰彇鐨勪负鍙惤鏋禛11鐨勭幓鐠� 鍙嶄箣鍚岀悊
+     * @return
+     */
     String getGlassInfoMaxCount(String glassId, List<Integer> workList);
 
     /**
      * @param glassId
      * @param ControlsId
-     * @return  鐮存崯
+     * @return 鐮存崯
      */
     boolean identWorn(String glassId, int ControlsId);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
index 5281217..09ff9fc 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
@@ -4,6 +4,7 @@
 import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downstorage.entity.DownStorageCage;
 import com.mes.downstorage.entity.DownStorageCageDetails;
+import com.mes.downstorage.entity.request.CacheWornRequest;
 import com.mes.glassinfo.entity.GlassInfo;
 
 import java.util.List;
@@ -53,6 +54,8 @@
     List<Map<String, Object>> selectDownStorageCages();
 
     List<DownStorageCageDetails> selectCacheMax();
+
+    void deleteDownStorageCage(CacheWornRequest cacheWornRequest);
 }
 
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
index f6a69e4..3c547af 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
@@ -1,6 +1,7 @@
 package com.mes.downworkstation.controller;
 
 
+import com.mes.common.utils.RedisUtil;
 import com.mes.downworkstation.entity.DownWorkstation;
 import com.mes.downworkstation.entity.request.DownWorkRequest;
 import com.mes.downworkstation.service.DownWorkstationService;
@@ -11,6 +12,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
@@ -32,6 +34,8 @@
     private DownWorkstationService downWorkstationService;
     @Autowired
     private GlassInfoService glassInfoService;
+    @Resource
+    private RedisUtil redisUtil;
 
     @ApiOperation("鑾峰彇宸ヤ綅淇℃伅")
     @GetMapping("/getone")
@@ -77,9 +81,8 @@
         // 璋冪敤 DownWorkstationService 涓殑鏂规硶娓呴櫎鎸囧畾宸ヤ綅ID鐨勪俊鎭�
         int workstationId = (int) requestData.get("workstationId");
 
-            downWorkstationService.clearFlowCardId(workstationId);
-            return Result.build(200, "娓呴櫎宸ヤ綅淇℃伅鎴愬姛", 1);
-
+        downWorkstationService.clearFlowCardId(workstationId);
+        return Result.build(200, "娓呴櫎宸ヤ綅淇℃伅鎴愬姛", 1);
 
 
         // 鏋勫缓鍝嶅簲鏁版嵁
@@ -120,6 +123,20 @@
         return Result.build(200, "鏇存崲鎴愬姛", isSucess);
     }
 
+    @ApiOperation("鍏抽棴宸ヤ綅宸叉弧璀︽姤")
+    @PostMapping("/closeAlarmSignal")
+    @ResponseBody
+    public Result<String> closeAlarmSignal() {
+        return Result.build(200, "鏇存崲鎴愬姛", downWorkstationService.closeAlarmSignal());
+    }
+
+    @ApiOperation("鏄惁鑷姩鎵撳嵃")
+    @PostMapping("/autoPrint")
+    public Result autoPrint(Boolean flag) {
+        downWorkstationService.autoPrint(flag);
+        return Result.build(200, "淇敼鎴愬姛", redisUtil.getCacheObject("autoPrint"));
+    }
+
 
 }
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
index a101328..461935d 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
@@ -77,4 +77,8 @@
      * @returnq 鍚敤绂佺敤
      */
     boolean updateDownWorkstationstate(DownWorkstation downWorkstation);
+
+    String closeAlarmSignal();
+
+    void autoPrint(Boolean flag);
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json
deleted file mode 100644
index de826b1..0000000
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json
+++ /dev/null
@@ -1,144 +0,0 @@
-{
-	"plcAddressBegin": "DB11.0",
-	"plcAddressLenght": "100",
-	"dataType": "word",
-	"parameteInfor": [
-
-		{
-			"codeId": "requestWord",
-			"addressIndex": "0",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "requestID",
-			"addressIndex": "2",
-			"addressLenght": "20"
-		},
-		{
-			"codeId": "currentCell",
-			"addressIndex": "32",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "glassStatus08",
-			"addressIndex": "36",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G06_glass_status",
-			"addressIndex": "40",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G11_glass_status",
-			"addressIndex": "42",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G13_glass_status",
-			"addressIndex": "44",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G04_error_status",
-			"addressIndex": "48",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G05_error_status",
-			"addressIndex": "50",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G06_error_status",
-			"addressIndex": "52",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "robot_error_status",
-			"addressIndex": "54",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G08_error_status",
-			"addressIndex": "56",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G09_error_status",
-			"addressIndex": "58",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G10_error_status",
-			"addressIndex": "60",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G11_error_status",
-			"addressIndex": "62",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "robot_error_status",
-			"addressIndex": "64",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G13_error_status",
-			"addressIndex": "66",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "confirmationWord",
-			"addressIndex": "72",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G06_prohibit_film_production",
-			"addressIndex": "74",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G11_prohibit_film_production",
-			"addressIndex": "76",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "G13_prohibit_film_production",
-			"addressIndex": "78",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "Glass_width",
-			"addressIndex": "82",
-			"addressLenght": "4"
-		},
-		{
-			"codeId": "Glass_height",
-			"addressIndex": "86",
-			"addressLenght": "4"
-		},
-		{
-			"codeId": "Glass_thickness",
-			"addressIndex": "90",
-			"addressLenght": "4"
-		},
-		{
-			"codeId": "Start_cell",
-			"addressIndex": "94",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "End_cell",
-			"addressIndex": "96",
-			"addressLenght": "2"
-		},
-		{
-			"codeId": "task_type",
-			"addressIndex": "98",
-			"addressLenght": "2"
-		}
-
-	]
-}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
index c4c456e..0a84425 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application-cz.yml
@@ -14,6 +14,11 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        pp:
+          url: jdbc:mysql://192.168.1.199:3306/pp?serverTimezone=GMT%2b8
+          username: root
+          password: beibo.123/
+          driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
index f13a7b4..c633e7d 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
@@ -58,16 +58,36 @@
         AND T.LAYER = T1.LAYER
         LEFT JOIN DOWN_GLASS_INFO T2 ON T1.GLASS_ID = T2.GLASS_ID
         <where>
+            t.workstation_id in
+            <foreach collection="workList" item="item" open='(' close=')' separator=','>
+                #{item}
+            </foreach>
             <if test="!isDownload">
                 AND T2.GLASS_ID IS NULL
             </if>
             <if test="isDownload">
                 AND T2.GLASS_ID IS not NULL
             </if>
+
         </where>
         ORDER BY
         T.RACKS_NUMBER DESC,
         T1.TEMPERING_LAYOUT_ID,
         T1.TEMPERING_FEED_SEQUENCE DESC
     </select>
+    <select id="queryWorkStationFlowCard" resultMap="downGlassInfo">
+        SELECT
+        T.FLOW_CARD_ID,
+        T.LAYER,
+        T.RACKS_NUMBER
+        FROM
+        DOWN_WORKSTATION T
+        where
+        (t.flow_card_id is not null and t.flow_card_id != '')
+        and t.workstation_id in
+        <foreach collection="workList" item="item" open='(' close=')' separator=','>
+            #{item}
+        </foreach>
+        ORDER BY T.RACKS_NUMBER DESC
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml
index ee9090e..5d6f3ef 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml
@@ -28,12 +28,11 @@
         FROM DOWN_STORAGE_CAGE_DETAILS
         WHERE STATE = 100
         and (FLOW_CARD_ID, LAYER) not in (
-        select FLOW_CARD_ID, LAYER from down_workstation where flow_card_id is not null and workstation_id not in
+        select FLOW_CARD_ID, LAYER from down_workstation where flow_card_id is not null and workstation_id in
         <foreach collection="workList" item="item" open='(' close=')' separator=','>
             #{item}
         </foreach>
         )
-
         GROUP BY FLOW_CARD_ID, LAYER
         ORDER BY COUNT(FLOW_CARD_ID) DESC
         LIMIT 1 )
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
index 4029a6e..4c38ae0 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
@@ -1,6 +1,7 @@
 package mes;
 
 import com.mes.UnLoadGlassApplication;
+import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.service.DownGlassInfoService;
 import com.mes.downglassinfo.service.DownGlassTaskService;
 import com.mes.downglassinfo.service.impl.DownGlassInfoServiceImpl;
@@ -224,7 +225,13 @@
 
     }*/
 
-
+    @Test
+    public void downGlassPrint() {
+        DownGlassInfo downGlassInfo=new DownGlassInfo();
+        downGlassInfo.setFlowCardId("NG24070506A001");
+        downGlassInfo.setLayer(1);
+        downGlassInfoService.downGlassPrint(downGlassInfo);
+    }
 
 
 

--
Gitblit v1.8.0