79 Commits

Author SHA1 Message Date
wangfq
2424659611 测试信息: 峰峰值列移至释放距离后面 (all/B2视图) 2026-06-18 16:05:31 +08:00
wangfq
8a6b5c6d07 测试信息页面优化: 限制6000条、字段调整、车检器序列号搜索
- 查询/导出/图表统一 LIMIT 6000 条
- 列顺序: 时间→第一列, 测试模式→最后一列, 隐藏ID
- 设备编码只显示后6位, 默认每页100条
- 新增车检器序列号搜索 (detector_serial LIKE)
- 四个文件同步修改: models.py, test_data.py, test_data.js, test_data.html
2026-06-18 09:44:18 +08:00
wangfq
f0ec79ca2f chore: 更新 edc_server 子模块 (fix detector_serial B4 缺失) 2026-06-15 16:45:53 +08:00
wangfq
4b082e35df refactor: 调整车检器序列号相关命名 2026-06-15 13:41:22 +08:00
wangfq
521cbe4107 feat: edc-web 支持车检器序列号输入与显示
- 自动化测试区域新增「车检器序列号」输入框
- 回车键自动触发「开始」按钮
- /api/automation/start 接收 detector_serial,写入 tb_pending_detector
- 测试操作页 + 测试信息页(全部/B2/B4)显示序列号,空时显示 '-'
- 页面加载和测试结束后焦点自动回到序列号输入框(全选),方便连续测试
2026-06-15 10:02:51 +08:00
wangfq
4ac6cbb2fe docs: 2026.06.09~06.12 周报 2026-06-12 18:22:30 +08:00
wangfq
0dfb928375 feat: 被动轮询间隔改为 3 秒 + 新增 B2 记录条数显示
- 数据轮询独立于设备状态刷新:refreshLatestData 每 3 秒,refreshAll 每 5 秒
- 「当前测试数据」标题旁显示新记录条数 (x 条新记录)
- 仅 B2(灵敏度测试) 新记录计数,页面加载/自动化开始时复位
- pollProgress 同步更新计数器,自动化与被动模式无冲突
2026-06-12 11:10:09 +08:00
wangfq
366c7f909a feat: 测试操作页添加被动轮询,实时显示工装本地按键触发的上报数据
- 新增 refreshLatestData() 每 5 秒轮询最新测试数据(不传 since 参数)
- lastLatestId/lastWaveId 跟踪最新记录,避免重复渲染
- 自动化运行中跳过被动轮询,避免与 pollProgress 冲突
- pollProgress 同步更新跟踪 ID,自动化结束后无缝衔接
2026-06-12 10:45:58 +08:00
wangfq
b4b7387b39 fix: 前端型号显示改为从 API 动态获取,修复新增加型号显示 Unknown(3)
- 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: 同步设备型号名称数据库查询
2026-06-12 10:00:33 +08:00
wangfq
aa2815b5cc fix: analyst 访问受限页面时自动跳转到测试数据页,并显示提示 2026-06-11 17:32:44 +08:00
wangfq
17e1d232e8 feat: 增加 analyst 角色——仅测试数据查询/下载+修改密码 2026-06-11 17:21:49 +08:00
wangfq
317c15aff2 chore: 从 git 跟踪中移除 __pycache__/*.pyc 2026-06-11 10:02:01 +08:00
wangfq
501e58b65f fix: UI 标签优化、继电器着色、工装配置概览面板
- fixture.js: FarTol/NearTol/StepTol 容差字段去掉 ×10 换算
- test_data.js: relay_out 列增加 fmtRelay() 着色渲染
- test_op.js: 新增工装配置概览面板 (renderConfigOverview + toggleConfig);新增 fmtRelay();renderLatest 继电器着色
- fixture.html: 标签文本优化 — 触发距离/释放距离/mm/V 单位标注
- test_op.html: 新增配置概览面板 HTML,隐藏旧 test-mode-indicator
- vehicle_base_test.html: 标签文本统一(触发/释放距离 + 单位)
- .gitignore: 新增,排除 __pycache__/*.pyc/.venv
2026-06-11 10:01:49 +08:00
wangfq
000e4f8d3a feat: 增加 manager 角色,admin+manager 共享管理权限(用户管理除外),所有用户可自行修改密码
- auth.py: 新增 privileged_required 装饰器 (admin+manager),admin_required 仅限用户管理
- 路由权限: fixture/logs/device_logs/test_data 的 admin 检查改为 admin+manager
- 前端: 导航栏/删除按钮/配置按钮扩展为 admin+manager 可见
- 用户管理: 角色下拉增加 manager 选项,仍仅 admin 可访问
- 新增 /change-password 路由+模板,所有登录用户可自行修改密码
- edc_server models.py: role COMMENT 更新 + ALTER TABLE 迁移
2026-06-11 09:11:54 +08:00
wangfq
50451de2df chore: 更新 edc_server 子模块 (0xB4 relay_out 格式化) 2026-06-10 17:27:47 +08:00
wangfq
2458127cfb fix: relay_out 调整仅改后端格式化,前端直接显示 DB relay_out 字段
- relay_code 保持原始 int 值不变
- decode_relay_info 输出新格式: '存在继电器有输出,脉冲继电器无输出'
- 前端不再 JS 端重新解码 relay_code,直接显示 DB 中的 relay_out 字段
- 保留 RELAY_MAP/decodeRelay 作为降级方案(relay_out 为空时用)
2026-06-10 16:28:30 +08:00
wangfq
a26d8807cb fix: 前端继电器显示同步为新格式 + 更新子模块
与后端 decode_relay_info 保持一致:bit 0/1 始终显示 有/无,不再用缩写 MAP
2026-06-10 16:25:38 +08:00
wangfq
67da0c9368 fix: renderLatest 不再覆盖测试模式,根除显示回退问题
根因: loadTestMode() 先从工装配置读取 TestMode=0(灵敏度) 并正确显示,
但紧接着 renderLatest() 看到最后一条测试数据 test_mode=1(波动),
又调用 updateTestModeUI(1) 把显示覆盖回去。

测试模式的权威来源是工装配置(tb_fixture_param),renderLatest 只应
展示最新测试数据的内容,不应修改模式指示器。
2026-06-10 14:51:47 +08:00
wangfq
4c337b60ae fix: 修复浏览器缓存导致工装参数 GET 请求返回旧数据
根因: /api/fixture/param/<id> GET 没有 Cache-Control 头,F5 刷新时
浏览器直接用磁盘缓存返回旧 TestMode,导致测试页显示旧模式。

修复:
- 服务端 fixture.py: GET 响应加 Cache-Control: no-store/no-cache/must-revalidate
- 客户端 test_op.js + fixture.js: 4 处 GET fetch 全部加 ?_=Date.now() 缓存破坏参数
2026-06-10 14:29:14 +08:00
wangfq
4b91455485 fix: 测试操作页面定期刷新测试模式,解决工装页修改后不同步
loadTestMode 只在页面加载时调用一次,工装页改完 TestMode 后切回测试页,
如果页面已打开则不会刷新。现在改为每 5s 与设备状态一起同步刷新。
2026-06-10 14:24:52 +08:00
wangfq
f2e9cc9345 feat: 测试操作页非在线状态禁止发送指令
- 新增 currentDeviceState 变量跟踪设备状态
- refreshDeviceStatus 同步更新 currentDeviceState
- sendCmd/manual cmds(B0/B1/BA/BB/BC) 调用前检查在线状态
- startAuto(自动化开始) 调用前检查在线状态
- 非在线时弹窗提示「设备当前状态为「离线/通信不良」,无法发送指令」
2026-06-10 13:55:48 +08:00
wangfq
d3b6d79a03 feat: 设备日志增加时间范围查询 + CSV 导出
- 查询 API 增加 date_from/date_to 参数(前端日期+时间选择器)
- 新增 /api/device-logs/export CSV 导出端点
- 新增 export_device_logs() 模型函数(全量不分页)
- 删除校验放宽:允许纯时间范围作为删除条件
- 前端增加导出 CSV 按钮,遵循 test_data 页面模式
2026-06-10 10:44:19 +08:00
wangfq
6b35d07025 fix: 设备日志页 fmtTime 修复时区偏移 8 小时
Flask jsonify 把 MySQL DATETIME 序列化为 '... GMT' 但实际是本地时间。
JS new Date() 按 GMT 解析后在 UTC+8 显示会多 8 小时。
统一去除 GMT 后缀再解析(与 test_op.js 相同方案)。
2026-06-10 10:14:07 +08:00
wangfq
5df08a26a9 fix: 设备日志页增加 TCP 连接/断开事件类型支持 2026-06-10 10:01:12 +08:00
wangfq
0bddb46605 chore: 更新 edc_server submodule (设备状态监控全表扫描) 2026-06-10 09:36:05 +08:00
wangfq
ee136cc707 feat: edc-web 设备日志管理页 + 在线状态实时刷新
- 新增 /device-logs 设备事件日志管理页 (admin 权限)
  - 支持按设备序列号/事件类型筛选查询
  - 支持 admin 按条件删除日志
  - 不同事件类型彩色标识 (在线=绿, 离线=红, 通信不良=橙)
- 新增 /api/devices/<id>/status 设备状态 API
- 设备列表页:每 5s 异步刷新所有设备在线状态
- 测试操作页:顶部显示设备状态,每 5s 异步刷新
- dnt_info state 支持三态显示 (在线/离线/通信不良)
- 导航栏增加「设备日志」入口 (admin only)
2026-06-10 09:14:32 +08:00
wangfq
60c11fe719 feat: 测试操作页显示当前测试模式,灵敏度模式下隐藏波动数据区
- 页面头部新增测试模式指示器(灵敏度测试/波动测试)
- 灵敏度模式时隐藏「波动测试数据」区块
- loadTestMode() 从工装参数获取 TestMode,无参数时回退到最新测试数据
- renderLatest 收到新数据时同步更新模式指示
2026-06-09 17:41:07 +08:00
wangfq
8aaa8440d1 feat: 配置功能仅admin可用,operator隐藏配置按钮+后端403拦截
- devices.html: 注入 USER_ROLE 全局变量
- devices.js: 配置按钮仅 USER_ROLE===admin 时渲染
- fixture.py: 页面/指令/保存三个路由均校验 admin 角色
2026-06-09 15:36:08 +08:00
wangfq
e863dfbe2f fix: 故障信息列限制12em宽,超长截断省略+title悬停显示全文 2026-06-09 14:29:21 +08:00
wangfq
69babe9994 style: 测试信息表格列不换行,列宽不小于标题 2026-06-09 14:17:25 +08:00
wangfq
421d735274 refactor: 测试信息页去掉地址/类型列,表格横向可滚动
- all/B2/B4 三视图均移除 dpg430_addr(地址) 和 str_type(类型) 列
- 表格包裹在 overflow-x:auto 容器中,列多时横向滚动
2026-06-09 14:11:55 +08:00
wangfq
3fb51c35f2 feat: 全部数据视图显示tb_state_tst全部字段,B2/B4差异字段显示'-'
- 排除 dpg430_addr 和 sub_type(型号列用 render 转换)
- B4 记录: ppvalue/idle_freq/enter_freq/exit_freq/enter_speed/exit_speed 显示 '-'
- B2 记录: remain_count/work_freq/curr_dist/speed/near_dist/far_dist 显示 '-'
- 进入距离(B2) 与 进入高度(B4) 合并为「进入高度/距离」
- 离开距离(B2) 与 离开高度(B4) 合并为「离开高度/距离」
- 新增列: iffinish(完成), fault_info(故障信息), relay_out(继电器), enter_freq, exit_freq, enter_speed, exit_speed, work_freq, speed, near_dist, far_dist
2026-06-09 13:48:56 +08:00
wangfq
172af49765 fix: 配置页频率/峰峰值前端显示与DB原始值双向转换
根据 DPG430 串口协议:
- 频率 f(Hz) = 10 * X, X 为 DB/设备原始值
- 峰峰值 V = ((X*3.3)/4095)*4, X 为正整数

前端 fixture.js 和 vehicle_base_test.js 增加转换层:
- 显示: raw X → f(Hz) / V(V)(fillFormFromParam、renderTable、openModal)
- 保存: f(Hz)/V(V) → raw X(getFormParams、saveRecord)

DB 已存原始值无需迁移,后端 build_4b_packet 透传原始值无需改。
2026-06-09 08:38:38 +08:00
wangfq
c0e77398d4 fix(fixture): 配置页面距离/容差值跟随单位 cm→mm 转换
- fillFormFromParam: DB值(cm) ×10 显示(mm)
- getFormParams: 表单值(mm) ÷10 存回(cm)
- HTML max: 255→2550 (适配mm)
- 0x4B下发/0x4C回读均正确:前端处理转换,协议仍用cm
2026-06-08 16:54:54 +08:00
wangfq
2b71abaec8 fix(fixture): 复位距离/皮距/容差单位 cm→mm 2026-06-08 16:51:43 +08:00
wangfq
92c2c2b408 docs: V2.0.0 培训手册
V2 vs V1 新增内容:
- 波动测试模式 (B4) 及完整流程说明
- 线圈参数管理 + 模拟车辆参数管理
- 工装配置关联线圈/车辆 + 新设备配置检查清单
- 测试信息三视图 + ECharts 图表
- 精确时间筛选(日期+时分秒)
- 自动化测试间隔/超时配置
- Admin 数据删除、继电器状态重构
- 全量操作日志覆盖
2026-06-08 12:04:50 +08:00
wangfq
78ff0a6c2c chore: 更新 edc_server submodule (B4 补充型号/类型) 2026-06-08 11:31:46 +08:00
wangfq
c5fb4fc9c0 fix(fixture): 保存工装参数时记录操作日志 2026-06-08 11:19:13 +08:00
wangfq
431653d033 feat(edc-web): 线圈参数/模拟车辆参数管理 + 工装关联 + 测试环境显示
新增功能:
- 线圈参数管理页 (/coil-info): 增删改查,日志记录
- 模拟车辆管理页 (/simulate-car): 增删改查,日志记录
- 工装配置页新增线圈/模拟车辆选择区,保存时关联到 tb_fixture_param
- 测试信息查询页新增「测试环境」列,显示当前线圈和模拟车辆信息
- edc_server 写入测试数据时自动从 fixture 获取线圈/车辆关联

数据库:
- 新增 tb_coil_info、tb_simulate_car 表
- tb_fixture_param 增加 coil_id/simulate_car_id 字段
- tb_state_tst 增加 coil_id/simulate_car_id 字段

后端:
- models.py 新增线圈/模拟车辆 CRUD
- get_fixture_param 改为 LEFT JOIN 返回线圈/车辆详情
- upsert_fixture_param 支持 coil_id/simulate_car_id
- 测试数据查询 LEFT JOIN 线圈/车辆信息
2026-06-08 10:42:13 +08:00
wangfq
e538efafb5 feat(test_data): 搜索页面增加时分秒时间筛选
- HTML: 日期范围旁加 time input (step=1s),标签改为'时间范围'
- JS: 新增 getDatetime() 合并日期+时间,统一查/导出/图表/删除
- 后端: date 参数智能判断,纯日期自动补 23:59:59,带时间原样使用
2026-06-08 08:56:01 +08:00
wangfq
bbfe085140 chore: 更新 edc_server 子模块 (relay_code 存储重构) 2026-06-05 17:56:56 +08:00
wangfq
8148aef332 docs: V2.0.4 周报 (6/1-6/5) — 波动测试+继电器重构+页面增强+Bug修复 2026-06-05 17:53:35 +08:00
wangfq
87752f12e6 feat: 图表视图增加继电器输出状态系列
- 新增 buildRelaySeries() 函数构建继电器阶梯线系列
  (type=line, step=end, 红色三角标记)
- 新增第4 Y轴(继电器输出),刻度 0-3,标签解码为
  无输出/存在信号/脉冲信号/存在+脉冲
- tooltip 中继电器值自动解码为可读文本
- grid right 扩大到 200px 容纳第4 Y轴
2026-06-05 15:03:17 +08:00
wangfq
aadd498851 fix: 修复时间显示时区偏移8小时 + 自动化完成时跳过渲染
问题1(时区):Flask jsonify 将 MySQL DATETIME 输出为
'Fri, 05 Jun 2026 14:37:52 GMT',但实际值是服务器本地时间
(UTC+8)。JS new Date() 把 GMT 当真,getHours() 加 8 小时。

修复:fmtTime() 先 strip ' GMT' 后缀再解析,让 JS 按本地
时间处理。

问题2(跳过渲染):pollProgress 中'全部完成'时 stopAuto()
+ return 跳过了 renderAverages/renderRecords,导致自动化
平均值和本轮明细永远不显示最后一轮数据。

修复:将 4 个 render 调用移到所有 return 之前执行。
2026-06-05 14:44:13 +08:00
wangfq
86c6046fbc fix: 测试操作页三个数据显示区因 relay_code 改动不显示
问题原因:
1. pollProgress 中所有 render 调用共用一个 try-catch,
   一处报错会导致后续所有渲染被跳过(级联失败)
2. 页面加载时没有初始化数据查询——不启动自动化就永远显示
   占位符

修复:
- 每个 render 调用独立 try-catch,互不影响
- 页面加载时调用 loadInitialData(),自动显示最新测试数据
   和波动测试数据
- records 增加 length>0 判断,避免空数组误触发渲染
2026-06-05 14:34:13 +08:00
wangfq
b4c27e30c8 refactor: relay存储原始hex值(relay_code),前端解码显示
- tb_state_tst新增relay_code TINYINT列,ALTER TABLE自动迁移
- edc_server: B2/B4都以原始int值插入relay_code
- edc-web: decodeRelay()解码 0=无输出/1=存在信号/2=脉冲信号/3=存在+脉冲
- relay_out VARCHAR列保留兼容旧数据
2026-06-05 14:18:45 +08:00
wangfq
6a3aaf3c05 feat: admin用户支持删除测试数据(按条件/日期范围),含确认框+日志 2026-06-05 13:44:46 +08:00
wangfq
0ea3511b90 feat: 图表增加保存图片功能(toolbox saveAsImage) 2026-06-05 12:02:37 +08:00
wangfq
877770aeab feat: 测试信息增加图表视图(ECharts),表格/图表一键切换
- B2视图:峰峰值/频率/距离/速度 趋势折线图,三Y轴
- B4视图:工作频率/距离/速度 趋势折线图,三Y轴
- dataZoom时间范围缩放,图例可切换系列显隐
- 新增 /api/test-data/chart 接口返回全量数据
2026-06-05 11:49:35 +08:00
wangfq
470c148861 fix: fmtTime改用Date解析,兼容HTTP日期格式('Fri, 05 Jun 2026...') 2026-06-05 10:50:32 +08:00