From cb2a01ee7dea28a2661720060b03c41dc372acb5 Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期五, 01 八月 2025 11:53:16 +0800
Subject: [PATCH] 完善串口处理数据,数据选择
---
src/views/system/user/index.vue | 2
src/utils/connect.js | 99 ++++++++++++++++++------
src/views/business/inspectionTask/inspection.vue | 134 ++++++++++++++++++++++++---------
3 files changed, 173 insertions(+), 62 deletions(-)
diff --git a/src/utils/connect.js b/src/utils/connect.js
index 39edfd6..251a15e 100644
--- a/src/utils/connect.js
+++ b/src/utils/connect.js
@@ -1,10 +1,30 @@
+import request from '@/utils/request';
// 鏂板锛氬瓨鍌ㄥ叏灞�涓插彛鍜岃鍙栧櫒瀹炰緥
let port = null;
let reader = null;
let accumulatedData = ""; // 绉诲埌鍏ㄥ眬锛屼究浜庡叧闂椂閲嶇疆
+ let weightList = []; // 鐢ㄤ簬瀛樺偍閲嶉噺鍊肩殑鍒楄〃
+
+ async function sendWeightsToBackend(weights) {
+ try {
+ // 浣跨敤 await 绛夊緟 request 鍑芥暟杩斿洖缁撴灉
+ const response = await request({
+ url: "/weight/handleWeights",
+ method: "POST",
+ data: weights, // 閫氬父 request 鍑芥暟浣跨敤 data 瀛楁浼犻�掓暟鎹�
+ });
+ // 鏍规嵁 request 鍑芥暟鐨勫疄鐜板垽鏂搷搴旀槸鍚︽垚鍔�
+ if (response.code !== 200) { // 鍋囪 response 鏈� code 瀛楁锛�200 琛ㄧず鎴愬姛
+ throw new Error(`Backend response error: ${response.message}`);
+ }
+ return response.data; // 鍋囪鍝嶅簲鏁版嵁鍦� data 瀛楁涓�
+ } catch (error) {
+ console.error('鍙戦�侀噸閲忔暟鎹埌鍚庣澶辫触:', error);
+ throw error;
+ }
+ }
async function connect() {
- if ("serial" in navigator) {
try {
port = await navigator.serial.requestPort(); // 淇敼涓哄叏灞�鍙橀噺
await port.open({ baudRate: 9600 });
@@ -28,16 +48,36 @@
} 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);
+ // 鎻愬彇鏁板��
+ const weightValue = extractWeightValue(completeMessage);
+ if (!isNaN(weightValue)) {
+ console.log("鎻愬彇鐨勯噸閲忓��:", weightValue);
+ // 灏嗘湁鏁堥噸閲忓�兼坊鍔犲埌鍒楄〃
+ weightList.push(weightValue);
+
+ // 褰撳垪琛ㄩ暱搴﹁揪鍒� 6 鏃讹紝鍙戦�佹暟鎹埌鍚庣骞舵竻绌哄垪琛�
+ if (weightList.length === 6) {
+ sendWeightsToBackend({
+ weights: weightList
+ })
+ .then(() => {
+ console.log('鏁版嵁鍙戦�佹垚鍔�');
+ weightList = [];
+ })
+ .catch(() => {
+ console.log('鍙戦�佸け璐ワ紝淇濈暀鏁版嵁寰呴噸璇�');
+ });
+ }
+ }
}
accumulatedData = messages[messages.length - 1];
@@ -45,29 +85,38 @@
// 鍏朵粬娑堟伅鎷嗗垎绀轰緥淇濇寔涓嶅彉
/*
- while (accumulatedData.length >= 32) {
- const message = accumulatedData.substring(0, 32);
- accumulatedData = accumulatedData.substring(32);
- handleMessage(message);
- }
- */
+ 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;
- }
- */
+ 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;
+ }
+ */
}
+ }
+ // 鏂板鎻愬彇閲嶉噺鏁板�肩殑鏂规硶
+ function extractWeightValue(message) {
+ // 鍖归厤鏁板�奸儴鍒嗭紝鍙鐞嗘璐熷彿
+ const match = message.match(/-?\d+\.?\d*/);
+ if (match) {
+ return parseFloat(match[0]);
+ }
+ return NaN;
}
// 鏂板锛氬叧闂繛鎺ュ嚱鏁�
@@ -93,4 +142,4 @@
}
}
- export { connect, disconnect };
\ No newline at end of file
+ export { connect, disconnect,weightList };
\ No newline at end of file
diff --git a/src/views/business/inspectionTask/inspection.vue b/src/views/business/inspectionTask/inspection.vue
index 01ef6f2..d32723c 100644
--- a/src/views/business/inspectionTask/inspection.vue
+++ b/src/views/business/inspectionTask/inspection.vue
@@ -447,7 +447,7 @@
<el-checkbox-group v-if="!item.child[0].isShowSelect" v-model="item.child[0].getDataIndex1"
:max="item.child[0].maxNum">
<el-checkbox v-for="(n, j) in item.child[0].arr" :key="index + '-' + j + 'aaaaaa'" :label="j + '^' + n"
- @change="handleGroupSelect(item.child[0], j)" >{{ n }}</el-checkbox>
+ @change="handleGroupSelect(item.child[0], j, item.child[0].arr.length)" >{{ n }}</el-checkbox>
</el-checkbox-group>
</div>
</td>
@@ -478,7 +478,7 @@
</el-select>
<el-checkbox-group v-if="!m.isShowSelect" v-model="m.getDataIndex1" :max="m.maxNum">
<el-checkbox v-for="(n, j) in m.arr" :key="index + '-' + j + 'dddddddd'" :label="j + '^' + n"
- @change="handleGroupSelect(m, j)" >{{ n }}</el-checkbox>
+ @change="handleGroupSelect(m, j, m.arr.length)" >{{ n }}</el-checkbox>
</el-checkbox-group>
</div>
</td>
@@ -526,6 +526,7 @@
:purchaseDialog="purchaseDialog" @resetPurchaseDialog="resetPurchaseDialog"></purchase-verification>
<!--鏌ョ湅宸ユ椂寮规-->
<viewManHourDia ref="viewManHourDia" @submit="openAddVerifyDia"></viewManHourDia>
+ <button @click="sss">杩炴帴涓插彛</button>
</div>
</template>
@@ -536,7 +537,7 @@
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,
@@ -561,6 +562,7 @@
import DataWorker from '@/workers/DataWorker.worker.js';
import html2canvas from "html2canvas";
import { mapGetters } from "vuex";
+import { connect,disconnect,weightList } from "@/utils/connect.js";
import viewManHourDia from "@/views/business/inspectionTask/components/viewManHourDia.vue";
export default {
name: 'Inspection',
@@ -599,6 +601,7 @@
state: null,
},
isSerialConnected: false, // 鏂板鐘舵�佸彉閲忥紝涓插彛杩炴帴鐘舵��
+ serialPort: null, // 瀛樺偍涓插彛瀵硅薄
id: null,
changeType: null,
insOrder: {},
@@ -901,9 +904,16 @@
beforeDestroy() {
// 鍦ㄧ粍浠堕攢姣佸墠纭繚鍋滄 Worker锛岄伩鍏嶅唴瀛樻硠婕�
this.stopWorker();
- disconnect()
+ disconnect();
+ // 璋冪敤鍓嶅厛鍒ゆ柇鏂规硶鏄惁瀛樺湪锛岄伩鍏嶆姤閿�
+ if (this.closeSerialPort) {
+ this.closeSerialPort();// 缁勪欢閿�姣佸墠鍏抽棴涓插彛
+ }
},
methods: {
+ sss() {
+ console.log(this.$store.state.weightList) //
+ },
// 鏂囦欢绠$悊--寮�濮�
getList() {
this.tableLoading = true;
@@ -939,14 +949,19 @@
}).catch(() => { });
},
// 鏂囦欢绠$悊--缁撴潫
- // 澶勭悊鏁寸粍鍕鹃�夐�昏緫鐨勬柟娉�
- handleGroupSelect(childItem, clickedIndex) {
+ // 澶勭悊鏁寸粍鍕鹃�夐�昏緫鐨勬柟娉�
+ handleGroupSelect(childItem, clickedIndex, groupSize = 5) {
+ if(groupSize == 6){
+ groupSize = 6;
+ }else{
+ groupSize = 5;
+ }
// 璁$畻鎵�鍦ㄧ粍鐨勮捣濮嬬储寮�
- const groupStartIndex = Math.floor(clickedIndex / 5) * 5;
+ const groupStartIndex = Math.floor(clickedIndex / groupSize) * groupSize;
// 娓呯┖褰撳墠宸查��
childItem.getDataIndex1 = [];
- // 閬嶅巻褰撳墠缁勭殑 5 涓厓绱狅紝娣诲姞鍒伴�変腑鍒楄〃
- for (let i = groupStartIndex; i < groupStartIndex + 5 && i < childItem.arr.length; i++) {
+ // 閬嶅巻褰撳墠缁勭殑 groupSize 涓厓绱狅紝娣诲姞鍒伴�変腑鍒楄〃
+ for (let i = groupStartIndex; i < groupStartIndex + groupSize && i < childItem.arr.length; i++) {
childItem.getDataIndex1.push(i + '^' + childItem.arr[i]);
}
},
@@ -1133,36 +1148,82 @@
},
// 鏁版嵁閲囬泦
- getDataAcquisitionDevice() {
- if (this.isSerialConnected) {
- connect();
- }
- // return
- let itemIds = [];
- this.currentSample.insProduct.forEach((item) => {
- if (item.inspectionItemType === "1") {
- itemIds.push(item.id);
+
+ getDataAcquisitionDevice() {
+ (async () => {
+ try {
+ // 妫�鏌ユ槸鍚︽敮鎸� Web Serial API
+ if ('serial' in navigator) {
+ // 璇锋眰鍙敤涓插彛
+ const ports = await navigator.serial.getPorts();
+ if (ports.length > 0) {
+ await connect();
+ } else {
+ console.log('娌℃湁鍙敤鐨勪覆鍙�');
+ }
+ } else {
+ console.log('褰撳墠娴忚鍣ㄤ笉鏀寔 Web Serial API');
+ }
+ } catch (error) {
+ console.error('妫�娴嬩覆鍙f椂鍑洪敊:', error);
}
- });
- const params = {
- entrustCode: this.insOrder.entrustCode,
- sampleCode: this.currentSample.sampleCode,
- id: this.currentSample.id,
- itemIds: itemIds,
- };
- this.dataAcquisitionLoading = true;
- dataCollection(params).then((res) => {
- this.dataAcquisitionLoading = false;
- if (res.code != 200) {
- return;
- }
- this.dataAcquisitionInfoNew = this.HaveJson(res.data);
- // 瀵规暟閲囧洖鏉ョ殑鍊艰繘琛屽鐞�
- this.handleDataAcquisition(res.data);
- }).catch(err => {
- this.dataAcquisitionLoading = false;
+ })().then(() => {
+ let itemIds = [];
+ this.currentSample.insProduct.forEach((item) => {
+ if (item.inspectionItemType === "1") {
+ itemIds.push(item.id);
+ }
+ });
+ const params = {
+ entrustCode: this.insOrder.entrustCode,
+ sampleCode: this.currentSample.sampleCode,
+ id: this.currentSample.id,
+ itemIds: itemIds,
+ };
+ this.dataAcquisitionLoading = true;
+ dataCollection(params).then((res) => {
+ this.dataAcquisitionLoading = false;
+ if (res.code != 200) {
+ return;
+ }
+ this.dataAcquisitionInfoNew = this.HaveJson(res.data);
+ // 瀵规暟閲囧洖鏉ョ殑鍊艰繘琛屽鐞�
+ this.handleDataAcquisition(res.data);
+ }).catch(err => {
+ this.dataAcquisitionLoading = false;
+ });
});
},
+ // getDataAcquisitionDevice() {
+ // if (this.isSerialConnected) {
+ // connect();
+ // }
+ // // return
+ // let itemIds = [];
+ // this.currentSample.insProduct.forEach((item) => {
+ // if (item.inspectionItemType === "1") {
+ // itemIds.push(item.id);
+ // }
+ // });
+ // const params = {
+ // entrustCode: this.insOrder.entrustCode,
+ // sampleCode: this.currentSample.sampleCode,
+ // id: this.currentSample.id,
+ // itemIds: itemIds,
+ // };
+ // this.dataAcquisitionLoading = true;
+ // dataCollection(params).then((res) => {
+ // this.dataAcquisitionLoading = false;
+ // if (res.code != 200) {
+ // return;
+ // }
+ // this.dataAcquisitionInfoNew = this.HaveJson(res.data);
+ // // 瀵规暟閲囧洖鏉ョ殑鍊艰繘琛屽鐞�
+ // this.handleDataAcquisition(res.data);
+ // }).catch(err => {
+ // this.dataAcquisitionLoading = false;
+ // });
+ // },
// 鍋囪瀛樺湪涓�涓柟娉曠敤浜庢洿鏂颁覆鍙h繛鎺ョ姸鎬�
// updateSerialConnectionStatus(status) {
// this.isSerialConnected = status;
@@ -1177,6 +1238,7 @@
return newObj;
},
handleDataAcquisition(data, noDialog) {
+ console.log(data);
// 鏄惁鍙互缂栬緫鏁伴噰鏁版嵁
if (this.dataAcquisitionEidtAble) {
this.getDataType = 1;
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 0fb4722..5124927 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -63,7 +63,7 @@
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']">淇敼</el-button>
- <!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">鍒犻櫎</el-button>-->
+ <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">鍒犻櫎</el-button>
<!-- <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">-->
<!-- <el-button size="mini" type="text" icon="el-icon-d-arrow-right">鏇村</el-button>-->
<!-- <el-dropdown-menu slot="dropdown">-->
--
Gitblit v1.9.3