From 1d6599eb08b3a72de68cf667365f127e3691592c Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期四, 17 七月 2025 15:01:04 +0800
Subject: [PATCH] 中空界面添加打印标签功能

---
 UI-Project/src/views/hollow/PrintFlowCardDetails.vue      | 1098 +++++++++++
 UI-Project/index.html                                     |    2 
 UI-Project/public/print-lock.css                          |  349 +++
 UI-Project/src/lang/en.js                                 |    4 
 UI-Project/src/lang/zh.js                                 |    6 
 UI-Project/src/utils/constants.js                         |    8 
 UI-Project/src/views/hollow/hollowequipment.vue           | 2023 +++++++++++----------
 UI-Project/src/utils/requestErp.js                        |   42 
 UI-Project/src/views/hollow/hollowequipmenthree.vue       |  115 +
 UI-Project/src/views/largescreendisplay/screendisplay.vue |   12 
 UI-Project/package-lock.json                              |  812 ++++++++
 UI-Project/src/views/hollow/PrintCustomLabelTwo.vue       |  326 +++
 UI-Project/src/views/hollow/hollowequipmenttwo.vue        |  888 +++++----
 UI-Project/package.json                                   |    1 
 14 files changed, 4,308 insertions(+), 1,378 deletions(-)

diff --git a/UI-Project/index.html b/UI-Project/index.html
index 5008a8e..28b10a4 100644
--- a/UI-Project/index.html
+++ b/UI-Project/index.html
@@ -3,6 +3,8 @@
   <head>
     <meta charset="UTF-8">
     <!-- <link rel="icon" href="/favicon.ico"> -->
+     <link rel="stylesheet"  type="text/css" media="print" href="/public/print-lock.css">
+
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>鍖楃幓</title>
   </head>
diff --git a/UI-Project/package-lock.json b/UI-Project/package-lock.json
index 49c34c8..13c3ced 100644
--- a/UI-Project/package-lock.json
+++ b/UI-Project/package-lock.json
@@ -27,6 +27,7 @@
         "vue-draggable-plus": "^0.5.0",
         "vue-echarts": "^6.7.3",
         "vue-i18n": "^11.0.0-rc.1",
+        "vue-plugin-hiprint": "^0.0.56",
         "vue-print-nb": "^1.7.5",
         "vue-router": "^4.0.13",
         "vue3-print-nb": "^0.1.4",
@@ -82,6 +83,14 @@
         "node": ">=6.0.0"
       }
     },
+    "node_modules/@babel/runtime": {
+      "version": "7.27.6",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz",
+      "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/types": {
       "version": "7.25.2",
       "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz",
@@ -93,6 +102,14 @@
       },
       "engines": {
         "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@claviska/jquery-minicolors": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmmirror.com/@claviska/jquery-minicolors/-/jquery-minicolors-2.3.6.tgz",
+      "integrity": "sha512-8Ro6D4GCrmOl41+6w4NFhEOpx8vjxwVRI69bulXsFDt49uVRKhLU5TnzEV7AmOJrylkVq+ugnYNMiGHBieeKUQ==",
+      "peerDependencies": {
+        "jquery": ">= 1.7.x"
       }
     },
     "node_modules/@ctrl/tinycolor": {
@@ -266,6 +283,11 @@
         }
       }
     },
+    "node_modules/@socket.io/component-emitter": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+      "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
+    },
     "node_modules/@types/estree": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
@@ -301,6 +323,11 @@
       "dependencies": {
         "undici-types": "~5.26.4"
       }
+    },
+    "node_modules/@types/raf": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz",
+      "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw=="
     },
     "node_modules/@types/sortablejs": {
       "version": "1.15.8",
@@ -634,6 +661,17 @@
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
       "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
     },
+    "node_modules/atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+      "bin": {
+        "atob": "bin/atob.js"
+      },
+      "engines": {
+        "node": ">= 4.5.0"
+      }
+    },
     "node_modules/axios": {
       "version": "1.6.8",
       "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz",
@@ -677,6 +715,14 @@
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "dev": true
     },
+    "node_modules/base64-arraybuffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
     "node_modules/binary-extensions": {
       "version": "2.3.0",
       "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -708,6 +754,25 @@
         "node": ">=8"
       }
     },
+    "node_modules/btoa": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/btoa/-/btoa-1.2.1.tgz",
+      "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
+      "bin": {
+        "btoa": "bin/btoa.js"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/bwip-js": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmmirror.com/bwip-js/-/bwip-js-4.7.0.tgz",
+      "integrity": "sha512-b7oQcgbWUl8rpcZayQ32SQrBCNteiZFuLkimKKBRlPwIHCeUN2VNeUE3HCMYShe04Evxd+ucS9uUAOsvNKjQbA==",
+      "bin": {
+        "bwip-js": "bin/bwip-js.js"
+      }
+    },
     "node_modules/camelcase": {
       "version": "5.3.1",
       "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
@@ -715,6 +780,39 @@
       "engines": {
         "node": ">=6"
       }
+    },
+    "node_modules/canvg": {
+      "version": "3.0.11",
+      "resolved": "https://registry.npmmirror.com/canvg/-/canvg-3.0.11.tgz",
+      "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==",
+      "dependencies": {
+        "@babel/runtime": "^7.12.5",
+        "@types/raf": "^3.4.0",
+        "core-js": "^3.8.3",
+        "raf": "^3.4.1",
+        "regenerator-runtime": "^0.13.7",
+        "rgbcolor": "^1.0.1",
+        "stackblur-canvas": "^2.0.0",
+        "svg-pathdata": "^6.0.3"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/canvg/node_modules/core-js": {
+      "version": "3.44.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.44.0.tgz",
+      "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==",
+      "hasInstallScript": true,
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/canvg/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
     },
     "node_modules/cfb": {
       "version": "1.2.2",
@@ -832,6 +930,14 @@
         "node": ">=0.8"
       }
     },
+    "node_modules/css-line-break": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+      "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+      "dependencies": {
+        "utrie": "^1.0.2"
+      }
+    },
     "node_modules/csstype": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
@@ -846,7 +952,6 @@
       "version": "4.3.4",
       "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
       "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
       "dependencies": {
         "ms": "2.1.2"
       },
@@ -884,6 +989,12 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/dom-zindex/-/dom-zindex-1.0.1.tgz",
       "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
+    },
+    "node_modules/dompurify": {
+      "version": "2.5.8",
+      "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-2.5.8.tgz",
+      "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==",
+      "optional": true
     },
     "node_modules/echarts": {
       "version": "5.5.1",
@@ -923,6 +1034,26 @@
       "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/engine.io-client": {
+      "version": "6.6.3",
+      "resolved": "https://registry.npmmirror.com/engine.io-client/-/engine.io-client-6.6.3.tgz",
+      "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==",
+      "dependencies": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.1",
+        "engine.io-parser": "~5.2.1",
+        "ws": "~8.17.1",
+        "xmlhttprequest-ssl": "~2.1.1"
+      }
+    },
+    "node_modules/engine.io-parser": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmmirror.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+      "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
+      "engines": {
+        "node": ">=10.0.0"
+      }
     },
     "node_modules/esbuild": {
       "version": "0.18.20",
@@ -1014,6 +1145,11 @@
         "reusify": "^1.0.4"
       }
     },
+    "node_modules/fflate": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+      "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+    },
     "node_modules/file-saver": {
       "version": "2.0.5",
       "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
@@ -1093,6 +1229,18 @@
       },
       "engines": {
         "node": ">= 6"
+      }
+    },
+    "node_modules/html2canvas": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+      "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+      "dependencies": {
+        "css-line-break": "^2.1.0",
+        "text-segmentation": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
     "node_modules/http-proxy": {
@@ -1181,11 +1329,49 @@
         "node": ">=10"
       }
     },
+    "node_modules/jquery": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.7.1.tgz",
+      "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
+    },
     "node_modules/js-tokens": {
       "version": "9.0.0",
       "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz",
       "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
       "dev": true
+    },
+    "node_modules/jsbarcode": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.12.1.tgz",
+      "integrity": "sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ=="
+    },
+    "node_modules/jspdf": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jspdf/-/jspdf-2.5.2.tgz",
+      "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.23.2",
+        "atob": "^2.1.2",
+        "btoa": "^1.2.1",
+        "fflate": "^0.8.1"
+      },
+      "optionalDependencies": {
+        "canvg": "^3.0.6",
+        "core-js": "^3.6.0",
+        "dompurify": "^2.5.4",
+        "html2canvas": "^1.0.0-rc.5"
+      }
+    },
+    "node_modules/jspdf/node_modules/core-js": {
+      "version": "3.44.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.44.0.tgz",
+      "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==",
+      "hasInstallScript": true,
+      "optional": true,
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
     },
     "node_modules/local-pkg": {
       "version": "0.4.3",
@@ -1332,8 +1518,7 @@
     "node_modules/ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
     "node_modules/nanoid": {
       "version": "3.3.6",
@@ -1368,6 +1553,11 @@
     "node_modules/northglass-mes": {
       "resolved": "",
       "link": true
+    },
+    "node_modules/nzh": {
+      "version": "1.0.14",
+      "resolved": "https://registry.npmmirror.com/nzh/-/nzh-1.0.14.tgz",
+      "integrity": "sha512-wKgaqCSZdrySvB4RWop5g+v6IDv2IErsT6rjq06Bg0yiT9hiHYZO12GMGx/xweGVLcO2lDjX5RqWD0S/Jy9z5Q=="
     },
     "node_modules/p-limit": {
       "version": "2.3.0",
@@ -1414,6 +1604,11 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
       "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
+    },
+    "node_modules/performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
     },
     "node_modules/picocolors": {
       "version": "1.0.0",
@@ -1591,6 +1786,14 @@
         }
       ]
     },
+    "node_modules/raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "dependencies": {
+        "performance-now": "^2.1.0"
+      }
+    },
     "node_modules/readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
@@ -1640,6 +1843,14 @@
       "engines": {
         "iojs": ">=1.0.0",
         "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rgbcolor": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz",
+      "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
+      "engines": {
+        "node": ">= 0.8.15"
       }
     },
     "node_modules/rollup": {
@@ -1692,6 +1903,32 @@
       "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
       "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
     },
+    "node_modules/socket.io-client": {
+      "version": "4.8.1",
+      "resolved": "https://registry.npmmirror.com/socket.io-client/-/socket.io-client-4.8.1.tgz",
+      "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
+      "dependencies": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.2",
+        "engine.io-client": "~6.6.1",
+        "socket.io-parser": "~4.2.4"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/socket.io-parser": {
+      "version": "4.2.4",
+      "resolved": "https://registry.npmmirror.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+      "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+      "dependencies": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.1"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
     "node_modules/sortablejs": {
       "version": "1.15.1",
       "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.1.tgz",
@@ -1722,6 +1959,14 @@
       },
       "engines": {
         "node": ">=0.8"
+      }
+    },
+    "node_modules/stackblur-canvas": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+      "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
+      "engines": {
+        "node": ">=0.1.14"
       }
     },
     "node_modules/string-width": {
@@ -1760,10 +2005,26 @@
         "url": "https://github.com/sponsors/antfu"
       }
     },
+    "node_modules/svg-pathdata": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+      "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
     "node_modules/sweetalert2": {
       "version": "11.10.7",
       "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
       "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
+    },
+    "node_modules/text-segmentation": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+      "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+      "dependencies": {
+        "utrie": "^1.0.2"
+      }
     },
     "node_modules/to-fast-properties": {
       "version": "2.0.0",
@@ -1909,6 +2170,14 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/utrie": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+      "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+      "dependencies": {
+        "base64-arraybuffer": "^1.0.2"
       }
     },
     "node_modules/vite": {
@@ -2062,6 +2331,22 @@
         "vue": "^3.0.0"
       }
     },
+    "node_modules/vue-plugin-hiprint": {
+      "version": "0.0.56",
+      "resolved": "https://registry.npmmirror.com/vue-plugin-hiprint/-/vue-plugin-hiprint-0.0.56.tgz",
+      "integrity": "sha512-YbJHH/MwdwIV1urL8V86ea+E8ixX1RYp/u/8/giPt4vfREUak9s2KYw4JFzM/Z6th9BCCpWTLPC+SOeoggxBbw==",
+      "dependencies": {
+        "@claviska/jquery-minicolors": "^2.3.6",
+        "bwip-js": "^4.0.0",
+        "canvg": "^3.0.10",
+        "html2canvas": "^1.4.1",
+        "jquery": "^3.6.0",
+        "jsbarcode": "^3.11.5",
+        "jspdf": "^2.5.1",
+        "nzh": "^1.0.8",
+        "socket.io-client": "^4.5.1"
+      }
+    },
     "node_modules/vue-print-nb": {
       "version": "1.7.5",
       "resolved": "https://registry.npmmirror.com/vue-print-nb/-/vue-print-nb-1.7.5.tgz",
@@ -2175,6 +2460,26 @@
         "node": ">=8"
       }
     },
+    "node_modules/ws": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.17.1.tgz",
+      "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/xe-utils": {
       "version": "3.5.14",
       "resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.14.tgz",
@@ -2198,6 +2503,14 @@
       },
       "engines": {
         "node": ">=0.8"
+      }
+    },
+    "node_modules/xmlhttprequest-ssl": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+      "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
     "node_modules/y18n": {
@@ -2272,6 +2585,11 @@
         "@babel/types": "^7.25.2"
       }
     },
+    "@babel/runtime": {
+      "version": "7.27.6",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz",
+      "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q=="
+    },
     "@babel/types": {
       "version": "7.25.2",
       "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz",
@@ -2281,6 +2599,12 @@
         "@babel/helper-validator-identifier": "^7.24.7",
         "to-fast-properties": "^2.0.0"
       }
+    },
+    "@claviska/jquery-minicolors": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmmirror.com/@claviska/jquery-minicolors/-/jquery-minicolors-2.3.6.tgz",
+      "integrity": "sha512-8Ro6D4GCrmOl41+6w4NFhEOpx8vjxwVRI69bulXsFDt49uVRKhLU5TnzEV7AmOJrylkVq+ugnYNMiGHBieeKUQ==",
+      "requires": {}
     },
     "@ctrl/tinycolor": {
       "version": "3.6.1",
@@ -2396,6 +2720,11 @@
         "picomatch": "^2.3.1"
       }
     },
+    "@socket.io/component-emitter": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+      "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
+    },
     "@types/estree": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
@@ -2431,6 +2760,11 @@
       "requires": {
         "undici-types": "~5.26.4"
       }
+    },
+    "@types/raf": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz",
+      "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw=="
     },
     "@types/sortablejs": {
       "version": "1.15.8",
@@ -2671,6 +3005,11 @@
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
       "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
     },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+    },
     "axios": {
       "version": "1.6.8",
       "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz",
@@ -2716,6 +3055,11 @@
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "dev": true
     },
+    "base64-arraybuffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
+    },
     "binary-extensions": {
       "version": "2.3.0",
       "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -2738,10 +3082,47 @@
         "fill-range": "^7.0.1"
       }
     },
+    "btoa": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/btoa/-/btoa-1.2.1.tgz",
+      "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
+    },
+    "bwip-js": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmmirror.com/bwip-js/-/bwip-js-4.7.0.tgz",
+      "integrity": "sha512-b7oQcgbWUl8rpcZayQ32SQrBCNteiZFuLkimKKBRlPwIHCeUN2VNeUE3HCMYShe04Evxd+ucS9uUAOsvNKjQbA=="
+    },
     "camelcase": {
       "version": "5.3.1",
       "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
       "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+    },
+    "canvg": {
+      "version": "3.0.11",
+      "resolved": "https://registry.npmmirror.com/canvg/-/canvg-3.0.11.tgz",
+      "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==",
+      "requires": {
+        "@babel/runtime": "^7.12.5",
+        "@types/raf": "^3.4.0",
+        "core-js": "^3.8.3",
+        "raf": "^3.4.1",
+        "regenerator-runtime": "^0.13.7",
+        "rgbcolor": "^1.0.1",
+        "stackblur-canvas": "^2.0.0",
+        "svg-pathdata": "^6.0.3"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.44.0",
+          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.44.0.tgz",
+          "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw=="
+        },
+        "regenerator-runtime": {
+          "version": "0.13.11",
+          "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+          "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+        }
+      }
     },
     "cfb": {
       "version": "1.2.2",
@@ -2828,6 +3209,14 @@
       "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
       "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
     },
+    "css-line-break": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+      "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+      "requires": {
+        "utrie": "^1.0.2"
+      }
+    },
     "csstype": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
@@ -2842,7 +3231,6 @@
       "version": "4.3.4",
       "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
       "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dev": true,
       "requires": {
         "ms": "2.1.2"
       }
@@ -2866,6 +3254,12 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/dom-zindex/-/dom-zindex-1.0.1.tgz",
       "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
+    },
+    "dompurify": {
+      "version": "2.5.8",
+      "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-2.5.8.tgz",
+      "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==",
+      "optional": true
     },
     "echarts": {
       "version": "5.5.1",
@@ -2902,6 +3296,23 @@
       "version": "8.0.0",
       "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "engine.io-client": {
+      "version": "6.6.3",
+      "resolved": "https://registry.npmmirror.com/engine.io-client/-/engine.io-client-6.6.3.tgz",
+      "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==",
+      "requires": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.1",
+        "engine.io-parser": "~5.2.1",
+        "ws": "~8.17.1",
+        "xmlhttprequest-ssl": "~2.1.1"
+      }
+    },
+    "engine.io-parser": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmmirror.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+      "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="
     },
     "esbuild": {
       "version": "0.18.20",
@@ -2977,6 +3388,11 @@
         "reusify": "^1.0.4"
       }
     },
+    "fflate": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+      "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+    },
     "file-saver": {
       "version": "2.0.5",
       "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
@@ -3030,6 +3446,15 @@
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "requires": {
         "is-glob": "^4.0.1"
+      }
+    },
+    "html2canvas": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+      "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+      "requires": {
+        "css-line-break": "^2.1.0",
+        "text-segmentation": "^1.0.3"
       }
     },
     "http-proxy": {
@@ -3094,11 +3519,44 @@
       "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
       "dev": true
     },
+    "jquery": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.7.1.tgz",
+      "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
+    },
     "js-tokens": {
       "version": "9.0.0",
       "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz",
       "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
       "dev": true
+    },
+    "jsbarcode": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.12.1.tgz",
+      "integrity": "sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ=="
+    },
+    "jspdf": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jspdf/-/jspdf-2.5.2.tgz",
+      "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==",
+      "requires": {
+        "@babel/runtime": "^7.23.2",
+        "atob": "^2.1.2",
+        "btoa": "^1.2.1",
+        "canvg": "^3.0.6",
+        "core-js": "^3.6.0",
+        "dompurify": "^2.5.4",
+        "fflate": "^0.8.1",
+        "html2canvas": "^1.0.0-rc.5"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.44.0",
+          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.44.0.tgz",
+          "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==",
+          "optional": true
+        }
+      }
     },
     "local-pkg": {
       "version": "0.4.3",
@@ -3208,8 +3666,7 @@
     "ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
     },
     "nanoid": {
       "version": "3.3.6",
@@ -3254,6 +3711,7 @@
         "vue-draggable-plus": "^0.5.0",
         "vue-echarts": "^6.7.3",
         "vue-i18n": "^11.0.0-rc.1",
+        "vue-plugin-hiprint": "^0.0.56",
         "vue-print-nb": "^1.7.5",
         "vue-router": "^4.0.13",
         "vue3-print-nb": "^0.1.4",
@@ -3286,6 +3744,11 @@
             "@babel/types": "^7.25.2"
           }
         },
+        "@babel/runtime": {
+          "version": "7.27.6",
+          "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz",
+          "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q=="
+        },
         "@babel/types": {
           "version": "7.25.2",
           "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz",
@@ -3295,6 +3758,12 @@
             "@babel/helper-validator-identifier": "^7.24.7",
             "to-fast-properties": "^2.0.0"
           }
+        },
+        "@claviska/jquery-minicolors": {
+          "version": "2.3.6",
+          "resolved": "https://registry.npmmirror.com/@claviska/jquery-minicolors/-/jquery-minicolors-2.3.6.tgz",
+          "integrity": "sha512-8Ro6D4GCrmOl41+6w4NFhEOpx8vjxwVRI69bulXsFDt49uVRKhLU5TnzEV7AmOJrylkVq+ugnYNMiGHBieeKUQ==",
+          "requires": {}
         },
         "@ctrl/tinycolor": {
           "version": "3.6.1",
@@ -3410,6 +3879,11 @@
             "picomatch": "^2.3.1"
           }
         },
+        "@socket.io/component-emitter": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+          "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
+        },
         "@types/estree": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
@@ -3445,6 +3919,11 @@
           "requires": {
             "undici-types": "~5.26.4"
           }
+        },
+        "@types/raf": {
+          "version": "3.4.3",
+          "resolved": "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz",
+          "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw=="
         },
         "@types/sortablejs": {
           "version": "1.15.8",
@@ -3685,6 +4164,11 @@
           "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
           "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
         },
+        "atob": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz",
+          "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+        },
         "axios": {
           "version": "1.6.8",
           "resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz",
@@ -3730,6 +4214,11 @@
           "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
           "dev": true
         },
+        "base64-arraybuffer": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+          "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
+        },
         "binary-extensions": {
           "version": "2.3.0",
           "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -3752,10 +4241,47 @@
             "fill-range": "^7.0.1"
           }
         },
+        "btoa": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmmirror.com/btoa/-/btoa-1.2.1.tgz",
+          "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
+        },
+        "bwip-js": {
+          "version": "4.7.0",
+          "resolved": "https://registry.npmmirror.com/bwip-js/-/bwip-js-4.7.0.tgz",
+          "integrity": "sha512-b7oQcgbWUl8rpcZayQ32SQrBCNteiZFuLkimKKBRlPwIHCeUN2VNeUE3HCMYShe04Evxd+ucS9uUAOsvNKjQbA=="
+        },
         "camelcase": {
           "version": "5.3.1",
           "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
           "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+        },
+        "canvg": {
+          "version": "3.0.11",
+          "resolved": "https://registry.npmmirror.com/canvg/-/canvg-3.0.11.tgz",
+          "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==",
+          "requires": {
+            "@babel/runtime": "^7.12.5",
+            "@types/raf": "^3.4.0",
+            "core-js": "^3.8.3",
+            "raf": "^3.4.1",
+            "regenerator-runtime": "^0.13.7",
+            "rgbcolor": "^1.0.1",
+            "stackblur-canvas": "^2.0.0",
+            "svg-pathdata": "^6.0.3"
+          },
+          "dependencies": {
+            "core-js": {
+              "version": "3.44.0",
+              "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.44.0.tgz",
+              "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw=="
+            },
+            "regenerator-runtime": {
+              "version": "0.13.11",
+              "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+              "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+            }
+          }
         },
         "cfb": {
           "version": "1.2.2",
@@ -3842,6 +4368,14 @@
           "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
           "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
         },
+        "css-line-break": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+          "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+          "requires": {
+            "utrie": "^1.0.2"
+          }
+        },
         "csstype": {
           "version": "3.1.2",
           "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
@@ -3856,7 +4390,6 @@
           "version": "4.3.4",
           "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
           "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-          "dev": true,
           "requires": {
             "ms": "2.1.2"
           }
@@ -3880,6 +4413,12 @@
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/dom-zindex/-/dom-zindex-1.0.1.tgz",
           "integrity": "sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg=="
+        },
+        "dompurify": {
+          "version": "2.5.8",
+          "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-2.5.8.tgz",
+          "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==",
+          "optional": true
         },
         "echarts": {
           "version": "5.5.1",
@@ -3916,6 +4455,23 @@
           "version": "8.0.0",
           "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
           "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+        },
+        "engine.io-client": {
+          "version": "6.6.3",
+          "resolved": "https://registry.npmmirror.com/engine.io-client/-/engine.io-client-6.6.3.tgz",
+          "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==",
+          "requires": {
+            "@socket.io/component-emitter": "~3.1.0",
+            "debug": "~4.3.1",
+            "engine.io-parser": "~5.2.1",
+            "ws": "~8.17.1",
+            "xmlhttprequest-ssl": "~2.1.1"
+          }
+        },
+        "engine.io-parser": {
+          "version": "5.2.3",
+          "resolved": "https://registry.npmmirror.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+          "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="
         },
         "esbuild": {
           "version": "0.18.20",
@@ -3991,6 +4547,11 @@
             "reusify": "^1.0.4"
           }
         },
+        "fflate": {
+          "version": "0.8.2",
+          "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+          "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+        },
         "file-saver": {
           "version": "2.0.5",
           "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
@@ -4044,6 +4605,15 @@
           "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
           "requires": {
             "is-glob": "^4.0.1"
+          }
+        },
+        "html2canvas": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+          "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+          "requires": {
+            "css-line-break": "^2.1.0",
+            "text-segmentation": "^1.0.3"
           }
         },
         "http-proxy": {
@@ -4108,11 +4678,44 @@
           "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
           "dev": true
         },
+        "jquery": {
+          "version": "3.7.1",
+          "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.7.1.tgz",
+          "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
+        },
         "js-tokens": {
           "version": "9.0.0",
           "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.0.tgz",
           "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
           "dev": true
+        },
+        "jsbarcode": {
+          "version": "3.12.1",
+          "resolved": "https://registry.npmmirror.com/jsbarcode/-/jsbarcode-3.12.1.tgz",
+          "integrity": "sha512-QZQSqIknC2Rr/YOUyOkCBqsoiBAOTYK+7yNN3JsqfoUtJtkazxNw1dmPpxuv7VVvqW13kA3/mKiLq+s/e3o9hQ=="
+        },
+        "jspdf": {
+          "version": "2.5.2",
+          "resolved": "https://registry.npmmirror.com/jspdf/-/jspdf-2.5.2.tgz",
+          "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==",
+          "requires": {
+            "@babel/runtime": "^7.23.2",
+            "atob": "^2.1.2",
+            "btoa": "^1.2.1",
+            "canvg": "^3.0.6",
+            "core-js": "^3.6.0",
+            "dompurify": "^2.5.4",
+            "fflate": "^0.8.1",
+            "html2canvas": "^1.0.0-rc.5"
+          },
+          "dependencies": {
+            "core-js": {
+              "version": "3.44.0",
+              "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.44.0.tgz",
+              "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==",
+              "optional": true
+            }
+          }
         },
         "local-pkg": {
           "version": "0.4.3",
@@ -4222,8 +4825,7 @@
         "ms": {
           "version": "2.1.2",
           "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
-          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-          "dev": true
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
         },
         "nanoid": {
           "version": "3.3.6",
@@ -4239,6 +4841,11 @@
           "version": "1.2.0",
           "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
           "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
+        },
+        "nzh": {
+          "version": "1.0.14",
+          "resolved": "https://registry.npmmirror.com/nzh/-/nzh-1.0.14.tgz",
+          "integrity": "sha512-wKgaqCSZdrySvB4RWop5g+v6IDv2IErsT6rjq06Bg0yiT9hiHYZO12GMGx/xweGVLcO2lDjX5RqWD0S/Jy9z5Q=="
         },
         "p-limit": {
           "version": "2.3.0",
@@ -4270,6 +4877,11 @@
           "version": "1.1.2",
           "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
           "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
+        },
+        "performance-now": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
+          "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
         },
         "picocolors": {
           "version": "1.0.0",
@@ -4357,6 +4969,14 @@
           "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
           "dev": true
         },
+        "raf": {
+          "version": "3.4.1",
+          "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+          "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+          "requires": {
+            "performance-now": "^2.1.0"
+          }
+        },
         "readdirp": {
           "version": "3.6.0",
           "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
@@ -4398,6 +5018,11 @@
           "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
           "dev": true
         },
+        "rgbcolor": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz",
+          "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw=="
+        },
         "rollup": {
           "version": "3.29.4",
           "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
@@ -4427,6 +5052,26 @@
           "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
           "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
         },
+        "socket.io-client": {
+          "version": "4.8.1",
+          "resolved": "https://registry.npmmirror.com/socket.io-client/-/socket.io-client-4.8.1.tgz",
+          "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
+          "requires": {
+            "@socket.io/component-emitter": "~3.1.0",
+            "debug": "~4.3.2",
+            "engine.io-client": "~6.6.1",
+            "socket.io-parser": "~4.2.4"
+          }
+        },
+        "socket.io-parser": {
+          "version": "4.2.4",
+          "resolved": "https://registry.npmmirror.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+          "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+          "requires": {
+            "@socket.io/component-emitter": "~3.1.0",
+            "debug": "~4.3.1"
+          }
+        },
         "sortablejs": {
           "version": "1.15.1",
           "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.1.tgz",
@@ -4449,6 +5094,11 @@
           "requires": {
             "frac": "~1.1.2"
           }
+        },
+        "stackblur-canvas": {
+          "version": "2.7.0",
+          "resolved": "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+          "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ=="
         },
         "string-width": {
           "version": "4.2.3",
@@ -4477,10 +5127,23 @@
             "js-tokens": "^9.0.0"
           }
         },
+        "svg-pathdata": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+          "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw=="
+        },
         "sweetalert2": {
           "version": "11.10.7",
           "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
           "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
+        },
+        "text-segmentation": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+          "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+          "requires": {
+            "utrie": "^1.0.2"
+          }
         },
         "to-fast-properties": {
           "version": "2.0.0",
@@ -4593,6 +5256,14 @@
             }
           }
         },
+        "utrie": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+          "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+          "requires": {
+            "base64-arraybuffer": "^1.0.2"
+          }
+        },
         "vite": {
           "version": "4.4.11",
           "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz",
@@ -4650,6 +5321,22 @@
             "@intlify/core-base": "11.0.0-rc.1",
             "@intlify/shared": "11.0.0-rc.1",
             "@vue/devtools-api": "^6.5.0"
+          }
+        },
+        "vue-plugin-hiprint": {
+          "version": "0.0.56",
+          "resolved": "https://registry.npmmirror.com/vue-plugin-hiprint/-/vue-plugin-hiprint-0.0.56.tgz",
+          "integrity": "sha512-YbJHH/MwdwIV1urL8V86ea+E8ixX1RYp/u/8/giPt4vfREUak9s2KYw4JFzM/Z6th9BCCpWTLPC+SOeoggxBbw==",
+          "requires": {
+            "@claviska/jquery-minicolors": "^2.3.6",
+            "bwip-js": "^4.0.0",
+            "canvg": "^3.0.10",
+            "html2canvas": "^1.4.1",
+            "jquery": "^3.6.0",
+            "jsbarcode": "^3.11.5",
+            "jspdf": "^2.5.1",
+            "nzh": "^1.0.8",
+            "socket.io-client": "^4.5.1"
           }
         },
         "vue-print-nb": {
@@ -4742,6 +5429,12 @@
             "strip-ansi": "^6.0.0"
           }
         },
+        "ws": {
+          "version": "8.17.1",
+          "resolved": "https://registry.npmmirror.com/ws/-/ws-8.17.1.tgz",
+          "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+          "requires": {}
+        },
         "xe-utils": {
           "version": "3.5.14",
           "resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.14.tgz",
@@ -4760,6 +5453,11 @@
             "wmf": "~1.0.1",
             "word": "~0.3.0"
           }
+        },
+        "xmlhttprequest-ssl": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmmirror.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+          "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ=="
         },
         "y18n": {
           "version": "4.0.3",
@@ -4803,6 +5501,11 @@
         }
       }
     },
+    "nzh": {
+      "version": "1.0.14",
+      "resolved": "https://registry.npmmirror.com/nzh/-/nzh-1.0.14.tgz",
+      "integrity": "sha512-wKgaqCSZdrySvB4RWop5g+v6IDv2IErsT6rjq06Bg0yiT9hiHYZO12GMGx/xweGVLcO2lDjX5RqWD0S/Jy9z5Q=="
+    },
     "p-limit": {
       "version": "2.3.0",
       "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
@@ -4833,6 +5536,11 @@
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
       "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
     },
     "picocolors": {
       "version": "1.0.0",
@@ -4920,6 +5628,14 @@
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
       "dev": true
     },
+    "raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "requires": {
+        "performance-now": "^2.1.0"
+      }
+    },
     "readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
@@ -4961,6 +5677,11 @@
       "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
       "dev": true
     },
+    "rgbcolor": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz",
+      "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw=="
+    },
     "rollup": {
       "version": "3.29.4",
       "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
@@ -4990,6 +5711,26 @@
       "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz",
       "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
     },
+    "socket.io-client": {
+      "version": "4.8.1",
+      "resolved": "https://registry.npmmirror.com/socket.io-client/-/socket.io-client-4.8.1.tgz",
+      "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
+      "requires": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.2",
+        "engine.io-client": "~6.6.1",
+        "socket.io-parser": "~4.2.4"
+      }
+    },
+    "socket.io-parser": {
+      "version": "4.2.4",
+      "resolved": "https://registry.npmmirror.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+      "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
+      "requires": {
+        "@socket.io/component-emitter": "~3.1.0",
+        "debug": "~4.3.1"
+      }
+    },
     "sortablejs": {
       "version": "1.15.1",
       "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.15.1.tgz",
@@ -5012,6 +5753,11 @@
       "requires": {
         "frac": "~1.1.2"
       }
+    },
+    "stackblur-canvas": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+      "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ=="
     },
     "string-width": {
       "version": "4.2.3",
@@ -5040,10 +5786,23 @@
         "js-tokens": "^9.0.0"
       }
     },
+    "svg-pathdata": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+      "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw=="
+    },
     "sweetalert2": {
       "version": "11.10.7",
       "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
       "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
+    },
+    "text-segmentation": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+      "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+      "requires": {
+        "utrie": "^1.0.2"
+      }
     },
     "to-fast-properties": {
       "version": "2.0.0",
@@ -5156,6 +5915,14 @@
         }
       }
     },
+    "utrie": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+      "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+      "requires": {
+        "base64-arraybuffer": "^1.0.2"
+      }
+    },
     "vite": {
       "version": "4.4.11",
       "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz",
@@ -5213,6 +5980,22 @@
         "@intlify/core-base": "11.0.0-rc.1",
         "@intlify/shared": "11.0.0-rc.1",
         "@vue/devtools-api": "^6.5.0"
+      }
+    },
+    "vue-plugin-hiprint": {
+      "version": "0.0.56",
+      "resolved": "https://registry.npmmirror.com/vue-plugin-hiprint/-/vue-plugin-hiprint-0.0.56.tgz",
+      "integrity": "sha512-YbJHH/MwdwIV1urL8V86ea+E8ixX1RYp/u/8/giPt4vfREUak9s2KYw4JFzM/Z6th9BCCpWTLPC+SOeoggxBbw==",
+      "requires": {
+        "@claviska/jquery-minicolors": "^2.3.6",
+        "bwip-js": "^4.0.0",
+        "canvg": "^3.0.10",
+        "html2canvas": "^1.4.1",
+        "jquery": "^3.6.0",
+        "jsbarcode": "^3.11.5",
+        "jspdf": "^2.5.1",
+        "nzh": "^1.0.8",
+        "socket.io-client": "^4.5.1"
       }
     },
     "vue-print-nb": {
@@ -5305,6 +6088,12 @@
         "strip-ansi": "^6.0.0"
       }
     },
+    "ws": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.17.1.tgz",
+      "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+      "requires": {}
+    },
     "xe-utils": {
       "version": "3.5.14",
       "resolved": "https://registry.npmjs.org/xe-utils/-/xe-utils-3.5.14.tgz",
@@ -5324,6 +6113,11 @@
         "word": "~0.3.0"
       }
     },
+    "xmlhttprequest-ssl": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+      "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ=="
+    },
     "y18n": {
       "version": "4.0.3",
       "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz",
diff --git a/UI-Project/package.json b/UI-Project/package.json
index deea92f..5839fd9 100644
--- a/UI-Project/package.json
+++ b/UI-Project/package.json
@@ -27,6 +27,7 @@
     "vue-draggable-plus": "^0.5.0",
     "vue-echarts": "^6.7.3",
     "vue-i18n": "^11.0.0-rc.1",
+    "vue-plugin-hiprint": "^0.0.56",
     "vue-print-nb": "^1.7.5",
     "vue-router": "^4.0.13",
     "vue3-print-nb": "^0.1.4",
diff --git a/UI-Project/public/print-lock.css b/UI-Project/public/print-lock.css
new file mode 100644
index 0000000..aede018
--- /dev/null
+++ b/UI-Project/public/print-lock.css
@@ -0,0 +1,349 @@
+@media print {
+  body {
+    margin: 0px;
+    padding: 0px;
+  }
+}
+
+@page {
+  margin: 0;
+}
+
+.hiprint-printPaper * {
+  box-sizing: border-box;
+  -moz-box-sizing: border-box; /* Firefox */
+  -webkit-box-sizing: border-box; /* Safari */
+}
+
+.hiprint-printPaper *:focus {
+  outline: -webkit-focus-ring-color auto 0px;
+}
+
+.hiprint-printPaper {
+  position: relative;
+  padding: 0 0 0 0;
+  page-break-after: always;
+  -webkit-user-select: none; /* Chrome/Safari/Opera */
+  -moz-user-select: none; /* Firefox */
+  user-select: none;
+  overflow-x: hidden;
+  overflow: hidden;
+}
+
+.hiprint-printPaper .hiprint-printPaper-content {
+  position: relative;
+}
+
+/* 鐏嫄娴忚鍣ㄦ墦鍗� 绗竴椤佃繃鍚� 閲嶅彔闂 */
+@-moz-document url-prefix() {
+  .hiprint-printPaper .hiprint-printPaper-content {
+    position: relative;
+    margin-top: 20px;
+    top: -20px
+  }
+}
+
+.hiprint-printPaper.design {
+  overflow: visible;
+}
+
+
+.hiprint-printTemplate .hiprint-printPanel {
+  page-break-after: always;
+}
+
+.hiprint-printPaper, hiprint-printPanel {
+  box-sizing: border-box;
+  border: 0px;
+}
+
+.hiprint-printPanel .hiprint-printPaper:last-child {
+  page-break-after: avoid;
+}
+
+.hiprint-printTemplate .hiprint-printPanel:last-child {
+  page-break-after: avoid;
+}
+
+.hiprint-printPaper .hideheaderLinetarget {
+  border-top: 0px dashed rgb(201, 190, 190) !important;
+}
+
+.hiprint-printPaper .hidefooterLinetarget {
+  border-top: 0px dashed rgb(201, 190, 190) !important;
+}
+
+.hiprint-printPaper.design {
+  border: 1px dashed rgba(170, 170, 170, 0.7);
+}
+
+.design .hiprint-printElement-table-content, .design .hiprint-printElement-longText-content {
+  overflow: hidden;
+  box-sizing: border-box;
+}
+
+.design .resize-panel {
+  box-sizing: border-box;
+  border: 1px dotted;
+}
+
+.hiprint-printElement-text {
+  background-color: transparent;
+  background-repeat: repeat;
+  padding: 0 0 0 0;
+  border: 0.75pt none rgb(0, 0, 0);
+  direction: ltr;
+  font-family: 'SimSun';
+  font-size: 9pt;
+  font-style: normal;
+  font-weight: normal;
+  padding-bottom: 0pt;
+  padding-left: 0pt;
+  padding-right: 0pt;
+  padding-top: 0pt;
+  text-align: left;
+  text-decoration: none;
+  line-height: 9.75pt;
+  box-sizing: border-box;
+  word-wrap: break-word;
+  word-break: break-all;
+}
+
+.design .hiprint-printElement-text-content {
+  border: 1px dashed rgb(206, 188, 188);
+  box-sizing: border-box;
+}
+
+.hiprint-printElement-longText {
+  background-color: transparent;
+  background-repeat: repeat;
+  border: 0.75pt none rgb(0, 0, 0);
+  direction: ltr;
+  font-family: 'SimSun';
+  font-size: 9pt;
+  font-style: normal;
+  font-weight: normal;
+  padding-bottom: 0pt;
+  padding-left: 0pt;
+  padding-right: 0pt;
+  padding-top: 0pt;
+  text-align: left;
+  text-decoration: none;
+  line-height: 9.75pt;
+  box-sizing: border-box;
+  word-wrap: break-word;
+  word-break: break-all;
+  /*white-space: pre-wrap*/
+}
+
+
+.hiprint-printElement-table {
+  background-color: transparent;
+  background-repeat: repeat;
+  color: rgb(0, 0, 0);
+  border-color: rgb(0, 0, 0);
+  border-style: none;
+  direction: ltr;
+  font-family: 'SimSun';
+  font-size: 9pt;
+  font-style: normal;
+  font-weight: normal;
+  padding-bottom: 0pt;
+  padding-left: 0pt;
+  padding-right: 0pt;
+  padding-top: 0pt;
+  text-align: left;
+  text-decoration: none;
+  padding: 0 0 0 0;
+  box-sizing: border-box;
+  line-height: 9.75pt;
+}
+
+.hiprint-printElement-table thead {
+  background: #e8e8e8;
+  font-weight: 700;
+}
+
+table.hiprint-printElement-tableTarget {
+  width: 100%;
+}
+
+.hiprint-printElement-tableTarget, .hiprint-printElement-tableTarget tr, .hiprint-printElement-tableTarget td {
+  border-color: rgb(0, 0, 0);
+  /*border-style: none;*/
+  /*border: 1px solid rgb(0, 0, 0);*/
+  font-weight: normal;
+  direction: ltr;
+  padding-bottom: 0pt;
+  padding-left: 4pt;
+  padding-right: 4pt;
+  padding-top: 0pt;
+  text-decoration: none;
+  vertical-align: middle;
+  box-sizing: border-box;
+  word-wrap: break-word;
+  word-break: break-all;
+  /*line-height: 9.75pt;
+  font-size: 9pt;*/
+}
+
+.hiprint-printElement-tableTarget-border-all {
+  border: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-none {
+  border: 0px solid;
+}
+.hiprint-printElement-tableTarget-border-lr {
+  border-left: 1px solid;
+  border-right: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-left {
+  border-left: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-right {
+  border-right: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-tb {
+  border-top: 1px solid;
+  border-bottom: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-top {
+  border-top: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-bottom {
+  border-bottom: 1px solid;
+}
+
+.hiprint-printElement-tableTarget-border-td-none td {
+  border: 0px solid;
+}
+.hiprint-printElement-tableTarget-border-td-all td:not(:nth-last-child(-n+2)) {
+  border-right: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-td-all td:last-child {
+  border-left: 1px solid;
+}
+.hiprint-printElement-tableTarget-border-td-all td:last-child:first-child {
+  border-left: none;
+}
+
+/*.hiprint-printElement-tableTarget tr,*/
+.hiprint-printElement-tableTarget td {
+  height: 18pt;
+}
+
+.hiprint-printPaper .hiprint-paperNumber {
+  font-size: 9pt;
+}
+
+.design .hiprint-printElement-table-handle {
+  position: absolute;
+  height: 21pt;
+  width: 21pt;
+  background: red;
+  z-index: 1;
+}
+
+.hiprint-printPaper .hiprint-paperNumber-disabled {
+  float: right !important;
+  right: 0 !important;
+  color: gainsboro !important;
+}
+
+.hiprint-printElement-vline, .hiprint-printElement-hline {
+  border: 0px none rgb(0, 0, 0);
+
+}
+
+.hiprint-printElement-vline {
+  border-left: 0.75pt solid #000;
+  border-right: 0px none rgb(0, 0, 0) !important;
+  border-bottom: 0px none rgb(0, 0, 0) !important;
+  border-top: 0px none rgb(0, 0, 0) !important;
+}
+
+.hiprint-printElement-hline {
+  border-top: 0.75pt solid #000;
+  border-right: 0px none rgb(0, 0, 0) !important;
+  border-bottom: 0px none rgb(0, 0, 0) !important;
+  border-left: 0px none rgb(0, 0, 0) !important;
+}
+
+.hiprint-printElement-oval, .hiprint-printElement-rect {
+  border: 0.75pt solid #000;
+}
+
+.hiprint-text-content-middle {
+}
+
+.hiprint-text-content-middle > div {
+  display: grid;
+  align-items: center;
+}
+
+.hiprint-text-content-bottom {
+}
+
+.hiprint-text-content-bottom > div {
+  display: grid;
+  align-items: flex-end;
+}
+
+.hiprint-text-content-wrap {
+}
+
+.hiprint-text-content-wrap .hiprint-text-content-wrap-nowrap {
+  white-space: nowrap;
+}
+
+.hiprint-text-content-wrap .hiprint-text-content-wrap-clip {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: clip;
+}
+
+.hiprint-text-content-wrap .hiprint-text-content-wrap-ellipsis {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+/*hi-grid-row */
+.hi-grid-row {
+  position: relative;
+  height: auto;
+  margin-right: 0;
+  margin-left: 0;
+  zoom: 1;
+  display: block;
+  box-sizing: border-box;
+}
+
+.hi-grid-row::after, .hi-grid-row::before {
+  display: table;
+  content: '';
+  box-sizing: border-box;
+}
+
+.hi-grid-col {
+  display: block;
+  box-sizing: border-box;
+  position: relative;
+  float: left;
+  flex: 0 0 auto;
+}
+
+.table-grid-row {
+  margin-left: -0pt;
+  margin-right: -0pt;
+}
+
+.tableGridColumnsGutterRow {
+  padding-left: 0pt;
+  padding-right: 0pt;
+}
+
+.hiprint-gridColumnsFooter {
+  text-align: left;
+  clear: both;
+}
diff --git a/UI-Project/src/lang/en.js b/UI-Project/src/lang/en.js
index 8049bb7..e9318cc 100644
--- a/UI-Project/src/lang/en.js
+++ b/UI-Project/src/lang/en.js
@@ -334,6 +334,8 @@
         finedging: 'has been edging',
     },
     processCard: {
+        thisIsTheIndoorSurface: 'This is the indoor surface',
+        thisSideIsOutsideTheRoom: 'This side is outside the room',
         intofurnace: 'Entering the furnace',
         beforefurnace: 'Before entering the furnace',
         outfurnace: 'Glass finished from tempering furnace',
@@ -793,6 +795,7 @@
         finegrinding: 'Fine grinding',
     },
     hellow: {
+        projectMsg2:'Please select a label template',
         clickmakesure: 'Whether or not to confirm the click锛�',
         logarithm: 'logarithm锛�',
         totalPairQuantitya: 'Total number of task allocation pairs',
@@ -917,6 +920,7 @@
         stopproject: 'Pause Task',
         pstopproject: 'Do you want to pause the task锛�',
         reviewproject: 'Preview project',
+        plselectproject: 'Select Preview Project',
         line: 'line',
         linea: 'line锛�',
         line1: 'Line 1',
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index d473471..104646c 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -333,6 +333,8 @@
           finedging:'宸茬(杈�',
       },
       processCard:{
+          thisIsTheIndoorSurface: '姝ら潰涓哄鍐呴潰',
+          thisSideIsOutsideTheRoom: '姝ら潰涓哄澶栭潰',
           intofurnace:'杩涚倝涓�',
           beforefurnace:'杩涚倝鍓�',
           outfurnace:'宸插嚭鐐夌幓鐠�',
@@ -798,6 +800,7 @@
           finegrinding: '绮剧(',
       },
     hellow: {
+        projectMsg2:'璇烽�夋嫨鏍囩妯℃澘',
         clickmakesure: '鏄惁纭鐐瑰嚮锛�',
         logarithm: '瀵规暟锛�',
         totalPairQuantitya: '浠诲姟鎬婚厤瀵规暟',
@@ -921,7 +924,8 @@
         formulaNamea: '璇疯緭鍏ラ厤鏂瑰悕',
         stopproject: '鏆傚仠浠诲姟',
         pstopproject: '鏄惁鏆傚仠浠诲姟锛�',
-        reviewproject: '棰勮宸ョ▼',
+        reviewproject: '棰勮浠诲姟',
+        plselectproject: '璇烽�夋嫨浠诲姟',
         line: '绾胯矾',
         linea: '绾胯矾锛�',
         line1: '绾胯矾涓�',
diff --git a/UI-Project/src/utils/constants.js b/UI-Project/src/utils/constants.js
index 66136ca..fba51ba 100644
--- a/UI-Project/src/utils/constants.js
+++ b/UI-Project/src/utils/constants.js
@@ -1,7 +1,9 @@
-//  export const WebSocketHost = "192.168.2.100";
+ export const WebSocketHost = "192.168.2.100";
 // export const WebSocketHost = "192.168.0.39";
-export const WebSocketHost = "10.153.19.150";
+// export const WebSocketHost = "10.153.19.150";
 // export const WebSocketHost = "10.153.19.218";
 // export const WebSocketHost = "10.153.19.162";
 // export const WebSocketHost = "127.0.0.1";
-export const host = "88";
\ No newline at end of file
+export const host = "88";
+export const ErpIp = "192.168.2.100";
+export const ErpHost = "8086";
diff --git a/UI-Project/src/utils/requestErp.js b/UI-Project/src/utils/requestErp.js
new file mode 100644
index 0000000..eb65062
--- /dev/null
+++ b/UI-Project/src/utils/requestErp.js
@@ -0,0 +1,42 @@
+import axios from 'axios'
+import useUserInfoStore from '@/stores/userInfo'
+import {ErpIp,ErpHost} from '@/utils/constants'
+const userStore=useUserInfoStore()
+const requestErp = axios.create({
+   baseURL: `http://${ErpIp}:${ErpHost}`, // 娉ㄦ剰锛侊紒 杩欓噷鏄叏灞�缁熶竴鍔犱笂浜� 鍚庣鎺ュ彛鍓嶇紑 鍓嶇紑锛屽悗绔繀椤昏繘琛岃法鍩熼厤缃紒
+   timeout: 30000
+})
+//
+// request 鎷︽埅鍣�
+// 鍙互鑷姹傚彂閫佸墠瀵硅姹傚仛涓�浜涘鐞�
+// 姣斿缁熶竴鍔爐oken锛屽璇锋眰鍙傛暟缁熶竴鍔犲瘑
+requestErp.interceptors.request.use(config => {
+   config.headers['Content-Type'] = 'application/json;charset=utf-8';
+   if(userStore.user){
+      config.headers['token'] = userStore.user.token;
+   }
+   // 璁剧疆璇锋眰澶�
+   return config
+}, error => {
+    return Promise.reject(error)
+});
+// response 鎷︽埅鍣�
+// 鍙互鍦ㄦ帴鍙e搷搴斿悗缁熶竴澶勭悊缁撴灉
+requestErp.interceptors.response.use(
+   response => {
+      let res = response.data;
+      // 濡傛灉鏄繑鍥炵殑鏂囦欢
+      if (response.config.responseType === 'blob') {
+          return res
+      }
+      // 鍏煎鏈嶅姟绔繑鍥炵殑瀛楃涓叉暟鎹�
+      if (typeof res === 'string') {
+          res = res ? JSON.parse(res) : res
+      }
+      return res;
+   },
+   error => {
+       return Promise.reject(error)
+   }
+)
+export default requestErp
\ No newline at end of file
diff --git a/UI-Project/src/views/hollow/PrintCustomLabelTwo.vue b/UI-Project/src/views/hollow/PrintCustomLabelTwo.vue
new file mode 100644
index 0000000..49253c2
--- /dev/null
+++ b/UI-Project/src/views/hollow/PrintCustomLabelTwo.vue
@@ -0,0 +1,326 @@
+<script setup>
+import requestErp from "@/utils/requestErp"
+import { ElDatePicker, ElMessage } from "element-plus"
+import { nextTick, onMounted, onUnmounted, reactive, ref, watch } from "vue"
+import { Search } from "@element-plus/icons-vue"
+import { useRouter } from 'vue-router'
+// import {changeFilterEvent, filterChanged} from "@/hook"
+import { useI18n } from 'vue-i18n'
+import deepClone from "@/utils/deepClone";
+// import companyInfo from "@/stores/sd/companyInfo"
+
+// const company = companyInfo()
+//璇█鑾峰彇
+const { t } = useI18n()
+let router = useRouter()
+let produceList = ref([])
+let labelList = ref([])
+let titleList = ref([])
+let dataList = ref([])
+let list = ref([])
+let lastList = ref([])
+
+let filterData = ref({})
+
+const data = ref({
+  printList: [],
+  isRepeat: false
+})
+
+let props = defineProps({
+  list: null,//鍕鹃�夌殑鏁版嵁
+  faceOrientation: null,//鍐呭闈�
+  type: null,//鏍囩妯℃澘
+  lableType: null,//鏍囩绫诲瀷
+  switch: null,//鍒ゆ柇鏄惁涓烘柊鎵撳嵃
+  lastList: [],
+})
+
+const { currentRoute } = useRouter()
+const route = currentRoute.value
+let type = props.type
+let faceOrientation = props.faceOrientation
+// if (type.indexOf("鑻辨枃")>-1 && faceOrientation==="姝ら潰涓哄鍐呴潰"){
+//   faceOrientation='INSIDE'
+// }
+// else if (type.indexOf("鑻辨枃")>-1 && faceOrientation==="姝ら潰涓哄澶栭潰"){
+//   faceOrientation='OUTSIDE'
+// }
+let lableType = props.lableType
+data.value.printList = props.list
+onMounted(() => {
+  requestErp.post(`/processCard/getSelectPrintCustomLabel/${type}/${lableType}`, data.value).then((res) => {
+    if (res.code == 200) {
+      produceList.value = deepClone(res.data.title)
+      list.value = deepClone(res.data.data)
+      const data = produceList.value[0].value
+      dataList = JSON.parse(`[${data}]`);
+      const printElements = dataList[0].panels[0].printElements;
+      let a = []
+      printElements.forEach(element => {
+        if (element.options.field === 'table') {
+          element.options.columns[0].forEach(elements => {
+            if (elements.field) {
+              a.push({
+                title: elements.title,
+                name: elements.field
+              }
+              )
+            }
+          })
+        } else {
+          a.push({
+            title: element.options.title,
+            name: element.options.field
+          })
+        }
+      })
+      labelList = a
+
+      props.lastList.length = 0;
+      for (let i = 0; i < list.value.length; i++) {
+        let count = list.value[i].data.length
+        for (let j = 0; j < count; j++) {
+          for (let k = 0; k < list.value[i].data[j].quantity; k++) {
+            props.lastList.push(list.value[i].data[j])
+          }
+        }
+      }
+    } else {
+      ElMessage.warning(res.msg)
+    }
+  })
+
+}
+)
+
+//淇敼鐩稿悓浜у搧鍚嶇О鏍囩
+const updateProductName = (event, index, id) => {
+  console.log(event, index, id)
+  // 鍒涘缓鏄犲皠瀵硅薄
+  const propertyMapping = {};
+  labelList.forEach(item => {
+    propertyMapping[item.name] = item.title;
+  });
+  // 杈撳叆鐨勫��
+  const newValue = event.target.innerText;
+  const parts = newValue.split('锛�');
+  const result = parts[1]; // 鑾峰彇鍐掑彿鍚庣殑閮ㄥ垎
+
+  // 鑾峰彇鏄犲皠涓墍鏈夌殑閿�
+  const keys = Object.keys(propertyMapping);
+
+  // 鏍规嵁 index 鑾峰彇瀵瑰簲鐨勫睘鎬у悕
+  const propertyName = keys[index];
+
+  // 濡傛灉鏄犲皠涓病鏈夎 index锛岀洿鎺ヨ繑鍥�
+  if (!propertyName) {
+    console.warn('Unsupported index:', index);
+    return;
+  }
+
+  // 閬嶅巻 lastList 骞舵洿鏂板搴旂殑灞炴��
+  props.lastList.forEach(obj => {
+    // 鑾峰彇鍓嶇紑鍜� orderId
+    const prefix = props.lastList[id].processId.substring(0, 11);
+    const orderId = obj.orderId;
+    const glassNumber = props.lastList[id].glassNumber
+    // 鏍规嵁 propertyName 鏇存柊灞炴��
+    if (propertyName === 'productAbbreviation' && prefix === obj.processId.substring(0, 11)) {
+      obj.productAbbreviation = result;
+    }
+
+    if (propertyName === 'project' && orderId === obj.orderId) {
+      obj.project = result;
+    }
+    if (propertyName === 'productName' && prefix === obj.processId.substring(0, 11)) {
+      obj.productName = result;
+    }
+    if (propertyName === 'customerName' && orderId === obj.orderId) {
+      obj.customerName = result;
+    }
+    if (propertyName === 'orderId' && orderId === obj.orderId) {
+      obj.orderId = result;
+    }
+    if (propertyName === 'glassNumber' && glassNumber === obj.glassNumber) {
+      obj.glassNumber = result;
+    }
+    if (propertyName === 'width' && glassNumber === obj.glassNumber) {
+      obj.width = result;
+    }
+    if (propertyName === 'height' && glassNumber === obj.glassNumber) {
+      obj.height = result;
+    }
+    if (propertyName === 'custom1' && orderId === obj.orderId) {
+      obj.custom1 = result;
+    }
+    if (propertyName === 'custom2' && orderId === obj.orderId) {
+      obj.custom2 = result;
+    }
+    if (propertyName === 'custom3' && orderId === obj.orderId) {
+      obj.custom3 = result;
+    }
+    if (propertyName === 'custom4' && orderId === obj.orderId) {
+      obj.custom4 = result;
+    }
+    if (propertyName === 'custom5' && orderId === obj.orderId) {
+      obj.custom5 = result;
+    }
+  });
+}
+
+</script>
+
+<template>
+  <div id="print" class="printFlowCard_semi">
+
+    <template v-for="(item1, id) in props.lastList">
+      <div class="entirety_semi">
+        <div class="row4">{{ faceOrientation }}</div>
+        <div v-for="(item, id ,index) in labelList" class="contentRow">
+          <div contenteditable="true" v-if="item1[item.name] != null && item1[item.name] !== ''" class="row1"
+            @input="updateProductName($event, id, id)">{{ item.title }}锛歿{ item1[item.name] }}</div>
+          <!--        <div v-if="item1[item.name] != null && item1[item.name] !== ''" class="row2">{{ item1[item.name] }}</div>-->
+        </div>
+        <!-- <div v-html="company.printLabel.customSemi(item1)"></div> -->
+      </div>
+      <div v-if="(id + 1) % 2 === 0" class="pagebreak"></div>
+    </template>
+
+  </div>
+
+
+
+
+
+</template>
+
+<style scoped>
+* {
+  margin: 0;
+  padding: 0;
+}
+
+body {
+  overflow: hidden;
+  font-family: Arial;
+
+}
+
+#printButton {
+  margin-top: -20px;
+  width: 100px;
+}
+
+
+
+/*鍗�*/
+.printFlowCard_semi {
+  flex-wrap: wrap;
+  font-size: 10px;
+  display: flex;
+  justify-content: space-between;
+}
+
+
+
+/*鍗�*/
+.entirety_semi {
+  width: 45%;
+  display: flex;
+  text-align: center;
+  flex-direction: column;
+  margin: 8px;
+
+}
+
+.row3 {
+  text-align: center;
+}
+
+.contentRow {
+  display: flex;
+  text-align: center;
+}
+
+label {
+  font-weight: bolder;
+}
+
+.contentRow .row1 {
+  width: 100%;
+}
+
+.entirety_semi .row4 {
+  text-align: right;
+}
+
+.contentRow .row1,
+.contentRow .row2 {
+  text-align: left;
+}
+
+
+
+@media print {
+  @page {
+    size: auto;
+    /* auto is the initial value */
+    margin: 13mm 5mm 0mm 7mm;
+    /* this affects the margin in the printer settings */
+  }
+
+  div {
+    page-break-inside: avoid;
+  }
+
+
+
+  .pagebreak {
+    page-break-after: always;
+  }
+
+}
+
+.printFlowCard_semi1 {
+  flex-wrap: wrap;
+  font-size: 8pt;
+  display: flex;
+}
+
+
+/*鎴�*/
+.entirety_semi1 {
+  width: 50%;
+  display: flex;
+  text-align: center;
+  flex-direction: column;
+  margin-left: -10px;
+  height: 80px;
+
+}
+
+.contentRow1 {
+  font-weight: bolder;
+  display: flex;
+  text-align: center;
+  width: 100%;
+}
+
+.contentRow1 .row1 {
+  width: 30%;
+  font-weight: bolder;
+}
+
+.entirety_finished1 .row4 {
+  font-weight: bolder;
+  text-align: right;
+  margin-right: 10px;
+}
+
+.contentRow1 .row1,
+.contentRow1 .row2 {
+  text-align: left;
+  font-weight: bolder;
+}
+</style>
\ No newline at end of file
diff --git a/UI-Project/src/views/hollow/PrintFlowCardDetails.vue b/UI-Project/src/views/hollow/PrintFlowCardDetails.vue
new file mode 100644
index 0000000..2e52072
--- /dev/null
+++ b/UI-Project/src/views/hollow/PrintFlowCardDetails.vue
@@ -0,0 +1,1098 @@
+<script setup>
+
+import request from "@/utils/request"
+import deepClone from "@/utils/deepClone"
+import {ElCheckbox, ElDatePicker, ElMessage} from "element-plus"
+import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue"
+import {useRouter} from 'vue-router'
+import {useI18n} from 'vue-i18n'
+import {changeFilterEvent, filterChanged} from "@/hook"
+import {VXETable} from "vxe-table";
+import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
+import PrintProcess from '@/components/pp/PrintProcess.vue'
+import PrintLabel from '@/views/pp/processCard/PrintLabel.vue'
+import PrintCustomLabel from '@/components/pp/PrintCustomLabelDetails.vue'
+import PrintCustomLabelSemi from '@/components/pp/PrintCustomLabelSemi.vue'
+import PrintCustomLabelXJ from '@/components/pp/PrintCustomLabelTwo.vue'
+import PrintCustomLabelXJTwo from '@/components/pp/PrintCustomLabelXJTwo.vue'
+import SortDetail from '@/components/pp/SelectSortDetailProcessCard.vue'
+import footSum from "@/hook/footSum"
+import companyInfo from "@/stores/sd/companyInfo"
+import {CircleCheck, Download, Printer} from "@element-plus/icons-vue/global";
+import TagStyleDesigner from "@/components/pp/TagStyleDesigner.vue";
+import {hiprint} from "vue-plugin-hiprint";
+
+const company = companyInfo()
+
+
+//璇█鑾峰彇
+const {t} = useI18n()
+let router = useRouter()
+const dialogTableVisible = ref(false)
+const dialogTableVisibleLabel = ref(false)
+const dialogTableVisibleCustomLabel = ref(false)
+const dialogTableVisibleLabelXJ = ref(false)
+const dialogTableVisibleLabelXJTwo = ref(false)
+const printVisible = ref(false)
+let selectRecords = ref(null)
+let titleStyleVisible = ref(false)
+let lastList = ref([])
+const selectRecordsData = ref({
+  printList: []
+})
+
+const xGrid = ref(null)
+const xGridDetail = ref(null)
+
+//鎺掑簭
+let editRow = ref({
+  processId: null,
+  technologyNumber: null,
+  process: null
+})
+//钀芥灦椤哄簭
+let landingSequence= ref(1)
+//鎵撳嵃
+let printRow = ref({
+  list: null,
+  printMergeVal: null,
+  like: null
+})
+
+//鏍囩
+let labelRow = ref({
+  list: null,//鍕鹃�夌殑鏁版嵁
+  faceOrientation: null,//鍐呭闈�
+  type: null,//鏍囩妯℃澘
+  lableType: null,//鏍囩绫诲瀷
+  dataType: null,
+  landingSequence:null
+})
+
+
+const getTableRow = (row, type) => {
+  switch (type) {
+    case 'edit' : {
+      editRow.value.processId = row.process_id
+      editRow.value.technologyNumber = row.technology_number
+      editRow.value.process = row.process
+      printVisible.value = true
+
+      // router.push({path: '/sort-detail', query: {processId: row.process_id,technologyNumber:row.technology_number}})
+      break
+    }
+  }
+}
+//绛涢�夋潯浠讹紝鏈夊閿渶瑕佸厛瀹氫箟鏄庣粏閲岄潰鐨勬暟鎹�
+let filterData = ref({
+
+  orderGlassDetail: {
+    productionId: '',
+  },
+  orderDetail: {
+    orderId: '',
+    productId: '',
+    productName: '',
+  }
+
+
+})
+
+//瀹氫箟椤甸潰鎬婚〉鏁�
+let pageTotal = ref('')
+//瀹氫箟鏁版嵁杩斿洖缁撴灉
+let produceList = ref([])
+//瀹氫箟鏁版嵁杩斿洖缁撴灉
+let produceDetailList = ref([])
+//瀹氫箟褰撳墠椤垫暟
+let pageNum = $ref(1)
+let pageState = null
+
+//瀹ゅ唴瀹ゅ闈�
+const stateValue = ref('')
+const stateOptions = [
+  {
+    value: t('processCard.thisIsTheIndoorSurface'),
+    label: t('processCard.thisIsTheIndoorSurface'),
+  },
+  {
+    value: t('processCard.thisSideIsOutsideTheRoom'),
+    label: t('processCard.thisSideIsOutsideTheRoom'),
+  },
+]
+
+//鏍囩绫诲瀷
+let filteredOptions = []
+const lableType = ref('1')
+const lableTypeOptions = [
+  {
+    value: '1',
+    label: t('processCard.finishedProductLabel'),
+  },
+  /*  {
+      value: '2',
+      label: t('processCard.halfProductLabel'),
+    },*/
+  {
+    value: `${company.printLabel.labelValue}`,
+    label: `${company.printLabel.labelType}`,
+  },
+  {
+    value: `${company.printLabel.labelValue3}`,
+    label: `${company.printLabel.labelType3}`,
+  },
+]
+let hidePrintLabels = company.printLabel.hideButton;
+let btnType = company.printBtn;
+
+if (hidePrintLabels == 'true') {
+  filteredOptions = lableTypeOptions.filter((option, index) => index !== 2);
+} else {
+  filteredOptions = lableTypeOptions;
+}
+
+//鍚堢墖娴佺▼鍗℃墦鍗颁笅鎷夐�夐」
+const printMerge = ref('')
+const printMergeOptions = [{}]
+
+const printContent = ref({
+  id: 'child',
+
+})
+
+
+const printContentLabel = ref({
+  id: 'childLabel',
+})
+
+const printContentLabelSemi = ref({
+  id: 'childLabelSemi',
+})
+
+//鎵撳嵃绫诲瀷
+const printType = ref()
+
+//瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
+const titleSelectJson = ref({
+  dataType: [],
+})
+
+const data = ref({
+  printList: []
+})
+
+onMounted(async () => {
+  await getTags();
+  await hiprint.init();
+})
+let hiprintTemplate = ref()
+
+const tags = ref([])
+
+const tag = ref({
+  id: null,
+  name: null,
+  type: 1,
+  tagWidth: null,
+  tagHeight: null,
+  value: null,
+  size: null
+})
+
+const changeTag = () => {
+  hiprintTemplate.value = new hiprint.PrintTemplate({});
+  const json = JSON.parse(tag.value.value)
+  hiprintTemplate.value.update(json)
+}
+
+const getTags = () => {
+  request.get('tagStyle/getTagList').then(res => {
+    tags.value = res.data
+  })
+}
+const printOrder = (type) => {
+  const list = hiprintTemplate.value.getJson()
+  list.panels[0].printElements.forEach(element => {
+    element.options.fontFamily = 'Arial'
+  })
+  let object =  lastList.value
+  //鍒ゆ柇鏄惁涓鸿〃鏍�
+  let columnsNum = null
+  if(list.panels[0].printElements[0].options.field==='table'){
+    object = {table:lastList.value}
+    columnsNum = (list.panels[0].printElements[0].options.gridColumns || 1)
+  }
+  hiprintTemplate.value.print(object)
+
+}
+const orderOtherMoney = ref(null)
+
+const {currentRoute} = useRouter()
+const route = currentRoute.value
+
+let orderId = route.query.orderId
+data.value.printList = JSON.parse(route.query.printList)
+let type = parseInt(route.query.type)
+let inquiryMode = route.query.checkedValue
+// 绗竴娆″姞杞芥煡璇�
+request.post(`/processCard/selectPrintDetails/${inquiryMode}/${type}`, data.value).then((res) => {
+
+  if (res.code == 200) {
+    let newDataCollection = [];
+    for (let i = 0; i < res.data.data.length; i++) {
+      res.data.data[i].detail.forEach((item) => {
+        newDataCollection.push(item);
+      })
+    }
+    orderOtherMoney.value = res.data.orderOtherMoney
+    orderOtherMoney.value.forEach(item => {
+      let column = {
+        field: `${item.column}`,
+        width: 100,
+        title: item.alias,
+        filters: [{data: ''}],
+        slots: {filter: 'num1_filter'},
+        filterMethod: filterChanged,
+        sortable: true
+      }
+
+      gridOptions.columns.push(column)
+
+    })
+    titleSelectJson.value.dataType = res.data.type
+    xGrid.value.reloadData(newDataCollection)
+    gridOptions.loading = false
+    hideButton()
+  } else {
+    ElMessage.warning(res.msg)
+  }
+})
+
+
+//琛ㄥ熬姹傚拰
+const sumNum = (list, field) => {
+  let count = 0
+  list.forEach(item => {
+    count += Number(item[field])
+  })
+  return count.toFixed(2)
+}
+
+
+const hasDecimal = (value) => {
+  const regex = /\./; // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+  return regex.test(value); // 杩斿洖true/false
+}
+
+
+const gridOptions = reactive({
+  loading: true,
+  border: "full",//琛ㄦ牸鍔犺竟妗�
+  keepSource: true,//淇濇寔婧愭暟鎹�
+  align: 'center',//鏂囧瓧灞呬腑
+  stripe: true,//鏂戦┈绾�
+  rowConfig: {isCurrent: true, isHover: true, height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+  id: 'printFlowCard_1',
+  showFooter: true,//鏄剧ず鑴�
+  printConfig: {},
+  importConfig: {},
+  exportConfig: {},
+  scrollX: {enabled: true},
+  scrollY: {enabled: true, gt: 0},//寮�鍚櫄鎷熸粴鍔�
+  showOverflow: true,
+  columnConfig: {
+    resizable: true,
+    useKey: true
+  },
+  filterConfig: {   //绛涢�夐厤缃」
+                    // remote: true
+  },
+  customConfig: {
+    storage: true
+  },
+  editConfig: {
+    trigger: 'click',
+    mode: 'row',
+    showStatus: true
+  },//琛ㄥご鍙傛暟
+  columns: [
+    {type: 'expand', fixed: "left", slots: {content: 'content'}, width: 50},
+    {title: t('basicData.operate'), width: 55, slots: {default: 'button_slot'}, fixed: "left"},
+    {type: 'checkbox', fixed: "left", title: t('basicData.check'), width: 80},
+    {type: 'seq', fixed: "left", title: t('basicData.Number'), width: 50},
+    {
+      field: 'order_id',
+      title: t('order.orderId'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 120
+    },
+    {
+      field: 'process_id',
+      title: t('processCard.processId'),
+      showOverflow: "ellipsis",
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 140
+    },
+    {
+      field: 'customer_name',
+      title: t('customer.customerName'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 120
+    },
+    {
+      field: 'project',
+      title: t('order.project'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged,
+      width: 120
+    },
+    {
+      field: 'order_number',
+      title: t('order.OrderNum'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 120
+      , sortable: true
+    },
+    {
+      field: 'technology_number',
+      title: t('processCard.technologyNumber'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 120
+      , sortable: true
+    },
+    {
+      field: 'width',
+      title: t('order.width'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 100
+    },
+    {
+      field: 'height',
+      title: t('order.height'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 100
+    },
+    {
+      field: 'glassNumber',
+      title: t('reportingWorks.glassNumber'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 100
+    },
+    {field: 'quantity', title: t('order.quantity'), width: 90},
+    {field: 'printQuantity', title: t('processCard.printQuantity'), width: 90,
+      editRender: {name: 'input', attrs: {placeholder: ''}},
+    },
+    {field: 'total_area', title: t('order.area'), width: 90},
+    {
+      field: 'product_name', title: t('order.product'), width: 120,
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged
+    },
+    {
+      field: 'glass_child',
+      title: t('reportingWorks.glassChild'),
+      width: 120,
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged
+    },
+    {field: 'founder', title: t('processCard.founder'), width: 120},
+    {field: 'splitFrame_time', title: t('processCard.splitFrameTime'), width: 120},
+    {
+      field: 'process', title: t('craft.process'), filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 160
+    },
+    {
+      field: 'print_status',
+      title: t('processCard.printStatus'),
+      filters: [{data: ''}],
+      slots: {filter: 'num1_filter'},
+      filterMethod: filterChanged, width: 120
+    },
+  ],//琛ㄥご鎸夐挳
+//琛ㄥ崟楠岃瘉
+  editRules: {
+    printQuantity: [
+      {
+        validator ({ row }) {
+          const regex = /^[0-9]\d*$/
+          const printQuantity =
+              (row.printQuantity === undefined || row.printQuantity===null || row.printQuantity==='') ? 0 : row.printQuantity
+           if(!regex.test(printQuantity)){
+             return new Error(t('reportingWorks.enterIntegerGreaterThanEqualTo'))
+          }
+          else if(row.quantity<printQuantity){
+            return new Error(t('processCard.printWarn1'))
+          }
+        }
+      }
+    ]
+  },
+  toolbarConfig: {
+    buttons: [
+      {code: 'print', name: t('processCard.print'), status: 'primary'},
+      {code: 'customLabel', name: t('processCard.customLabelPrinting'), status: 'primary'},
+      {code: 'printLabel', name: t('processCard.labelPrinting'), status: 'primary'},
+      {code: 'printLabel2', name: t('processCard.labelPrinting2'), status: 'primary'},
+      {code: 'printLabel3', name: t('processCard.finishedProductPrinting2'), status: 'primary'},
+      {code: 'printTest', name: t('processCard.editablePrinting'), status: 'primary'},
+      {code: 'invertSelection', name: t('processCard.invertSelection'), status: 'primary'},
+      // {code: 'printLike', name: "鍚岄厤缃墦鍗�", status: 'primary'},
+    ],
+    // import: false,
+    // export: true,
+    //print: true,
+    zoom: true,
+    custom: true
+  },
+  data: null,//琛ㄦ牸鏁版嵁
+  //鑴氶儴姹傚拰
+  footerMethod({columns, data}) {//椤佃剼鍑芥暟
+    return [
+      columns.map((column, columnIndex) => {
+        if (columnIndex === 0) {
+          return t('basicData.total')
+        }
+        const List = ["quantity", 'total_area',]
+        if (List.includes(column.field)) {
+          return footSum(data, column.field)
+        }
+        return ''
+      })
+    ]
+  },
+
+
+})
+
+const gridEvents = {
+  async toolbarButtonClick({code}) {
+    const $grid = xGrid.value
+    selectRecords = $grid.getCheckboxRecords()
+    // selectRecords.forEach(obj => {
+    //   delete obj.print_status;
+    // });
+    let type = tag.value.name
+    let faceOrientation = stateValue.value
+    let lableTypes = lableType.value
+    let lableTitle = lableType.text
+    if ($grid) {
+      switch (code) {
+        //鎵撳嵃娴佺▼鍗�
+        case 'print': {
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+
+          let id = ""
+          for (let i = 0; i < selectRecords.length; i++) {
+            if (i + 1 === selectRecords.length) {
+              id += selectRecords[i].id
+            } else {
+              id += selectRecords[i].id + "|"
+            }
+          }
+          printRow.value.list = JSON.stringify(selectRecords)
+          printRow.value.printMergeVal = printMerge.value
+          printRow.value.like = null
+          // router.push({path: '/main/processCard/printProcess', query: {printList: JSON.stringify(selectRecords),printMerge:printMergeVal}})
+          dialogTableVisible.value = true
+          break
+        }
+        //鏍囩鎵撳嵃 甯稿窞
+        case 'printLabel': {
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+
+          let id = ""
+          for (let i = 0; i < selectRecords.length; i++) {
+            if (i + 1 === selectRecords.length) {
+              id += selectRecords[i].id
+            } else {
+              id += selectRecords[i].id + "|"
+            }
+          }
+          router.push({
+            path: '/main/processCard/PrintLabel',
+            query: {printList: JSON.stringify(selectRecords), printType: 2}
+          })
+
+          break
+        }
+        //鏍囩鎵撳嵃2 甯稿窞
+        case 'printLabel2': {
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+
+          let id = ""
+          for (let i = 0; i < selectRecords.length; i++) {
+            if (i + 1 === selectRecords.length) {
+              id += selectRecords[i].id
+            } else {
+              id += selectRecords[i].id + "|"
+            }
+          }
+          router.push({
+            path: '/main/processCard/PrintCustomLabelSemi2',
+            query: {printList: JSON.stringify(selectRecords), printType: 2}
+          })
+
+          break
+        }
+        case 'sort': {
+          const $table = xGridDetail.value
+          let data = $table.getTableData().fullData
+          let flowCardData = ref({
+            flowCard: data,
+          })
+          for (let i = 0; i < flowCardData.value.flowCard.length; i++) {
+            const regex = /^[1-9]\d*$/
+            if (!regex.test(flowCardData.value.flowCard[i].sort)) {
+              ElMessage.warning(t('basicData.msg.greater0'))
+              return; // 濡傛灉鏈変竴涓笉鏄暣鏁�
+            }
+          }
+          request.post("/processCard/printSort", flowCardData.value).then((res) => {
+            if (res.code == 200) {
+              ElMessage.success(t('processCard.sortingSuccessful'))
+              router.push({
+                path: '/main/processCard/PrintFlowCard',
+                query: {orderId: orderId, random: Math.random()}
+              })
+
+              //location.reload();
+            } else {
+              ElMessage.warning(res.msg)
+            }
+          })
+          break
+        }
+        //鑷畾涔夋垚鍝佹爣绛炬墦鍗�
+        case 'customLabel': {
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+          if (type === null || type === '' || type === undefined) {
+            ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle'))
+            return
+          }
+
+          let id = ""
+          for (let i = 0; i < selectRecords.length; i++) {
+            if (i + 1 === selectRecords.length) {
+              id += selectRecords[i].id
+            } else {
+              id += selectRecords[i].id + "|"
+            }
+          }
+          //鎴愬搧鏍囩1
+          if (lableTypes == 1) {
+            labelRow.value.list = JSON.stringify(selectRecords)
+            labelRow.value.faceOrientation = faceOrientation
+            labelRow.value.type = type
+            labelRow.value.lableType = lableTypes
+            lastList.value = []
+            if (company.label === 1) {
+              dialogTableVisibleLabel.value = true
+            }
+            //甯稿窞椤圭洰
+            else if (company.label === 2) {
+              router.push({
+                path: '/main/processCard/PrintCustomLabelCZ',
+                query: {
+                  type: type,
+                  faceOrientation: faceOrientation,
+                  lableType: lableTypes,
+                  printList: JSON.stringify(selectRecords),
+                  printType: 2
+                }
+              })
+            }
+
+          }
+          //鎴愬搧鏍囩2
+          else if (lableTypes == 2) {
+            labelRow.value.list = JSON.stringify(selectRecords)
+            labelRow.value.faceOrientation = faceOrientation
+            labelRow.value.type = type
+            labelRow.value.lableType = lableTypes
+            lastList.value = []
+            if (company.label === 1) {
+              dialogTableVisibleCustomLabel.value = true
+            }
+            //甯稿窞椤圭洰
+            else if (company.label === 2) {
+              router.push({
+                path: '/main/processCard/PrintCustomLabelSemiCZ',
+                query: {
+                  type: type,
+                  faceOrientation: faceOrientation,
+                  lableType: lableTypes,
+                  printList: JSON.stringify(selectRecords),
+                  printType: 2
+                }
+              })
+            }
+          }
+          //鎴愬搧鏍囩3
+          else if (lableTypes == 3) {
+            router.push({
+              path: '/main/processCard/PrintLabel1',
+              query: {
+                type: type,
+                faceOrientation: faceOrientation,
+                lableType: lableTypes,
+                printList: JSON.stringify(selectRecords),
+                printType: 2
+              }
+            })
+
+          }
+
+
+          break
+        }
+        case 'printLike': {
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+          if (printMerge.value === null || printMerge.value === '') {
+            ElMessage.warning('璇峰~鍏ラ渶瑕佸悎骞剁殑灞�')
+            return
+          }
+
+          let id = ""
+          for (let i = 0; i < selectRecords.length; i++) {
+            if (i + 1 === selectRecords.length) {
+              id += selectRecords[i].id
+            } else {
+              id += selectRecords[i].id + "|"
+            }
+          }
+          printRow.value.list = JSON.stringify(selectRecords)
+          printRow.value.printMergeVal = printMerge.value
+          printRow.value.like = "1"
+          // router.push({path: '/main/processCard/printProcess', query: {printList: JSON.stringify(selectRecords),printMerge:printMergeVal}})
+          dialogTableVisible.value = true
+          break
+        }
+        case 'printTest': {
+          const errMap = await $grid.validate(true)
+          if (errMap) {
+            ElMessage.error(t('basicData.msg.checkoutLose'))
+            return
+          }
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+          // if (type === null || type === '' || type === undefined) {
+          //   ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle'))
+          //   return
+          // }
+
+          let id = ""
+          for (let i = 0; i < selectRecords.length; i++) {
+            if (i + 1 === selectRecords.length) {
+              id += selectRecords[i].id
+            } else {
+              id += selectRecords[i].id + "|"
+            }
+          }
+          labelRow.value.landingSequence = landingSequence
+          labelRow.value.list = JSON.stringify(selectRecords)
+          labelRow.value.faceOrientation = faceOrientation
+          labelRow.value.type = type
+          labelRow.value.lableType = lableTypes
+          titleStyleVisible.value = true
+          break
+        }
+        case 'printLabel3': {
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+          if (tag.value.name === null || tag.value.name === '' || tag.value.name === undefined) {
+            ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle'))
+            return
+          }
+
+          let id = ""
+          for (let i = 0; i < selectRecords.length; i++) {
+            if (i + 1 === selectRecords.length) {
+              id += selectRecords[i].id
+            } else {
+              id += selectRecords[i].id + "|"
+            }
+          }
+
+          labelRow.value.list = JSON.stringify(selectRecords)
+          labelRow.value.faceOrientation = faceOrientation
+          labelRow.value.type = tag.value.name
+          labelRow.value.lableType = lableTypes
+          labelRow.value.dataType = 1
+          let columnsLabel = company.printLabel.columnsLabel
+          if (columnsLabel == 1) {
+            dialogTableVisibleLabelXJTwo.value = true
+          } else {
+            dialogTableVisibleLabelXJ.value = true
+          }
+
+          break
+        }
+        case 'invertSelection': {
+          if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) {
+            ElMessage.warning(t('searchOrder.msgList.checkOrder'))
+            return
+          }
+
+          let tableData = $grid.getTableData().fullData;
+          // 鍋囪浣犵殑 Vxe Table 寮曠敤涓� xTable
+          const tableRef = $grid;
+
+          // 鑾峰彇褰撳墠閫変腑鐨勮褰�
+          //const selectedRecords = tableRef.getCheckboxRecords();
+          const allRecords = $grid.getTableData().fullData; // 鏇挎崲涓哄疄闄呯殑鏁版嵁婧�
+          allRecords.forEach(record => {
+            tableRef.toggleCheckboxRow(record);
+          });
+        }
+      }
+    }
+  },
+}
+
+
+const openedTable = () => {
+  let detail = ref(produceDetailList.value)
+  xGridDetail.value.reloadData(detail.value)
+  addListener(xGridDetail.value, detailGridOptions)
+}
+
+const hideButton = () => {
+  gridOptions.toolbarConfig.buttons = gridOptions.toolbarConfig.buttons.filter(button => {
+    // 濡傛灉 type 涓嶄负绌烘椂锛岄殣钘� print 鎸夐挳
+    if (btnType == 1 && button.code === 'print') {
+      return false;  // 闅愯棌 print 鎸夐挳
+    }
+
+    // 鏍规嵁 hidePrintLabels 鐨勫�煎垽鏂槸鍚﹂殣钘� printLabel銆乸rintLabel2 鍜� customLabel
+    if (hidePrintLabels == 'true') {
+      return button.code !== 'printLabel' && button.code !== 'printLabel2' && button.code !== 'customLabel';
+    } else {
+      // 濡傛灉 hidePrintLabels 涓嶆槸 'true'锛屽垯闅愯棌 printLike銆乸rintLabel3 鍜� printTest
+      return button.code !== 'printLike' && button.code !== 'printLabel3' && button.code !== 'printTest';
+    }
+
+    // 榛樿杩斿洖 true锛岃〃绀轰繚鐣欐寜閽�
+    return true;
+  });
+};
+
+
+
+// 鐩戝惉鎵撳嵃娆℃暟浜嬩欢
+const printNumber = () => {
+
+  selectRecordsData.value.printList = selectRecords
+  request.post(`/processCard/updatePrintNumber`, selectRecordsData.value).then((res) => {
+    if (res.code == 200 && res.data === true) {
+    } else {
+
+      ElMessage.warning(t('basicData.msg.saveFail'))
+
+    }
+  })
+}
+
+function onlandingSequenceChange(checked) {
+  landingSequence.value = checked ? 0 : 1
+}
+</script>
+
+<template>
+  <div  style="width: 100%;height: 100%">
+    <div class="head">
+      <el-input v-show="isVisible" v-model="printMerge" :placeholder="$t('processCard.mergePrinting')" clearable
+                style="width: 90px"></el-input>
+      &nbsp;
+      <label>{{ $t('processCard.labelStyle') }}锛�</label>
+      <el-select v-model="tag" :placeholder="$t('processCard.pleaseSelect')" style="width: 140px" @change="changeTag">
+        <el-option
+            v-for="(tag,index) in tags"
+            :key="index"
+            :label="tag.name"
+            :value="tag"
+        />
+      </el-select>
+      &nbsp;
+      <el-select v-model="lableType" :placeholder="lableTypeOptions[0].label" class="m-2" style="width: 140px">
+        <el-option
+            v-for="item in filteredOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+        />
+      </el-select>
+      &nbsp;
+      <el-select v-model="stateValue" :placeholder="$t('processCard.pleaseSelect')" allow-create class="m-2" clearable
+                 filterable style="width: 140px">
+        <el-option
+            v-for="item in stateOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+        />
+      </el-select>
+      &nbsp;
+      <el-checkbox
+          :model-value="landingSequence === 0"
+          @change="onlandingSequenceChange"
+      >
+        {{ t('processCard.landingSequence') }}
+      </el-checkbox>
+    </div>
+
+    <div class="main-table">
+      <vxe-grid
+          ref="xGrid"
+          :checkbox-config="{labelField: 'name', highlight: true, range: true}"
+          :column-config="{resizable: true}"
+          :data="tableData"
+          :row-config="{isCurrent: true, isHover: true}"
+          class="mytable-scrollbar"
+          height="100%"
+          v-bind="gridOptions"
+          v-on="gridEvents">
+
+
+        >
+        <!--      @toolbar-button-click="toolbarButtonClickEvent"-->
+        <!--      涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�-->
+        <template #content="{ row }">
+          <ul class="expand-wrapper">
+            <li v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
+              <span style="font-weight: bold">{{ item.title + ':  ' }}</span>
+              <span v-if="hasDecimal(item.field)">{{ row[item.field.split('.')[0]][item.field.split('.')[1]] }}</span>
+              <span v-else>{{ row[item.field] }}</span>
+
+            </li>
+          </ul>
+        </template>
+
+        <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
+        <!--      v-if="userStore.user.permissions.indexOf('SelectProductionBasicData.edit') > -1"-->
+        <template #button_slot="{ row }">
+          <el-button link
+                     size="small"
+                     type="primary"
+                     @click="getTableRow(row,'edit')">
+            {{ $t('basicData.edit') }}
+          </el-button>
+
+        </template>
+
+        <template #num1_filter="{ column, $panel }">
+          <div>
+            <div v-for="(option, index) in column.filters" :key="index">
+              <input v-model="option.data"
+                     type="text"
+                     @input="changeFilterEvent($event, option, $panel)"
+                     @keyup.enter.native="$panel.confirmFilter()"/>
+            </div>
+          </div>
+        </template>
+
+
+      </vxe-grid>
+    </div>
+    <!--  娴佺▼鍗℃墦鍗�  -->
+    <el-dialog
+        id="sizePrintCalrd"
+        v-model="dialogTableVisible"
+        :title="$t('processCard.print')"
+        destroy-on-close
+        style="width: 75%;height:75% ">
+      <template #header="{ close, titleId, titleClass }">
+        <el-button v-print="printContent" :icon="Printer" circle @click="printNumber"/>
+      </template>
+      <print-process
+          id="child"
+          :printLike="printRow.like"
+          :printList="printRow.list"
+          :printMerge="printRow.printMergeVal"
+          style="width: 100%;height: 100%"/>
+    </el-dialog>
+
+    <!--    鎴愬搧鏍囩-->
+    <el-dialog
+        id="sizeCustom"
+        v-model="dialogTableVisibleLabel"
+        :title="$t('processCard.printLabel')"
+        destroy-on-close
+        style="width: 80%;height:75% ">
+      <template #header="{ close, titleId, titleClass }">
+        <el-button v-print="printContentLabel" :icon="Printer" circle @click="printNumber"/>
+      </template>
+      <print-custom-label id="childLabel"
+                          :faceOrientation="labelRow.faceOrientation"
+                          :lableType="labelRow.lableType"
+                          :lastList='lastList'
+                          :list="labelRow.list"
+                          :type="labelRow.type"
+                          style="width: 100%;height: 100%"/>
+    </el-dialog>
+
+    <!--   灏忕墖鏍囩 -->
+    <el-dialog
+        id="sizeCustomSemi"
+        v-model="dialogTableVisibleCustomLabel"
+        :title="$t('processCard.labelStyle')"
+        destroy-on-close
+        style="width: 80%;height:75% ">
+      <template #header="{ close, titleId, titleClass }">
+        <el-button v-print="printContentLabelSemi" :icon="Printer" circle/>
+      </template>
+      <print-custom-label-semi id="childLabelSemi"
+                               :faceOrientation="labelRow.faceOrientation"
+                               :lableType="labelRow.lableType"
+                               :list="labelRow.list"
+                               :type="labelRow.type"
+                               style="width: 100%;height: 100%"/>
+    </el-dialog>
+
+    <!--    鎺掑簭-->
+    <el-dialog
+        id="sizeCheck"
+        v-model="printVisible"
+        :title="$t('processCard.processCardDetails')"
+        destroy-on-close
+        style="width: 80%;height:75% ">
+      <sort-detail id="child" :process="editRow.process" :processId="editRow.processId"
+                   :technologyNumber="editRow.technologyNumber"/>
+    </el-dialog>
+
+    <!--   鏍囩鏍峰紡    -->
+    <el-dialog
+        id="titleStyle"
+        v-model="titleStyleVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        :title="$t('processCard.labelStyle')"
+        destroy-on-close
+        style="width: 90%;height:93%;margin-top: 3vh ">
+      <!--      <tag-style style="width: 100%;height: 100%"/>-->
+      <tag-style-designer :faceOrientation="labelRow.faceOrientation"
+                          :lableType="labelRow.lableType"
+                          :list="labelRow.list"
+                          :type="labelRow.type"
+                          :landingSequence="labelRow.landingSequence"
+                          style="width: 100%;height: 100%"/>
+    </el-dialog>
+
+    <!--    鎴愬搧鏍囩涓ゅ垪-->
+    <el-dialog
+        id="sizeCustom"
+        v-model="dialogTableVisibleLabelXJ"
+        :title="$t('processCard.printLabel')"
+        destroy-on-close
+        style="width: 80%;height:75% ">
+      <template #header="{ close, titleId, titleClass }">
+        <el-button :icon="Printer" circle @click="printOrder(1)"/>
+      </template>
+      <print-custom-label-x-j id="childLabel"
+                              :faceOrientation="labelRow.faceOrientation"
+                              :lableType="labelRow.lableType"
+                              :list="labelRow.list"
+                              :lastList='lastList'
+                              :type="labelRow.type"
+                              style="width: 100%;height: 100%"/>
+    </el-dialog>
+
+    <!--    鎴愬搧鏍囩涓ゅ垪鏂扮枂-->
+    <el-dialog
+        id="sizeCustom"
+        v-model="dialogTableVisibleLabelXJTwo"
+        :title="$t('processCard.printLabel')"
+        destroy-on-close
+        style="width: 80%;height:75% ">
+      <template #header="{ close, titleId, titleClass }">
+        <el-button v-print="printContentLabel" :icon="Printer" circle/>
+      </template>
+      <print-custom-label-x-j-two id="childLabel"
+                                  :dataType="labelRow.dataType"
+                                  :faceOrientation="labelRow.faceOrientation"
+                                  :lableType="labelRow.lableType"
+                                  :list="labelRow.list"
+                                  :type="labelRow.type"
+                                  style="width: 100%;height: 100%"/>
+    </el-dialog>
+  </div>
+</template>
+
+<style scoped>
+.main-div-customer {
+  width: 99%;
+  height: 92%;
+}
+
+.head{
+  width: 100%;
+  height: 35px;
+}
+
+.main-table{
+  width: 100%;
+  height: calc(100% - 35px);
+}
+
+
+:deep(#sizeCheck .el-dialog__body) {
+  height: 90%;
+  width: 100%;
+  overflow-y: auto;
+}
+
+:deep(#sizePrintCalrd .el-dialog__body) {
+  height: 85%;
+  width: 100%;
+  overflow-y: auto;
+}
+
+:deep(#sizeCustom .el-dialog__body) {
+  height: 85%;
+  width: 100%;
+  overflow-y: auto;
+}
+
+:deep(#sizeCustomSemi .el-dialog__body) {
+  height: 85%;
+  width: 100%;
+  overflow-y: auto;
+}
+
+:deep(#titleStyle .el-dialog__body) {
+  height: 85%;
+  width: 100%;
+  overflow-y: auto;
+}
+
+</style>
\ No newline at end of file
diff --git a/UI-Project/src/views/hollow/hollowequipment.vue b/UI-Project/src/views/hollow/hollowequipment.vue
index ce2f379..17165c1 100644
--- a/UI-Project/src/views/hollow/hollowequipment.vue
+++ b/UI-Project/src/views/hollow/hollowequipment.vue
@@ -1,6 +1,6 @@
 <template>
   <div style="height: 600px;">
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;" >
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;">
       <div style="display: flex; flex-direction: row; align-items: center; margin-bottom: 10px;">
         <el-button id="searchButton" type="primary" @click="handleormulan">
           {{ $t('hellow.hollowformula') }}
@@ -11,69 +11,76 @@
         <el-button type="primary" @click="selectproject">
           {{ $t('hellow.reviewproject') }}
         </el-button>
-    <el-button style="margin-left: 10px;" id="searchButton" type="primary" @click="handlehistorical">{{ $t('searchOrder.historicaltasks') }}</el-button>
-    <el-button style="margin-left: 10px;" id="searchButton" type="success" @click="handleBinda">
+        <el-button style="margin-left: 10px;" id="searchButton" type="primary" @click="handlehistorical">{{
+          $t('searchOrder.historicaltasks') }}</el-button>
+        <el-button style="margin-left: 10px;" id="searchButton" type="success" @click="handleBinda">
           {{ $t('hellow.starttask') }}
         </el-button>
         <el-button style="margin-left: 10px;" id="searchButton" type="info" @click="handleBindd">{{
-            $t('hellow.taskdet')
-          }}
+          $t('hellow.taskdet')
+        }}
         </el-button>
         <el-button style="margin-left: 10px;" id="searchButton" type="warning" @click="handleBindc">{{
-            $t('hellow.stopproject')
+          $t('hellow.stopproject')
+        }}
+        </el-button>
+        <el-button style="margin-left: 10px;" :disabled="listFlow.length > 0 ? false : true" id="searchButton" type="warning"
+          @click="handleBinde">{{
+            $t('searchOrder.printlabels')
           }}
         </el-button>
-  </div>
-    <div id="dotClass">
-      <!-- <div style="margin-bottom: -5px;margin-left: 5px;"> -->
+      </div>
+      <div id="dotClass">
+        <!-- <div style="margin-bottom: -5px;margin-left: 5px;"> -->
         <!-- <el-form> -->
-          <!-- <el-row> --> 
-            <!-- <el-col :span="4">
+        <!-- <el-row> -->
+        <!-- <el-col :span="4">
               <div  style="font-size: 15px;">
                 <el-form-item :label="$t('hellow.currenttask')" style="width: 14vw">
                   {{ temperingtotal }}
                 </el-form-item>
               </div>
             </el-col> -->
-            <!-- <el-col :span="5">
+        <!-- <el-col :span="5">
               <div style="font-size: 15px;">
                 <el-form-item :label="$t('hellow.claimednumber')" style="width: 14vw">
                   {{ glasstotal }}
                 </el-form-item>
               </div>
             </el-col> -->
-            <!-- <el-col :span="4">
+        <!-- <el-col :span="4">
               <div style="font-size: 15px;">
                 <el-form-item :label="$t('hellow.linenumber')" style="width: 14vw">
                   {{ fulltotals }}
                 </el-form-item>
               </div>
             </el-col> -->
-            <div style="margin-left: 70px;">{{ $t('hellow.freeone') }}</div>
-        <i :style="{ marginTop: '2px', backgroundColor: freeone, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
-        
-          <!-- </el-row> -->
+        <div style="margin-left: 70px;">{{ $t('hellow.freeone') }}</div>
+        <i
+          :style="{ marginTop: '2px', backgroundColor: freeone, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
+
+        <!-- </el-row> -->
         <!-- </el-form> -->
-      <!-- </div> -->
-       </div>
+        <!-- </div> -->
+      </div>
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
         <el-table height="650" ref="table" :data="tableDataa"
-                  :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
-          <el-table-column prop="flowCardId" :label="$t('hellow.flowCardId')" align="center"/>
-          <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center"/>
-          <el-table-column prop="hollowSequence" :label="$t('hellow.order')" align="center"/>
-          <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center"/>
-          <el-table-column prop="layer" :label="$t('hellow.layer')" align="center"/>
-          <el-table-column prop="filmsId" :label="$t('hellow.coatingtypes')" align="center"/>
-          <el-table-column prop="height" :label="$t('hellow.height')" align="center"/>
-          <el-table-column prop="width" :label="$t('hellow.width')" align="center"/>
+          :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
+          <el-table-column prop="flowCardId" :label="$t('hellow.flowCardId')" align="center" />
+          <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" />
+          <el-table-column prop="hollowSequence" :label="$t('hellow.order')" align="center" />
+          <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center" />
+          <el-table-column prop="layer" :label="$t('hellow.layer')" align="center" />
+          <el-table-column prop="filmsId" :label="$t('hellow.coatingtypes')" align="center" />
+          <el-table-column prop="height" :label="$t('hellow.height')" align="center" />
+          <el-table-column prop="width" :label="$t('hellow.width')" align="center" />
           <el-table-column prop="state" :label="$t('hellow.state')" align="center">
             <template #default="scope">
-            {{ scope.row.state == -1 ? $t('hellow.waitingout') : $t('hellow.finishout') }}
+              {{ scope.row.state == -1 ? $t('hellow.waitingout') : $t('hellow.finishout') }}
             </template>
           </el-table-column>
         </el-table>
-      <!-- <div style="display: flex;margin-left: 40%;margin-top: 10px;">
+        <!-- <div style="display: flex;margin-left: 40%;margin-top: 10px;">
       <div style="margin-top: 5px;margin-right: 5px;">{{ $t('hellow.line') }}</div>
     <el-pagination
           background
@@ -84,312 +91,317 @@
           @current-change="handlePageChange1"
         />
       </div> -->
-  </div>
+      </div>
     </el-card>
   </div>
   <!-- 鍒涘缓浠诲姟 -->
   <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%">
     <div style="display: flex;">
-    <el-input v-model="flowCardId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.incardnumber')" />
-    <el-input v-model="filmsId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('film.infilms')"/>
-    <el-input v-model="productName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('large.inproductname')"/>
-    <el-input v-model="customerName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('large.incustomerName')"/>
-    <el-input v-model="thickness" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.inthickness')"/>
-    <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchFlowCardsearch">
-      {{$t('reportmanage.inquire')}}</el-button>
-  </div>
-  <div style="margin-left: 87%;">{{$t('hellow.pairsnumbertotal')}}{{ pairTotal }}</div>
-  <el-table
-    ref="table"
-    style="margin-top: 20px; height: 700px;"
-    :data="tableDatab"
-    :row-class-name="tableRowClassName"
-    :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
-    row-key="projectNumber"
-  >
-    <el-table-column>
-    <template #default="props">
-      <el-table :data="props.row.flowCardGlassInfoDTOList" style="width: 100%" 
-      :row-class-name="(row) => nestedTableRowClassName(props.row, row)" 
-        >
-      <el-table-column prop="layer" fixed align="center" :label="$t('hellow.layernumber')" min-width="80"/>
-      <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80"/>
-      <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80"/>
-      <el-table-column prop="sumCount" align="center" :label="$t('hellow.totalnumber')" min-width="80"/>
-      <el-table-column prop="realCount" align="center" :label="$t('hellow.realpieces')" min-width="80"/>
-      <el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="80"/>
-      <el-table-column prop="pairCount" align="center" :label="$t('hellow.pairsnumber')" min-width="80"/>
-      </el-table>
-      </template>
-    </el-table-column>
-    <el-table-column prop="flowCardId" fixed align="center" :label="$t('hellow.cardnumber')" min-width="20"/>
-    <el-table-column prop="productName" fixed align="center" :label="$t('large.productname')" min-width="20"/>
-    <el-table-column prop="customerName" fixed align="center" :label="$t('large.customerName')" min-width="20"/>
-    <el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="270">
+      <el-input v-model="flowCardId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('searchOrder.incardnumber')" />
+      <el-input v-model="filmsId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('film.infilms')" />
+      <el-input v-model="productName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('large.inproductname')" />
+      <el-input v-model="customerName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('large.incustomerName')" />
+      <el-input v-model="thickness" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('searchOrder.inthickness')" />
+      <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchFlowCardsearch">
+        {{ $t('reportmanage.inquire') }}</el-button>
+    </div>
+    <div style="margin-left: 87%;">{{ $t('hellow.pairsnumbertotal') }}{{ pairTotal }}</div>
+    <el-table ref="table" style="margin-top: 20px; height: 700px;" :data="tableDatab"
+      :row-class-name="tableRowClassName" :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
+      row-key="projectNumber">
+      <el-table-column>
+        <template #default="props">
+          <el-table :data="props.row.flowCardGlassInfoDTOList" style="width: 100%"
+            :row-class-name="(row) => nestedTableRowClassName(props.row, row)">
+            <el-table-column prop="layer" fixed align="center" :label="$t('hellow.layernumber')" min-width="80" />
+            <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80" />
+            <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80" />
+            <el-table-column prop="sumCount" align="center" :label="$t('hellow.totalnumber')" min-width="80" />
+            <el-table-column prop="realCount" align="center" :label="$t('hellow.realpieces')" min-width="80" />
+            <el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="80" />
+            <el-table-column prop="pairCount" align="center" :label="$t('hellow.pairsnumber')" min-width="80" />
+          </el-table>
+        </template>
+      </el-table-column>
+      <el-table-column prop="flowCardId" fixed align="center" :label="$t('hellow.cardnumber')" min-width="20" />
+      <el-table-column prop="productName" fixed align="center" :label="$t('large.productname')" min-width="20" />
+      <el-table-column prop="customerName" fixed align="center" :label="$t('large.customerName')" min-width="20" />
+      <el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="270">
         <template #default="scope">
-          <el-button type="text" :disabled="scope.row.isThroughSlot" plain @click="handletake(scope.row)">{{ $t('hellow.claimquest') }}</el-button>
+          <el-button type="text" :disabled="scope.row.isThroughSlot" plain @click="handletake(scope.row)">{{
+            $t('hellow.claimquest') }}</el-button>
           <el-button type="text" plain @click="handleBindRack(scope.row)">{{
-              $t('hellow.missingfilms')
-            }}
+            $t('hellow.missingfilms')
+          }}
           </el-button>
           <el-button type="text" plain @click="handleout(scope.row)">{{
-              $t('hellow.forcedfilming')
-            }}
+            $t('hellow.forcedfilming')
+          }}
           </el-button>
         </template>
       </el-table-column>
-  </el-table>
-</el-dialog>
-<!-- 涓┖閰嶆柟娣诲姞 -->
-<el-dialog v-model="add" top="15vh" width="90%" :title="$t('hellow.hollowformula')" >
-  <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
-    <el-form label-width="150px" label-position="right">
-      <!-- 绗竴琛岋細3涓厓绱� -->
-      <el-row style="margin-top: 10px;">
-        <el-col :span="8">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.formulaName')" style="width: 90%;">
-              <el-input v-model="formulaName" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="8">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('Mounting.removalmethoda')" style="width: 90%;">
-              <el-select v-model="filmRemove" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('Mounting.removal')" value="1"></el-option>
-                <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="8">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.sealInsertb')" style="width: 90%;">
-              <el-input v-model="sealInsert" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+    </el-table>
+  </el-dialog>
+  <!-- 涓┖閰嶆柟娣诲姞 -->
+  <el-dialog v-model="add" top="15vh" width="90%" :title="$t('hellow.hollowformula')">
+    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
+      <el-form label-width="150px" label-position="right">
+        <!-- 绗竴琛岋細3涓厓绱� -->
+        <el-row style="margin-top: 10px;">
+          <el-col :span="8">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.formulaName')" style="width: 90%;">
+                <el-input v-model="formulaName" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('Mounting.removalmethoda')" style="width: 90%;">
+                <el-select v-model="filmRemove" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('Mounting.removal')" value="1"></el-option>
+                  <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.sealInsertb')" style="width: 90%;">
+                <el-input v-model="sealInsert" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗簩琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.topRemove')" style="width: 90%;">
-              <el-input v-model="topRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.bottomRemove')" style="width: 90%;">
-              <el-input v-model="bottomRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.leftRemove')" style="width: 90%;">
-              <el-input v-model="leftRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.rightRemove')" style="width: 90%;">
-              <el-input v-model="rightRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗簩琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.topRemove')" style="width: 90%;">
+                <el-input v-model="topRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.bottomRemove')" style="width: 90%;">
+                <el-input v-model="bottomRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.leftRemove')" style="width: 90%;">
+                <el-input v-model="leftRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.rightRemove')" style="width: 90%;">
+                <el-input v-model="rightRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗笁琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casOneb')" style="width: 90%;">
-              <el-select v-model="casOne" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casTwob')" style="width: 90%;">
-              <el-select v-model="casTwo" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casThreeb')" style="width: 90%;">
-              <el-select v-model="casThree" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casFourb')" style="width: 90%;">
-              <el-select v-model="casFour" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗笁琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casOneb')" style="width: 90%;">
+                <el-select v-model="casOne" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casTwob')" style="width: 90%;">
+                <el-select v-model="casTwo" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casThreeb')" style="width: 90%;">
+                <el-select v-model="casThree" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casFourb')" style="width: 90%;">
+                <el-select v-model="casFour" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗洓琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameOneb')" style="width: 90%;">
-              <el-input v-model="frameOne" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameTwob')" style="width: 90%;">
-              <el-input v-model="frameTwo" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameThreeb')" style="width: 90%;">
-              <el-input v-model="frameThree" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameFourb')" style="width: 90%;">
-              <el-input v-model="frameFour" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗洓琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameOneb')" style="width: 90%;">
+                <el-input v-model="frameOne" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameTwob')" style="width: 90%;">
+                <el-input v-model="frameTwo" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameThreeb')" style="width: 90%;">
+                <el-input v-model="frameThree" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameFourb')" style="width: 90%;">
+                <el-input v-model="frameFour" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗簲琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbOne')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightOne" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbTwo')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightTwo" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbThree')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightThree" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbFour')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightFour" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗簲琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbOne')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightOne" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbTwo')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightTwo" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbThree')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightThree" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbFour')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightFour" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗叚琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbOne')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthOne" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbTwo')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthTwo" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbThree')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthThree" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbFour')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthFour" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗叚琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbOne')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthOne" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbTwo')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthTwo" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbThree')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthThree" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbFour')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthFour" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗竷琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedOne')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeOne" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedTwo')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeTwo" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedThree')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeThree" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedFour')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeFour" style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
-    </el-form>
-  </div>
-  <template #footer>
+        <!-- 绗竷琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedOne')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeOne" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedTwo')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeTwo" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedThree')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeThree" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedFour')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeFour" style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleConfirm">
           {{ $t('basicData.confirm') }}
@@ -398,256 +410,261 @@
       </div>
     </template>
   </el-dialog>
-<!-- 涓┖閰嶆柟淇敼 -->
-<el-dialog v-model="adda" top="15vh" width="85%" :title="$t('hellow.edithollowformula')" >
-  <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
-    <el-form label-width="150px" label-position="right">
-      <!-- 绗竴琛岋細3涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="8">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.formulaName')" style="width: 90%;">
-              <el-input v-model="formulaName" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="8">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('Mounting.removalmethoda')" style="width: 90%;">
-              <el-select v-model="filmRemove" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('Mounting.removal')" value="1"></el-option>
-                <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="8">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.sealInsertb')" style="width: 90%;">
-              <el-input v-model="sealInsert" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+  <!-- 涓┖閰嶆柟淇敼 -->
+  <el-dialog v-model="adda" top="15vh" width="85%" :title="$t('hellow.edithollowformula')">
+    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
+      <el-form label-width="150px" label-position="right">
+        <!-- 绗竴琛岋細3涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="8">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.formulaName')" style="width: 90%;">
+                <el-input v-model="formulaName" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('Mounting.removalmethoda')" style="width: 90%;">
+                <el-select v-model="filmRemove" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('Mounting.removal')" value="1"></el-option>
+                  <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="8">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.sealInsertb')" style="width: 90%;">
+                <el-input v-model="sealInsert" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗簩琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.topRemove')" style="width: 90%;">
-              <el-input v-model="topRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.bottomRemove')" style="width: 90%;">
-              <el-input v-model="bottomRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.leftRemove')" style="width: 90%;">
-              <el-input v-model="leftRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.rightRemove')" style="width: 90%;">
-              <el-input v-model="rightRemove" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗簩琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.topRemove')" style="width: 90%;">
+                <el-input v-model="topRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.bottomRemove')" style="width: 90%;">
+                <el-input v-model="bottomRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.leftRemove')" style="width: 90%;">
+                <el-input v-model="leftRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.rightRemove')" style="width: 90%;">
+                <el-input v-model="rightRemove" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗笁琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casOneb')" style="width: 90%;">
-              <el-select v-model="casOne" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casTwob')" style="width: 90%;">
-              <el-select v-model="casTwo" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casThreeb')" style="width: 90%;">
-              <el-select v-model="casThree" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.casFourb')" style="width: 90%;">
-              <el-select v-model="casFour" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.F')" value="0"></el-option>
-                <el-option :label="$t('hellow.Y')" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗笁琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casOneb')" style="width: 90%;">
+                <el-select v-model="casOne" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casTwob')" style="width: 90%;">
+                <el-select v-model="casTwo" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casThreeb')" style="width: 90%;">
+                <el-select v-model="casThree" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.casFourb')" style="width: 90%;">
+                <el-select v-model="casFour" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.F')" value="0"></el-option>
+                  <el-option :label="$t('hellow.Y')" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗洓琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameOneb')" style="width: 90%;">
-              <el-input v-model="frameOne" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameTwob')" style="width: 90%;">
-              <el-input v-model="frameTwo" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameThreeb')" style="width: 90%;">
-              <el-input v-model="frameThree" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.frameFourb')" style="width: 90%;">
-              <el-input v-model="frameFour" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗洓琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameOneb')" style="width: 90%;">
+                <el-input v-model="frameOne" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameTwob')" style="width: 90%;">
+                <el-input v-model="frameTwo" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameThreeb')" style="width: 90%;">
+                <el-input v-model="frameThree" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.frameFourb')" style="width: 90%;">
+                <el-input v-model="frameFour" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗簲琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbOne')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightOne" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbTwo')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightTwo" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbThree')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightThree" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameHeightbFour')" style="width: 90%;">
-              <el-input v-model="intervalFrameHeightFour" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗簲琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbOne')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightOne" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbTwo')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightTwo" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbThree')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightThree" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameHeightbFour')" style="width: 90%;">
+                <el-input v-model="intervalFrameHeightFour" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗叚琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbOne')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthOne" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbTwo')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthTwo" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbThree')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthThree" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameWidthbFour')" style="width: 90%;">
-              <el-input v-model="intervalFrameWidthFour" autocomplete="off" />
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
+        <!-- 绗叚琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbOne')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthOne" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbTwo')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthTwo" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbThree')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthThree" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameWidthbFour')" style="width: 90%;">
+                <el-input v-model="intervalFrameWidthFour" autocomplete="off" />
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
 
-      <!-- 绗竷琛岋細4涓厓绱� -->
-      <el-row style="margin-top: 20px;">
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedOne')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeOne" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedTwo')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeTwo" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedThree')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeThree" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-        <el-col :span="6">
-          <div style="font-size: 15px;">
-            <el-form-item :label="$t('hellow.intervalFrameTypedFour')" style="width: 90%;">
-              <el-select v-model="intervalFrameTypeFour" clearable style="width: 100%" :placeholder="$t('screendisplay.pchoice')">
-                <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
-                <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
-              </el-select>
-            </el-form-item>
-          </div>
-        </el-col>
-      </el-row>
-    </el-form>
-  </div>
-  <template #footer>
+        <!-- 绗竷琛岋細4涓厓绱� -->
+        <el-row style="margin-top: 20px;">
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedOne')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeOne" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedTwo')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeTwo" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedThree')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeThree" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+          <el-col :span="6">
+            <div style="font-size: 15px;">
+              <el-form-item :label="$t('hellow.intervalFrameTypedFour')" style="width: 90%;">
+                <el-select v-model="intervalFrameTypeFour" clearable style="width: 100%"
+                  :placeholder="$t('screendisplay.pchoice')">
+                  <el-option :label="$t('hellow.intervalFrameTypeb')" value="1"></el-option>
+                  <el-option :label="$t('hellow.intervalFrameTypea')" value="5"></el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </el-col>
+        </el-row>
+      </el-form>
+    </div>
+    <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handledit">
           {{ $t('basicData.confirm') }}
@@ -665,36 +682,17 @@
             <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantity" autocomplete="off" />
           </el-form-item>
           <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
-            <el-select 
-            :placeholder="$t('hellow.line1')"
-            disabled
-             style="width: 270px"  
-             v-model="cell">
-               <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-          </el-select>
+            <el-select :placeholder="$t('hellow.line1')" disabled style="width: 270px" v-model="cell">
+              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
           </el-form-item>
           <el-form-item :label="$t('hellow.hollowformulp')" :required="true" style="width: 25vw;">
-        <el-select
-            v-model="selectedFormulaName"
-            filterable
-            clearable
-            :placeholder="$t('hellow.phollowformula')"
-            style="width: 270px"
-            @change="handleFormulaChange"
-        >
-          <el-option
-              v-for="item in titleformulaName"
-              :key="item.id"
-              :label="item.formulaName"
-              :value="item.formulaName"
-          />
-        </el-select>
-      </el-form-item>
+            <el-select v-model="selectedFormulaName" filterable clearable :placeholder="$t('hellow.phollowformula')"
+              style="width: 270px" @change="handleFormulaChange">
+              <el-option v-for="item in titleformulaName" :key="item.id" :label="item.formulaName"
+                :value="item.formulaName" />
+            </el-select>
+          </el-form-item>
         </el-form>
       </el-form>
     </div>
@@ -716,36 +714,17 @@
             <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantitya" autocomplete="off" />
           </el-form-item>
           <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
-            <el-select 
-            :placeholder="$t('hellow.line1')"
-            disabled
-             style="width: 270px"  
-             v-model="cella">
-               <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-          </el-select>
+            <el-select :placeholder="$t('hellow.line1')" disabled style="width: 270px" v-model="cella">
+              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
           </el-form-item>
           <el-form-item :label="$t('hellow.hollowformulp')" :required="true" style="width: 25vw;">
-        <el-select
-            v-model="selectedFormulaName"
-            filterable
-            clearable
-            :placeholder="$t('hellow.phollowformula')"
-            style="width: 270px"
-            @change="handleFormulaChange"
-        >
-          <el-option
-              v-for="item in titleformulaName"
-              :key="item.id"
-              :label="item.formulaName"
-              :value="item.formulaName"
-          />
-        </el-select>
-      </el-form-item>
+            <el-select v-model="selectedFormulaName" filterable clearable :placeholder="$t('hellow.phollowformula')"
+              style="width: 270px" @change="handleFormulaChange">
+              <el-option v-for="item in titleformulaName" :key="item.id" :label="item.formulaName"
+                :value="item.formulaName" />
+            </el-select>
+          </el-form-item>
         </el-form>
       </el-form>
     </div>
@@ -765,29 +744,23 @@
         {{ currentRow.flowCardId }}
       </el-form-item>
     </div>
-    <el-table ref="table" style="margin-top: 20px;height: 400px;"
-          :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-      <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80"/>
-      <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80"/>
-      <el-table-column prop="height" align="center" :label="$t('hellow.height')" min-width="80"/>
-      <el-table-column prop="width" align="center" :label="$t('hellow.width')" min-width="80"/>
+    <el-table ref="table" style="margin-top: 20px;height: 400px;" :data="tableDatac"
+      :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+      <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80" />
+      <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80" />
+      <el-table-column prop="height" align="center" :label="$t('hellow.height')" min-width="80" />
+      <el-table-column prop="width" align="center" :label="$t('hellow.width')" min-width="80" />
       <!-- <el-table-column prop="totalCount" align="center" :label="$t('hellow.totalnumber')" min-width="80"/> -->
-      <el-table-column prop="lackCount" align="center" :label="$t('hellow.missingnumber')" min-width="80"/>
+      <el-table-column prop="lackCount" align="center" :label="$t('hellow.missingnumber')" min-width="80" />
       <!-- <el-table-column prop="damageCount" align="center" :label="$t('hellow.brokenpieces')" min-width="80"/> -->
       <div style="float: right;margin-bottom: 5px;">
-        <el-pagination layout="prev, pager, next" :total="50"/>
+        <el-pagination layout="prev, pager, next" :total="50" />
       </div>
     </el-table>
     <div style="display: flex;margin-left: 40%;margin-top: 10px;">
-  <el-pagination
-          background
-          size="large"
-          layout="prev, pager, next"
-          :total="30"
-          :current-page.sync="currentPage2"
-          @current-change="handlePageChange2"
-        />
-  </div>
+      <el-pagination background size="large" layout="prev, pager, next" :total="30" :current-page.sync="currentPage2"
+        @current-change="handlePageChange2" />
+    </div>
   </el-dialog>
   <!-- 寮�濮嬩换鍔� -->
   <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('hellow.pstarttask')">
@@ -811,6 +784,30 @@
       </div>
     </template>
   </el-dialog>
+  <!-- 鎵撳嵃鏍囩 -->
+  <el-dialog v-model="blinde" top="30vh" width="25%" :title="$t('searchOrder.printlabels')">
+    <template #footer>
+      <div id="dialog-footer">
+        <el-select v-model="tag" filterable clearable :placeholder="$t('hellow.projectMsg2')" @change="changeTag"
+          style="width: 220px" @input="handleInputChange">
+          <el-option v-for="(tag, index) in tags" :key="index" :label="tag.name" :value="tag" />
+        </el-select>
+        <el-select v-model="stateValue" filterable clearable :placeholder="$t('screendisplay.pchoice')"
+          style="width: 220px" @input="handleInputChange">
+          <el-option v-for="item in stateOptions" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+        <el-button type="primary" @click="labelPrint = true">
+          {{ $t('processCard.printing') }}
+        </el-button>
+        <el-button @click="blinde = false">{{ $t('basicData.cancel') }}</el-button>
+      </div>
+    </template>
+  </el-dialog>
+  <el-dialog v-model="labelPrint" style="width: 80%; " destroy-on-close>
+    <el-button :icon="Printer" circle @click="printOrder(1)">{{ $t('processCard.printing') }}</el-button>
+    <print-custom-label-x-j id="childLabel" :faceOrientation="stateValue" :lableType="1" :list="listFlow"
+      :lastList='lastList' :type="tag.name" style="width: 100%;height: 100%" />
+  </el-dialog>
   <!-- 鍒犻櫎浠诲姟 -->
   <el-dialog v-model="blindd" top="30vh" width="25%" :title="$t('hellow.hollowtaskdet')">
     <template #footer>
@@ -823,22 +820,13 @@
     </template>
   </el-dialog>
   <!-- 棰勮 -->
-  <el-dialog v-model="dialogFormVisiblee" top="24vh" width="25%" :title="$t('hellow.reviewproject')" >
+  <el-dialog v-model="dialogFormVisiblee" top="24vh" width="25%" :title="$t('hellow.reviewproject')">
     <div style="margin-left: 50px;margin-bottom: 10px;">
       <el-form-item :label="$t('basicData.projectnumber')" :required="true">
-        <el-select
-            v-model="selectedProjectNo"
-            filterable
-            clearable
-            :placeholder="$t('basicData.plselectproject')"
-            style="width: 260px"
-        >
-          <el-option
-              v-for="item in titleSelectJson.processType"
-              :key="item.value"
-              :label="item.value"
-              :value="item.value"
-          />
+        <el-select v-model="selectedProjectNo" filterable clearable :placeholder="$t('hellow.plselectproject')"
+          style="width: 260px">
+          <el-option v-for="item in titleSelectJson.processType" :key="item.value" :label="item.value"
+            :value="item.value" />
         </el-select>
       </el-form-item>
     </div>
@@ -853,126 +841,136 @@
   </el-dialog>
   <!-- 涓┖閰嶆柟 -->
   <el-dialog v-model="mulan" top="15vh" width="80%" :title="$t('hellow.hollowformula')">
-    <el-button id="searchButton" type="primary"  @click="openAddDialog">
-          {{ $t('basicData.add') }}
-        </el-button>
-      <el-table ref="table" style="margin-top: 20px;height: 400px;"
-                :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-        <el-table-column prop="formulaName" fixed align="center" :label="$t('hellow.formulaNamep')" min-width="120"/>
-        <el-table-column prop="filmRemove" align="center" :label="$t('Mounting.removalmethodp')"/>
-        <el-table-column prop="casOne" align="center" :label="$t('hellow.casOne')" min-width="110">
-      <template #default="scope">
-        <el-tag :type="getcasOnea(scope.row.casOne)">
-          {{ getStatuscasOnea(scope.row.casOne) }}
-        </el-tag>
-      </template>
-    </el-table-column>
-    <el-table-column prop="casTwo" align="center" :label="$t('hellow.casTwo')" min-width="110">
-      <template #default="scope">
-        <el-tag :type="getcasOneb(scope.row.casTwo)">
-          {{ getStatuscasOneb(scope.row.casTwo) }}
-        </el-tag>
-      </template>
-    </el-table-column>
-    <el-table-column prop="casThree" align="center" :label="$t('hellow.casThree')" min-width="110">
-      <template #default="scope">
-        <el-tag :type="getcasOnec(scope.row.casThree)">
-          {{ getStatuscasOnec(scope.row.casThree) }}
-        </el-tag>
-      </template>
-    </el-table-column>
-    <el-table-column prop="casFour" align="center" :label="$t('hellow.casFour')" min-width="110">
-      <template #default="scope">
-        <el-tag :type="getcasOned(scope.row.casFour)">
-          {{ getStatuscasOned(scope.row.casFour) }}
-        </el-tag>
-      </template>
-    </el-table-column>
-        <el-table-column prop="frameOne" align="center" :label="$t('hellow.frameOne')"/>
-        <el-table-column prop="frameTwo" align="center" :label="$t('hellow.frameTwo')"/>
-        <el-table-column prop="frameThree" align="center" :label="$t('hellow.frameThree')"/>
-        <el-table-column prop="frameFour" align="center" :label="$t('hellow.frameFour')"/>
-        <el-table-column prop="intervalFrameHeightOne" align="center" :label="$t('hellow.intervalFrameHeightOne')" min-width="110"/>
-        <el-table-column prop="intervalFrameHeightTwo" align="center" :label="$t('hellow.intervalFrameHeightTwo')" min-width="110"/>
-        <el-table-column prop="intervalFrameHeightThree" align="center" :label="$t('hellow.intervalFrameHeightThree')" min-width="110"/>
-        <el-table-column prop="intervalFrameHeightFour" align="center" :label="$t('hellow.intervalFrameHeightFour')" min-width="110"/>
-        <!-- <el-table-column prop="intervalFrameTypeOne" align="center" :label="$t('hellow.intervalFrameTypeOne')" min-width="110">
+    <el-button id="searchButton" type="primary" @click="openAddDialog">
+      {{ $t('basicData.add') }}
+    </el-button>
+    <el-table ref="table" style="margin-top: 20px;height: 400px;" :data="tableDatax"
+      :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+      <el-table-column prop="formulaName" fixed align="center" :label="$t('hellow.formulaNamep')" min-width="120" />
+      <el-table-column prop="filmRemove" align="center" :label="$t('Mounting.removalmethodp')" />
+      <el-table-column prop="casOne" align="center" :label="$t('hellow.casOne')" min-width="110">
+        <template #default="scope">
+          <el-tag :type="getcasOnea(scope.row.casOne)">
+            {{ getStatuscasOnea(scope.row.casOne) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="casTwo" align="center" :label="$t('hellow.casTwo')" min-width="110">
+        <template #default="scope">
+          <el-tag :type="getcasOneb(scope.row.casTwo)">
+            {{ getStatuscasOneb(scope.row.casTwo) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="casThree" align="center" :label="$t('hellow.casThree')" min-width="110">
+        <template #default="scope">
+          <el-tag :type="getcasOnec(scope.row.casThree)">
+            {{ getStatuscasOnec(scope.row.casThree) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="casFour" align="center" :label="$t('hellow.casFour')" min-width="110">
+        <template #default="scope">
+          <el-tag :type="getcasOned(scope.row.casFour)">
+            {{ getStatuscasOned(scope.row.casFour) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="frameOne" align="center" :label="$t('hellow.frameOne')" />
+      <el-table-column prop="frameTwo" align="center" :label="$t('hellow.frameTwo')" />
+      <el-table-column prop="frameThree" align="center" :label="$t('hellow.frameThree')" />
+      <el-table-column prop="frameFour" align="center" :label="$t('hellow.frameFour')" />
+      <el-table-column prop="intervalFrameHeightOne" align="center" :label="$t('hellow.intervalFrameHeightOne')"
+        min-width="110" />
+      <el-table-column prop="intervalFrameHeightTwo" align="center" :label="$t('hellow.intervalFrameHeightTwo')"
+        min-width="110" />
+      <el-table-column prop="intervalFrameHeightThree" align="center" :label="$t('hellow.intervalFrameHeightThree')"
+        min-width="110" />
+      <el-table-column prop="intervalFrameHeightFour" align="center" :label="$t('hellow.intervalFrameHeightFour')"
+        min-width="110" />
+      <!-- <el-table-column prop="intervalFrameTypeOne" align="center" :label="$t('hellow.intervalFrameTypeOne')" min-width="110">
           <template #default="scope">  
          <el-tag :type="getStatusTypea(scope.row.intervalFrameTypeOne)">  
           {{ getStatusTexta(scope.row.intervalFrameTypeOne) }}  
         </el-tag>  
       </template>
         </el-table-column> -->
-        <el-table-column prop="intervalFrameTypeOne" align="center" :label="$t('hellow.intervalFrameTypeOne')" min-width="110">
-      <template #default="scope">
-        <el-tag :type="getStatusTypea(scope.row.intervalFrameTypeOne)">
-          {{ getStatusTexta(scope.row.intervalFrameTypeOne) }}
-        </el-tag>
-      </template>
-    </el-table-column>
-        <el-table-column prop="intervalFrameTypeTwo" align="center" :label="$t('hellow.intervalFrameTypeTwo')" min-width="110">
-          <template #default="scope">  
-         <el-tag :type="getStatusTypeb(scope.row.intervalFrameTypeTwo)">  
-          {{ getStatusTextb(scope.row.intervalFrameTypeTwo) }}  
-        </el-tag>  
-      </template>
-        </el-table-column>
-        <el-table-column prop="intervalFrameTypeThree" align="center" :label="$t('hellow.intervalFrameTypeThree')" min-width="110">
-          <template #default="scope">  
-         <el-tag :type="getStatusTypec(scope.row.intervalFrameTypeThree)">  
-          {{ getStatusTextc(scope.row.intervalFrameTypeThree) }}  
-        </el-tag>  
-      </template>
-        </el-table-column>
-        <el-table-column prop="intervalFrameTypeFour" align="center" :label="$t('hellow.intervalFrameTypeFour')" min-width="110">
-          <template #default="scope">  
-         <el-tag :type="getStatusTyped(scope.row.intervalFrameTypeFour)">  
-          {{ getStatusTextd(scope.row.intervalFrameTypeFour) }}  
-        </el-tag>  
-      </template>
-        </el-table-column>
-        <el-table-column prop="intervalFrameWidthOne" align="center" :label="$t('hellow.intervalFrameWidthOne')" min-width="110"/>
-        <el-table-column prop="intervalFrameWidthTwo" align="center" :label="$t('hellow.intervalFrameWidthTwo')" min-width="110"/>
-        <el-table-column prop="intervalFrameWidthThree" align="center" :label="$t('hellow.intervalFrameWidthThree')" min-width="110"/>
-        <el-table-column prop="intervalFrameWidthFour" align="center" :label="$t('hellow.intervalFrameWidthFour')" min-width="110"/>
-        <el-table-column prop="sealInsert" align="center" :label="$t('hellow.sealInsert')"/>
-        <el-table-column prop="topRemove" align="center" :label="$t('hellow.topRemovep')" min-width="95"> </el-table-column>
-        <el-table-column prop="bottomRemove" align="center" :label="$t('hellow.bottomRemovep')" min-width="95"> </el-table-column>
-        <el-table-column prop="leftRemove" align="center" :label="$t('hellow.leftRemovep')" min-width="95"> </el-table-column>
-        <el-table-column prop="rightRemove" align="center" :label="$t('hellow.rightRemovep')" min-width="95"> </el-table-column>
-        <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
-            <template #default="scope">
-              <el-button type="text" plain @click="handleEdit(scope.row)">{{ $t('productStock.exit') }}</el-button>
-              <el-button type="text" plain @click="opena(scope.row)">{{ $t('productStock.delete') }}</el-button>
-            </template>
-        </el-table-column>
-        </el-table>
-        <template #footer>
+      <el-table-column prop="intervalFrameTypeOne" align="center" :label="$t('hellow.intervalFrameTypeOne')"
+        min-width="110">
+        <template #default="scope">
+          <el-tag :type="getStatusTypea(scope.row.intervalFrameTypeOne)">
+            {{ getStatusTexta(scope.row.intervalFrameTypeOne) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="intervalFrameTypeTwo" align="center" :label="$t('hellow.intervalFrameTypeTwo')"
+        min-width="110">
+        <template #default="scope">
+          <el-tag :type="getStatusTypeb(scope.row.intervalFrameTypeTwo)">
+            {{ getStatusTextb(scope.row.intervalFrameTypeTwo) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="intervalFrameTypeThree" align="center" :label="$t('hellow.intervalFrameTypeThree')"
+        min-width="110">
+        <template #default="scope">
+          <el-tag :type="getStatusTypec(scope.row.intervalFrameTypeThree)">
+            {{ getStatusTextc(scope.row.intervalFrameTypeThree) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="intervalFrameTypeFour" align="center" :label="$t('hellow.intervalFrameTypeFour')"
+        min-width="110">
+        <template #default="scope">
+          <el-tag :type="getStatusTyped(scope.row.intervalFrameTypeFour)">
+            {{ getStatusTextd(scope.row.intervalFrameTypeFour) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="intervalFrameWidthOne" align="center" :label="$t('hellow.intervalFrameWidthOne')"
+        min-width="110" />
+      <el-table-column prop="intervalFrameWidthTwo" align="center" :label="$t('hellow.intervalFrameWidthTwo')"
+        min-width="110" />
+      <el-table-column prop="intervalFrameWidthThree" align="center" :label="$t('hellow.intervalFrameWidthThree')"
+        min-width="110" />
+      <el-table-column prop="intervalFrameWidthFour" align="center" :label="$t('hellow.intervalFrameWidthFour')"
+        min-width="110" />
+      <el-table-column prop="sealInsert" align="center" :label="$t('hellow.sealInsert')" />
+      <el-table-column prop="topRemove" align="center" :label="$t('hellow.topRemovep')" min-width="95">
+      </el-table-column>
+      <el-table-column prop="bottomRemove" align="center" :label="$t('hellow.bottomRemovep')" min-width="95">
+      </el-table-column>
+      <el-table-column prop="leftRemove" align="center" :label="$t('hellow.leftRemovep')" min-width="95">
+      </el-table-column>
+      <el-table-column prop="rightRemove" align="center" :label="$t('hellow.rightRemovep')" min-width="95">
+      </el-table-column>
+      <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
+        <template #default="scope">
+          <el-button type="text" plain @click="handleEdit(scope.row)">{{ $t('productStock.exit') }}</el-button>
+          <el-button type="text" plain @click="opena(scope.row)">{{ $t('productStock.delete') }}</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <template #footer>
       <div id="dialog-footer">
         <el-button @click="mulan = false">{{ $t('large.close') }}</el-button>
       </div>
     </template>
-</el-dialog>
- <!-- 鍘嗗彶浠诲姟 -->
- <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl=''">
-     <iframe 
-     :src="iframeUrl" 
-     marginwidth="2000px"
-     marginheight="2000px"
-     width="100%" 
-     height="750px" 
-     frameborder="0"
-     ></iframe>
+  </el-dialog>
+  <!-- 鍘嗗彶浠诲姟 -->
+  <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl = ''">
+    <iframe :src="iframeUrl" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
+      frameborder="0"></iframe>
   </el-dialog>
 </template>
 <script setup>
 import { ElMessage, ElMessageBox } from 'element-plus'
-import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive, watch, computed} from "vue";
+import { onBeforeUnmount, onMounted, onUnmounted, ref, reactive, watch, computed } from "vue";
 import request from "@/utils/request"
-import {host, WebSocketHost} from '@/utils/constants'
-import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
-import {useI18n} from 'vue-i18n'
-const {t} = useI18n()
+import { host, WebSocketHost } from '@/utils/constants'
+import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService';
+import { useI18n } from 'vue-i18n'
+const { t } = useI18n()
 const blinda = ref(false)
 const blindb = ref(false)
 const blindc = ref(false)
@@ -1034,7 +1032,7 @@
 const pairTotal = ref();
 let selectedFormulaId = ref(null);
 const formulaNameid = ref({ id: null });
-const titleformulaName = ref({ formulaName: [] ,formulaId: []});
+const titleformulaName = ref({ formulaName: [], formulaId: [] });
 const titleSelectJson = ref({ processType: [] });
 const iframeUrl = ref('');
 const handlehistorical = (row) => {
@@ -1073,7 +1071,7 @@
     const currentPageData = allPageData[currentPageKeyValue];
     if (data.freeRequest != null) {
       freeone.value = data.freeRequest[0] == true ? 'green' : '#911005';
-  }
+    }
     // if (currentPageData && Array.isArray(currentPageData) && currentPageData.length > 0) {
     //   tableDataa.value = currentPageData[0];
     // } else {
@@ -1118,64 +1116,64 @@
 // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
 function handleEdit(row) {
   window.localStorage.setItem('id', row.id)
-    formulaName.value = row.formulaName;
-    filmRemove.value = removalMethodMap[row.filmRemove];
-    bottomRemove.value = row.bottomRemove;
-    leftRemove.value = row.leftRemove;
-    rightRemove.value = row.rightRemove;
-    topRemove.value = row.topRemove;
-    casFour.value = removalcas[row.casFour];
-    casOne.value = removalcas[row.casOne];
-    casThree.value = removalcas[row.casThree];
-    casTwo.value = removalcas[row.casTwo];
-    frameFour.value = row.frameFour;
-    frameOne.value = row.frameOne;
-    frameThree.value = row.frameThree;
-    frameTwo.value = row.frameTwo;
-    intervalFrameHeightOne.value = row.intervalFrameHeightOne;
-    intervalFrameHeightTwo.value = row.intervalFrameHeightTwo;
-    intervalFrameHeightThree.value = row.intervalFrameHeightThree;
-    intervalFrameHeightFour.value = row.intervalFrameHeightFour;
-    intervalFrameTypeOne.value =  removalinterval[row.intervalFrameTypeOne];
-    intervalFrameTypeTwo.value =  removalinterval[row.intervalFrameTypeTwo];
-    intervalFrameTypeThree.value = removalinterval[row.intervalFrameTypeThree];
-    intervalFrameTypeFour.value = removalinterval[row.intervalFrameTypeFour];
-    intervalFrameWidthOne.value = row.intervalFrameWidthOne;
-    intervalFrameWidthTwo.value = row.intervalFrameWidthTwo;
-    intervalFrameWidthThree.value = row.intervalFrameWidthThree;
-    intervalFrameWidthFour.value = row.intervalFrameWidthFour;
-    sealInsert.value = row.sealInsert;
-    adda.value = true;
-} 
-function openAddDialog() {  
-    formulaName.value = '';
-    filmRemove.value = '';
-    bottomRemove.value = '';
-    leftRemove.value = '';
-    rightRemove.value = '';
-    topRemove.value = '';
-    casFour.value = '';
-    casOne.value = '';
-    casThree.value = '';
-    casTwo.value = '';
-    frameFour.value = '';
-    frameOne.value = '';
-    frameThree.value = '';
-    frameTwo.value = '';
-    intervalFrameHeightOne.value = '';
-    intervalFrameHeightTwo.value = '';
-    intervalFrameHeightThree.value = '';
-    intervalFrameHeightFour.value = '';
-    intervalFrameTypeOne.value = '';
-    intervalFrameTypeTwo.value = '';
-    intervalFrameTypeThree.value = '';
-    intervalFrameTypeFour.value = '';
-    intervalFrameWidthOne.value = '';
-    intervalFrameWidthTwo.value = '';
-    intervalFrameWidthThree.value = '';
-    intervalFrameWidthFour.value = '';
-    sealInsert.value = '';
-    add.value = true;
+  formulaName.value = row.formulaName;
+  filmRemove.value = removalMethodMap[row.filmRemove];
+  bottomRemove.value = row.bottomRemove;
+  leftRemove.value = row.leftRemove;
+  rightRemove.value = row.rightRemove;
+  topRemove.value = row.topRemove;
+  casFour.value = removalcas[row.casFour];
+  casOne.value = removalcas[row.casOne];
+  casThree.value = removalcas[row.casThree];
+  casTwo.value = removalcas[row.casTwo];
+  frameFour.value = row.frameFour;
+  frameOne.value = row.frameOne;
+  frameThree.value = row.frameThree;
+  frameTwo.value = row.frameTwo;
+  intervalFrameHeightOne.value = row.intervalFrameHeightOne;
+  intervalFrameHeightTwo.value = row.intervalFrameHeightTwo;
+  intervalFrameHeightThree.value = row.intervalFrameHeightThree;
+  intervalFrameHeightFour.value = row.intervalFrameHeightFour;
+  intervalFrameTypeOne.value = removalinterval[row.intervalFrameTypeOne];
+  intervalFrameTypeTwo.value = removalinterval[row.intervalFrameTypeTwo];
+  intervalFrameTypeThree.value = removalinterval[row.intervalFrameTypeThree];
+  intervalFrameTypeFour.value = removalinterval[row.intervalFrameTypeFour];
+  intervalFrameWidthOne.value = row.intervalFrameWidthOne;
+  intervalFrameWidthTwo.value = row.intervalFrameWidthTwo;
+  intervalFrameWidthThree.value = row.intervalFrameWidthThree;
+  intervalFrameWidthFour.value = row.intervalFrameWidthFour;
+  sealInsert.value = row.sealInsert;
+  adda.value = true;
+}
+function openAddDialog() {
+  formulaName.value = '';
+  filmRemove.value = '';
+  bottomRemove.value = '';
+  leftRemove.value = '';
+  rightRemove.value = '';
+  topRemove.value = '';
+  casFour.value = '';
+  casOne.value = '';
+  casThree.value = '';
+  casTwo.value = '';
+  frameFour.value = '';
+  frameOne.value = '';
+  frameThree.value = '';
+  frameTwo.value = '';
+  intervalFrameHeightOne.value = '';
+  intervalFrameHeightTwo.value = '';
+  intervalFrameHeightThree.value = '';
+  intervalFrameHeightFour.value = '';
+  intervalFrameTypeOne.value = '';
+  intervalFrameTypeTwo.value = '';
+  intervalFrameTypeThree.value = '';
+  intervalFrameTypeFour.value = '';
+  intervalFrameWidthOne.value = '';
+  intervalFrameWidthTwo.value = '';
+  intervalFrameWidthThree.value = '';
+  intervalFrameWidthFour.value = '';
+  sealInsert.value = '';
+  add.value = true;
 }
 const handlezhiban = () => {
   dialogFormVisiblea.value = true;
@@ -1185,166 +1183,166 @@
   mulan.value = true;
   fetchmulan();
 };
-function getcasOnea(casOne) {  
-  switch (casOne) {  
+function getcasOnea(casOne) {
+  switch (casOne) {
     case "1":
-      return 'success';  
-    case "0": 
-      return 'warning';  
+      return 'success';
+    case "0":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatuscasOnea(casOne) {
   switch (casOne) {
-    case "1":  
+    case "1":
       return t('hellow.Y');
-    case "0":  
-      return t('hellow.F'); 
+    case "0":
+      return t('hellow.F');
     default:
       return '';
-  }  
+  }
 }
-function getcasOneb(casOne) {  
-  switch (casOne) {  
+function getcasOneb(casOne) {
+  switch (casOne) {
     case "1":
-      return 'success';  
-    case "0": 
-      return 'warning';  
+      return 'success';
+    case "0":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatuscasOneb(casOne) {
   switch (casOne) {
-    case "1":  
+    case "1":
       return t('hellow.Y');
-    case "0":  
-      return t('hellow.F'); 
+    case "0":
+      return t('hellow.F');
     default:
       return '';
-  }  
+  }
 }
-function getcasOnec(casOne) {  
-  switch (casOne) {  
+function getcasOnec(casOne) {
+  switch (casOne) {
     case "1":
-      return 'success';  
-    case "0": 
-      return 'warning';  
+      return 'success';
+    case "0":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatuscasOnec(casOne) {
   switch (casOne) {
-    case "1":  
+    case "1":
       return t('hellow.Y');
-    case "0":  
-      return t('hellow.F'); 
+    case "0":
+      return t('hellow.F');
     default:
       return '';
-  }  
+  }
 }
 
-function getcasOned(casOne) {  
-  switch (casOne) {  
+function getcasOned(casOne) {
+  switch (casOne) {
     case "1":
-      return 'success';  
-    case "0": 
-      return 'warning';  
+      return 'success';
+    case "0":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatuscasOned(casOne) {
   switch (casOne) {
-    case "1":  
+    case "1":
       return t('hellow.Y');
-    case "0":  
-      return t('hellow.F'); 
+    case "0":
+      return t('hellow.F');
     default:
       return '';
-  }  
+  }
 }
-function getStatusTypea(intervalFrameTypeOne) {  
-  switch (intervalFrameTypeOne) {  
+function getStatusTypea(intervalFrameTypeOne) {
+  switch (intervalFrameTypeOne) {
     case "1":
-      return 'success';  
-    case "5": 
-      return 'warning';  
+      return 'success';
+    case "5":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatusTexta(intervalFrameTypeOne) {
   switch (intervalFrameTypeOne) {
-    case "1":  
+    case "1":
       return t('hellow.intervalFrameTypeb');
-    case "5":  
-      return t('hellow.intervalFrameTypea'); 
+    case "5":
+      return t('hellow.intervalFrameTypea');
     default:
       return '';
-  }  
+  }
 }
-function getStatusTypeb(intervalFrameTypeTwo) {  
-  switch (intervalFrameTypeTwo) {  
+function getStatusTypeb(intervalFrameTypeTwo) {
+  switch (intervalFrameTypeTwo) {
     case "1":
-      return 'success';  
-    case "5": 
-      return 'warning';  
+      return 'success';
+    case "5":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatusTextb(intervalFrameTypeTwo) {
   switch (intervalFrameTypeTwo) {
-    case "1":  
+    case "1":
       return t('hellow.intervalFrameTypeb');
-    case "5":  
-      return t('hellow.intervalFrameTypea'); 
+    case "5":
+      return t('hellow.intervalFrameTypea');
     default:
       return '';
-  }  
+  }
 }
-function getStatusTypec(intervalFrameTypeThree) {  
-  switch (intervalFrameTypeThree) { 
+function getStatusTypec(intervalFrameTypeThree) {
+  switch (intervalFrameTypeThree) {
     case "1":
-      return 'success';  
-    case "5": 
-      return 'warning';  
+      return 'success';
+    case "5":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatusTextc(intervalFrameTypeThree) {
   switch (intervalFrameTypeThree) {
-    case "1":  
+    case "1":
       return t('hellow.intervalFrameTypeb');
-    case "5":  
-      return t('hellow.intervalFrameTypea'); 
+    case "5":
+      return t('hellow.intervalFrameTypea');
     default:
       return '';
-  }  
+  }
 }
-function getStatusTyped(intervalFrameTypeFour) {  
-  switch (intervalFrameTypeFour) {  
+function getStatusTyped(intervalFrameTypeFour) {
+  switch (intervalFrameTypeFour) {
     case "1":
-      return 'success';  
-    case "5": 
-      return 'warning';  
+      return 'success';
+    case "5":
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatusTextd(intervalFrameTypeFour) {
   switch (intervalFrameTypeFour) {
-    case "1":  
+    case "1":
       return t('hellow.intervalFrameTypeb');
-    case "5":  
-      return t('hellow.intervalFrameTypea'); 
+    case "5":
+      return t('hellow.intervalFrameTypea');
     default:
       return '';
-  }  
+  }
 }
 // 棰勮
 const selectproject = () => {
@@ -1355,9 +1353,9 @@
 const handleBindRack = (row) => {
   currentPage2.value = 1;
   const { flowCardId } = row;
-  currentRow.flowCardId  = row.flowCardId;
+  currentRow.flowCardId = row.flowCardId;
   dialogFormVisibleb.value = true;
-  fetchFlowBind(flowCardId,currentPage2.value);
+  fetchFlowBind(flowCardId, currentPage2.value);
 };
 // 棰嗗彇浠诲姟
 const handletake = (row) => {
@@ -1374,7 +1372,7 @@
 // 鍒涘缓浠诲姟
 const fetchFlowCardId = async () => {
   try {
-    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard',{
+    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard', {
       deviceId: 0,
       filmsId: '',
       flowCardId: '',
@@ -1403,7 +1401,7 @@
 }
 const fetchFlowCardsearch = async () => {
   try {
-    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard',{
+    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard', {
       filmsId: filmsId.value,
       flowCardId: flowCardId.value,
       productName: productName.value,
@@ -1422,7 +1420,7 @@
 // 涓┖閰嶆柟
 const fetchmulan = async () => {
   try {
-    var url="/hollowGlass/hollowFormulaDetails/listFormulaDetails?keyword="+'';
+    var url = "/hollowGlass/hollowFormulaDetails/listFormulaDetails?keyword=" + '';
     const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
@@ -1466,8 +1464,8 @@
 // 涓┖閰嶆柟娣诲姞
 const handleConfirm = async () => {
   try {
-    if (!validateForm()) return;  
-    const response = await request.post('/hollowGlass/hollowFormulaDetails/saveFormulaDetails',{
+    if (!validateForm()) return;
+    const response = await request.post('/hollowGlass/hollowFormulaDetails/saveFormulaDetails', {
       formulaName: formulaName.value,
       filmRemove: filmRemove.value,
       bottomRemove: bottomRemove.value,
@@ -1547,10 +1545,10 @@
   [t('hellow.intervalFrameTypea')]: 5,
 }
 // 涓┖閰嶆柟淇敼
- const handledit = async() => {  
+const handledit = async () => {
   let id = window.localStorage.getItem('id')
   try {
-    const response = await request.post('/hollowGlass/hollowFormulaDetails/updateFormulaDetails',{
+    const response = await request.post('/hollowGlass/hollowFormulaDetails/updateFormulaDetails', {
       id: id,
       formulaName: formulaName.value,
       filmRemove: removalMethodMapa[filmRemove.value],
@@ -1573,7 +1571,7 @@
       intervalFrameTypeOne: removalintervala[intervalFrameTypeOne.value],
       intervalFrameTypeTwo: removalintervala[intervalFrameTypeTwo.value],
       intervalFrameTypeThree: removalintervala[intervalFrameTypeThree.value],
-      intervalFrameTypeFour:  removalintervala[intervalFrameTypeFour.value],
+      intervalFrameTypeFour: removalintervala[intervalFrameTypeFour.value],
       intervalFrameWidthOne: intervalFrameWidthOne.value,
       intervalFrameWidthTwo: intervalFrameWidthTwo.value,
       intervalFrameWidthThree: intervalFrameWidthThree.value,
@@ -1590,33 +1588,33 @@
   }
 };
 // 涓┖閰嶆柟鍒犻櫎 
- const opena = async(row) => {  
+const opena = async (row) => {
   try {
-    const confirmResult = await ElMessageBox.confirm(  
-      t('hellow.hollowformuldet'), 
-      t('productStock.prompt'),  
-      {  
-        confirmButtonText: t('productStock.yes'), 
+    const confirmResult = await ElMessageBox.confirm(
+      t('hellow.hollowformuldet'),
+      t('productStock.prompt'),
+      {
+        confirmButtonText: t('productStock.yes'),
         cancelButtonText: t('productStock.cancel'),
-        type: 'warning',  
-      } 
+        type: 'warning',
+      }
     );
     if (confirmResult === 'confirm') {
-    var url="/hollowGlass/hollowFormulaDetails/deleteFormulaDetails?idList="+row.id;
-    const response = await request.post(url)
-    if (response.code === 200) {
-      ElMessage.success(response.message);
-      fetchmulan()
-    } else {
-      }  
-    }  
+      var url = "/hollowGlass/hollowFormulaDetails/deleteFormulaDetails?idList=" + row.id;
+      const response = await request.post(url)
+      if (response.code === 200) {
+        ElMessage.success(response.message);
+        fetchmulan()
+      } else {
+      }
+    }
   } catch (error) {
-  }  
+  }
 };
 // 宸ョ▼鍙�
 const selectgong = async () => {
   try {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/hollowTaskList?cell="+ 930;
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/hollowTaskList?cell=" + 930;
     const response = await request.post(url)
     if (response.code == 200) {
       const processTypes = response.data.map((projectNo, index) => ({
@@ -1632,20 +1630,32 @@
 // 棰勮
 const handleup = async () => {
   if (!selectedProjectNo.value) {
-    ElMessage.error(t('basicData.plselectproject'))
+    ElMessage.error(t('hellow.plselectproject'))
     return
   }
   try {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/appointHollowTaskDetails?cell="+ 930 + "&flowCardId=" + selectedProjectNo.value;
-  window.localStorage.setItem('flowCardId', selectedProjectNo.value)
-  const response = await request.post(url)
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/appointHollowTaskDetails?cell=" + 930 + "&flowCardId=" + selectedProjectNo.value;
+    window.localStorage.setItem('flowCardId', selectedProjectNo.value)
+    const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
       tableDataa.value = response.data;
       dialogFormVisiblee.value = false
       selectedProjectNo.value = ''
       closeWebSocket(socket);
-  } else {
+      const summary = response.data.reduce((map, item) => {
+        const key = `${item.hollowSequence}`;
+        if (!map[key]) {
+          map[key] = {
+            printQuantity: 1,
+            order_number: item.glassType,
+            processId: item.flowCardId
+          };
+        }
+        return map;
+      }, {});
+      listFlow.value = Object.values(summary);
+    } else {
     }
   } catch (error) {
   }
@@ -1664,7 +1674,7 @@
 };
 const fetchFlowBind = async (flowCardId, page) => {
   try {
-    var url="/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId="+flowCardId + "&layer=" + 1;
+    var url = "/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId=" + flowCardId + "&layer=" + 1;
     const response = await request.post(url)
     if (response.code == 200) {
       tableDatac.value = response.data[page];
@@ -1679,8 +1689,8 @@
   try {
     let flowCardId = window.localStorage.getItem('flowCardId')
     if (flowCardId !== '') {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/startTask?flowCardId="+flowCardId + "&cell=" + 930;
-    const response = await request.post(url)
+      var url = "/hollowGlass/hollowGlassOutRelationInfo/startTask?flowCardId=" + flowCardId + "&cell=" + 930;
+      const response = await request.post(url)
       if (response.code == 200) {
         ElMessage.success(response.message);
         blinda.value = false;
@@ -1700,8 +1710,8 @@
   try {
     let flowCardId = window.localStorage.getItem('flowCardId')
     if (flowCardId !== '') {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/pauseTask?flowCardId="+flowCardId + "&cell=" + 930;
-    const response = await request.post(url)
+      var url = "/hollowGlass/hollowGlassOutRelationInfo/pauseTask?flowCardId=" + flowCardId + "&cell=" + 930;
+      const response = await request.post(url)
       if (response.code == 200) {
         ElMessage.success(response.message);
         blindc.value = false;
@@ -1721,8 +1731,8 @@
   try {
     let flowCardId = window.localStorage.getItem('flowCardId')
     if (flowCardId !== '') {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/deleteHollowTaskDetails?flowCardId="+flowCardId + "&cell=" + 930;
-    const response = await request.post(url)
+      var url = "/hollowGlass/hollowGlassOutRelationInfo/deleteHollowTaskDetails?flowCardId=" + flowCardId + "&cell=" + 930;
+      const response = await request.post(url)
       if (response.code == 200) {
         ElMessage.success(response.message);
         blindd.value = false;
@@ -1749,9 +1759,9 @@
   }
   let flowCardId = window.localStorage.getItem('flowCardId')
   let id = window.localStorage.getItem('id')
-    try {
-      var url="/hollowGlass/hollowGlassOutRelationInfo/receiveTask?cell="+ 930 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value+ "&formulaId=" + id;
-      const response = await request.post(url)
+  try {
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/receiveTask?cell=" + 930 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value + "&formulaId=" + id;
+    const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
       dialogFormVisiblec.value = false;
@@ -1759,10 +1769,10 @@
       formulaName.value = '';
       totalPairQuantity.value = '';
     } else {
-        }
-      } catch (error) {
-      }
     }
+  } catch (error) {
+  }
+}
 // 寮哄埗鍑虹墖
 const finishb = async () => {
   let flowCardId = window.localStorage.getItem('flowCardId')
@@ -1776,37 +1786,122 @@
     return
   }
   try {
-      var url="/hollowGlass/hollowGlassOutRelationInfo/forceOutGlass?cell="+ 930 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantitya.value+ "&formulaId=" + id;
-      const response = await request.post(url)
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/forceOutGlass?cell=" + 930 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantitya.value + "&formulaId=" + id;
+    const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
       dialogFormVisibled.value = false;
       cella.value = '';
       totalPairQuantitya.value = '';
     } else {
-        }
-      } catch (error) {
-      }
     }
+  } catch (error) {
+  }
+}
 
 onBeforeUnmount(() => {
   closeWebSocket();
 });
+
+import requestErp from "@/utils/requestErp";
+import { hiprint } from "vue-plugin-hiprint";
+import PrintCustomLabelXJ from './PrintCustomLabelTwo.vue'
+const listFlow = ref([])
+let hiprintTemplate = ref()
+const stateValue = ref('')
+const stateOptions = [
+  {
+    value: t('processCard.thisIsTheIndoorSurface'),
+    label: t('processCard.thisIsTheIndoorSurface'),
+  },
+  {
+    value: t('processCard.thisSideIsOutsideTheRoom'),
+    label: t('processCard.thisSideIsOutsideTheRoom'),
+  },
+]
+const blinde = ref(false)
+const labelPrint = ref(false);
+const handleBinde = (row) => {
+  blinde.value = true;
+  getTags();
+  hiprint.init();
+};
+const changeTag = () => {
+  hiprintTemplate.value = new hiprint.PrintTemplate({});
+  const json = JSON.parse(tag.value.value)
+  hiprintTemplate.value.update(json)
+}
+
+const getTags = async () => {
+  try {
+    const response = await requestErp.get('tagStyle/getTagList')
+    if (response.code == 200) {
+      tags.value = response.data
+      ElMessage.success(response.message);
+    }
+  } catch (error) {
+  }
+}
+
+
+
+const printOrder = (type) => {
+  const list = hiprintTemplate.value.getJson()
+  list.panels[0].printElements.forEach(element => {
+    element.options.fontFamily = 'Arial'
+  })
+  console.log(lastList.value)
+  let object = lastList.value
+  //鍒ゆ柇鏄惁涓鸿〃鏍�
+  let columnsNum = null
+  if (list.panels[0].printElements[0].options.field === 'table') {
+    object = { table: lastList.value }
+    columnsNum = (list.panels[0].printElements[0].options.gridColumns || 1)
+  }
+  hiprintTemplate.value.print(object)
+
+}
+let lastList = ref([])
+const tags = ref([])
+
+const tag = ref({
+  id: null,
+  name: null,
+  type: 1,
+  tagWidth: null,
+  tagHeight: null,
+  value: null,
+  size: null
+})
 </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%;}
+#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;
 }
+
 #dotClass {
   display: flex;
-  margin-left: 20px; 
+  margin-left: 20px;
   size: 50px;
   margin-top: 20px;
   margin-bottom: 10px;
 }
+
 ::v-deep(.row-red-background) {
   background-color: rgb(224.6, 242.8, 215.6) !important;
 }
diff --git a/UI-Project/src/views/hollow/hollowequipmenthree.vue b/UI-Project/src/views/hollow/hollowequipmenthree.vue
index 8352dd2..e85a450 100644
--- a/UI-Project/src/views/hollow/hollowequipmenthree.vue
+++ b/UI-Project/src/views/hollow/hollowequipmenthree.vue
@@ -23,6 +23,10 @@
             $t('hellow.stopproject')
           }}
         </el-button>
+        <el-button style="margin-left: 10px;" :disabled="listFlow.length > 0 ? false : true" id="searchButton" type="warning" @click="handleBinde">{{
+          $t('searchOrder.printlabels')
+        }}
+        </el-button>
   </div>
      
     <div id="dotClass">
@@ -413,6 +417,30 @@
       </div>
     </template>
   </el-dialog>
+  <!-- 鎵撳嵃鏍囩 -->
+    <el-dialog v-model="blinde" top="30vh" width="25%" :title="$t('searchOrder.printlabels')">
+      <template #footer>
+        <div id="dialog-footer">
+          <el-select v-model="tag" filterable clearable :placeholder="$t('hellow.projectMsg2')" @change="changeTag"
+            style="width: 220px" @input="handleInputChange">
+            <el-option v-for="(tag, index) in tags" :key="index" :label="tag.name" :value="tag" />
+          </el-select>
+          <el-select v-model="stateValue" filterable clearable :placeholder="$t('screendisplay.pchoice')"
+            style="width: 220px" @input="handleInputChange">
+            <el-option v-for="item in stateOptions" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+          <el-button type="primary" @click="labelPrint = true">
+            {{ $t('processCard.printing') }}
+          </el-button>
+          <el-button @click="blinde = false">{{ $t('basicData.cancel') }}</el-button>
+        </div>
+      </template>
+    </el-dialog>
+    <el-dialog v-model="labelPrint" style="width: 80%; " destroy-on-close>
+      <el-button :icon="Printer" circle @click="printOrder(1)">{{ $t('processCard.printing') }}</el-button>
+      <print-custom-label-x-j id="childLabel" :faceOrientation="stateValue" :lableType="1" :list="listFlow"
+        :lastList='lastList' :type="tag.name" style="width: 100%;height: 100%" />
+    </el-dialog>
   <!-- 鍒犻櫎浠诲姟 -->
   <el-dialog v-model="blindd" top="30vh" width="25%" :title="$t('hellow.hollowtaskdet')">
     <template #footer>
@@ -432,7 +460,7 @@
             v-model="selectedProjectNo"
             filterable
             clearable
-            :placeholder="$t('basicData.plselectproject')"
+            :placeholder="$t('hellow.plselectproject')"
             style="width: 260px"
         >
           <el-option
@@ -851,7 +879,7 @@
 // 棰勮
 const handleup = async () => {
   if (!selectedProjectNo.value) {
-    ElMessage.error(t('basicData.plselectproject'))
+    ElMessage.error(t('hellow.plselectproject'))
     return
   }
   try {
@@ -864,6 +892,18 @@
       dialogFormVisiblee.value = false
       selectedProjectNo.value = ''
       closeWebSocket(socket);
+      const summary = response.data.reduce((map, item) => {
+              const key = `${item.hollowSequence}`;
+              if (!map[key]) {
+                map[key] = {
+                  printQuantity: 1,
+                  order_number: item.glassType,
+                  processId: item.flowCardId
+                };
+              }
+              return map;
+            }, {});
+            listFlow.value = Object.values(summary);
   } else {
     }
   } catch (error) {
@@ -1002,6 +1042,77 @@
 onBeforeUnmount(() => {
   closeWebSocket();
 });
+
+import requestErp from "@/utils/requestErp";
+import { hiprint } from "vue-plugin-hiprint";
+import PrintCustomLabelXJ from './PrintCustomLabelTwo.vue'
+const listFlow = ref([])
+let hiprintTemplate = ref()
+const stateValue = ref('')
+const stateOptions = [
+  {
+    value: t('processCard.thisIsTheIndoorSurface'),
+    label: t('processCard.thisIsTheIndoorSurface'),
+  },
+  {
+    value: t('processCard.thisSideIsOutsideTheRoom'),
+    label: t('processCard.thisSideIsOutsideTheRoom'),
+  },
+]
+const blinde = ref(false)
+const labelPrint = ref(false);
+const handleBinde = (row) => {
+  blinde.value = true;
+  getTags();
+  hiprint.init();
+};
+const changeTag = () => {
+  hiprintTemplate.value = new hiprint.PrintTemplate({});
+  const json = JSON.parse(tag.value.value)
+  hiprintTemplate.value.update(json)
+}
+
+const getTags = async () => {
+  try {
+    const response = await requestErp.get('tagStyle/getTagList')
+    if (response.code == 200) {
+      tags.value = response.data
+      ElMessage.success(response.message);
+    }
+  } catch (error) {
+  }
+}
+
+
+
+const printOrder = (type) => {
+  const list = hiprintTemplate.value.getJson()
+  list.panels[0].printElements.forEach(element => {
+    element.options.fontFamily = 'Arial'
+  })
+  console.log(lastList.value)
+  let object = lastList.value
+  //鍒ゆ柇鏄惁涓鸿〃鏍�
+  let columnsNum = null
+  if (list.panels[0].printElements[0].options.field === 'table') {
+    object = { table: lastList.value }
+    columnsNum = (list.panels[0].printElements[0].options.gridColumns || 1)
+  }
+  hiprintTemplate.value.print(object)
+
+}
+let lastList = ref([])
+const tags = ref([])
+
+const tag = ref({
+  id: null,
+  name: null,
+  type: 1,
+  tagWidth: null,
+  tagHeight: null,
+  value: null,
+  size: null
+})
 </script>
 <style scoped>
 #dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
diff --git a/UI-Project/src/views/hollow/hollowequipmenttwo.vue b/UI-Project/src/views/hollow/hollowequipmenttwo.vue
index 82934ed..a985569 100644
--- a/UI-Project/src/views/hollow/hollowequipmenttwo.vue
+++ b/UI-Project/src/views/hollow/hollowequipmenttwo.vue
@@ -1,6 +1,6 @@
 <template>
   <div style="height: 600px;">
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;" >
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;">
       <div style="display: flex; flex-direction: row; align-items: center; margin-bottom: 10px;">
         <el-button id="searchButton" type="primary" @click="handleormulan">
           {{ $t('hellow.hollowformula') }}
@@ -11,42 +11,48 @@
         <el-button type="primary" @click="selectproject">
           {{ $t('hellow.reviewproject') }}
         </el-button>
-    <el-button style="margin-left: 10px;" id="searchButton" type="primary" @click="handlehistorical">{{ $t('searchOrder.historicaltasks') }}</el-button>
-    <el-button style="margin-left: 10px;" id="searchButton" type="success" @click="handleBinda">
+        <el-button style="margin-left: 10px;" id="searchButton" type="primary" @click="handlehistorical">{{
+          $t('searchOrder.historicaltasks') }}</el-button>
+        <el-button style="margin-left: 10px;" id="searchButton" type="success" @click="handleBinda">
           {{ $t('hellow.starttask') }}
         </el-button>
         <el-button style="margin-left: 10px;" id="searchButton" type="info" @click="handleBindd">{{
-            $t('hellow.taskdet')
-          }}
+          $t('hellow.taskdet')
+        }}
         </el-button>
         <el-button style="margin-left: 10px;" id="searchButton" type="warning" @click="handleBindc">{{
-            $t('hellow.stopproject')
-          }}
+          $t('hellow.stopproject')
+        }}
         </el-button>
-  </div>
-     
-    <div id="dotClass">
-            <div style="margin-left: 70px;">{{ $t('hellow.freetwo') }}</div>
-        <i :style="{ marginTop: '2px', backgroundColor: freetwo, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
-       </div>
+        <el-button style="margin-left: 10px;" :disabled="listFlow.length > 0 ? false : true" id="searchButton" type="warning" @click="handleBinde">{{
+          $t('searchOrder.printlabels')
+        }}
+        </el-button>
+      </div>
+
+      <div id="dotClass">
+        <div style="margin-left: 70px;">{{ $t('hellow.freetwo') }}</div>
+        <i
+          :style="{ marginTop: '2px', backgroundColor: freetwo, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
+      </div>
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
         <el-table height="650" ref="table" :data="tableDataa"
-                  :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
-          <el-table-column prop="flowCardId" :label="$t('hellow.flowCardId')" align="center"/>
-          <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center"/>
-          <el-table-column prop="hollowSequence" :label="$t('hellow.order')" align="center"/>
-          <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center"/>
-          <el-table-column prop="layer" :label="$t('hellow.layer')" align="center"/>
-          <el-table-column prop="filmsId" :label="$t('hellow.coatingtypes')" align="center"/>
-          <el-table-column prop="height" :label="$t('hellow.height')" align="center"/>
-          <el-table-column prop="width" :label="$t('hellow.width')" align="center"/>
+          :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
+          <el-table-column prop="flowCardId" :label="$t('hellow.flowCardId')" align="center" />
+          <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" />
+          <el-table-column prop="hollowSequence" :label="$t('hellow.order')" align="center" />
+          <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center" />
+          <el-table-column prop="layer" :label="$t('hellow.layer')" align="center" />
+          <el-table-column prop="filmsId" :label="$t('hellow.coatingtypes')" align="center" />
+          <el-table-column prop="height" :label="$t('hellow.height')" align="center" />
+          <el-table-column prop="width" :label="$t('hellow.width')" align="center" />
           <el-table-column prop="state" :label="$t('hellow.state')" align="center">
             <template #default="scope">
               {{ scope.row.state == -1 ? "绛夊緟鍑虹墖" : "鍑虹墖瀹屾垚" }}
             </template>
           </el-table-column>
         </el-table>
-      <!-- <div style="display: flex;margin-left: 40%;margin-top: 10px;">
+        <!-- <div style="display: flex;margin-left: 40%;margin-top: 10px;">
       <div style="margin-top: 5px;margin-right: 5px;">{{ $t('hellow.line') }}</div>
     <el-pagination
           background
@@ -57,126 +63,135 @@
           @current-change="handlePageChange1"
         />
       </div> -->
-  </div>
+      </div>
     </el-card>
   </div>
   <!-- 鍒涘缓浠诲姟 -->
   <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%">
     <div style="display: flex;">
-    <el-input v-model="flowCardId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.incardnumber')" />
-    <el-input v-model="filmsId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('film.infilms')"/>
-    <el-input v-model="productName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('large.inproductname')"/>
-    <el-input v-model="customerName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('large.incustomerName')"/>
-    <el-input v-model="thickness" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.inthickness')"/>
-    <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchFlowCardsearch">
-      {{$t('reportmanage.inquire')}}</el-button>
-  </div>
-  <div style="margin-left: 87%;">{{$t('hellow.pairsnumbertotal')}}{{ pairTotal }}</div>
-  <el-table
-    ref="table"
-    style="margin-top: 20px; height: 700px;"
-    :data="tableDatab"
-    :row-class-name="tableRowClassName"
-    :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
-    row-key="projectNumber"
-  >
-    <!-- <el-table-column type="expand"> -->
-    <el-table-column>
-    <template #default="props">
-      <el-table :data="props.row.flowCardGlassInfoDTOList" style="width: 100%"
-      :row-class-name="(row) => nestedTableRowClassName(props.row, row)" 
-      >
-      <el-table-column prop="layer" fixed align="center" :label="$t('hellow.layernumber')" min-width="80"/>
-      <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80"/>
-      <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80"/>
-      <el-table-column prop="sumCount" align="center" :label="$t('hellow.totalnumber')" min-width="80"/>
-      <el-table-column prop="realCount" align="center" :label="$t('hellow.realpieces')" min-width="80"/>
-      <el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="80"/>
-      <el-table-column prop="pairCount" align="center" :label="$t('hellow.pairsnumber')" min-width="80"/>
-      </el-table>
-      </template>
-    </el-table-column>
-    <el-table-column prop="flowCardId" fixed align="center" :label="$t('hellow.cardnumber')" min-width="20"/>
-    <el-table-column prop="productName" fixed align="center" :label="$t('large.productname')" min-width="20"/>
-    <el-table-column prop="customerName" fixed align="center" :label="$t('large.customerName')" min-width="20"/>
-    <el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="270">
+      <el-input v-model="flowCardId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('searchOrder.incardnumber')" />
+      <el-input v-model="filmsId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('film.infilms')" />
+      <el-input v-model="productName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('large.inproductname')" />
+      <el-input v-model="customerName" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('large.incustomerName')" />
+      <el-input v-model="thickness" style="margin-left: 10px;margin-bottom: 10px;width: 240px;"
+        :placeholder="$t('searchOrder.inthickness')" />
+      <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchFlowCardsearch">
+        {{ $t('reportmanage.inquire') }}</el-button>
+    </div>
+    <div style="margin-left: 87%;">{{ $t('hellow.pairsnumbertotal') }}{{ pairTotal }}</div>
+    <el-table ref="table" style="margin-top: 20px; height: 700px;" :data="tableDatab"
+      :row-class-name="tableRowClassName" :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
+      row-key="projectNumber">
+      <!-- <el-table-column type="expand"> -->
+      <el-table-column>
+        <template #default="props">
+          <el-table :data="props.row.flowCardGlassInfoDTOList" style="width: 100%"
+            :row-class-name="(row) => nestedTableRowClassName(props.row, row)">
+            <el-table-column prop="layer" fixed align="center" :label="$t('hellow.layernumber')" min-width="80" />
+            <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80" />
+            <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80" />
+            <el-table-column prop="sumCount" align="center" :label="$t('hellow.totalnumber')" min-width="80" />
+            <el-table-column prop="realCount" align="center" :label="$t('hellow.realpieces')" min-width="80" />
+            <el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="80" />
+            <el-table-column prop="pairCount" align="center" :label="$t('hellow.pairsnumber')" min-width="80" />
+          </el-table>
+        </template>
+      </el-table-column>
+      <el-table-column prop="flowCardId" fixed align="center" :label="$t('hellow.cardnumber')" min-width="20" />
+      <el-table-column prop="productName" fixed align="center" :label="$t('large.productname')" min-width="20" />
+      <el-table-column prop="customerName" fixed align="center" :label="$t('large.customerName')" min-width="20" />
+      <el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="270">
         <template #default="scope">
-          <el-button type="text" :disabled="scope.row.isThroughSlot" plain @click="handletake(scope.row)">{{ $t('hellow.claimquest') }}</el-button>
+          <el-button type="text" :disabled="scope.row.isThroughSlot" plain @click="handletake(scope.row)">{{
+            $t('hellow.claimquest') }}</el-button>
           <el-button type="text" plain @click="handleBindRack(scope.row)">{{
-              $t('hellow.missingfilms')
-            }}
+            $t('hellow.missingfilms')
+          }}
           </el-button>
           <el-button type="text" plain @click="handleout(scope.row)">{{
-              $t('hellow.forcedfilming')
-            }}
+            $t('hellow.forcedfilming')
+          }}
           </el-button>
         </template>
       </el-table-column>
-  </el-table>
-</el-dialog>
-<!-- 涓┖閰嶆柟娣诲姞 -->
-<el-dialog v-model="add" top="23vh" width="55%" :title="$t('hellow.hollowformula')" >
+    </el-table>
+  </el-dialog>
+  <!-- 涓┖閰嶆柟娣诲姞 -->
+  <el-dialog v-model="add" top="23vh" width="55%" :title="$t('hellow.hollowformula')">
     <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
-     <el-form  label-width="200px">
-      <el-form label-width="200px" label-position="right">
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
+      <el-form label-width="200px">
+        <el-form label-width="200px" label-position="right">
+          <el-row style="margin-top: 10px;">
+            <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('hellow.formulaName')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.formulaNamea')" v-model="formulaName" autocomplete="off" />
-              </el-form-item></div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('Mounting.removalmethoda')" :required="true" style="width: 20vw;">
-            <el-select v-model="filmRemove" clearable  style="width: 270px" :placeholder="$t('Mounting.removalmethod')">
-        <el-option :label="$t('Mounting.removal')" value="1"></el-option>
-        <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
-      </el-select>
-              </el-form-item>
-            </div>
+                <div>
+                  <el-form-item :label="$t('hellow.formulaName')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.formulaNamea')" v-model="formulaName" autocomplete="off" />
+                  </el-form-item>
+                </div>
               </div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 30px;">
-          <el-col :span="6">
+            </el-col>
+            <el-col :span="9">
+              <div id="dta" style="font-size: 15px;">
+                <div>
+                  <el-form-item :label="$t('Mounting.removalmethoda')" :required="true" style="width: 20vw;">
+                    <el-select v-model="filmRemove" clearable style="width: 270px"
+                      :placeholder="$t('Mounting.removalmethod')">
+                      <el-option :label="$t('Mounting.removal')" value="1"></el-option>
+                      <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 30px;">
+            <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.bottomRemove')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.bottomRemovea')" v-model="bottomRemove" autocomplete="off" />
-              </el-form-item></div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.topRemove')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.topRemovea')" v-model="topRemove" autocomplete="off" />
-           </el-form-item>
-            </div></div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 30px;">
-          <el-col :span="6">
+                <div>
+                  <el-form-item :label="$t('hellow.bottomRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.bottomRemovea')" v-model="bottomRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+            <el-col :span="9">
+              <div id="dta" style="font-size: 15px;">
+                <div>
+                  <el-form-item :label="$t('hellow.topRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.topRemovea')" v-model="topRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 30px;">
+            <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.leftRemove')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.leftRemovea')" v-model="leftRemove" autocomplete="off" />
-              </el-form-item></div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.rightRemove')" :required="true" style="width: 20vw;">
-            <el-input :placeholder="$t('hellow.rightRemovea')" v-model="rightRemove" autocomplete="off" />
-              </el-form-item>
-            </div></div>
-          </el-col>
-        </el-row>
+                <div>
+                  <el-form-item :label="$t('hellow.leftRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.leftRemovea')" v-model="leftRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+            <el-col :span="9">
+              <div id="dta" style="font-size: 15px;">
+                <div>
+                  <el-form-item :label="$t('hellow.rightRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.rightRemovea')" v-model="rightRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+          </el-row>
         </el-form>
-            </el-form>
-          </div>
+      </el-form>
+    </div>
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleConfirm">
@@ -186,69 +201,78 @@
       </div>
     </template>
   </el-dialog>
-<!-- 涓┖閰嶆柟淇敼 -->
-<el-dialog v-model="adda" top="23vh" width="55%" :title="$t('hellow.edithollowformula')" >
+  <!-- 涓┖閰嶆柟淇敼 -->
+  <el-dialog v-model="adda" top="23vh" width="55%" :title="$t('hellow.edithollowformula')">
     <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
-     <el-form  label-width="200px">
-      <el-form label-width="200px" label-position="right">
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
+      <el-form label-width="200px">
+        <el-form label-width="200px" label-position="right">
+          <el-row style="margin-top: 10px;">
+            <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('hellow.formulaName')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.formulaNamea')" v-model="formulaName" autocomplete="off" />
-              </el-form-item></div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('Mounting.removalmethoda')" :required="true" style="width: 20vw;">
-            <el-select v-model="filmRemove" clearable  style="width: 270px" :placeholder="$t('Mounting.removalmethod')">
-        <el-option :label="$t('Mounting.removal')" value="1"></el-option>
-        <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
-      </el-select>
-              </el-form-item>
-            </div>
+                <div>
+                  <el-form-item :label="$t('hellow.formulaName')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.formulaNamea')" v-model="formulaName" autocomplete="off" />
+                  </el-form-item>
+                </div>
               </div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 30px;">
-          <el-col :span="6">
+            </el-col>
+            <el-col :span="9">
+              <div id="dta" style="font-size: 15px;">
+                <div>
+                  <el-form-item :label="$t('Mounting.removalmethoda')" :required="true" style="width: 20vw;">
+                    <el-select v-model="filmRemove" clearable style="width: 270px"
+                      :placeholder="$t('Mounting.removalmethod')">
+                      <el-option :label="$t('Mounting.removal')" value="1"></el-option>
+                      <el-option :label="$t('Mounting.noremoval')" value="0"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 30px;">
+            <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.bottomRemove')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.bottomRemovea')" v-model="bottomRemove" autocomplete="off" />
-              </el-form-item></div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.topRemove')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.topRemovea')" v-model="topRemove" autocomplete="off" />
-           </el-form-item>
-            </div></div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 30px;">
-          <el-col :span="6">
+                <div>
+                  <el-form-item :label="$t('hellow.bottomRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.bottomRemovea')" v-model="bottomRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+            <el-col :span="9">
+              <div id="dta" style="font-size: 15px;">
+                <div>
+                  <el-form-item :label="$t('hellow.topRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.topRemovea')" v-model="topRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+          </el-row>
+          <el-row style="margin-top: 30px;">
+            <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.leftRemove')" :required="true" style="width: 20vw;">
-                <el-input :placeholder="$t('hellow.leftRemovea')" v-model="leftRemove" autocomplete="off" />
-              </el-form-item></div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('hellow.rightRemove')" :required="true" style="width: 20vw;">
-            <el-input :placeholder="$t('hellow.rightRemovea')" v-model="rightRemove" autocomplete="off" />
-              </el-form-item>
-            </div></div>
-          </el-col>
-        </el-row>
+                <div>
+                  <el-form-item :label="$t('hellow.leftRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.leftRemovea')" v-model="leftRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+            <el-col :span="9">
+              <div id="dta" style="font-size: 15px;">
+                <div>
+                  <el-form-item :label="$t('hellow.rightRemove')" :required="true" style="width: 20vw;">
+                    <el-input :placeholder="$t('hellow.rightRemovea')" v-model="rightRemove" autocomplete="off" />
+                  </el-form-item>
+                </div>
+              </div>
+            </el-col>
+          </el-row>
         </el-form>
-            </el-form>
-          </div>
+      </el-form>
+    </div>
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handledit">
@@ -267,36 +291,17 @@
             <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantity" autocomplete="off" />
           </el-form-item>
           <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
-            <el-select 
-            :placeholder="$t('hellow.line2')"
-            disabled
-             style="width: 270px"  
-             v-model="cell">
-               <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-          </el-select>
+            <el-select :placeholder="$t('hellow.line2')" disabled style="width: 270px" v-model="cell">
+              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
           </el-form-item>
           <el-form-item :label="$t('hellow.hollowformulp')" :required="true" style="width: 25vw;">
-        <el-select
-            v-model="selectedFormulaName"
-            filterable
-            clearable
-            :placeholder="$t('hellow.phollowformula')"
-            style="width: 270px"
-            @change="handleFormulaChange"
-        >
-          <el-option
-              v-for="item in titleformulaName"
-              :key="item.id"
-              :label="item.formulaName"
-              :value="item.formulaName"
-          />
-        </el-select>
-      </el-form-item>
+            <el-select v-model="selectedFormulaName" filterable clearable :placeholder="$t('hellow.phollowformula')"
+              style="width: 270px" @change="handleFormulaChange">
+              <el-option v-for="item in titleformulaName" :key="item.id" :label="item.formulaName"
+                :value="item.formulaName" />
+            </el-select>
+          </el-form-item>
         </el-form>
       </el-form>
     </div>
@@ -318,36 +323,17 @@
             <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantitya" autocomplete="off" />
           </el-form-item>
           <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
-            <el-select 
-            :placeholder="$t('hellow.line2')"
-            disabled
-             style="width: 270px"  
-             v-model="cella">
-               <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-          </el-select>
+            <el-select :placeholder="$t('hellow.line2')" disabled style="width: 270px" v-model="cella">
+              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
           </el-form-item>
           <el-form-item :label="$t('hellow.hollowformulp')" :required="true" style="width: 25vw;">
-        <el-select
-            v-model="selectedFormulaName"
-            filterable
-            clearable
-            :placeholder="$t('hellow.phollowformula')"
-            style="width: 270px"
-            @change="handleFormulaChange"
-        >
-          <el-option
-              v-for="item in titleformulaName"
-              :key="item.id"
-              :label="item.formulaName"
-              :value="item.formulaName"
-          />
-        </el-select>
-      </el-form-item>
+            <el-select v-model="selectedFormulaName" filterable clearable :placeholder="$t('hellow.phollowformula')"
+              style="width: 270px" @change="handleFormulaChange">
+              <el-option v-for="item in titleformulaName" :key="item.id" :label="item.formulaName"
+                :value="item.formulaName" />
+            </el-select>
+          </el-form-item>
         </el-form>
       </el-form>
     </div>
@@ -367,29 +353,23 @@
         {{ currentRow.flowCardId }}
       </el-form-item>
     </div>
-    <el-table ref="table" style="margin-top: 20px;height: 400px;"
-          :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-      <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80"/>
-      <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80"/>
-      <el-table-column prop="height" align="center" :label="$t('hellow.height')" min-width="80"/>
-      <el-table-column prop="width" align="center" :label="$t('hellow.width')" min-width="80"/>
+    <el-table ref="table" style="margin-top: 20px;height: 400px;" :data="tableDatac"
+      :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+      <el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80" />
+      <el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80" />
+      <el-table-column prop="height" align="center" :label="$t('hellow.height')" min-width="80" />
+      <el-table-column prop="width" align="center" :label="$t('hellow.width')" min-width="80" />
       <!-- <el-table-column prop="totalCount" align="center" :label="$t('hellow.totalnumber')" min-width="80"/> -->
-      <el-table-column prop="lackCount" align="center" :label="$t('hellow.missingnumber')" min-width="80"/>
+      <el-table-column prop="lackCount" align="center" :label="$t('hellow.missingnumber')" min-width="80" />
       <!-- <el-table-column prop="damageCount" align="center" :label="$t('hellow.brokenpieces')" min-width="80"/> -->
       <div style="float: right;margin-bottom: 5px;">
-        <el-pagination layout="prev, pager, next" :total="50"/>
+        <el-pagination layout="prev, pager, next" :total="50" />
       </div>
     </el-table>
     <div style="display: flex;margin-left: 40%;margin-top: 10px;">
-  <el-pagination
-          background
-          size="large"
-          layout="prev, pager, next"
-          :total="30"
-          :current-page.sync="currentPage2"
-          @current-change="handlePageChange2"
-        />
-  </div>
+      <el-pagination background size="large" layout="prev, pager, next" :total="30" :current-page.sync="currentPage2"
+        @current-change="handlePageChange2" />
+    </div>
   </el-dialog>
   <!-- 寮�濮嬩换鍔� -->
   <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('hellow.pstarttask')">
@@ -407,11 +387,35 @@
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handlec">
-          {{ $t('basicData.confirm') }}
+          {{ $t('basicData.confirm') }}e
         </el-button>
         <el-button @click="blindc = false">{{ $t('basicData.cancel') }}</el-button>
       </div>
     </template>
+  </el-dialog>
+  <!-- 鎵撳嵃鏍囩 -->
+  <el-dialog v-model="blinde" top="30vh" width="25%" :title="$t('searchOrder.printlabels')">
+    <template #footer>
+      <div id="dialog-footer">
+        <el-select v-model="tag" filterable clearable :placeholder="$t('hellow.projectMsg2')" @change="changeTag"
+          style="width: 220px" @input="handleInputChange">
+          <el-option v-for="(tag, index) in tags" :key="index" :label="tag.name" :value="tag" />
+        </el-select>
+        <el-select v-model="stateValue" filterable clearable :placeholder="$t('screendisplay.pchoice')"
+          style="width: 220px" @input="handleInputChange">
+          <el-option v-for="item in stateOptions" :key="item.value" :label="item.label" :value="item.value" />
+        </el-select>
+        <el-button type="primary" @click="labelPrint = true">
+          {{ $t('processCard.printing') }}
+        </el-button>
+        <el-button @click="blinde = false">{{ $t('basicData.cancel') }}</el-button>
+      </div>
+    </template>
+  </el-dialog>
+  <el-dialog v-model="labelPrint" style="width: 80%; " destroy-on-close>
+    <el-button :icon="Printer" circle @click="printOrder(1)">{{ $t('processCard.printing') }}</el-button>
+    <print-custom-label-x-j id="childLabel" :faceOrientation="stateValue" :lableType="1" :list="listFlow"
+      :lastList='lastList' :type="tag.name" style="width: 100%;height: 100%" />
   </el-dialog>
   <!-- 鍒犻櫎浠诲姟 -->
   <el-dialog v-model="blindd" top="30vh" width="25%" :title="$t('hellow.hollowtaskdet')">
@@ -425,22 +429,13 @@
     </template>
   </el-dialog>
   <!-- 棰勮 -->
-  <el-dialog v-model="dialogFormVisiblee" top="24vh" width="25%" :title="$t('hellow.reviewproject')" >
+  <el-dialog v-model="dialogFormVisiblee" top="24vh" width="25%" :title="$t('hellow.reviewproject')">
     <div style="margin-left: 50px;margin-bottom: 10px;">
       <el-form-item :label="$t('basicData.projectnumber')" :required="true">
-        <el-select
-            v-model="selectedProjectNo"
-            filterable
-            clearable
-            :placeholder="$t('basicData.plselectproject')"
-            style="width: 260px"
-        >
-          <el-option
-              v-for="item in titleSelectJson.processType"
-              :key="item.value"
-              :label="item.value"
-              :value="item.value"
-          />
+        <el-select v-model="selectedProjectNo" filterable clearable :placeholder="$t('hellow.plselectproject')"
+          style="width: 260px">
+          <el-option v-for="item in titleSelectJson.processType" :key="item.value" :label="item.value"
+            :value="item.value" />
         </el-select>
       </el-form-item>
     </div>
@@ -455,60 +450,58 @@
   </el-dialog>
   <!-- 涓┖閰嶆柟 -->
   <el-dialog v-model="mulan" top="15vh" width="70%" :title="$t('hellow.hollowformula')">
-    <el-button id="searchButton" type="primary"  @click="openAddDialog">
-          {{ $t('basicData.add') }}
-        </el-button>
-      <el-table ref="table" style="margin-top: 20px;height: 400px;"
-                :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-        <el-table-column prop="formulaName" fixed align="center" :label="$t('hellow.formulaNamep')"/>
-        <el-table-column prop="filmRemove" align="center" :label="$t('Mounting.removalmethodp')" min-width="110">
-      <template #default="scope">
-        <el-tag :type="getcasOnea(scope.row.filmRemove)">
-          {{ getStatuscasOnea(scope.row.filmRemove) }}
-        </el-tag>
-      </template>
-    </el-table-column>
-        <el-table-column prop="topRemove" align="center" :label="$t('hellow.topRemovep')"> </el-table-column>
-        <el-table-column prop="bottomRemove" align="center" :label="$t('hellow.bottomRemovep')"> </el-table-column>
-        <el-table-column prop="leftRemove" align="center" :label="$t('hellow.leftRemovep')"> </el-table-column>
-        <el-table-column prop="rightRemove" align="center" :label="$t('hellow.rightRemovep')"> </el-table-column>
-        <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
-            <template #default="scope">
-              <el-button type="text" plain @click="handleEdit(scope.row)">{{ $t('productStock.exit') }}</el-button>
-              <el-button type="text" plain @click="opena(scope.row)">{{ $t('productStock.delete') }}</el-button>
-            </template>
-        </el-table-column>
-        </el-table>
-        <template #footer>
+    <el-button id="searchButton" type="primary" @click="openAddDialog">
+      {{ $t('basicData.add') }}
+    </el-button>
+    <el-table ref="table" style="margin-top: 20px;height: 400px;" :data="tableDatax"
+      :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+      <el-table-column prop="formulaName" fixed align="center" :label="$t('hellow.formulaNamep')" />
+      <el-table-column prop="filmRemove" align="center" :label="$t('Mounting.removalmethodp')" min-width="110">
+        <template #default="scope">
+          <el-tag :type="getcasOnea(scope.row.filmRemove)">
+            {{ getStatuscasOnea(scope.row.filmRemove) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="topRemove" align="center" :label="$t('hellow.topRemovep')"> </el-table-column>
+      <el-table-column prop="bottomRemove" align="center" :label="$t('hellow.bottomRemovep')"> </el-table-column>
+      <el-table-column prop="leftRemove" align="center" :label="$t('hellow.leftRemovep')"> </el-table-column>
+      <el-table-column prop="rightRemove" align="center" :label="$t('hellow.rightRemovep')"> </el-table-column>
+      <el-table-column fixed="right" :label="$t('productStock.operate')" align="center" width="270">
+        <template #default="scope">
+          <el-button type="text" plain @click="handleEdit(scope.row)">{{ $t('productStock.exit') }}</el-button>
+          <el-button type="text" plain @click="opena(scope.row)">{{ $t('productStock.delete') }}</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <template #footer>
       <div id="dialog-footer">
         <el-button @click="mulan = false">{{ $t('large.close') }}</el-button>
       </div>
     </template>
-</el-dialog>
- <!-- 鍘嗗彶浠诲姟 -->
- <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl=''">
-     <iframe 
-     :src="iframeUrl" 
-     marginwidth="2000px"
-     marginheight="2000px"
-     width="100%" 
-     height="750px" 
-     frameborder="0"
-     ></iframe>
+  </el-dialog>
+  <!-- 鍘嗗彶浠诲姟 -->
+  <el-dialog v-model="blindb" top="5vh" width="95%" @close="iframeUrl = ''">
+    <iframe :src="iframeUrl" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
+      frameborder="0"></iframe>
   </el-dialog>
 </template>
 <script setup>
+import { CircleCheck, Download, Printer } from "@element-plus/icons-vue/global";
 import { ElMessage, ElMessageBox } from 'element-plus'
-import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive, watch, computed} from "vue";
+import { onBeforeUnmount, onMounted, onUnmounted, ref, reactive, watch, computed } from "vue";
 import request from "@/utils/request"
-import {host, WebSocketHost} from '@/utils/constants'
-import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
-import {useI18n} from 'vue-i18n'
-const {t} = useI18n()
+import requestErp from "@/utils/requestErp"
+import { host, WebSocketHost } from '@/utils/constants'
+import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService'
+import PrintCustomLabelXJ from './PrintCustomLabelTwo.vue'
+import { useI18n } from 'vue-i18n'
+const { t } = useI18n()
 const blinda = ref(false)
 const blindb = ref(false)
 const blindc = ref(false)
 const blindd = ref(false)
+
 const mulan = ref(false)
 const tableDataa = ref([])
 const tableDatab = ref([])
@@ -545,7 +538,7 @@
 const selectedFormulaName = ref('');
 let selectedFormulaId = ref(null);
 const formulaNameid = ref({ id: null });
-const titleformulaName = ref({ formulaName: [] ,formulaId: []});
+const titleformulaName = ref({ formulaName: [], formulaId: [] });
 const titleSelectJson = ref({ processType: [] });
 const iframeUrl = ref('');
 const handlehistorical = (row) => {
@@ -562,6 +555,30 @@
     label: t('hellow.line2'),
   }
 ]
+
+const stateValue = ref('')
+const stateOptions = [
+  {
+    value: t('processCard.thisIsTheIndoorSurface'),
+    label: t('processCard.thisIsTheIndoorSurface'),
+  },
+  {
+    value: t('processCard.thisSideIsOutsideTheRoom'),
+    label: t('processCard.thisSideIsOutsideTheRoom'),
+  },
+]
+const labelPrint = ref(false);
+const listFlow = ref([])
+
+// let labelRow = ref({
+//   list: null,//鍕鹃�夌殑鏁版嵁
+//   faceOrientation: null,//鍐呭闈�
+//   type: null,//鏍囩妯℃澘
+//   lableType: null,//鏍囩绫诲瀷
+//   dataType: null,
+//   landingSequence: null
+// })
+
 let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/HollowGlassTwo`;
 const currentPage = ref(parseInt(window.localStorage.getItem('currentPage')) || 1);
@@ -584,7 +601,7 @@
     const currentPageData = allPageData[currentPageKeyValue];
     if (data.freeRequest != null) {
       freetwo.value = data.freeRequest[0] == true ? 'green' : '#911005';
-  }
+    }
     // if (currentPageData && Array.isArray(currentPageData) && currentPageData.length > 0) {
     //   tableDataa.value = currentPageData[0];
     // } else {
@@ -602,25 +619,25 @@
     closeWebSocket(socket);
   }
 });
-function getcasOnea(filmRemove) {  
-  switch (filmRemove) {  
+function getcasOnea(filmRemove) {
+  switch (filmRemove) {
     case 1:
-      return 'success';  
-    case 0: 
-      return 'warning';  
+      return 'success';
+    case 0:
+      return 'warning';
     default:
-      return 'info'; 
-  }  
-}  
+      return 'info';
+  }
+}
 function getStatuscasOnea(filmRemove) {
   switch (filmRemove) {
-    case 1:  
+    case 1:
       return t('Mounting.removal');
-    case 0:  
-      return t('Mounting.noremoval'); 
+    case 0:
+      return t('Mounting.noremoval');
     default:
       return '';
-  }  
+  }
 }
 // 寮�濮嬩换鍔� 
 const handleBinda = (row) => {
@@ -634,28 +651,33 @@
 const handleBindd = (row) => {
   blindd.value = true;
 };
+const handleBinde = (row) => {
+  blinde.value = true;
+  getTags();
+  hiprint.init();
+};
 const removalMethodMap = {
   1: t('Mounting.removal'),
   0: t('Mounting.noremoval')
 };
 // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
-function handleEdit(row) {  
-    formulaName.value = row.formulaName;
-    filmRemove.value = removalMethodMap[row.filmRemove];
-    bottomRemove.value = row.bottomRemove;
-    leftRemove.value = row.leftRemove;
-    rightRemove.value = row.rightRemove;
-    topRemove.value = row.topRemove;
-    adda.value = true;
-}  
-function openAddDialog() {  
-    formulaName.value = '';
-    filmRemove.value = '';
-    bottomRemove.value = '';
-    leftRemove.value = '';
-    rightRemove.value = '';
-    topRemove.value = '';
-    add.value = true;
+function handleEdit(row) {
+  formulaName.value = row.formulaName;
+  filmRemove.value = removalMethodMap[row.filmRemove];
+  bottomRemove.value = row.bottomRemove;
+  leftRemove.value = row.leftRemove;
+  rightRemove.value = row.rightRemove;
+  topRemove.value = row.topRemove;
+  adda.value = true;
+}
+function openAddDialog() {
+  formulaName.value = '';
+  filmRemove.value = '';
+  bottomRemove.value = '';
+  leftRemove.value = '';
+  rightRemove.value = '';
+  topRemove.value = '';
+  add.value = true;
 }
 const handlezhiban = () => {
   dialogFormVisiblea.value = true;
@@ -674,9 +696,9 @@
 const handleBindRack = (row) => {
   currentPage2.value = 1;
   const { flowCardId } = row;
-  currentRow.flowCardId  = row.flowCardId;
+  currentRow.flowCardId = row.flowCardId;
   dialogFormVisibleb.value = true;
-  fetchFlowBind(flowCardId,currentPage2.value);
+  fetchFlowBind(flowCardId, currentPage2.value);
 };
 // 棰嗗彇浠诲姟
 const handletake = (row) => {
@@ -693,7 +715,7 @@
 // 鍒涘缓浠诲姟
 const fetchFlowCardId = async () => {
   try {
-    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard',{
+    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard', {
       deviceId: 0,
       filmsId: '',
       flowCardId: '',
@@ -722,7 +744,7 @@
 }
 const fetchFlowCardsearch = async () => {
   try {
-    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard',{
+    const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard', {
       filmsId: filmsId.value,
       flowCardId: flowCardId.value,
       thickness: thickness.value
@@ -739,7 +761,7 @@
 // 涓┖閰嶆柟
 const fetchmulan = async () => {
   try {
-    var url="/hollowGlass/hollowFormulaDetails/listFormulaDetails?keyword="+'';
+    var url = "/hollowGlass/hollowFormulaDetails/listFormulaDetails?keyword=" + '';
     const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
@@ -786,7 +808,7 @@
     return
   }
   try {
-    const response = await request.post('/hollowGlass/hollowFormulaDetails/saveFormulaDetails',{
+    const response = await request.post('/hollowGlass/hollowFormulaDetails/saveFormulaDetails', {
       formulaName: formulaName.value,
       filmRemove: filmRemove.value,
       bottomRemove: bottomRemove.value,
@@ -841,7 +863,7 @@
     return
   }
   try {
-    const response = await request.post('/hollowGlass/hollowFormulaDetails/updateFormulaDetails',{
+    const response = await request.post('/hollowGlass/hollowFormulaDetails/updateFormulaDetails', {
       formulaName: formulaName.value,
       filmRemove: removalMethodMapa[filmRemove.value],
       bottomRemove: bottomRemove.value,
@@ -859,33 +881,33 @@
   }
 };
 // 涓┖閰嶆柟鍒犻櫎 
- const opena = async(row) => {  
+const opena = async (row) => {
   try {
-    const confirmResult = await ElMessageBox.confirm(  
-      t('hellow.hollowformuldet'), 
-      t('productStock.prompt'),  
-      {  
-        confirmButtonText: t('productStock.yes'), 
+    const confirmResult = await ElMessageBox.confirm(
+      t('hellow.hollowformuldet'),
+      t('productStock.prompt'),
+      {
+        confirmButtonText: t('productStock.yes'),
         cancelButtonText: t('productStock.cancel'),
-        type: 'warning',  
-      } 
+        type: 'warning',
+      }
     );
     if (confirmResult === 'confirm') {
-    var url="/hollowGlass/hollowFormulaDetails/deleteFormulaDetails?idList="+row.id;
-    const response = await request.post(url)
-    if (response.code === 200) {
-      ElMessage.success(response.message);
-      fetchmulan()
-    } else {
-      }  
-    }  
+      var url = "/hollowGlass/hollowFormulaDetails/deleteFormulaDetails?idList=" + row.id;
+      const response = await request.post(url)
+      if (response.code === 200) {
+        ElMessage.success(response.message);
+        fetchmulan()
+      } else {
+      }
+    }
   } catch (error) {
-  }  
+  }
 };
 // 宸ョ▼鍙�
 const selectgong = async () => {
   try {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/hollowTaskList?cell="+ 931;
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/hollowTaskList?cell=" + 931;
     const response = await request.post(url)
     if (response.code == 200) {
       const processTypes = response.data.map((projectNo, index) => ({
@@ -901,20 +923,34 @@
 // 棰勮
 const handleup = async () => {
   if (!selectedProjectNo.value) {
-    ElMessage.error(t('basicData.plselectproject'))
+    ElMessage.error(t('hellow.plselectproject'))
     return
   }
   try {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/appointHollowTaskDetails?cell="+ 931 + "&flowCardId=" + selectedProjectNo.value;
-  window.localStorage.setItem('flowCardId', selectedProjectNo.value)
-  const response = await request.post(url)
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/appointHollowTaskDetails?cell=" + 931 + "&flowCardId=" + selectedProjectNo.value;
+    window.localStorage.setItem('flowCardId', selectedProjectNo.value)
+    const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
       tableDataa.value = response.data;
       dialogFormVisiblee.value = false
       selectedProjectNo.value = ''
       closeWebSocket(socket);
-  } else {
+
+      const summary = response.data.reduce((map, item) => {
+        const key = `${item.hollowSequence}`;
+        if (!map[key]) {
+          map[key] = {
+            printQuantity: 1,
+            order_number: item.glassType,
+            processId: item.flowCardId
+          };
+        }
+        return map;
+      }, {});
+      listFlow.value = Object.values(summary);
+
+    } else {
     }
   } catch (error) {
   }
@@ -933,7 +969,7 @@
 };
 const fetchFlowBind = async (flowCardId, page) => {
   try {
-    var url="/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId="+flowCardId + "&layer=" + 1;
+    var url = "/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId=" + flowCardId + "&layer=" + 1;
     const response = await request.post(url)
     if (response.code == 200) {
       tableDatac.value = response.data[page];
@@ -948,8 +984,8 @@
   try {
     let flowCardId = window.localStorage.getItem('flowCardId')
     if (flowCardId !== '') {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/startTask?flowCardId="+flowCardId + "&cell=" + 931;
-    const response = await request.post(url)
+      var url = "/hollowGlass/hollowGlassOutRelationInfo/startTask?flowCardId=" + flowCardId + "&cell=" + 931;
+      const response = await request.post(url)
       if (response.code == 200) {
         ElMessage.success(response.message);
         blinda.value = false;
@@ -969,8 +1005,8 @@
   try {
     let flowCardId = window.localStorage.getItem('flowCardId')
     if (flowCardId !== '') {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/pauseTask?flowCardId="+flowCardId + "&cell=" + 931;
-    const response = await request.post(url)
+      var url = "/hollowGlass/hollowGlassOutRelationInfo/pauseTask?flowCardId=" + flowCardId + "&cell=" + 931;
+      const response = await request.post(url)
       if (response.code == 200) {
         ElMessage.success(response.message);
         blindc.value = false;
@@ -990,8 +1026,8 @@
   try {
     let flowCardId = window.localStorage.getItem('flowCardId')
     if (flowCardId !== '') {
-    var url="/hollowGlass/hollowGlassOutRelationInfo/deleteHollowTaskDetails?flowCardId="+flowCardId + "&cell=" + 931;
-    const response = await request.post(url)
+      var url = "/hollowGlass/hollowGlassOutRelationInfo/deleteHollowTaskDetails?flowCardId=" + flowCardId + "&cell=" + 931;
+      const response = await request.post(url)
       if (response.code == 200) {
         ElMessage.success(response.message);
         blindd.value = false;
@@ -1018,9 +1054,9 @@
     ElMessage.error(t('hellow.phollowformula'))
     return
   }
-    try {
-      var url="/hollowGlass/hollowGlassOutRelationInfo/receiveTask?cell="+ 931 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value+ "&formulaId=" + id;
-      const response = await request.post(url)
+  try {
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/receiveTask?cell=" + 931 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value + "&formulaId=" + id;
+    const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
       dialogFormVisiblec.value = false;
@@ -1028,10 +1064,10 @@
       formulaName.value = '';
       totalPairQuantity.value = '';
     } else {
-        }
-      } catch (error) {
-      }
     }
+  } catch (error) {
+  }
+}
 // 寮哄埗鍑虹墖
 const finishb = async () => {
   let flowCardId = window.localStorage.getItem('flowCardId')
@@ -1045,37 +1081,103 @@
     return
   }
   try {
-      var url="/hollowGlass/hollowGlassOutRelationInfo/forceOutGlass?cell="+ 931 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantitya.value+ "&formulaId=" + id;
-      const response = await request.post(url)
+    var url = "/hollowGlass/hollowGlassOutRelationInfo/forceOutGlass?cell=" + 931 + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantitya.value + "&formulaId=" + id;
+    const response = await request.post(url)
     if (response.code == 200) {
       ElMessage.success(response.message);
       dialogFormVisibled.value = false;
       cella.value = '';
       totalPairQuantitya.value = '';
     } else {
-        }
-      } catch (error) {
-      }
     }
+  } catch (error) {
+  }
+}
 
 onBeforeUnmount(() => {
   closeWebSocket();
 });
+
+import { hiprint } from "vue-plugin-hiprint";
+let hiprintTemplate = ref()
+const blinde = ref(false)
+const changeTag = () => {
+  hiprintTemplate.value = new hiprint.PrintTemplate({});
+  const json = JSON.parse(tag.value.value)
+  hiprintTemplate.value.update(json)
+}
+
+const getTags = async () => {
+  try {
+    const response = await requestErp.get('tagStyle/getTagList')
+    if (response.code == 200) {
+      tags.value = response.data
+      ElMessage.success(response.message);
+    }
+  } catch (error) {
+  }
+}
+
+
+
+const printOrder = (type) => {
+  const list = hiprintTemplate.value.getJson()
+  list.panels[0].printElements.forEach(element => {
+    element.options.fontFamily = 'Arial'
+  })
+  console.log(lastList.value)
+  let object = lastList.value
+  //鍒ゆ柇鏄惁涓鸿〃鏍�
+  let columnsNum = null
+  if (list.panels[0].printElements[0].options.field === 'table') {
+    object = { table: lastList.value }
+    columnsNum = (list.panels[0].printElements[0].options.gridColumns || 1)
+  }
+  hiprintTemplate.value.print(object)
+
+}
+let lastList = ref([])
+const tags = ref([])
+
+const tag = ref({
+  id: null,
+  name: null,
+  type: 1,
+  tagWidth: null,
+  tagHeight: null,
+  value: null,
+  size: null
+})
+
 </script>
 <style scoped>
-#dt { display:block; float:left;line-height: 20px;margin-left: 10px;}
-#dta { display:block; float:left;line-height: 20px;margin-left: 70%;}
+#dt {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 10px;
+}
+
+#dta {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 70%;
+}
+
 #dialog-footer {
   text-align: center;
   margin-top: -5px;
 }
+
 #dotClass {
   display: flex;
-  margin-left: 20px; 
+  margin-left: 20px;
   size: 50px;
   margin-top: 20px;
   margin-bottom: 10px;
 }
+
 ::v-deep(.row-red-background) {
   background-color: rgb(224.6, 242.8, 215.6) !important;
 }
diff --git a/UI-Project/src/views/largescreendisplay/screendisplay.vue b/UI-Project/src/views/largescreendisplay/screendisplay.vue
index fe60e32..ecae54e 100644
--- a/UI-Project/src/views/largescreendisplay/screendisplay.vue
+++ b/UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -30,7 +30,7 @@
 const debouncedUpdate = debounce((data, handler) => {
   handler(data);
 }, 300);
-const handleMessage = (data) => {
+let handleMessage = (data) => {
   debouncedUpdate(data, (cleanData) => {
     rawGlassStorageDetailList.value = cleanData.rawGlassStorageDetailList[0];
     orderDTOS.value = cleanData.orderDTOS[0];
@@ -62,7 +62,7 @@
 let myChartTemp = null;
 let myChartHollow = null;
 const socketUrl1 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreen`;
-const handleMessage1 = (data) => {
+let handleMessage1 = (data) => {
   edgOneTasks.value = data.edgOneCount[0];
   edgTwoTasks.value = data.edgOneCount[0];
   engineeringOne.value = data.engineeringOne[0];
@@ -83,7 +83,7 @@
 const temperingGlassInfoList = ref([])
 const temperingGlassInfoInList = ref([])
 const socketUrl2 = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/largenScreen`;
-const handleMessage2 = (data) => {
+let handleMessage2 = (data) => {
   temperingTaskType.value = data.temperingTaskType[0];
   temperingGlassInfoList.value = data.temperingGlassInfoList[0];
   if (numBoxes3.value != temperingTaskType.value) {
@@ -106,7 +106,7 @@
 let socket3 = null;
 const bigStorageCageUsage = ref([])
 const socketUrl3 = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/largenScreen`;
-const handleMessage3 = (data) => {
+let handleMessage3 = (data) => {
   bigStorageCageUsage.value = data.bigStorageCageUsage[0];
   timeAxisCreate(t('large.temperingState'), chartTemp.value, myChartTemp, tableDataTime(false, data.tempRunTimes[0]));
 };
@@ -292,7 +292,7 @@
 let socket4 = null;
 const hollowBigStorageCageUsage = ref([])
 const socketUrl4 = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/largenScreen`;
-const handleMessage4 = (data) => {
+let handleMessage4 = (data) => {
   hollowBigStorageCageUsage.value = data.hollowBigStorageCageUsage[0];
   timeAxisCreate(t('large.hollowState'), chartHollow.value, myChartHollow, tableDataTime(false, data.hollowRunTimes[0]));
 };
@@ -466,7 +466,7 @@
   };
   myChart2.setOption(option2, true);
 }
-const handleMessage5 = (data) => {
+let handleMessage5 = (data) => {
   productionVO.value = data.productionVO[0];
   createchart(productionVO);
 };

--
Gitblit v1.8.0