diff --git a/edc-web/app/models.py b/edc-web/app/models.py index 0bec9c8..46de7a7 100644 --- a/edc-web/app/models.py +++ b/edc-web/app/models.py @@ -251,6 +251,27 @@ def get_automation_averages(dnt_id: int, since: str = None) -> dict: return {} +def get_automation_records(dnt_id: int, since: str) -> list[dict]: + """获取本轮自动化测试的所有记录(含 serialnet 状态)""" + conn = get_conn() + try: + with conn.cursor() as cur: + cur.execute( + "SELECT t.*, sn.state as sn_state " + "FROM tb_state_tst t " + "LEFT JOIN tb_serialnet sn ON sn.dnt_id = t.dnt_id " + " AND sn.state IN (2,3) " + " AND sn.update_time >= t.create_time " + " AND sn.update_time < DATE_ADD(t.create_time, INTERVAL 1 SECOND) " + "WHERE t.dnt_id=%s AND t.create_time >= %s " + "ORDER BY t.id ASC", + (dnt_id, since), + ) + return cur.fetchall() + finally: + conn.close() + + # ─── 用户管理 ────────────────────────────────────────────────────── def get_user_by_username(username: str) -> dict | None: diff --git a/edc-web/app/routes/test_op.py b/edc-web/app/routes/test_op.py index 09ebe68..797691b 100644 --- a/edc-web/app/routes/test_op.py +++ b/edc-web/app/routes/test_op.py @@ -8,6 +8,7 @@ from app.models import ( get_serialnet_stats, get_latest_test_state, get_automation_averages, + get_automation_records, clear_serialnet_records, insert_log, ) @@ -116,8 +117,10 @@ def api_automation_progress(dnt_id): stats = get_serialnet_stats(dnt_id) latest = get_latest_test_state(dnt_id) averages = get_automation_averages(dnt_id, since if since else None) + records = get_automation_records(dnt_id, since) if since else [] return jsonify({ "stats": stats, "latest": latest, "averages": averages, + "records": records, }) diff --git a/edc-web/app/static/js/test_op.js b/edc-web/app/static/js/test_op.js index ed94000..fee1649 100644 --- a/edc-web/app/static/js/test_op.js +++ b/edc-web/app/static/js/test_op.js @@ -50,6 +50,11 @@ async function startAuto() { autoRemaining = count; autoStartTime = new Date().toISOString(); // 记录开始时间 + // 显示开始时间 + document.getElementById("auto-time").style.display = "block"; + document.getElementById("time-start").textContent = new Date().toLocaleString(); + document.getElementById("time-end").textContent = "-"; + // 清空显示 resetAverages(); document.getElementById("latest-result").innerHTML = '
等待测试...
'; @@ -59,6 +64,10 @@ async function startAuto() { document.getElementById("stat-failed").textContent = "0"; document.getElementById("stat-remaining").textContent = count; + // 清空测试明细 + document.querySelector("#records-table tbody").innerHTML = ""; + document.getElementById("records-empty").style.display = "block"; + const btn = document.getElementById("btn-auto"); btn.textContent = "结束"; btn.className = "btn-stop"; @@ -88,6 +97,8 @@ function stopAuto() { autoRunning = false; clearInterval(pollInterval); pollInterval = null; + // 记录结束时间 + document.getElementById("time-end").textContent = new Date().toLocaleString(); // 清除所有超时计时器 for (const id in timeoutTimers) { clearTimeout(timeoutTimers[id]); @@ -125,6 +136,11 @@ async function pollProgress() { renderAverages(data.averages); } + // 显示本轮测试明细 + if (data.records) { + renderRecords(data.records); + } + // 自动插入下一条 0xB0 if (autoRemaining > 0) { // 检查是否还有 pending 的记录,没有则插入新的 @@ -216,3 +232,31 @@ function resetAverages() { document.getElementById("avg-" + id).textContent = "-"; }); } + +// ─── 显示本轮测试明细 ────────────────────────── + +function renderRecords(records) { + if (!records || !records.length) { + document.getElementById("records-empty").style.display = "block"; + document.getElementById("records-table").style.display = "none"; + return; + } + document.getElementById("records-empty").style.display = "none"; + document.getElementById("records-table").style.display = ""; + + const tbody = document.querySelector("#records-table tbody"); + tbody.innerHTML = records.map((r, i) => ` +| # | 串口状态 | 峰峰值(V) | 开始频率 | 进入距离 | 离开距离 | 速度(m/s) | 时间 | +
|---|
暂无记录
+