From b4b7387b3952e635d65f7b7897ebaa2b70f0169c Mon Sep 17 00:00:00 2001 From: wangfq Date: Fri, 12 Jun 2026 10:00:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=89=8D=E7=AB=AF=E5=9E=8B=E5=8F=B7?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=94=B9=E4=B8=BA=E4=BB=8E=20API=20=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=8E=B7=E5=8F=96=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9E=8B=E5=8F=B7=E6=98=BE=E7=A4=BA=20Unknow?= =?UTF-8?q?n(3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - test_op.js: renderConfigOverview 硬编码 devTypeMap → devTypeNameCache[DevType] - test_op.js: renderLatest 增加 sub_type 回退查找,兼容旧数据 - test_op.js: 每 5 秒刷新型号名称缓存,工装页新增型号后自动同步 - test_data.js: 型号列三元硬编码 → getDevTypeName(sub_type) - 子模块 edc_server: 同步设备型号名称数据库查询 --- edc-web/app/static/js/test_data.js | 28 +++++++++++++++++++++++++--- edc-web/app/static/js/test_op.js | 29 +++++++++++++++++++++++++---- edc_server | 2 +- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/edc-web/app/static/js/test_data.js b/edc-web/app/static/js/test_data.js index 52528f5..6de66fc 100644 --- a/edc-web/app/static/js/test_data.js +++ b/edc-web/app/static/js/test_data.js @@ -1,5 +1,26 @@ // 测试信息页 — 三视图 (全部 / B2 / B4) +// ─── 型号名称缓存 ───────────────────────────────── +let devTypeNameCache = {}; + +async function initDevTypeNames() { + try { + const resp = await fetch('/api/vehicle-base-test'); + const tests = await resp.json(); + devTypeNameCache = {}; + tests.forEach(t => { + if (t.type_num != null && t.dev_name) { + devTypeNameCache[t.type_num] = t.dev_name; + } + }); + } catch (e) { console.error('加载型号名称失败:', e); } +} + +function getDevTypeName(subType) { + if (subType == null || subType === 0) return '-'; + return devTypeNameCache[subType] || `Unknown(${subType})`; +} + // ─── 视图定义 ─────────────────────────────────── const VIEWS = { @@ -9,7 +30,7 @@ const VIEWS = { cols: [ { key: 'id', title: 'ID' }, { key: 'serial', title: '设备编码' }, - { key: 'model', title: '型号', render: r => r.sub_type === 1 ? 'PD132' : r.sub_type === 2 ? 'DLD110' : '-' }, + { key: 'model', title: '型号', render: r => getDevTypeName(r.sub_type) }, { key: 'data_source', title: '来源' }, { key: 'test_mode', title: '测试模式', render: r => r.test_mode === 1 ? '波动' : '灵敏度' }, { key: 'iffinish', title: '完成', render: r => r.data_source === 'B4' ? '-' : (r.iffinish === '1' ? '是' : '否') }, @@ -45,7 +66,7 @@ const VIEWS = { cols: [ { key: 'id', title: 'ID' }, { key: 'serial', title: '设备编码' }, - { key: 'model', title: '型号', render: r => r.sub_type === 1 ? 'PD132' : r.sub_type === 2 ? 'DLD110' : '-' }, + { key: 'model', title: '型号', render: r => getDevTypeName(r.sub_type) }, { key: 'test_mode', title: '测试模式', render: r => r.test_mode === 1 ? '波动' : '灵敏度' }, { key: 'iffinish', title: '完成', render: r => r.iffinish === '1' ? '是' : '否' }, { key: 'fault_info', title: '故障信息', render: r => `${escHtml(r.fault_info || '-')}` }, @@ -457,7 +478,8 @@ async function loadChart() { // ─── 初始加载 ──────────────────────────────────── renderHead(); -searchData(1); +// 先加载型号名称再查询数据,确保型号列正确渲染 +initDevTypeNames().then(() => searchData(1)); // ─── 删除(admin)───────────────────────────────── diff --git a/edc-web/app/static/js/test_op.js b/edc-web/app/static/js/test_op.js index e323089..b60befc 100644 --- a/edc-web/app/static/js/test_op.js +++ b/edc-web/app/static/js/test_op.js @@ -9,6 +9,7 @@ let autoStartTime = ""; let localSinceStr = ""; let currentTestMode = null; // 0=灵敏度, 1=波动, null=未加载 let currentDeviceState = null; // 当前设备状态 (0=离线 1=在线 2=通信不良 null=未加载) +let devTypeNameCache = {}; // type_num → dev_name 映射(从 tb_vechicle_base_test) let pollInterval = null; let nextCmdTimer = null; // 间隔等待定时器 @@ -273,6 +274,19 @@ async function pollProgress() { // ─── 页面加载时获取初始数据 ────────────────────── +async function loadDeviceTypeNames() { + try { + const resp = await fetch(`/api/vehicle-base-test`); + const tests = await resp.json(); + devTypeNameCache = {}; + tests.forEach(t => { + if (t.type_num != null && t.dev_name) { + devTypeNameCache[t.type_num] = t.dev_name; + } + }); + } catch (e) { console.error("加载型号名称失败:", e); } +} + async function loadTestMode() { try { const resp = await fetch(`/api/fixture/param/${DNT_ID}?_=${Date.now()}`); @@ -315,8 +329,8 @@ function renderConfigOverview(param) { } // 型号 - const devTypeMap = {0: '未知', 1: 'PD132', 2: 'DLD110'}; - document.getElementById("cfg-dev-type").textContent = devTypeMap[param.DevType] || `0x${(param.DevType||0).toString(16)}`; + document.getElementById("cfg-dev-type").textContent = + devTypeNameCache[param.DevType] || `0x${(param.DevType || 0).toString(16)}`; // 距离 (DB cm → 显示 mm) document.getElementById("cfg-reset-dis").textContent = param.RestDis != null ? param.RestDis * 10 : '-'; @@ -369,6 +383,7 @@ function toggleConfig() { } async function loadInitialData() { + await loadDeviceTypeNames(); await loadTestMode(); refreshDeviceStatus(); try { @@ -407,8 +422,9 @@ async function refreshDeviceStatus() { } } -// 每 5 秒刷新设备状态 + 测试模式(工装页修改后能及时同步) +// 每 5 秒刷新设备状态 + 测试模式 + 型号名称缓存(工装页修改后能及时同步) async function refreshAll() { + await loadDeviceTypeNames(); await loadTestMode(); refreshDeviceStatus(); } @@ -475,8 +491,13 @@ function fmtRelay(s) { function renderLatest(data) { const div = document.getElementById("latest-result"); + // 优先使用 str_type,为空时从缓存查找 + let typeName = data.str_type; + if (!typeName && data.sub_type != null) { + typeName = devTypeNameCache[data.sub_type] || `Unknown(${data.sub_type})`; + } div.innerHTML = ` -

设备型号:${data.str_type || '-'}

+

设备型号:${typeName || '-'}

测试模式:${data.test_mode === 1 ? '波动测试' : '灵敏度测试'}

峰峰值:${data.ppvalue?.toFixed(2) || '-'} V

开始工作频率:${data.idle_freq || '-'} Hz

diff --git a/edc_server b/edc_server index 3580f89..6e13990 160000 --- a/edc_server +++ b/edc_server @@ -1 +1 @@ -Subproject commit 3580f895524610baa5b996ac29a820a904c01379 +Subproject commit 6e13990386fe364c43d395eab24d2438f845a683