Эх сурвалжийг харах

feat: 完善 NFC 添加页面功能

ruhuxu 1 долоо хоног өмнө
parent
commit
5d8e8762b1

+ 63 - 2
js/reader/ka-nfc-page.js

@@ -4,6 +4,7 @@
   var isReading = false;
   var isConnecting = false;
   var lastUid = "";
+  var seenUids = new Map();
 
   function getEl(id) {
     return document.getElementById(id);
@@ -49,6 +50,54 @@
     reader.iso15693NumberOfBlocks = getValue("iso15693NumberOfBlocksInput", "7");
   }
 
+  function getDedupeMode() {
+    return getValue("dedupeMode", "session");
+  }
+
+  function getDedupeTimeMs() {
+    var raw = getValue("dedupeTime", "5000");
+    var timeMs = parseInt(raw, 10);
+    if (!timeMs || timeMs < 0) {
+      return 5000;
+    }
+    return timeMs;
+  }
+
+  function clearDedupeHistory() {
+    seenUids.clear();
+    lastUid = "";
+  }
+
+  function checkDuplicate(uid) {
+    var dedupeMode = getDedupeMode();
+
+    if (dedupeMode === "none") {
+      return { isDup: false };
+    }
+
+    if (dedupeMode === "session") {
+      if (seenUids.has(uid)) {
+        return { isDup: true };
+      }
+      return { isDup: false };
+    }
+
+    if (dedupeMode === "time") {
+      var info = seenUids.get(uid);
+      var dedupeTimeMs = getDedupeTimeMs();
+      if (info && Date.now() - info.time < dedupeTimeMs) {
+        return { isDup: true };
+      }
+      return { isDup: false };
+    }
+
+    return { isDup: false };
+  }
+
+  function recordUid(uid, protocol) {
+    seenUids.set(uid, { protocol: protocol, time: Date.now() });
+  }
+
   function setNfcValue(uid) {
     var input = getEl("nfch");
     if (!input) return;
@@ -67,6 +116,7 @@
 
   function handleDisconnect(message) {
     stopPolling();
+    clearDedupeHistory();
     reader.connected = false;
     reader.handle = null;
     setStatus(message || "读卡器未连接", "#ef4444");
@@ -105,9 +155,12 @@
       applyReaderConfig();
       var result = await readUidBothProtocols();
       if (result && result.uid) {
-        if (result.uid !== lastUid) {
-          lastUid = result.uid;
+        var dupCheck = checkDuplicate(result.uid);
+        if (dupCheck.isDup) {
+          return;
         }
+        recordUid(result.uid, result.protocol);
+        lastUid = result.uid;
         setNfcValue(result.uid);
       }
     } catch (err) {
@@ -143,6 +196,7 @@
 
     try {
       applyReaderConfig();
+      clearDedupeHistory();
       await reader.selectDevice();
       setStatus("读卡器连接成功", "#16a34a");
       showConnectButton(false);
@@ -167,6 +221,13 @@
         connectReader(true);
       });
     }
+
+    var dedupeModeEl = getEl("dedupeMode");
+    if (dedupeModeEl) {
+      dedupeModeEl.addEventListener("change", function () {
+        clearDedupeHistory();
+      });
+    }
   }
 
   function init() {

+ 1 - 1
page/biz/ka_nfcAdd.ss.jsp

@@ -85,7 +85,7 @@
 			<tr>
 				<th>NFC</th>
 				<td>
-					<input id="nfch" name="kah"/>
+					<input onChange="selBaseInfoByNfch" name="kah"/>
 				</td>
 			</tr>
 		</table>

+ 1 - 1
page/ka_nfcAdd.jsp

@@ -135,7 +135,7 @@ onChange="selBaseInfoByRyid"
 			<tr>
 				<th>NFC</th>
 				<td>
-					<input id="nfch" name="kah"/>
+					<input onChange="selBaseInfoByNfch" name="kah"/>
 				</td>
 			</tr>
 		</table>