feat: 被动轮询间隔改为 3 秒 + 新增 B2 记录条数显示

- 数据轮询独立于设备状态刷新:refreshLatestData 每 3 秒,refreshAll 每 5 秒
- 「当前测试数据」标题旁显示新记录条数 (x 条新记录)
- 仅 B2(灵敏度测试) 新记录计数,页面加载/自动化开始时复位
- pollProgress 同步更新计数器,自动化与被动模式无冲突
This commit is contained in:
wangfq
2026-06-12 11:10:09 +08:00
parent 366c7f909a
commit 0dfb928375
2 changed files with 27 additions and 4 deletions

View File

@@ -78,6 +78,8 @@ async function startAuto() {
autoFailed = 0; autoFailed = 0;
autoRemaining = count; autoRemaining = count;
lastDoneCount = 0; lastDoneCount = 0;
newB2Count = 0;
updateRecordCount();
autoStartTime = new Date().toISOString(); autoStartTime = new Date().toISOString();
const now = new Date(); const now = new Date();
@@ -218,7 +220,13 @@ async function pollProgress() {
const stats = data.stats; const stats = data.stats;
// ── 先渲染数据(放在所有 return 之前,避免完成时跳过渲染)── // ── 先渲染数据(放在所有 return 之前,避免完成时跳过渲染)──
try { if (data.latest) { renderLatest(data.latest); lastLatestId = data.latest.id; } } catch (e) { console.error("renderLatest:", e); } try { if (data.latest) {
if (data.latest.id !== lastLatestId) {
lastLatestId = data.latest.id;
if (data.latest.data_source === "B2") { newB2Count++; updateRecordCount(); }
}
renderLatest(data.latest);
} } catch (e) { console.error("renderLatest:", e); }
try { if (data.averages) renderAverages(data.averages); } catch (e) { console.error("renderAverages:", e); } try { if (data.averages) renderAverages(data.averages); } catch (e) { console.error("renderAverages:", e); }
try { if (data.latest_wave) { renderLatestWave(data.latest_wave); lastWaveId = data.latest_wave.id; } } catch (e) { console.error("renderLatestWave:", e); } try { if (data.latest_wave) { renderLatestWave(data.latest_wave); lastWaveId = data.latest_wave.id; } } catch (e) { console.error("renderLatestWave:", e); }
try { if (data.records && data.records.length) renderRecords(data.records); } catch (e) { console.error("renderRecords:", e); } try { if (data.records && data.records.length) renderRecords(data.records); } catch (e) { console.error("renderRecords:", e); }
@@ -386,6 +394,8 @@ async function loadInitialData() {
await loadDeviceTypeNames(); await loadDeviceTypeNames();
await loadTestMode(); await loadTestMode();
refreshDeviceStatus(); refreshDeviceStatus();
newB2Count = 0;
updateRecordCount();
try { try {
const resp = await fetch(`/api/automation/${DNT_ID}/progress`); const resp = await fetch(`/api/automation/${DNT_ID}/progress`);
const data = await resp.json(); const data = await resp.json();
@@ -426,6 +436,12 @@ async function refreshDeviceStatus() {
let lastLatestId = 0; // 最新测试数据 ID用于判断是否有新数据 let lastLatestId = 0; // 最新测试数据 ID用于判断是否有新数据
let lastWaveId = 0; // 最新波动数据 ID let lastWaveId = 0; // 最新波动数据 ID
let newB2Count = 0; // 本轮新收到的 B2(灵敏度测试) 记录条数
function updateRecordCount() {
const el = document.getElementById("new-record-count");
if (el) el.textContent = newB2Count > 0 ? `(${newB2Count} 条新记录)` : "";
}
async function refreshLatestData() { async function refreshLatestData() {
// 自动化运行中由 pollProgress 负责渲染,避免冲突 // 自动化运行中由 pollProgress 负责渲染,避免冲突
@@ -436,6 +452,11 @@ async function refreshLatestData() {
if (data.latest && data.latest.id !== lastLatestId) { if (data.latest && data.latest.id !== lastLatestId) {
lastLatestId = data.latest.id; lastLatestId = data.latest.id;
renderLatest(data.latest); renderLatest(data.latest);
// 仅 B2(灵敏度测试) 记录计数
if (data.latest.data_source === "B2") {
newB2Count++;
updateRecordCount();
}
} }
if (data.latest_wave && data.latest_wave.id !== lastWaveId) { if (data.latest_wave && data.latest_wave.id !== lastWaveId) {
lastWaveId = data.latest_wave.id; lastWaveId = data.latest_wave.id;
@@ -444,12 +465,14 @@ async function refreshLatestData() {
} catch (e) { /* 静默失败 */ } } catch (e) { /* 静默失败 */ }
} }
// 每 5 秒刷新设备状态 + 测试模式 + 型号名称缓存 + 最新测试数据 // 最新测试数据每 3 秒轮询
setInterval(refreshLatestData, 3000);
// 每 5 秒刷新设备状态 + 测试模式 + 型号名称缓存(工装页修改后能及时同步)
async function refreshAll() { async function refreshAll() {
await loadDeviceTypeNames(); await loadDeviceTypeNames();
await loadTestMode(); await loadTestMode();
refreshDeviceStatus(); refreshDeviceStatus();
refreshLatestData(); // 不 await避免阻塞
} }
setInterval(refreshAll, 5000); setInterval(refreshAll, 5000);

View File

@@ -89,7 +89,7 @@
<!-- 右侧:测试信息显示区 --> <!-- 右侧:测试信息显示区 -->
<div class="test-info"> <div class="test-info">
<h3>当前测试数据</h3> <h3>当前测试数据 <span id="new-record-count" style="font-size:12px;color:#888;font-weight:normal;margin-left:8px;"></span></h3>
<div id="latest-result"> <div id="latest-result">
<p class="placeholder">等待设备上报...</p> <p class="placeholder">等待设备上报...</p>
</div> </div>