# 工单页面数据不显示问题排查 ## 问题描述 工单页面刷新不出数据,但数据库中确实有工单记录。 ## 可能的原因 ### 原因 1:字段名称不匹配(已修复) - **旧字段**: `test_order_id` - **新字段**: `batch_id` - **状态**: ✅ 已在之前的修复中完成 ### 原因 2:浏览器缓存 前端代码已更新,但浏览器仍在使用旧的缓存代码。 ### 原因 3:后端服务未重启 DO 模型修改后(`name` 字段从 `String(20)` 改为 `String(200)`),后端服务需要重启。 ### 原因 4:数据问题 数据库中的工单数据可能有问题(如 `order_id` 不为 NULL)。 ## 诊断步骤 ### 步骤 1:验证数据库数据 ```bash mysql -u root -p your_database < verify_workorder_data.sql ``` **检查项**: - ✅ 是否有工单数据 - ✅ `batch_id` 和 `batch_name` 是否有值 - ✅ `order_id` 是否为 NULL(未汇总的工单) - ✅ `name` 字段是否完整(没有被截断) **预期结果**: ``` 工单ID | 批次ID | 批次名称 | 工单名称 | 订单ID -------|---------------|--------------------|-----------------------------|------- 745 | 1767886070328 | 批次-20260108232750 | SN0005-入库测试(PCBA)_DSM | NULL ``` ### 步骤 2:检查浏览器开发者工具 #### 2.1 打开开发者工具 按 `F12` 或右键 → 检查 #### 2.2 查看 Network 标签 1. 刷新工单列表页面 2. 找到 `/system/test_work_order/list` 请求 3. 查看 **Request** 和 **Response** **检查 Request(请求参数)**: ```json { "pageNum": 1, "pageSize": 10, "batchId": null, // 应该是 null,表示查询所有 "testStep": null } ``` **检查 Response(返回数据)**: ```json { "code": 200, "msg": "success", "data": { "rows": [ { "id": 745, "batchId": 1767886070328, "batchName": "批次-20260108232750", "name": "SN0005-入库测试(PCBA)_DSM", "testEutName": "SN0005", ... } ], "total": 1 } } ``` #### 2.3 查看 Console 标签 检查是否有 JavaScript 错误。 ### 步骤 3:清除浏览器缓存 - **Windows**: `Ctrl + Shift + R` - **Mac**: `Cmd + Shift + R` - **或**: 开发者工具 → Network → 勾选 "Disable cache" → 刷新 ### 步骤 4:重启后端服务 ```bash # 停止后端服务 # 启动后端服务 ``` **原因**: DO 模型修改后需要重启服务才能生效。 ## 常见问题和解决方案 ### 问题 1:API 返回空数组 **现象**: ```json { "code": 200, "data": { "rows": [], "total": 0 } } ``` **原因**: - 所有工单的 `order_id` 不为 NULL(已汇总) - 查询条件过滤了所有数据 **解决方案**: ```sql -- 检查工单的 order_id SELECT COUNT(*) AS 总数, COUNT(CASE WHEN order_id IS NULL THEN 1 END) AS 未汇总数量, COUNT(CASE WHEN order_id IS NOT NULL THEN 1 END) AS 已汇总数量 FROM test_work_order; ``` 如果所有工单都已汇总,需要重置: ```sql UPDATE test_work_order SET order_id = NULL WHERE id IN (选择要重置的工单ID); ``` ### 问题 2:API 返回 500 错误 **现象**: Network 标签显示 500 Internal Server Error **原因**: 后端代码有错误 **解决方案**: 1. 查看后端日志 2. 检查 DO 模型是否正确 3. 确认数据库字段类型是否匹配 ### 问题 3:前端显示字段错误 **现象**: API 返回数据正常,但前端不显示或显示错误 **原因**: 前端字段映射错误 **解决方案**: 检查前端代码中的字段名(应该是 camelCase): ```vue ``` ### 问题 4:路由参数问题 **现象**: 从订单页面跳转到工单页面时,工单列表为空 **原因**: 路由参数名称不匹配 **当前代码**: ```javascript watch: { '$route': { handler(to) { const orderId = to.query.orderId || to.params.orderId; if(orderId !== undefined && orderId !== null) { this.queryParams.batchId = orderId; // 将 orderId 赋值给 batchId this.getList(); } } } } ``` **说明**: - 这段代码是为了兼容从订单页面跳转过来的情况 - 如果 URL 中有 `orderId` 参数,就用它来过滤工单 - 如果没有参数,就显示所有未汇总的工单 **如果需要修改**: ```javascript // 方案 1:同时支持 orderId 和 batchId const id = to.query.batchId || to.query.orderId || to.params.batchId || to.params.orderId; if(id !== undefined && id !== null) { this.queryParams.batchId = id; this.getList(); } // 方案 2:只支持 batchId const batchId = to.query.batchId || to.params.batchId; if(batchId !== undefined && batchId !== null) { this.queryParams.batchId = batchId; this.getList(); } ``` ## 完整的修复流程 ### 1. 验证数据库 ```bash mysql -u root -p your_database < verify_workorder_data.sql ``` 确认: - ✅ 有工单数据 - ✅ `batch_id` 和 `batch_name` 有值 - ✅ `order_id` 为 NULL ### 2. 重启后端服务 ```bash # 停止后端服务 # 启动后端服务 ``` ### 3. 清除浏览器缓存 - 按 `Ctrl + Shift + R`(Windows)或 `Cmd + Shift + R`(Mac) - 或者在开发者工具中勾选 "Disable cache" ### 4. 刷新工单列表页面 直接访问工单列表页面(不带任何参数): ``` http://localhost:8080/#/system/test_work_order ``` ### 5. 检查开发者工具 - **Network**: 查看 API 请求和响应 - **Console**: 查看是否有 JavaScript 错误 ## 快速检查清单 - [ ] 数据库中有工单数据 - [ ] 工单的 `order_id` 为 NULL - [ ] 工单的 `batch_id` 和 `batch_name` 有值 - [ ] 后端服务已重启 - [ ] 浏览器缓存已清除 - [ ] API 请求返回 200 状态码 - [ ] API 响应中有数据(`rows` 不为空) - [ ] 浏览器 Console 没有错误 ## 相关文件 - `verify_workorder_data.sql` - 验证工单数据脚本 ✅ - `test_work_order_dao.py` - 工单 DAO(查询逻辑) - `test_work_order/index.vue` - 工单列表前端页面 - `工单列表显示修复完成.md` - 之前的修复说明 ## 完成时间 2026-01-08 23:45