CostPrediction/docs/dev/debug.md

2.5 KiB
Raw Blame History

调试记录

数据管理页面问题

问题描述

在数据管理页面中,火箭炮列表点击详情按钮时,请求了错误的设备 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: {...}
  1. 问题原因:

    • 后端返回的数据中,火箭炮和巡飞弹的 ID 范围重叠
    • 火箭炮的 ID 应该从 1001 开始
    • 巡飞弹的 ID 从 1 开始
    • 前端没有正确处理设备 ID 的映射
  2. 数据流分析:

    • 前端发送请求:GET /api/data/details/4
    • 后端查询数据库:SELECT * FROM equipment WHERE id = 4
    • 返回了 ID=4 的巡飞弹数据
    • 前端显示了错误的装备类型数据

新增问题:数据显示不完整

  1. 问题描述:

    • 在数据管理页面,火箭炮和巡飞弹的表格中,除了长度和重量,其他参数列都没有数据显示
    • 详情页面能正确显示所有数据
  2. 问题原因:

    • 后端返回的数据中,特有参数以逗号分隔的字符串形式存储在 specific_params 字段中
    • 前端需要解析这个字符串,将其转换为对象格式才能正确显示
  3. 解决方案:

    • 在前端添加特有参数字符串的解析函数
    • 将解析后的参数合并到数据对象中
    • 确保表格和详情页面使用相同的数据格式
  4. 代码修改:

// 解析特有参数字符串
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 {}
}
  1. 验证方法:
    • 检查原始数据格式
    • 验证参数解析结果
    • 确认表格显示完整
    • 对比详情页面数据

最佳实践

  1. 数据处理:

    • 在数据加载时进行参数解析
    • 保持数据格式的一致性
    • 添加数据验证和错误处理
  2. 错误处理:

    • 添加详细的日志记录
    • 提供清晰的错误提示
    • 实现优雅的错误恢复
  3. 调试方法:

    • 使用日志跟踪数据流
    • 验证数据一致性
    • 检查类型匹配