277 lines
5.8 KiB
Markdown
277 lines
5.8 KiB
Markdown
# 工单显示问题最终诊断
|
||
|
||
## 问题描述
|
||
- 数据库中有工单数据
|
||
- 执行了 `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)
|
||
- 产品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
|