From 492cca36ed1ff9b7574f7389224a343c3f22d2f4 Mon Sep 17 00:00:00 2001 From: lzh Date: Mon, 15 Dec 2025 15:43:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=A1=B5=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/static/index.html | 86 ++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 2c6aa6d..006ef2c 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -288,15 +288,35 @@
-
- MAC: {{ ble.mac }} - RSSI: {{ ble.rssi }} dBm +
+ {{ ble.mac }} +
+
+
+
+
+ {{ ble.rssi }} +
+{{ badge.bluetooth.length - 4 }} 更多...
+ +
+
+ + +
+
+
@@ -416,7 +436,8 @@ // 实时数据存储 badges: {}, // Map: id -> badge data counters: {}, // Map: id -> counter data - logs: [] + logs: [], + ttsInputs: {} // Map: badgeId -> input string } }, mounted() { @@ -640,6 +661,63 @@ action = `长按 ${keyNum}号键`; } return action; + }, + // RSSI 可视化 + getRssiPercentage(rssi) { + // 假设 -100dBm 为 0%,-50dBm 为 100% + const min = -100; + const max = -50; + if (rssi >= max) return 100; + if (rssi <= min) return 0; + return ((rssi - min) / (max - min)) * 100; + }, + getRssiColor(rssi) { + if (rssi >= -60) return '#28a745'; // Green + if (rssi >= -75) return '#ffc107'; // Yellow + if (rssi >= -85) return '#fd7e14'; // Orange + return '#dc3545'; // Red + }, + // 发送 TTS + async sendTTS(phone) { + const content = this.ttsInputs[phone]; + if (!content || !content.trim()) { + alert('请输入播报内容'); + return; + } + + try { + const formData = new FormData(); + formData.append('phone', phone); + formData.append('content', content); + // Flag 9 = 0x08 (TTS) | 0x01 (紧急/指令) -> 混合模式,确保立刻播报 + formData.append('flag', 9); + + const res = await fetch('/api/v1/device/command/text', { + method: 'POST', + body: formData + }); + const result = await res.json(); + if (result.code === 200) { + // 清空输入框 + this.ttsInputs[phone] = ''; + // 记录日志到界面以便反馈 + this.addLog({ source: 'SYSTEM', message: `向 ${phone} 下发语音: ${content}` }); + } else { + alert('下发失败: ' + result.message); + } + } catch (e) { + alert('网络异常: ' + e.message); + } + }, + // 内部日志辅助 + addLog(data) { + const now = new Date().toLocaleTimeString(); + this.logs.unshift({ + time: now, + source: data.source, + data: data.message || JSON.stringify(data) + }); + if (this.logs.length > 50) this.logs.pop(); } } }).mount('#app')