| ¶Ô±ÈÐÂÎļþ | 
 |  |  | 
 |  |  | // æ°å¢ï¼åå¨å
¨å±ä¸²å£å读åå¨å®ä¾ | 
 |  |  |     let port = null; | 
 |  |  |     let reader = null; | 
 |  |  |     let accumulatedData = ""; // ç§»å°å
¨å±ï¼ä¾¿äºå
³éæ¶éç½® | 
 |  |  |  | 
 |  |  |     async function connect() { | 
 |  |  |       if ("serial" in navigator) { | 
 |  |  |         try { | 
 |  |  |           port = await navigator.serial.requestPort(); // ä¿®æ¹ä¸ºå
¨å±åé | 
 |  |  |           await port.open({ baudRate: 9600 }); | 
 |  |  |  | 
 |  |  |           reader = port.readable.getReader(); // ä¿®æ¹ä¸ºå
¨å±åé | 
 |  |  |           const decoder = new TextDecoder(); | 
 |  |  |           accumulatedData = ""; // éç½®ç´¯ç§¯æ°æ® | 
 |  |  |  | 
 |  |  |           console.log("串å£è¿æ¥æåï¼å¼å§æ¥æ¶æ°æ®..."); | 
 |  |  |  | 
 |  |  |           while (true) { | 
 |  |  |             const { value, done } = await reader.read(); | 
 |  |  |             if (done) break; | 
 |  |  |  | 
 |  |  |             const decodedChunk = decoder.decode(value, { stream: true }); | 
 |  |  |             accumulatedData += decodedChunk; | 
 |  |  |             console.log("æ¥æ¶å°æ°æ®å:", decodedChunk); | 
 |  |  |  | 
 |  |  |             processAccumulatedData(accumulatedData); | 
 |  |  |           } | 
 |  |  |         } catch (error) { | 
 |  |  |           console.error("串å£é误:", error); | 
 |  |  |         } | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       function processAccumulatedData(data) { | 
 |  |  |         if (data.includes("\n")) { | 
 |  |  |           const messages = data.split("\n"); | 
 |  |  |  | 
 |  |  |           for (let i = 0; i < messages.length - 1; i++) { | 
 |  |  |             const completeMessage = messages[i]; | 
 |  |  |             console.log("宿´æ¶æ¯:", completeMessage); | 
 |  |  |             handleMessage(completeMessage); | 
 |  |  |           } | 
 |  |  |  | 
 |  |  |           accumulatedData = messages[messages.length - 1]; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // å
¶ä»æ¶æ¯æå示ä¾ä¿æä¸å | 
 |  |  |         /* | 
 |  |  |   while (accumulatedData.length >= 32) { | 
 |  |  |     const message = accumulatedData.substring(0, 32); | 
 |  |  |     accumulatedData = accumulatedData.substring(32); | 
 |  |  |     handleMessage(message); | 
 |  |  |   } | 
 |  |  |   */ | 
 |  |  |  | 
 |  |  |         /* | 
 |  |  |   let startIndex = 0; | 
 |  |  |   while (true) { | 
 |  |  |     const start = accumulatedData.indexOf(0xAA, startIndex); | 
 |  |  |     if (start === -1) break; | 
 |  |  |      | 
 |  |  |     const end = accumulatedData.indexOf(0x55, start + 1); | 
 |  |  |     if (end === -1) break; | 
 |  |  |      | 
 |  |  |     const message = accumulatedData.substring(start, end + 1); | 
 |  |  |     accumulatedData = accumulatedData.substring(end + 1); | 
 |  |  |     handleMessage(message); | 
 |  |  |     startIndex = start; | 
 |  |  |   } | 
 |  |  |   */ | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // æ°å¢ï¼å
³éè¿æ¥å½æ° | 
 |  |  |     async function disconnect() { | 
 |  |  |       if (!port || !reader) { | 
 |  |  |         console.log("æªå»ºç«è¿æ¥ï¼æ éå
³é"); | 
 |  |  |         return; | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       try { | 
 |  |  |         // å
åæ¶è¯»åå¨ | 
 |  |  |         await reader.cancel(); | 
 |  |  |         // åå
³éä¸²å£ | 
 |  |  |         await port.close(); | 
 |  |  |         console.log("串å£è¿æ¥å·²å
³é"); | 
 |  |  |  | 
 |  |  |         // éç½®å
¨å±åé | 
 |  |  |         port = null; | 
 |  |  |         reader = null; | 
 |  |  |         accumulatedData = ""; | 
 |  |  |       } catch (error) { | 
 |  |  |         console.error("å
³éè¿æ¥å¤±è´¥:", error); | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     export { connect, disconnect }; | 
 
 |  |  | 
 |  |  |         <div class="search_label">æ°æ®åºå¯ç ï¼</div> | 
 |  |  |         <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.dbPassword"></el-input> | 
 |  |  |       </div> | 
 |  |  |       <div v-if="configForm.fileType === '.mysql'" class="search_thing" style="margin-bottom: 14px;"> | 
 |  |  |         <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>æ°æ®åºè¡¨ï¼</div> | 
 |  |  |         <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.dbTable"></el-input> | 
 |  |  |       </div> | 
 |  |  |       <span slot="footer" class="dialog-footer"> | 
 |  |  |         <el-row> | 
 |  |  |           <el-button @click="dialogVisible4 = false">å æ¶</el-button> | 
 |  |  | 
 |  |  |         dbFileName: "", | 
 |  |  |         fiberOpticRibbon: "", | 
 |  |  |         dbUserName: "", | 
 |  |  |         dbPassword: "" | 
 |  |  |         dbPassword: "", | 
 |  |  |         dbTable: "" | 
 |  |  |       }, | 
 |  |  |       domains: [ | 
 |  |  |         { | 
 |  |  | 
 |  |  |         { label: "excel", value: ".xlsx" }, | 
 |  |  |         { label: "excel", value: ".xls" }, | 
 |  |  |         { label: "txt", value: ".txt" }, | 
 |  |  |         { label: "mysql", value: ".mysql" }, | 
 |  |  |         { label: "png", value: ".png" } | 
 |  |  |       ], | 
 |  |  |       spanList: [], | 
 |  |  | 
 |  |  |         this.$set(this.configForm, "dbFileName", res.data.dbFileName); | 
 |  |  |         this.$set(this.configForm, "fiberOpticRibbon", res.data.fiberOpticRibbon); | 
 |  |  |         this.$set(this.configForm, "dbUserName", res.data.dbUserName); | 
 |  |  |         this.$set(this.configForm, "dbPassword", res.data.dbPassword) | 
 |  |  |         this.$set(this.configForm, "dbPassword", res.data.dbPassword); | 
 |  |  |         this.$set(this.configForm, "dbTable", res.data.dbTable); | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     // æäº¤æä»¶é
ç½® | 
 |  |  | 
 |  |  |         dbFileName: this.configForm.dbFileName, | 
 |  |  |         fiberOpticRibbon: this.configForm.fiberOpticRibbon, | 
 |  |  |         dbUserName: this.configForm.dbUserName, | 
 |  |  |         dbPassword: this.configForm.dbPassword | 
 |  |  |         dbPassword: this.configForm.dbPassword, | 
 |  |  |         dbTable: this.configForm.dbTable | 
 |  |  |       }); | 
 |  |  |       this.upLoad4 = true; | 
 |  |  |       saveDeviceFileConfiguration({ deviceId: this.deviceId, ...obj }).then(res => { | 
 
 |  |  | 
 |  |  |           <el-button :loading="dataAcquisitionLoading" v-if="state == 1" size="small" type="primary" | 
 |  |  |             @click="getDataAcquisitionDevice">æ°æ®éé</el-button> | 
 |  |  |           <el-button :type="dataAcquisitionEidtAble ? '' : 'primary'" v-if="state == 1" size="small" | 
 |  |  |             @click="dataAcquisitionEidtAble = !dataAcquisitionEidtAble">{{ dataAcquisitionEidtAble ? "å
³éç¼è¾" : "ç¼è¾æ°é" | 
 |  |  |             @click="dataAcquisitionEidtAble = !dataAcquisitionEidtAble,disconnect()">{{ dataAcquisitionEidtAble ? "å
³éç¼è¾" : "ç¼è¾æ°é" | 
 |  |  |             }}</el-button> | 
 |  |  |         </div> | 
 |  |  |       </div> | 
 |  |  | 
 |  |  | import AddUnPass from "../unpass/components/addUnPass.vue"; | 
 |  |  | import InspectionWord from "./components/InspectionWord.vue"; | 
 |  |  | import PurchaseVerification from "../unpass/components/PurchaseVerification.vue"; | 
 |  |  | import { connect,disconnect } from "@/utils/connect.js"; | 
 |  |  |  | 
 |  |  | import { | 
 |  |  |   doInsOrder, | 
 |  |  |   getCableTag, | 
 |  |  | 
 |  |  |     this.startWorker(); | 
 |  |  |     // this.getList0() // ä»»å¡åæ¢ | 
 |  |  |     this.scrollInit(); | 
 |  |  |     disconnect() | 
 |  |  |   }, | 
 |  |  |   activated() { | 
 |  |  |     this.getTypeDicts(); // è·åç´§æ¥ç¨åº¦ä¸ææ¡é项 | 
 |  |  | 
 |  |  |   beforeDestroy() { | 
 |  |  |     // å¨ç»ä»¶éæ¯åç¡®ä¿å梠Workerï¼é¿å
å
åæ³æ¼ | 
 |  |  |     this.stopWorker(); | 
 |  |  |     disconnect() | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |     // æä»¶ç®¡ç--å¼å§ | 
 |  |  | 
 |  |  |     }, | 
 |  |  |     // æ°æ®éé | 
 |  |  |     getDataAcquisitionDevice() { | 
 |  |  |       // connect() | 
 |  |  |       // return | 
 |  |  |       let itemIds = []; | 
 |  |  |       this.currentSample.insProduct.forEach((item) => { | 
 |  |  |         if (item.inspectionItemType === "1") { | 
 |  |  | 
 |  |  |       this.$router.go(-1) | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   destroyed() { | 
 |  |  |     disconnect() | 
 |  |  |   }, | 
 |  |  | }; | 
 |  |  | </script> | 
 |  |  | <style scoped> |