From 4ca2900c4e3e9400d9a94567b8eb01b3948648cc Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期三, 14 一月 2026 20:01:44 +0800
Subject: [PATCH] rfid-2版

---
 pages/rfid/uhftest.vue      |    2 
 pages/AGV/agv_start.vue     |   12 ++++
 pages/order/orderPakin2.vue |   12 ++++
 common/rfid-input-helper.js |  127 ++++++++++++++++++++++++++++++++++--------
 pages/rfid/uhftest2.vue     |    2 
 pages/pakin/pakin.vue       |    6 ++
 6 files changed, 134 insertions(+), 27 deletions(-)

diff --git a/common/rfid-input-helper.js b/common/rfid-input-helper.js
index 1262093..48095c8 100644
--- a/common/rfid-input-helper.js
+++ b/common/rfid-input-helper.js
@@ -107,32 +107,50 @@
 	 * len:璇诲彇鐨勬暟鎹暱搴�(Word绫诲瀷锛屽ぇ浜�0)
 	 * pwd:璁块棶瀵嗙爜锛岄粯璁ゅ瘑鐮佷负锛�00000000
 	 * 娉ㄦ剰锛歐ord绫诲瀷锛屼竴涓暱搴﹁〃绀烘爣绛惧瓨鍌�4浣嶅瓧绗�
+	 * len=1琛ㄧず璇诲彇4浣嶏紝len=2琛ㄧず璇诲彇8浣嶏紝len=8琛ㄧず璇诲彇32浣�
+	 * 浣跨敤len=1璇诲彇4浣嶆暟鎹紙濡傛灉鏍囩鏄�4浣嶏級
 	 */
-	uhfModel.readTagWithoutFilter(1, 2, 6, "00000000", (ret) => {
+	const readLen = 1; // 璇诲彇闀垮害锛�1涓猈ord = 4涓瓧绗�
+	uhfModel.readTagWithoutFilter(1, 2, readLen, "00000000", (ret) => {
 		isScanning = false;
 		console.log('[RFIDInputHelper] readTagWithoutFilter result:', ret);
 		
 		if (ret && typeof ret === 'string') {
-			// 瑙f瀽杩斿洖缁撴灉锛屾彁鍙朎PC
+			// 瑙f瀽杩斿洖缁撴灉锛屾彁鍙朎PC锛堜笉杩藉姞锛屼笉鎴柇锛屼娇鐢ㄥ疄闄呴暱搴︼級
 			// 杩斿洖鏍煎紡鍙兘鏄細success EPC:XXXXXXXX 鎴栫被浼兼牸寮�
 			let epc = '';
 			if (ret.includes('success') || ret.includes('EPC')) {
-				// 灏濊瘯鎻愬彇EPC鍊�
+				// 灏濊瘯鎻愬彇EPC鍊硷紙鎻愬彇瀹屾暣鐨�16杩涘埗瀛楃涓诧紝涓嶉檺鍒堕暱搴︼級
 				const epcMatch = ret.match(/EPC[:\s]+([A-F0-9]+)/i);
 				if (epcMatch && epcMatch[1]) {
-					epc = epcMatch[1];
+					epc = epcMatch[1]; // 浣跨敤瀹為檯闀垮害锛屼笉杩藉姞
 				} else {
-					// 濡傛灉娌℃湁鍖归厤鍒帮紝灏濊瘯鎻愬彇16杩涘埗瀛楃涓�
-					const hexMatch = ret.match(/([A-F0-9]{16,})/i);
+					// 濡傛灉娌℃湁鍖归厤鍒帮紝灏濊瘯鎻愬彇16杩涘埗瀛楃涓诧紙涓嶉檺鍒舵渶灏忛暱搴︼級
+					const hexMatch = ret.match(/([A-F0-9]+)/i);
 					if (hexMatch && hexMatch[1]) {
-						epc = hexMatch[1];
+						epc = hexMatch[1]; // 浣跨敤瀹為檯闀垮害锛屼笉杩藉姞
 					}
 				}
 			}
 			
 			if (epc) {
-				console.log('[RFIDInputHelper] 鉁� 璇诲彇鍒版爣绛綞PC:', epc);
-				// 鑷姩濉叆褰撳墠鐒︾偣杈撳叆妗�
+				// 鏍规嵁璇诲彇闀垮害鎴彇鏁版嵁锛坙en=1琛ㄧず4浣嶏紝len=2琛ㄧず8浣嶏級
+				const maxLength = readLen * 4; // Word闀垮害 脳 4 = 瀛楃鏁�
+				if (epc.length > maxLength) {
+					console.log(`[RFIDInputHelper] 鏁版嵁杩囬暱(${epc.length}浣�)锛屾埅鍙栧墠${maxLength}浣峘);
+					epc = epc.substring(0, maxLength);
+				}
+				
+				// 鍘婚櫎鍓嶅0锛堝鏋滄彃浠惰繑鍥炰簡鍥哄畾闀垮害鐨勬暟鎹紝鍓嶉潰鍙兘鏈�0濉厖锛�
+				// 浣嗕繚鐣欒嚦灏�1浣嶏紙濡傛灉鍏ㄩ儴鏄�0锛屼繚鐣欎竴涓�0锛�
+				const originalLength = epc.length;
+				epc = epc.replace(/^0+/, '') || '0';
+				if (originalLength !== epc.length) {
+					console.log('[RFIDInputHelper] 鍘婚櫎鍓嶅0: 鍘熷闀垮害=' + originalLength + ', 鍘婚櫎鍚庨暱搴�=' + epc.length);
+				}
+				
+				console.log('[RFIDInputHelper] 鉁� 璇诲彇鍒版爣绛綞PC (闀垮害' + epc.length + '浣�):', epc);
+				// 鑷姩濉叆褰撳墠鐒︾偣杈撳叆妗嗭紙涓嶈拷鍔狅紝浣跨敤瀹為檯闀垮害锛�
 				fillCurrentInput(epc);
 				modal.toast({
 					message: '宸茶鍙栨爣绛�',
@@ -147,10 +165,18 @@
 						duration: 1.5
 					});
 				} else {
-					// 灏濊瘯鐩存帴浣跨敤杩斿洖鐨勫瓧绗︿覆浣滀负EPC
+					// 灏濊瘯鐩存帴浣跨敤杩斿洖鐨勫瓧绗︿覆浣滀负EPC锛堜笉闄愬埗鏈�灏忛暱搴︼級
 					const cleanRet = ret.trim();
-					if (cleanRet.length >= 8) {
-						fillCurrentInput(cleanRet);
+					// 绉婚櫎鍙兘鐨�"success"绛夊墠缂�锛屽彧淇濈暀16杩涘埗瀛楃
+					let hexOnly = cleanRet.replace(/[^A-F0-9]/gi, '');
+					if (hexOnly.length > 0) {
+						// 鍘婚櫎鍓嶅0锛堝鏋滄彃浠惰繑鍥炰簡鍥哄畾闀垮害鐨勬暟鎹紝鍓嶉潰鍙兘鏈�0濉厖锛�
+						const originalLength = hexOnly.length;
+						hexOnly = hexOnly.replace(/^0+/, '') || '0';
+						if (originalLength !== hexOnly.length) {
+							console.log('[RFIDInputHelper] 鍘婚櫎鍓嶅0: 鍘熷闀垮害=' + originalLength + ', 鍘婚櫎鍚庨暱搴�=' + hexOnly.length);
+						}
+						fillCurrentInput(hexOnly); // 浣跨敤瀹為檯闀垮害锛屼笉杩藉姞
 						modal.toast({
 							message: '宸茶鍙栨爣绛�',
 							duration: 1.5
@@ -166,9 +192,34 @@
 		} else if (ret && typeof ret === 'object') {
 			// 濡傛灉杩斿洖鐨勬槸瀵硅薄鏍煎紡
 			if (ret.code === 'success' && ret.data) {
-				const epc = ret.data.epc || ret.data;
+				let epc = '';
+				if (typeof ret.data === 'string') {
+					// 濡傛灉鏄瓧绗︿覆锛屾彁鍙�16杩涘埗閮ㄥ垎锛堜笉杩藉姞锛屼笉鎴柇锛�
+					epc = ret.data.trim().replace(/[^A-F0-9]/gi, '');
+				} else if (ret.data.epc) {
+					epc = String(ret.data.epc).trim().replace(/[^A-F0-9]/gi, '');
+				} else {
+					epc = String(ret.data).trim().replace(/[^A-F0-9]/gi, '');
+				}
+				
+				// 鏍规嵁璇诲彇闀垮害鎴彇鏁版嵁锛坙en=1琛ㄧず4浣嶏紝len=2琛ㄧず8浣嶏級
 				if (epc) {
-					fillCurrentInput(epc);
+					const maxLength = readLen * 4; // Word闀垮害 脳 4 = 瀛楃鏁�
+					if (epc.length > maxLength) {
+						console.log(`[RFIDInputHelper] 鏁版嵁杩囬暱(${epc.length}浣�)锛屾埅鍙栧墠${maxLength}浣峘);
+						epc = epc.substring(0, maxLength);
+					}
+					
+					// 鍘婚櫎鍓嶅0锛堝鏋滄彃浠惰繑鍥炰簡鍥哄畾闀垮害鐨勬暟鎹紝鍓嶉潰鍙兘鏈�0濉厖锛�
+					// 浣嗕繚鐣欒嚦灏�1浣嶏紙濡傛灉鍏ㄩ儴鏄�0锛屼繚鐣欎竴涓�0锛�
+					const originalLength = epc.length;
+					epc = epc.replace(/^0+/, '') || '0';
+					if (originalLength !== epc.length) {
+						console.log('[RFIDInputHelper] 鍘婚櫎鍓嶅0: 鍘熷闀垮害=' + originalLength + ', 鍘婚櫎鍚庨暱搴�=' + epc.length);
+					}
+					
+					console.log('[RFIDInputHelper] 鉁� 璇诲彇鍒版爣绛綞PC (闀垮害' + epc.length + '浣�):', epc);
+					fillCurrentInput(epc); // 浣跨敤瀹為檯闀垮害锛屼笉杩藉姞
 					modal.toast({
 						message: '宸茶鍙栨爣绛�',
 						duration: 1.5
@@ -229,14 +280,25 @@
 			{ field: 'locNo', focusField: 'locNoFocus' }
 		];
 		
+		// 璋冭瘯锛氭墦鍗版墍鏈夎緭鍏ユ鐨勭劍鐐圭姸鎬�
+		console.log('[RFIDInputHelper] ========== 妫�鏌ヨ緭鍏ユ鐒︾偣鐘舵�� ==========');
+		for (let item of inputFieldMap) {
+			if (vm[item.field] !== undefined) {
+				const focusValue = vm[item.focusField];
+				console.log(`[RFIDInputHelper]   ${item.field}: focus=${focusValue}, value="${vm[item.field]}"`);
+			}
+		}
+		
 		// 鍙煡鎵炬湁鐒︾偣鐨勮緭鍏ユ锛堝厜鏍囨墍鍦ㄧ殑杈撳叆妗嗭級
 		let focusedField = null;
 		for (let item of inputFieldMap) {
 			if (vm[item.field] !== undefined) {
 				// 妫�鏌ユ槸鍚︽湁鐒︾偣鐘舵�佸瓧娈碉紝骞朵笖鐒︾偣涓簍rue
-				if (vm[item.focusField] === true) {
+				const focusValue = vm[item.focusField];
+				console.log(`[RFIDInputHelper] 妫�鏌� ${item.field}: focusField=${item.focusField}, focusValue=${focusValue}, type=${typeof focusValue}`);
+				if (focusValue === true) {
 					focusedField = item.field;
-					console.log(`[RFIDInputHelper] 鉁� 鎵惧埌鏈夌劍鐐圭殑杈撳叆妗�: ${item.field}`);
+					console.log(`[RFIDInputHelper] 鉁撯湏鉁� 鎵惧埌鏈夌劍鐐圭殑杈撳叆妗�: ${item.field} (focus=${focusValue})`);
 					break;
 				}
 			}
@@ -245,20 +307,35 @@
 		// 鍙~鍏ユ湁鐒︾偣鐨勮緭鍏ユ锛屽鏋滄病鏈夌劍鐐瑰垯涓嶅~鍏�
 		if (focusedField) {
 			console.log(`[RFIDInputHelper] 濉叆鏈夌劍鐐圭殑杈撳叆妗� ${focusedField}:`, epc);
-			vm[focusedField] = epc;
-			// 瑙﹀彂input浜嬩欢锛岀‘淇濋〉闈㈤�昏緫鑳藉搷搴�
+			console.log(`[RFIDInputHelper] 杈撳叆妗嗗綋鍓嶅��: "${vm[focusedField]}"`);
+			
+			// 鍏堟竻绌鸿緭鍏ユ锛屽啀濉叆鏂板�硷紙閬垮厤杩藉姞锛�
+			vm[focusedField] = '';
+			
+			// 浣跨敤 $nextTick 纭繚娓呯┖鎿嶄綔瀹屾垚鍚庡啀濉叆鏂板��
 			if (vm.$nextTick) {
 				vm.$nextTick(() => {
-					// 濡傛灉椤甸潰鏈夊搴旂殑input澶勭悊鏂规硶锛屽彲浠ユ墜鍔ㄨЕ鍙�
-					if (focusedField === 'barcode' && typeof vm.barcodeInput === 'function') {
-						vm.barcodeInput();
-					} else if (focusedField === 'matnr' && typeof vm.findMat === 'function') {
-						vm.findMat();
-					}
+					// 濉叆鏂扮殑EPC鍊硷紙鏇挎崲锛屼笉杩藉姞锛�
+					vm[focusedField] = epc;
+					console.log(`[RFIDInputHelper] 鉁� 宸叉浛鎹㈣緭鍏ユ鍊间负: "${vm[focusedField]}"`);
+					
+					// 鍐嶆浣跨敤 $nextTick 纭繚鍊煎凡璁剧疆锛屽啀瑙﹀彂input浜嬩欢
+					vm.$nextTick(() => {
+						// 濡傛灉椤甸潰鏈夊搴旂殑input澶勭悊鏂规硶锛屽彲浠ユ墜鍔ㄨЕ鍙�
+						if (focusedField === 'barcode' && typeof vm.barcodeInput === 'function') {
+							vm.barcodeInput();
+						} else if (focusedField === 'matnr' && typeof vm.findMat === 'function') {
+							vm.findMat();
+						}
+					});
 				});
+			} else {
+				// 濡傛灉娌℃湁 $nextTick锛岀洿鎺ヨ缃�
+				vm[focusedField] = epc;
 			}
 		} else {
-			console.warn('[RFIDInputHelper] 鏈壘鍒版湁鐒︾偣鐨勮緭鍏ユ锛屼笉濉叆浠讳綍杈撳叆妗�');
+			console.warn('[RFIDInputHelper] 鉁� 鏈壘鍒版湁鐒︾偣鐨勮緭鍏ユ锛屼笉濉叆浠讳綍杈撳叆妗�');
+			console.warn('[RFIDInputHelper] 璇峰厛鐐瑰嚮杈撳叆妗嗚幏寰楃劍鐐癸紝鐒跺悗鍐嶆寜鎵爜鎸夐敭');
 			modal.toast({
 				message: '璇峰厛鐐瑰嚮杈撳叆妗嗚幏寰楃劍鐐�',
 				duration: 1.5
diff --git a/pages/AGV/agv_start.vue b/pages/AGV/agv_start.vue
index 8dc0c4d..e0ba9c0 100644
--- a/pages/AGV/agv_start.vue
+++ b/pages/AGV/agv_start.vue
@@ -238,6 +238,12 @@
 			// 鎵樼洏鐮佽緭鍏ユ鑾峰緱鐒︾偣锛堜繚鐣欐柟娉曪紝浣嗕笉鑷姩瑙﹀彂鎵弿锛�
 			onBarcodeFocus() {
 				console.log('[agv_start] 鎵樼洏鐮佽緭鍏ユ鑾峰緱鐒︾偣');
+				// 璁剧疆鎵樼洏鐮佽緭鍏ユ涓虹劍鐐癸紝鍏朵粬杈撳叆妗嗗け鍘荤劍鐐�
+				this.barcodeFocus = true;
+				this.matFocus = false;
+				if (this.sourceSiteFocus !== undefined) {
+					this.sourceSiteFocus = false;
+				}
 				// 娉ㄦ剰锛氬崟鏍囩璇绘棤杩囨护鍔熻兘宸叉敼涓烘寜閿Е鍙戯紙191銆�189銆�190锛夛紝涓嶅啀鍦ㄧ劍鐐规椂鑷姩瑙﹀彂
 			},
 			// 鎵樼洏鐮佽緭鍏ユ澶卞幓鐒︾偣鏃跺仠姝FID鎵弿锛堝彲閫夛級
@@ -252,6 +258,12 @@
 			// 鏆傚瓨浣嶈緭鍏ユ鑾峰緱鐒︾偣锛堜繚鐣欐柟娉曪紝浣嗕笉鑷姩瑙﹀彂鎵弿锛�
 			onSourceSiteFocus() {
 				console.log('[agv_start] 鏆傚瓨浣嶈緭鍏ユ鑾峰緱鐒︾偣');
+				// 璁剧疆鏆傚瓨浣嶈緭鍏ユ涓虹劍鐐癸紝鍏朵粬杈撳叆妗嗗け鍘荤劍鐐�
+				if (this.sourceSiteFocus !== undefined) {
+					this.sourceSiteFocus = true;
+				}
+				this.barcodeFocus = false;
+				this.matFocus = false;
 				// 娉ㄦ剰锛氬崟鏍囩璇绘棤杩囨护鍔熻兘宸叉敼涓烘寜閿Е鍙戯紙191銆�189銆�190锛夛紝涓嶅啀鍦ㄧ劍鐐规椂鑷姩瑙﹀彂
 			},
 			onTargetSiteChange(e) {
diff --git a/pages/order/orderPakin2.vue b/pages/order/orderPakin2.vue
index 2905059..501ee3e 100644
--- a/pages/order/orderPakin2.vue
+++ b/pages/order/orderPakin2.vue
@@ -240,11 +240,23 @@
 			// 鎵樼洏鐮佽緭鍏ユ鑾峰緱鐒︾偣锛堜繚鐣欐柟娉曪紝浣嗕笉鑷姩瑙﹀彂鎵弿锛�
 			onBarcodeFocus() {
 				console.log('[orderPakin2] 鎵樼洏鐮佽緭鍏ユ鑾峰緱鐒︾偣');
+				// 璁剧疆鎵樼洏鐮佽緭鍏ユ涓虹劍鐐癸紝鍏朵粬杈撳叆妗嗗け鍘荤劍鐐�
+				this.barcodeFocus = true;
+				this.matFocus = false;
+				if (this.orderNoFocus !== undefined) {
+					this.orderNoFocus = false;
+				}
 				// 娉ㄦ剰锛氬崟鏍囩璇绘棤杩囨护鍔熻兘宸叉敼涓烘寜閿Е鍙戯紙191銆�189銆�190锛夛紝涓嶅啀鍦ㄧ劍鐐规椂鑷姩瑙﹀彂
 			},
 			// 鐗╂枡鐮佽緭鍏ユ鑾峰緱鐒︾偣锛堜繚鐣欐柟娉曪紝浣嗕笉鑷姩瑙﹀彂鎵弿锛�
 			onMatnrFocus() {
 				console.log('[orderPakin2] 鐗╂枡鐮佽緭鍏ユ鑾峰緱鐒︾偣');
+				// 璁剧疆鐗╂枡鐮佽緭鍏ユ涓虹劍鐐癸紝鍏朵粬杈撳叆妗嗗け鍘荤劍鐐�
+				this.matFocus = true;
+				this.barcodeFocus = false;
+				if (this.orderNoFocus !== undefined) {
+					this.orderNoFocus = false;
+				}
 				// 娉ㄦ剰锛氬崟鏍囩璇绘棤杩囨护鍔熻兘宸叉敼涓烘寜閿Е鍙戯紙191銆�189銆�190锛夛紝涓嶅啀鍦ㄧ劍鐐规椂鑷姩瑙﹀彂
 			},
 			messageToggle(type) {
diff --git a/pages/pakin/pakin.vue b/pages/pakin/pakin.vue
index edd6646..cf1df7c 100644
--- a/pages/pakin/pakin.vue
+++ b/pages/pakin/pakin.vue
@@ -218,6 +218,9 @@
 			// 鎵樼洏鐮佽緭鍏ユ鑾峰緱鐒︾偣锛堜繚鐣欐柟娉曪紝浣嗕笉鑷姩瑙﹀彂鎵弿锛�
 			onBarcodeFocus() {
 				console.log('[pakin] 鎵樼洏鐮佽緭鍏ユ鑾峰緱鐒︾偣');
+				// 璁剧疆鎵樼洏鐮佽緭鍏ユ涓虹劍鐐癸紝鐗╂枡鐮佸け鍘荤劍鐐�
+				this.barcodeFocus = true;
+				this.matFocus = false;
 				// 娉ㄦ剰锛氬崟鏍囩璇绘棤杩囨护鍔熻兘宸叉敼涓烘寜閿Е鍙戯紙191銆�189銆�190锛夛紝涓嶅啀鍦ㄧ劍鐐规椂鑷姩瑙﹀彂
 			},
 			// 鎵樼洏鐮佽緭鍏ユ澶卞幓鐒︾偣鏃跺仠姝FID鎵弿锛堝彲閫夛級
@@ -232,6 +235,9 @@
 			// 鐗╂枡鐮佽緭鍏ユ鑾峰緱鐒︾偣锛堜繚鐣欐柟娉曪紝浣嗕笉鑷姩瑙﹀彂鎵弿锛�
 			onMatnrFocus() {
 				console.log('[pakin] 鐗╂枡鐮佽緭鍏ユ鑾峰緱鐒︾偣');
+				// 璁剧疆鐗╂枡鐮佽緭鍏ユ涓虹劍鐐癸紝鎵樼洏鐮佸け鍘荤劍鐐�
+				this.matFocus = true;
+				this.barcodeFocus = false;
 				// 娉ㄦ剰锛氬崟鏍囩璇绘棤杩囨护鍔熻兘宸叉敼涓烘寜閿Е鍙戯紙191銆�189銆�190锛夛紝涓嶅啀鍦ㄧ劍鐐规椂鑷姩瑙﹀彂
 			},
 			clearBarcode() {
diff --git a/pages/rfid/uhftest.vue b/pages/rfid/uhftest.vue
index 6ac08c0..0b0e841 100644
--- a/pages/rfid/uhftest.vue
+++ b/pages/rfid/uhftest.vue
@@ -230,7 +230,7 @@
 				 * pwd:璁块棶瀵嗙爜锛岄粯璁ゅ瘑鐮佷负锛�00000000
 				 * 娉ㄦ剰锛歐ord绫诲瀷锛屼竴涓暱搴﹁〃绀烘爣绛惧瓨鍌�4浣嶅瓧绗�
 				 */
-				uhfModel.readTagWithoutFilter(1, 2, 6, "00000000", (ret) => {
+				uhfModel.readTagWithoutFilter(1, 2, 8, "00000000", (ret) => {
 					//
 					modal.toast({
 						message: ret,
diff --git a/pages/rfid/uhftest2.vue b/pages/rfid/uhftest2.vue
index 785ba8a..3536841 100644
--- a/pages/rfid/uhftest2.vue
+++ b/pages/rfid/uhftest2.vue
@@ -129,7 +129,7 @@
 				 * pwd:璁块棶瀵嗙爜锛岄粯璁ゅ瘑鐮佷负锛�00000000
 				 * 娉ㄦ剰锛歐ord绫诲瀷锛屼竴涓暱搴﹁〃绀烘爣绛惧瓨鍌�4浣嶅瓧绗�
 				 */
-				uhfModel.readTagWithoutFilter(1, 2, 6, "00000000", (ret) => {
+				uhfModel.readTagWithoutFilter(1, 2, 8, "00000000", (ret) => {
 					//
 					modal.toast({
 						message: ret,

--
Gitblit v1.9.1