4.7 KiB
4.7 KiB
工单列表不显示问题诊断
问题描述
数据库中有工单数据,但工单列表页面不显示。
诊断步骤
1. 检查数据库表结构
mysql -u root -p your_database < check_workorder_schema.sql
预期结果:
batch_id字段类型应该是BIGINTbatch_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),
这是正确的,应该只显示未汇总的工单。
原因2:JOIN 失败导致没有数据
如果某些 JOIN 的表没有对应数据,可能导致查询结果为空。
解决方案:已经将所有 join 改为 outerjoin。
原因3:前端查询参数问题
前端可能传递了错误的查询参数。
4. 快速修复步骤
步骤1:更新旧数据的 batch_name(如果需要)
mysql -u root -p your_database < update_old_workorder_batch_name.sql
步骤2:重启后端服务
# 停止后端服务
# 启动后端服务
步骤3:清除浏览器缓存
- 按
Ctrl + Shift + R(Windows)或Cmd + Shift + R(Mac) - 或者打开开发者工具,右键刷新按钮,选择"清空缓存并硬性重新加载"
步骤4:检查浏览器控制台
- 打开浏览器开发者工具(F12)
- 切换到 Console 标签
- 查看是否有 JavaScript 错误
- 切换到 Network 标签
- 刷新页面,查看 API 请求是否成功
- 点击工单列表的 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. 常见问题
问题1:API 返回空数组
原因: 查询条件过滤了所有数据 解决: 检查查询参数,确保没有传递错误的过滤条件
问题2:API 返回错误
原因: 后端代码有问题 解决: 查看后端日志,找到具体错误信息
问题3:API 返回数据,但前端不显示
原因: 前端字段映射错误 解决: 检查前端代码中的字段名是否正确(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