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

187 lines
4.7 KiB
Markdown
Raw Normal View History

# 工单列表不显示问题诊断
## 问题描述
数据库中有工单数据,但工单列表页面不显示。
## 诊断步骤
### 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),
```
**这是正确的**,应该只显示未汇总的工单。
#### 原因2JOIN 失败导致没有数据
如果某些 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. 常见问题
#### 问题1API 返回空数组
**原因**: 查询条件过滤了所有数据
**解决**: 检查查询参数,确保没有传递错误的过滤条件
#### 问题2API 返回错误
**原因**: 后端代码有问题
**解决**: 查看后端日志,找到具体错误信息
#### 问题3API 返回数据,但前端不显示
**原因**: 前端字段映射错误
**解决**: 检查前端代码中的字段名是否正确camelCase
### 7. 验证字段映射
#### 后端返回camelCase
```json
{
"batchId": 1767883967097,
"batchName": "批次-20260108225247",
"testEutName": "SN003"
}
```
#### 前端使用
```vue
<el-table-column label="工单分组" prop="batchName" />
<el-table-column label="产品SN" prop="testEutName" />
```
### 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