CostPrediction/docs/dev/debug.md

93 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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