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
|