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