From b4a14804f37d0d715af1f00ccb9e1621d238cc58 Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期四, 15 一月 2026 11:33:03 +0800
Subject: [PATCH] 异常处理

---
 common/rfid-input-helper.js |   84 ++++++++++++++-------
 App.vue                     |  149 ++++++++++++++++++++++++++----------
 2 files changed, 163 insertions(+), 70 deletions(-)

diff --git a/App.vue b/App.vue
index beab781..9e4f913 100644
--- a/App.vue
+++ b/App.vue
@@ -9,44 +9,96 @@
 			
 			// #ifdef APP-PLUS
 			// 鍏ㄥ眬鍒濆鍖朢FID妯″潡锛堝簲鐢ㄥ惎鍔ㄦ椂鍒濆鍖栵紝鍏抽棴app鏃跺叧闂級
-			console.log('[App] 鍒濆鍖朢FID妯″潡...');
-			const uhfModel = uni.requireNativePlugin("iData-UHFPlugin-UHFModule");
-			const globalEvent = uni.requireNativePlugin('globalEvent');
-			const modal = uni.requireNativePlugin('modal');
+			// 娉ㄦ剰锛歊FID鍒濆鍖栭噰鐢ㄥ紓姝ユ柟寮忥紝涓嶉樆濉為〉闈㈠姞杞�
+			// 鍗充娇RFID鍒濆鍖栧け璐ワ紝涔熶笉褰卞搷椤甸潰姝e父浣跨敤
+			console.log('[App] 寮�濮嬪紓姝ュ垵濮嬪寲RFID妯″潡锛堜笉闃诲椤甸潰鍔犺浇锛�...');
 			
-			if (!uhfModel) {
-				console.error('[App] RFID鎻掍欢鏈壘鍒�');
-			} else {
-				// 鐩戝惉涓婄數浜嬩欢
-				let isPowerOn = false;
-				globalEvent.addEventListener('POWEREvent', function(e) {
-					console.log('[App] POWEREvent:', JSON.stringify(e));
-					if (e && e.status === 'connected') {
-						isPowerOn = true;
-						console.log('[App] 鉁撯湏鉁� RFID妯″潡宸蹭笂鐢垫垚鍔燂紒');
-					} else {
-						isPowerOn = false;
-						console.log('[App] 鉁� RFID妯″潡鏈笂鐢�');
+			// 浣跨敤setTimeout纭繚涓嶉樆濉炰富绾跨▼
+			setTimeout(() => {
+				try {
+					const uhfModel = uni.requireNativePlugin("iData-UHFPlugin-UHFModule");
+					const globalEvent = uni.requireNativePlugin('globalEvent');
+					const modal = uni.requireNativePlugin('modal');
+					
+					if (!uhfModel) {
+						console.warn('[App] 鈿� RFID鎻掍欢鏈壘鍒帮紝椤甸潰鍙甯镐娇鐢紙RFID鍔熻兘涓嶅彲鐢級');
+						return;
 					}
-				});
-				
-				// 鍒濆鍖朢FID妯″潡锛堜娇鐢⊿LR妯″潡锛屼笌娴嬭瘯椤甸潰涓�鑷达級
-				uhfModel.initUHF(1, (ret) => {
-					console.log('[App] initUHF result:', ret);
-					if (ret && typeof ret === 'string' && ret.includes('success')) {
-						console.log('[App] 鉁� RFID妯″潡鍒濆鍖栨垚鍔�');
-					} else {
-						console.warn('[App] 鈿� RFID妯″潡鍒濆鍖栧け璐�:', ret);
+					
+					// 鐩戝惉涓婄數浜嬩欢
+					let isPowerOn = false;
+					const powerEventHandler = function(e) {
+						console.log('[App] POWEREvent:', JSON.stringify(e));
+						if (e && e.status === 'connected') {
+							isPowerOn = true;
+							console.log('[App] 鉁撯湏鉁� RFID妯″潡宸蹭笂鐢垫垚鍔燂紒');
+						} else {
+							isPowerOn = false;
+							console.log('[App] 鉁� RFID妯″潡鏈笂鐢�');
+						}
+					};
+					globalEvent.addEventListener('POWEREvent', powerEventHandler);
+					
+					// 淇濆瓨浜嬩欢澶勭悊鍣ㄥ紩鐢紝鐢ㄤ簬娓呯悊
+					this.powerEventHandler = powerEventHandler;
+					
+					// 璁剧疆瓒呮椂鏈哄埗锛氬鏋�10绉掑唴娌℃湁鍒濆鍖栨垚鍔燂紝鍏佽椤甸潰缁х画浣跨敤
+					const initTimeout = setTimeout(() => {
+						console.warn('[App] 鈿� RFID妯″潡鍒濆鍖栬秴鏃讹紙10绉掞級锛岄〉闈㈠彲姝e父浣跨敤锛圧FID鍔熻兘鍙兘涓嶅彲鐢級');
+						if (modal) {
+							modal.toast({
+								message: 'RFID鍒濆鍖栬秴鏃讹紝椤甸潰鍙甯镐娇鐢�',
+								duration: 2
+							});
+						}
+					}, 10000); // 10绉掕秴鏃�
+					
+					// 鍒濆鍖朢FID妯″潡锛堜娇鐢⊿LR妯″潡锛屼笌娴嬭瘯椤甸潰涓�鑷达級
+					try {
+						uhfModel.initUHF(1, (ret) => {
+							clearTimeout(initTimeout); // 娓呴櫎瓒呮椂瀹氭椂鍣�
+							console.log('[App] initUHF result:', ret);
+							if (ret && typeof ret === 'string' && ret.includes('success')) {
+								console.log('[App] 鉁� RFID妯″潡鍒濆鍖栨垚鍔�');
+							} else {
+								console.warn('[App] 鈿� RFID妯″潡鍒濆鍖栧け璐�:', ret);
+								if (modal) {
+									modal.toast({
+										message: 'RFID鍒濆鍖栧け璐ワ紝椤甸潰鍙甯镐娇鐢�',
+										duration: 2
+									});
+								}
+							}
+						});
+					} catch (initError) {
+						clearTimeout(initTimeout); // 娓呴櫎瓒呮椂瀹氭椂鍣�
+						console.error('[App] 鈿� RFID妯″潡鍒濆鍖栧紓甯�:', initError);
+						console.warn('[App] 鈿� 椤甸潰鍙甯镐娇鐢紙RFID鍔熻兘涓嶅彲鐢級');
+						if (modal) {
+							modal.toast({
+								message: 'RFID鍒濆鍖栧紓甯革紝椤甸潰鍙甯镐娇鐢�',
+								duration: 2
+							});
+						}
 					}
-				});
-				
-				// 淇濆瓨寮曠敤锛岀敤浜巓nExit鏃跺叧闂�
-				this.uhfModel = uhfModel;
-				this.globalEvent = globalEvent;
-			}
+					
+					// 淇濆瓨寮曠敤锛岀敤浜巓nExit鏃跺叧闂�
+					this.uhfModel = uhfModel;
+					this.globalEvent = globalEvent;
+				} catch (error) {
+					console.error('[App] 鈿� RFID妯″潡鍒濆鍖栬繃绋嬪嚭閿�:', error);
+					console.warn('[App] 鈿� 椤甸潰鍙甯镐娇鐢紙RFID鍔熻兘涓嶅彲鐢級');
+				}
+			}, 100); // 寤惰繜100ms鎵ц锛岀‘淇濅笉闃诲椤甸潰鍔犺浇
 			
 			// 鍚姩鍏ㄥ眬RFID杈撳叆鍔╂墜锛堢敤浜庤嚜鍔ㄥ~鍏ヨ緭鍏ユ锛�
-			startRFIDInputHelper();
+			// 浣跨敤try-catch纭繚鍗充娇RFID鍔╂墜鍚姩澶辫触涔熶笉褰卞搷椤甸潰
+			try {
+				startRFIDInputHelper();
+			} catch (error) {
+				console.error('[App] 鈿� RFID杈撳叆鍔╂墜鍚姩澶辫触:', error);
+				console.warn('[App] 鈿� 椤甸潰鍙甯镐娇鐢紙RFID鎵弿鍔熻兘涓嶅彲鐢級');
+			}
 			// #endif
 			
 			// 娉ㄦ剰锛氫互涓嬩唬鐮佸凡搴熷純锛屾敼涓轰笂闈㈢殑鍏ㄥ眬鍒濆鍖栨柟寮�
@@ -348,16 +400,29 @@
 		onExit: function() {
 			console.log('App Exit')
 			// #ifdef APP-PLUS
-			// 鍋滄鍏ㄥ眬RFID杈撳叆鍔╂墜
-			stopRFIDInputHelper();
-			
-			// 鍏抽棴RFID妯″潡
-			if (this.uhfModel && this.uhfModel.closeUHF) {
-				this.uhfModel.closeUHF();
-				console.log('[App] 鉁� RFID妯″潡宸插叧闂�');
+			// 鍋滄鍏ㄥ眬RFID杈撳叆鍔╂墜锛堜娇鐢╰ry-catch纭繚鍗充娇澶辫触涔熶笉褰卞搷閫�鍑猴級
+			try {
+				stopRFIDInputHelper();
+			} catch (e) {
+				console.warn('[App] 鈿� 鍋滄RFID杈撳叆鍔╂墜澶辫触:', e);
 			}
-			if (this.globalEvent) {
-				this.globalEvent.removeEventListener('POWEREvent');
+			
+			// 鍏抽棴RFID妯″潡锛堜娇鐢╰ry-catch纭繚鍗充娇澶辫触涔熶笉褰卞搷閫�鍑猴級
+			try {
+				if (this.uhfModel && this.uhfModel.closeUHF) {
+					this.uhfModel.closeUHF();
+					console.log('[App] 鉁� RFID妯″潡宸插叧闂�');
+				}
+			} catch (e) {
+				console.warn('[App] 鈿� 鍏抽棴RFID妯″潡澶辫触:', e);
+			}
+			
+			try {
+				if (this.globalEvent && this.powerEventHandler) {
+					this.globalEvent.removeEventListener('POWEREvent', this.powerEventHandler);
+				}
+			} catch (e) {
+				console.warn('[App] 鈿� 绉婚櫎POWEREvent鐩戝惉澶辫触:', e);
 			}
 			// #endif
 		}
diff --git a/common/rfid-input-helper.js b/common/rfid-input-helper.js
index 3dc0c07..6aa37c9 100644
--- a/common/rfid-input-helper.js
+++ b/common/rfid-input-helper.js
@@ -14,6 +14,7 @@
 /**
  * 鍒濆鍖朢FID鍔╂墜锛堝彧鍒濆鍖栨彃浠跺紩鐢ㄥ拰浜嬩欢鐩戝惉锛屼笉鍒濆鍖朢FID妯″潡锛�
  * RFID妯″潡鐢盇pp.vue鍏ㄥ眬鍒濆鍖栵紝杩欓噷鍙礋璐g洃鍚寜閿拰璇诲彇鏍囩
+ * 娉ㄦ剰锛氬嵆浣垮垵濮嬪寲澶辫触锛屼篃涓嶆姏鍑哄紓甯革紝纭繚涓嶅奖鍝嶉〉闈娇鐢�
  */
 function initRFIDForInput() {
 	try {
@@ -22,28 +23,34 @@
 		modal = uni.requireNativePlugin('modal');
 		
 		if (!uhfModel) {
-			console.warn('[RFIDInputHelper] RFID鎻掍欢鏈壘鍒�');
+			console.warn('[RFIDInputHelper] 鈿� RFID鎻掍欢鏈壘鍒帮紝RFID鎵弿鍔熻兘涓嶅彲鐢紝浣嗛〉闈㈠彲姝e父浣跨敤');
 			return false;
 		}
 		
 		// 鐩戝惉涓婄數浜嬩欢锛堢洃鍚叏灞�涓婄數鐘舵�侊紝RFID妯″潡鐢盇pp.vue鍒濆鍖栵級
-		globalEvent.addEventListener('POWEREvent', function(e) {
-			console.log('[RFIDInputHelper] POWEREvent:', JSON.stringify(e));
-			if (e && e.status === 'connected') {
-				isPowerOn = true;
-				console.log('[RFIDInputHelper] 鉁� RFID妯″潡宸蹭笂鐢�');
-			} else {
-				isPowerOn = false;
-				console.log('[RFIDInputHelper] 鉁� RFID妯″潡鏈笂鐢�');
-			}
-		});
+		try {
+			globalEvent.addEventListener('POWEREvent', function(e) {
+				console.log('[RFIDInputHelper] POWEREvent:', JSON.stringify(e));
+				if (e && e.status === 'connected') {
+					isPowerOn = true;
+					console.log('[RFIDInputHelper] 鉁� RFID妯″潡宸蹭笂鐢�');
+				} else {
+					isPowerOn = false;
+					console.log('[RFIDInputHelper] 鉁� RFID妯″潡鏈笂鐢�');
+				}
+			});
+		} catch (eventError) {
+			console.warn('[RFIDInputHelper] 鈿� 娣诲姞POWEREvent鐩戝惉澶辫触:', eventError);
+			console.warn('[RFIDInputHelper] 鈿� RFID鎵弿鍔熻兘鍙兘涓嶅彲鐢紝浣嗛〉闈㈠彲姝e父浣跨敤');
+		}
 		
 		// 娉ㄦ剰锛歊FID妯″潡鐢盇pp.vue鍦╫nLaunch鏃跺叏灞�鍒濆鍖�
 		// 杩欓噷鍙礋璐g洃鍚寜閿拰璇诲彇鏍囩锛屼笉鍒濆鍖朢FID妯″潡
 		
 		return true;
 	} catch (error) {
-		console.error('[RFIDInputHelper] 鍒濆鍖栧け璐�:', error);
+		console.error('[RFIDInputHelper] 鈿� 鍒濆鍖栧け璐�:', error);
+		console.warn('[RFIDInputHelper] 鈿� RFID鎵弿鍔熻兘涓嶅彲鐢紝浣嗛〉闈㈠彲姝e父浣跨敤');
 		return false;
 	}
 }
@@ -128,25 +135,46 @@
  * 璇诲彇RFID鏍囩锛堝崟鏍囩璇伙紝鏃犺繃婊わ級
  */
 function readRFIDTag() {
-	if (!uhfModel) {
-		// 濡傛灉妯″潡鏈垵濮嬪寲锛屽皾璇曞垵濮嬪寲
-		uhfModel = uni.requireNativePlugin("iData-UHFPlugin-UHFModule");
+	try {
 		if (!uhfModel) {
-			console.warn('[RFIDInputHelper] RFID妯″潡鏈壘鍒�');
-			modal.toast({
-				message: 'RFID妯″潡鏈壘鍒�',
-				duration: 1.5
-			});
+			// 濡傛灉妯″潡鏈垵濮嬪寲锛屽皾璇曞垵濮嬪寲
+			try {
+				uhfModel = uni.requireNativePlugin("iData-UHFPlugin-UHFModule");
+			} catch (e) {
+				console.warn('[RFIDInputHelper] 鈿� RFID妯″潡鏈壘鍒�:', e);
+			}
+			if (!uhfModel) {
+				console.warn('[RFIDInputHelper] RFID妯″潡鏈壘鍒�');
+				if (modal) {
+					modal.toast({
+						message: 'RFID妯″潡鏈壘鍒�',
+						duration: 1.5
+					});
+				}
+				return;
+			}
+		}
+		
+		// 妫�鏌FID鏄惁宸蹭笂鐢碉紙RFID妯″潡鐢盇pp.vue鍏ㄥ眬鍒濆鍖栵級
+		if (!isPowerOn) {
+			console.warn('[RFIDInputHelper] RFID鏈笂鐢碉紝鏃犳硶鎵弿');
+			if (modal) {
+				modal.toast({
+					message: 'RFID姝e湪涓婄數锛岃绋嶅��...',
+					duration: 1.5
+				});
+			}
 			return;
 		}
-	}
-	
-	// 妫�鏌FID鏄惁宸蹭笂鐢碉紙RFID妯″潡鐢盇pp.vue鍏ㄥ眬鍒濆鍖栵級
-	if (!isPowerOn) {
-		modal.toast({
-			message: 'RFID姝e湪涓婄數锛岃绋嶅��...',
-			duration: 1.5
-		});
+	} catch (error) {
+		console.error('[RFIDInputHelper] 鈿� 璇诲彇RFID鏍囩鍓嶆鏌ュけ璐�:', error);
+		console.warn('[RFIDInputHelper] 鈿� RFID鎵弿鍔熻兘涓嶅彲鐢紝浣嗛〉闈㈠彲姝e父浣跨敤');
+		if (modal) {
+			modal.toast({
+				message: 'RFID鎵弿鍔熻兘涓嶅彲鐢�',
+				duration: 1.5
+			});
+		}
 		return;
 	}
 	

--
Gitblit v1.9.1