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

228 lines
5.0 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.

# "测试中"页面为空问题诊断
## 问题描述
- 点击"测试中"按钮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