ETest-Vue-FastAPI/测试中页面为空问题诊断.md

228 lines
5.0 KiB
Markdown
Raw Permalink Normal View History

# "测试中"页面为空问题诊断
## 问题描述
- 点击"测试中"按钮testStep = 1
- 页面显示空白,没有工单数据
## 可能的原因
### 1. 数据库中没有 test_step = 1 的工单 ⭐⭐⭐⭐⭐
**可能性**: 95%
**原因**:
- 新创建的工单默认 `test_step = 0`(待领取)或 `test_step = 1`(测试中)
- 如果所有工单都是刚创建的,可能都还在"待领取"状态
- 需要手动将工单状态改为"测试中"
**验证方法**:
```sql
-- 执行这个查询
SELECT test_step, COUNT(*)
FROM test_work_order
WHERE order_id IS NULL
GROUP BY test_step;
```
**解决方案**:
如果确实没有 test_step = 1 的工单,有两个选择:
1. 手动更新某些工单的状态为"测试中"
2. 点击"待领取"或"全部工单"按钮查看其他状态的工单
### 2. 新创建的工单 test_step 默认值不正确 ⭐⭐⭐
**可能性**: 3%
**原因**:
- 样品生成工单时,`test_step` 可能设置为 0待领取
- 需要检查工单创建逻辑
**验证方法**:
```sql
-- 查看最近创建的工单的 test_step 值
SELECT id, name, test_step, create_time
FROM test_work_order
WHERE order_id IS NULL
ORDER BY id DESC
LIMIT 10;
```
### 3. 后端查询逻辑有问题 ⭐⭐
**可能性**: 2%
**原因**:
- DAO 层的 WHERE 条件可能有问题
- test_step 的比较逻辑可能不正确
**验证方法**:
查看 DAO 代码中的 WHERE 条件:
```python
TestWorkOrder.test_step == query_object.test_step if query_object.test_step is not None else True
```
这个逻辑是正确的,只有当 `test_step is not None` 时才会过滤。
## 诊断步骤
### 步骤 1: 执行 SQL 诊断脚本
```bash
mysql -u root -p < check_teststep_data.sql
```
这个脚本会告诉你:
- 各个测试步骤有多少工单
- 是否有 test_step = 1 的工单
- 最近创建的工单的 test_step 值
### 步骤 2: 查看诊断结果
#### 情况 A: 没有 test_step = 1 的工单
**输出示例**:
```
test_step | count
----------|------
0 | 10
NULL | 0
```
**说明**: 所有工单都在"待领取"状态,没有"测试中"的工单
**解决方案**:
1. 点击"待领取"按钮查看工单
2. 或者手动更新某些工单的状态:
```sql
-- 将前 5 个工单改为"测试中"
UPDATE test_work_order
SET test_step = 1
WHERE order_id IS NULL
ORDER BY id DESC
LIMIT 5;
```
#### 情况 B: 有 test_step = 1 的工单,但页面不显示
**输出示例**:
```
test_step | count
----------|------
0 | 5
1 | 5
```
**说明**: 数据库中有"测试中"的工单,但前端不显示
**解决方案**:
1. 检查浏览器开发者工具F12
2. 查看 Network 标签的 API 请求
3. 查看 Console 标签的错误信息
### 步骤 3: 检查浏览器开发者工具
#### 3.1 打开开发者工具
**F12**
#### 3.2 查看 Network 标签
1. 切换到 **Network** 标签
2. 点击"测试中"按钮
3. 找到 `/system/test_work_order/list` 请求
#### 3.3 查看请求参数
**Request Query String**:
```
pageNum: 1
pageSize: 10
testStep: 1
```
确认 `testStep` 参数是 `1`
#### 3.4 查看响应内容
**正常响应**(有数据):
```json
{
"code": 200,
"data": {
"rows": [
{
"id": 821,
"testStep": 1,
"name": "SN0001-出库测试PCBA",
...
}
],
"total": 5
}
}
```
**异常响应**(空数据):
```json
{
"code": 200,
"data": {
"rows": [],
"total": 0
}
}
```
如果是空数据,说明数据库中确实没有 test_step = 1 的工单。
## 快速解决方案
### 方案 1: 查看其他状态的工单
点击其他按钮:
- "全部工单" - 查看所有工单
- "待领取" - 查看 test_step = 0 的工单
### 方案 2: 手动更新工单状态
如果你想测试"测试中"页面,可以手动更新一些工单:
```sql
-- 将最近的 5 个工单改为"测试中"
UPDATE test_work_order
SET test_step = 1
WHERE order_id IS NULL
AND test_step = 0
ORDER BY id DESC
LIMIT 5;
```
### 方案 3: 修改工单创建逻辑
如果你希望新创建的工单默认就是"测试中"状态,需要修改样品生成工单的代码:
**文件**: `warehouse_sample_service.py`
找到创建工单的代码,将 `test_step` 设置为 1
```python
work_order = Test_work_orderModel(
# ... 其他字段
test_step=1, # 改为 1测试中而不是 0待领取
# ...
)
```
## 预期结果
修复后:
- 点击"待领取"应该能看到 test_step = 0 的工单
- 点击"测试中"应该能看到 test_step = 1 的工单
- 点击"全部工单"应该能看到所有工单
## 需要提供的信息
如果问题仍未解决,请提供:
1. **SQL 诊断结果**
```bash
mysql -u root -p < check_teststep_data.sql
```
2. **浏览器 Network 标签截图**
- 点击"测试中"按钮
- 查看 `/system/test_work_order/list` 的请求参数和响应
3. **点击"全部工单"按钮的结果**
- 是否能看到工单?
- 这些工单的 test_step 值是多少?
## 完成时间
2026-01-09 00:30