yaowanxin
昨天 0a144cc1dd664851638a6a01d030dd6a1585c25a
增添数据库表字段
已修改2个文件
已添加1个文件
121 ■■■■■ 文件已修改
src/utils/connect.js 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/connect.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
// æ–°å¢žï¼šå­˜å‚¨å…¨å±€ä¸²å£å’Œè¯»å–器实例
    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 };
src/views/CNAS/resourceDemand/device/component/acquisitionConfig.vue
@@ -158,6 +158,10 @@
        <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>
@@ -244,7 +248,8 @@
        dbFileName: "",
        fiberOpticRibbon: "",
        dbUserName: "",
        dbPassword: ""
        dbPassword: "",
        dbTable: ""
      },
      domains: [
        {
@@ -266,6 +271,7 @@
        { label: "excel", value: ".xlsx" },
        { label: "excel", value: ".xls" },
        { label: "txt", value: ".txt" },
        { label: "mysql", value: ".mysql" },
        { label: "png", value: ".png" }
      ],
      spanList: [],
@@ -417,7 +423,8 @@
        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);
      })
    },
    // æäº¤æ–‡ä»¶é…ç½®
@@ -433,7 +440,8 @@
        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 => {
src/views/business/inspectionTask/inspection.vue
@@ -141,7 +141,7 @@
          <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>
@@ -536,6 +536,8 @@
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,
@@ -818,6 +820,7 @@
    this.startWorker();
    // this.getList0() // ä»»åŠ¡åˆ‡æ¢
    this.scrollInit();
    disconnect()
  },
  activated() {
    this.getTypeDicts(); // èŽ·å–ç´§æ€¥ç¨‹åº¦ä¸‹æ‹‰æ¡†é€‰é¡¹
@@ -897,6 +900,7 @@
  beforeDestroy() {
    // åœ¨ç»„件销毁前确保停止 Worker,避免内存泄漏
    this.stopWorker();
    disconnect()
  },
  methods: {
    // æ–‡ä»¶ç®¡ç†--开始
@@ -1128,6 +1132,8 @@
    },
    // æ•°æ®é‡‡é›†
    getDataAcquisitionDevice() {
      // connect()
      // return
      let itemIds = [];
      this.currentSample.insProduct.forEach((item) => {
        if (item.inspectionItemType === "1") {
@@ -2914,6 +2920,9 @@
      this.$router.go(-1)
    }
  },
  destroyed() {
    disconnect()
  },
};
</script>
<style scoped>