ETest-Vue-FastAPI/工单显示问题最终诊断.md

5.8 KiB
Raw Blame History

工单显示问题最终诊断

问题描述

  • 数据库中有工单数据
  • 执行了 fix_workorder_name_length.sql 修复了字段长度
  • 工单页面仍然不显示数据

已完成的修复

数据库字段 name 从 VARCHAR(20) 扩展到 VARCHAR(200) DO 模型 name 从 String(20) 改为 String(200) DAO 层所有 JOIN 改为 LEFT JOIN DAO 层所有字段添加了 .label()

最可能的原因

1. 后端服务未重启

可能性: 90%

原因:

  • 修改了 DO 模型test_work_order_do.py
  • Python 不会自动重新加载模型定义
  • 旧的模型定义仍在内存中

解决方案:

# 停止后端服务(根据你的启动方式)
# 方式1: 如果用 Ctrl+C 停止
Ctrl + C

# 方式2: 如果是后台运行
ps aux | grep python
kill -9 <进程ID>

# 重新启动后端服务
cd ruoyi-fastapi-backend
python main.py
# 或
uvicorn main:app --reload --port 9099

验证方法:

  1. 重启后端服务
  2. 刷新浏览器页面Ctrl + Shift + R
  3. 查看工单列表

2. 浏览器缓存问题

可能性: 5%

解决方案:

  • Windows: Ctrl + Shift + R
  • Mac: Cmd + Shift + R
  • 或清除浏览器缓存

3. API 请求失败

可能性: 3%

诊断方法:

  1. 打开浏览器开发者工具F12
  2. 切换到 Network 标签
  3. 刷新工单列表页面
  4. 找到 /system/test_work_order/list 请求
  5. 查看状态码和响应内容

可能的状态码:

  • 200: 请求成功,查看响应内容
  • 401: 未登录,重新登录
  • 403: 权限不足,检查用户权限
  • 500: 服务器错误,查看后端日志

4. 前端字段映射错误

可能性: 2%

检查点: 前端使用的字段名camelCase:

<el-table-column label="工单分组" prop="batchName" />
<el-table-column label="产品SN" prop="testEutName" />

后端返回的字段名应该是 camelCase通过 Pydantic 自动转换):

{
  "batchId": 1767886248798,
  "batchName": "批次-20260108233048",
  "testEutName": "SN0001"
}

诊断步骤

步骤 1: 执行数据库诊断脚本

# 执行诊断脚本
mysql -u root -p < diagnose_workorder_display.sql

这个脚本会检查:

  • 数据库中是否有工单数据
  • name 字段长度是否已修复
  • batch_id 字段类型是否正确
  • 模拟后端查询是否能返回数据
  • 是否有孤立的工单(关联数据不存在)

步骤 2: 重启后端服务(必须!)

# 停止后端服务
# 启动后端服务
cd ruoyi-fastapi-backend
python main.py

步骤 3: 清除浏览器缓存并刷新

Ctrl + Shift + R

步骤 4: 检查浏览器开发者工具

4.1 打开开发者工具

F12

4.2 查看 Network 标签

  1. 切换到 Network 标签
  2. 刷新工单列表页面
  3. 找到 /system/test_work_order/list 请求

4.3 查看请求详情

请求参数Request:

{
  "pageNum": 1,
  "pageSize": 10,
  "testStep": null
}

响应内容Response:

{
  "code": 200,
  "msg": "success",
  "data": {
    "rows": [
      {
        "id": 821,
        "batchId": 1767886248798,
        "batchName": "批次-20260108233048",
        "name": "SN0001-出库测试PCBA",
        "testEutName": "SN0001",
        ...
      }
    ],
    "total": 10
  }
}

4.4 查看 Console 标签

检查是否有 JavaScript 错误

步骤 5: 查看后端日志

如果 API 返回 500 错误,查看后端日志:

# 查看后端日志
tail -f logs/app.log
# 或
tail -f logs/error.log

常见错误和解决方案

错误 1: 后端启动失败

错误信息:

ImportError: cannot import name 'TestWorkOrder'

原因: DO 模型有语法错误

解决方案: 检查 test_work_order_do.py 文件语法

错误 2: API 返回 500 错误

错误信息:

{
  "code": 500,
  "msg": "Internal Server Error"
}

可能原因:

  1. DO 模型字段类型不匹配
  2. DAO 查询有错误
  3. 数据库连接失败

解决方案: 查看后端日志,找到具体错误信息

错误 3: API 返回空数组

响应:

{
  "code": 200,
  "data": {
    "rows": [],
    "total": 0
  }
}

可能原因:

  1. 查询条件过滤了所有数据
  2. order_id IS NULL 条件过滤了所有数据

解决方案: 执行 SQL 验证数据:

SELECT COUNT(*) FROM test_work_order WHERE order_id IS NULL;

错误 4: 前端显示空白

现象: API 返回数据,但前端不显示

可能原因:

  1. 字段映射错误
  2. JavaScript 错误
  3. 数据格式不正确

解决方案:

  1. 查看 Console 是否有错误
  2. getList() 方法中添加 console.log
  3. 检查字段名是否匹配

快速修复清单

  • 1. 执行 diagnose_workorder_display.sql 验证数据
  • 2. 重启后端服务(最重要!
  • 3. 清除浏览器缓存Ctrl + Shift + R
  • 4. 打开开发者工具F12
  • 5. 查看 Network 标签的 API 响应
  • 6. 查看 Console 标签的错误信息
  • 7. 如果还不行,查看后端日志

预期结果

修复后,工单列表应该显示:

  • 工单分组batchName
  • 产品SNtestEutName
  • 创建人creatorName
  • 测试类别testCategoryName
  • 测试项testItemName
  • 测试人员、一审人员等

需要提供的信息

如果问题仍未解决,请提供:

  1. 后端服务状态

    • 是否已重启?
    • 启动时是否有错误?
  2. 浏览器开发者工具截图

    • Network 标签的 /system/test_work_order/list 请求
    • Response 内容
    • Console 标签的错误信息
  3. 数据库诊断结果

    • 执行 diagnose_workorder_display.sql 的输出
  4. 后端日志

    • 最近的错误日志
    • API 请求日志

完成时间

2026-01-09 00:15