2.5 KiB
2.5 KiB
调试记录
数据管理页面问题
问题描述
在数据管理页面中,火箭炮列表点击详情按钮时,请求了错误的设备 ID,导致显示了巡飞弹的数据。
问题分析
- 日志记录:
INFO:src.routes:Getting details for equipment ID: 4
INFO:src.routes:Equipment type: 巡飞弹
INFO:src.routes:Found equipment details: Hero-30
INFO:src.routes:Custom params: {...}
-
问题原因:
- 后端返回的数据中,火箭炮和巡飞弹的 ID 范围重叠
- 火箭炮的 ID 应该从 1001 开始
- 巡飞弹的 ID 从 1 开始
- 前端没有正确处理设备 ID 的映射
-
数据流分析:
- 前端发送请求:
GET /api/data/details/4 - 后端查询数据库:
SELECT * FROM equipment WHERE id = 4 - 返回了 ID=4 的巡飞弹数据
- 前端显示了错误的装备类型数据
- 前端发送请求:
新增问题:数据显示不完整
-
问题描述:
- 在数据管理页面,火箭炮和巡飞弹的表格中,除了长度和重量,其他参数列都没有数据显示
- 详情页面能正确显示所有数据
-
问题原因:
- 后端返回的数据中,特有参数以逗号分隔的字符串形式存储在
specific_params字段中 - 前端需要解析这个字符串,将其转换为对象格式才能正确显示
- 后端返回的数据中,特有参数以逗号分隔的字符串形式存储在
-
解决方案:
- 在前端添加特有参数字符串的解析函数
- 将解析后的参数合并到数据对象中
- 确保表格和详情页面使用相同的数据格式
-
代码修改:
// 解析特有参数字符串
const parseSpecificParams = (paramsStr, type) => {
if (!paramsStr) return {}
const values = paramsStr.split(',')
if (type === '火箭炮') {
return {
firing_angle_horizontal: values[0],
firing_angle_vertical: values[1],
// ... 其他火箭炮特有参数
}
} else if (type === '巡飞弹') {
return {
wingspan_m: values[0],
warhead_weight_kg: values[1],
// ... 其他巡飞弹特有参数
}
}
return {}
}
- 验证方法:
- 检查原始数据格式
- 验证参数解析结果
- 确认表格显示完整
- 对比详情页面数据
最佳实践
-
数据处理:
- 在数据加载时进行参数解析
- 保持数据格式的一致性
- 添加数据验证和错误处理
-
错误处理:
- 添加详细的日志记录
- 提供清晰的错误提示
- 实现优雅的错误恢复
-
调试方法:
- 使用日志跟踪数据流
- 验证数据一致性
- 检查类型匹配