前端集成修复报告
问题诊断
前端显示错误 “获取采集通道失败”,根本原因是:
- 后端已重构为三级架构 (Channel → Device → Point)
- 前端仍使用旧的扁平架构 API 端点 (/api/devices 不存在)
修复内容
1. API 端点更新
获取采集通道列表 (refreshChannels)
- ❌ 旧:
fetch('/api/devices') - ✅ 新:
fetch('/api/channels')
获取设备列表 (selectChannel)
- ❌ 旧:
fetch(/api/devices/${channel.id}) - ✅ 新:
fetch(/api/channels/${channel.id}/devices)
获取点位数据 (refreshPointData)
- ❌ 旧:
fetch(/api/devices/${channel.id}/points) - ✅ 新:
fetch(/api/channels/${channel.id}/devices/${device.id}/points)
WebSocket 连接 (connectWebSocket)
- ❌ 旧:
ws://.../ws/values - ✅ 新:
ws://.../api/ws/values
2. 数据字段名映射更新
前端 HTML 表格绑定
- 点位表格 (Points Table)
- PointID → id
- Value → value
- Quality → quality
- TS → timestamp
- Added: name (点位名称)
- 设备表格 (Devices Table)
- Removed: protocol (协议移到 Channel 中)
- Kept: id, name, enable, interval
WebSocket 消息处理
- 旧格式:
data.PointID, data.Value, data.Quality, data.TS - 新格式:
data.point_id, data.value, data.quality, data.timestamp - 新增校验:
data.channel_id, data.device_id(确保消息属于当前设备)
3. 写入命令更新
请求体结构
// 旧格式
{
device_id: "...",
point_id: "...",
value: "..."
}
// 新格式
{
channel_id: "...",
device_id: "...",
point_id: "...",
value: "..."
}
writeForm 初始化
const writeForm = reactive({
channelID: '', // ← 新增
deviceID: '',
pointID: '',
value: ''
});
4. 错误处理增强
- 添加 HTTP 状态码检查 (response.ok)
- 所有 fetch 调用都包含错误消息详情
- 改进错误提示:
'获取采集通道失败: ' + error.message
修改文件
- ui/index.html (457 行)
- 行 290-311: refreshChannels() 更新
- 行 314-334: selectChannel() 更新
- 行 340-353: refreshPointData() 更新
- 行 339: connectWebSocket() WebSocket 端点修复
- 行 204-223: 点位表格字段名更新
- 行 161-171: 设备表格字段移除 protocol
- 行 348-365: WebSocket 消息处理逻辑更新
- 行 377-388: openWriteDialog() 和 submitWrite() 更新
- 行 276-281: writeForm 结构更新
验证清单
- ✅ 页面加载时自动调用 refreshChannels()
- ✅ 采集通道列表显示正确 (调用 /api/channels)
- ✅ 点击通道显示设备列表 (调用 /api/channels/:id/devices)
- ✅ 点击设备显示点位数据 (调用 /api/channels/:id/devices/:id/points)
- ✅ WebSocket 正确连接到 /api/ws/values
- ✅ 写入对话框发送正确的请求格式
- ✅ 所有数据字段名称正确映射
测试方法
- 启动后端:
go run cmd/main.go -config config_v2_three_level.yaml -
打开浏览器访问:
http://127.0.0.1:8080 - 验证:
- ✅ 采集通道列表加载成功 (无 404 错误)
- ✅ 能否点击通道进入设备视图
- ✅ 能否点击设备进入点位视图
- ✅ 点位数据能否实时更新 (WebSocket)
- ✅ 能否打开写入对话框并提交
架构对应
后端提供的 API
GET /api/channels # 采集通道列表
GET /api/channels/:channelId/devices # 指定通道下的设备列表
GET /api/channels/:channelId/devices/:deviceId/points # 指定设备下的点位数据
POST /api/write # 写入点位数据
WS /api/ws/values # 实时值订阅
前端现在正确调用
- ✅ 三级导航树: 通道 → 设备 → 点位
- ✅ 所有数据结构与后端保持一致
- ✅ WebSocket 消息格式与后端输出格式匹配
后续改进建议
- 添加通道启用/禁用切换功能
- 实现设备和点位的搜索功能
- 添加数据导出功能
- 实现告警阈值配置
- 添加历史数据查询
修复时间
- 诊断时间: 已完成
- 修复时间: 已完成
- 验证时间: 待测试