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