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

187 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 工单列表不显示问题诊断
## 问题描述
数据库中有工单数据,但工单列表页面不显示。
## 诊断步骤
### 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