# 工单显示问题最终诊断
## 问题描述
- 数据库中有工单数据
- 执行了 `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
```
后端返回的字段名应该是 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)
- 产品SN(testEutName)
- 创建人(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