ETest-Vue-FastAPI/工单列表不显示问题诊断.md

4.7 KiB
Raw Blame History

工单列表不显示问题诊断

问题描述

数据库中有工单数据,但工单列表页面不显示。

诊断步骤

1. 检查数据库表结构

mysql -u root -p your_database < check_workorder_schema.sql

预期结果:

  • batch_id 字段类型应该是 BIGINT
  • batch_name 字段应该存在,类型为 VARCHAR(100)

2. 检查数据

从截图中看到:

  • batch_id 有值:1767883967097
  • batch_name 有值:批次-20260108225247
  • order_id 为 NULL未汇总的工单

3. 可能的原因

原因1查询条件过滤了所有工单

检查 test_work_order_dao.py 的查询条件:

# 这个条件会过滤掉已汇总的工单
TestWorkOrder.order_id.is_(None),

这是正确的,应该只显示未汇总的工单。

原因2JOIN 失败导致没有数据

如果某些 JOIN 的表没有对应数据,可能导致查询结果为空。

解决方案:已经将所有 join 改为 outerjoin

原因3前端查询参数问题

前端可能传递了错误的查询参数。

4. 快速修复步骤

步骤1更新旧数据的 batch_name如果需要

mysql -u root -p your_database < update_old_workorder_batch_name.sql

步骤2重启后端服务

# 停止后端服务
# 启动后端服务

步骤3清除浏览器缓存

  • Ctrl + Shift + RWindowsCmd + Shift + RMac
  • 或者打开开发者工具,右键刷新按钮,选择"清空缓存并硬性重新加载"

步骤4检查浏览器控制台

  1. 打开浏览器开发者工具F12
  2. 切换到 Console 标签
  3. 查看是否有 JavaScript 错误
  4. 切换到 Network 标签
  5. 刷新页面,查看 API 请求是否成功
  6. 点击工单列表的 API 请求,查看返回的数据

5. 调试 API 请求

查看请求参数

在 Network 标签中,找到工单列表的请求(通常是 /system/test_work_order/list),查看:

  • Request URL: 请求地址
  • Request Method: 应该是 GET 或 POST
  • Query Parameters: 查询参数
  • Response: 返回的数据

预期的 API 响应

{
  "code": 200,
  "msg": "success",
  "data": {
    "rows": [
      {
        "id": 742,
        "batchId": 1767883967097,
        "batchName": "批次-20260108225247",
        "testEutName": "SN003",
        "creatorName": "管理员",
        ...
      }
    ],
    "total": 28
  }
}

6. 常见问题

问题1API 返回空数组

原因: 查询条件过滤了所有数据 解决: 检查查询参数,确保没有传递错误的过滤条件

问题2API 返回错误

原因: 后端代码有问题 解决: 查看后端日志,找到具体错误信息

问题3API 返回数据,但前端不显示

原因: 前端字段映射错误 解决: 检查前端代码中的字段名是否正确camelCase

7. 验证字段映射

后端返回camelCase

{
  "batchId": 1767883967097,
  "batchName": "批次-20260108225247",
  "testEutName": "SN003"
}

前端使用

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

8. 手动测试 SQL 查询

-- 测试工单查询(模拟后端查询)
SELECT 
    tw.id,
    tw.batch_id,
    tw.batch_name,
    tw.name,
    tw.test_eut_id,
    tw.test_category_id,
    tw.creator,
    tw.create_time,
    te.sn AS test_eut_name,
    tc.name AS test_category_name
FROM test_work_order tw
LEFT JOIN test_eut te ON tw.test_eut_id = te.id
LEFT JOIN test_category tc ON tw.test_category_id = tc.id
WHERE tw.order_id IS NULL
ORDER BY tw.id DESC
LIMIT 10;

预期结果: 应该返回工单数据

9. 如果还是不显示

检查前端路由

确保访问的是正确的工单列表页面:

  • URL 应该是:/system/test_work_order

检查权限

确保当前用户有查看工单的权限。

检查分页

如果数据很多,可能在其他页,尝试:

  • 点击"下一页"
  • 修改每页显示数量
  • 使用搜索功能

快速检查清单

  • 执行了 fix_batch_id_bigint.sql(修改字段类型为 BIGINT
  • 执行了 add_workorder_batch_field.sql(添加 batch_name 字段)
  • 重启了后端服务
  • 清除了浏览器缓存
  • 检查了浏览器控制台是否有错误
  • 检查了 Network 标签中的 API 请求
  • 验证了 API 返回的数据格式
  • 确认了前端字段映射正确

相关文件

  • check_workorder_schema.sql - 检查表结构
  • update_old_workorder_batch_name.sql - 更新旧数据
  • 工单查询JOIN修复说明.md - JOIN 修复说明
  • 修复订单DAO中的test_order_id引用.md - DAO 修复说明

完成时间

2026-01-08 23:00