ETest-Vue-FastAPI/工单显示问题最终诊断.md

277 lines
5.8 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.

# 工单显示问题最终诊断
## 问题描述
- 数据库中有工单数据
- 执行了 `fix_workorder_name_length.sql` 修复了字段长度
- 工单页面仍然不显示数据
## 已完成的修复
✅ 数据库字段 `name` 从 VARCHAR(20) 扩展到 VARCHAR(200)
✅ DO 模型 `name` 从 String(20) 改为 String(200)
✅ DAO 层所有 JOIN 改为 LEFT JOIN
✅ DAO 层所有字段添加了 `.label()`
## 最可能的原因
### 1. 后端服务未重启 ⭐⭐⭐⭐⭐
**可能性**: 90%
**原因**:
- 修改了 DO 模型test_work_order_do.py
- Python 不会自动重新加载模型定义
- 旧的模型定义仍在内存中
**解决方案**:
```bash
# 停止后端服务(根据你的启动方式)
# 方式1: 如果用 Ctrl+C 停止
Ctrl + C
# 方式2: 如果是后台运行
ps aux | grep python
kill -9 <进程ID>
# 重新启动后端服务
cd ruoyi-fastapi-backend
python main.py
# 或
uvicorn main:app --reload --port 9099
```
**验证方法**:
1. 重启后端服务
2. 刷新浏览器页面Ctrl + Shift + R
3. 查看工单列表
### 2. 浏览器缓存问题 ⭐⭐⭐
**可能性**: 5%
**解决方案**:
- Windows: `Ctrl + Shift + R`
- Mac: `Cmd + Shift + R`
- 或清除浏览器缓存
### 3. API 请求失败 ⭐⭐
**可能性**: 3%
**诊断方法**:
1. 打开浏览器开发者工具F12
2. 切换到 **Network** 标签
3. 刷新工单列表页面
4. 找到 `/system/test_work_order/list` 请求
5. 查看状态码和响应内容
**可能的状态码**:
- **200**: 请求成功,查看响应内容
- **401**: 未登录,重新登录
- **403**: 权限不足,检查用户权限
- **500**: 服务器错误,查看后端日志
### 4. 前端字段映射错误 ⭐
**可能性**: 2%
**检查点**:
前端使用的字段名camelCase:
```vue
<el-table-column label="工单分组" prop="batchName" />
<el-table-column label="产品SN" prop="testEutName" />
```
后端返回的字段名应该是 camelCase通过 Pydantic 自动转换):
```json
{
"batchId": 1767886248798,
"batchName": "批次-20260108233048",
"testEutName": "SN0001"
}
```
## 诊断步骤
### 步骤 1: 执行数据库诊断脚本
```bash
# 执行诊断脚本
mysql -u root -p < diagnose_workorder_display.sql
```
这个脚本会检查:
- 数据库中是否有工单数据
- name 字段长度是否已修复
- batch_id 字段类型是否正确
- 模拟后端查询是否能返回数据
- 是否有孤立的工单(关联数据不存在)
### 步骤 2: 重启后端服务(必须!)
```bash
# 停止后端服务
# 启动后端服务
cd ruoyi-fastapi-backend
python main.py
```
### 步骤 3: 清除浏览器缓存并刷新
```
Ctrl + Shift + R
```
### 步骤 4: 检查浏览器开发者工具
#### 4.1 打开开发者工具
**F12**
#### 4.2 查看 Network 标签
1. 切换到 **Network** 标签
2. 刷新工单列表页面
3. 找到 `/system/test_work_order/list` 请求
#### 4.3 查看请求详情
**请求参数**Request:
```json
{
"pageNum": 1,
"pageSize": 10,
"testStep": null
}
```
**响应内容**Response:
```json
{
"code": 200,
"msg": "success",
"data": {
"rows": [
{
"id": 821,
"batchId": 1767886248798,
"batchName": "批次-20260108233048",
"name": "SN0001-出库测试PCBA",
"testEutName": "SN0001",
...
}
],
"total": 10
}
}
```
#### 4.4 查看 Console 标签
检查是否有 JavaScript 错误
### 步骤 5: 查看后端日志
如果 API 返回 500 错误,查看后端日志:
```bash
# 查看后端日志
tail -f logs/app.log
# 或
tail -f logs/error.log
```
## 常见错误和解决方案
### 错误 1: 后端启动失败
**错误信息**:
```
ImportError: cannot import name 'TestWorkOrder'
```
**原因**: DO 模型有语法错误
**解决方案**:
检查 `test_work_order_do.py` 文件语法
### 错误 2: API 返回 500 错误
**错误信息**:
```json
{
"code": 500,
"msg": "Internal Server Error"
}
```
**可能原因**:
1. DO 模型字段类型不匹配
2. DAO 查询有错误
3. 数据库连接失败
**解决方案**:
查看后端日志,找到具体错误信息
### 错误 3: API 返回空数组
**响应**:
```json
{
"code": 200,
"data": {
"rows": [],
"total": 0
}
}
```
**可能原因**:
1. 查询条件过滤了所有数据
2. `order_id IS NULL` 条件过滤了所有数据
**解决方案**:
执行 SQL 验证数据:
```sql
SELECT COUNT(*) FROM test_work_order WHERE order_id IS NULL;
```
### 错误 4: 前端显示空白
**现象**: API 返回数据,但前端不显示
**可能原因**:
1. 字段映射错误
2. JavaScript 错误
3. 数据格式不正确
**解决方案**:
1. 查看 Console 是否有错误
2.`getList()` 方法中添加 `console.log`
3. 检查字段名是否匹配
## 快速修复清单
- [ ] 1. 执行 `diagnose_workorder_display.sql` 验证数据
- [ ] 2. 重启后端服务(**最重要!**
- [ ] 3. 清除浏览器缓存Ctrl + Shift + R
- [ ] 4. 打开开发者工具F12
- [ ] 5. 查看 Network 标签的 API 响应
- [ ] 6. 查看 Console 标签的错误信息
- [ ] 7. 如果还不行,查看后端日志
## 预期结果
修复后,工单列表应该显示:
- 工单分组batchName
- 产品SNtestEutName
- 创建人creatorName
- 测试类别testCategoryName
- 测试项testItemName
- 测试人员、一审人员等
## 需要提供的信息
如果问题仍未解决,请提供:
1. **后端服务状态**
- 是否已重启?
- 启动时是否有错误?
2. **浏览器开发者工具截图**
- Network 标签的 `/system/test_work_order/list` 请求
- Response 内容
- Console 标签的错误信息
3. **数据库诊断结果**
- 执行 `diagnose_workorder_display.sql` 的输出
4. **后端日志**
- 最近的错误日志
- API 请求日志
## 完成时间
2026-01-09 00:15