# 工单列表不显示问题诊断 ## 问题描述 数据库中有工单数据,但工单列表页面不显示。 ## 诊断步骤 ### 1. 检查数据库表结构 ```bash 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` 的查询条件: ```python # 这个条件会过滤掉已汇总的工单 TestWorkOrder.order_id.is_(None), ``` **这是正确的**,应该只显示未汇总的工单。 #### 原因2:JOIN 失败导致没有数据 如果某些 JOIN 的表没有对应数据,可能导致查询结果为空。 **解决方案**:已经将所有 `join` 改为 `outerjoin`。 #### 原因3:前端查询参数问题 前端可能传递了错误的查询参数。 ### 4. 快速修复步骤 #### 步骤1:更新旧数据的 batch_name(如果需要) ```bash mysql -u root -p your_database < update_old_workorder_batch_name.sql ``` #### 步骤2:重启后端服务 ```bash # 停止后端服务 # 启动后端服务 ``` #### 步骤3:清除浏览器缓存 - 按 `Ctrl + Shift + R`(Windows)或 `Cmd + Shift + R`(Mac) - 或者打开开发者工具,右键刷新按钮,选择"清空缓存并硬性重新加载" #### 步骤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 响应 ```json { "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) ```json { "batchId": 1767883967097, "batchName": "批次-20260108225247", "testEutName": "SN003" } ``` #### 前端使用 ```vue ``` ### 8. 手动测试 SQL 查询 ```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