# 奖学金申请列表显示问题排查手册 ## 📅 创建时间 - **日期**: 2025-01-26 23:50:00 - **适用场景**: 前台奖学金申请列表页面无法显示数据 - **操作人**: 系统管理员 --- ## 🔍 问题现象 - 访问前台奖学金申请列表页面 - 页面加载正常,但列表中没有显示任何申请记录 - 可能显示"暂无数据"或空白列表 --- ## 📋 排查步骤 ### 步骤1: 检查浏览器网络请求 ⭐⭐⭐ **重要性**: ⭐⭐⭐ (最重要,优先检查) 1. **打开浏览器开发者工具** - 按 `F12` 或右键选择"检查" - 切换到 `Network` (网络) 标签 2. **刷新奖学金申请列表页面** - 观察网络请求 - 查找 `/jcbt/scholarshipApplication/list` 请求 3. **检查API请求状态** ``` ✅ 状态码 200: API调用成功 ❌ 状态码 403: 权限不足 → 跳转到步骤4 ❌ 状态码 401: 未登录 → 跳转到步骤3 ❌ 状态码 500: 服务器错误 → 检查后端日志 ``` 4. **检查响应数据** - 点击该请求,查看 `Response` 标签 - 检查返回的数据结构: ```json { "code": 200, "msg": "操作成功", "rows": [], // 如果为空数组,说明查询到0条数据 "total": 0 } ``` ### 步骤2: 检查用户登录状态 ⭐⭐ **重要性**: ⭐⭐ (如果步骤1发现401错误) 1. **确认是否已登录** - 检查页面顶部是否显示用户信息 - 查看浏览器本地存储中是否有Token 2. **重新登录** - 退出当前账号 - 使用正确的账号密码重新登录 - 再次访问申请列表页面 ### 步骤3: 检查用户权限配置 ⭐⭐ **重要性**: ⭐⭐ (如果步骤1发现403错误) 1. **确认当前登录用户角色** - 记录当前登录的用户名和角色 2. **检查权限配置** - 登录后台管理系统 - 进入 系统管理 → 角色管理 - 找到当前用户的角色,点击"修改" - 在权限配置中确认是否勾选了: ``` ☑️ 家长综合信息服务平台 ☑️ 学生奖学金管理 ☑️ 奖学金申请记录 ☑️ 奖学金申请记录查询 (jcbt:scholarshipApplication:list) ``` 3. **如果权限缺失** - 勾选相应权限 - 点击"提交"保存 - 让用户重新登录前台系统 ### 步骤4: 检查数据库中的实际数据 ⭐⭐⭐ **重要性**: ⭐⭐⭐ (如果API返回空数组) **方法A: 使用数据库管理工具** ```sql -- 1. 检查总记录数 SELECT COUNT(*) as total_count FROM jcbt_scholarship_application; -- 2. 检查未删除的记录数 SELECT COUNT(*) as active_count FROM jcbt_scholarship_application WHERE deleted = 0; -- 3. 检查申请类型分布 SELECT application_type, COUNT(*) as count FROM jcbt_scholarship_application GROUP BY application_type; -- 4. 检查最近的5条记录 SELECT id, student_name, application_type, status, deleted, create_time FROM jcbt_scholarship_application ORDER BY create_time DESC LIMIT 5; ``` **方法B: 使用预制检查脚本** ```bash # 在项目根目录执行 mysql -u数据库用户名 -p数据库密码 hzdyjs_xg < docs/设计文档/database/奖学金申请数据检查脚本.sql ``` **检查结果分析**: - **总记录数为0**: 说明数据库中确实没有申请数据 → 跳转到步骤6 - **有记录但deleted=1**: 说明数据被软删除了 → 跳转到步骤7 - **有记录但application_type='RECOMMEND'**: 说明数据修复脚本没执行 → 跳转到步骤5 ### 步骤5: 执行数据修复脚本 ⭐⭐ **重要性**: ⭐⭐ (如果发现RECOMMEND类型数据) ```bash # 执行申请类型修复脚本 mysql -u数据库用户名 -p数据库密码 hzdyjs_xg < docs/设计文档/database/奖学金申请列表数据修复脚本.sql # 重启后端服务 cd backend mvn clean compile # 然后重启应用服务 ``` ### 步骤6: 创建测试数据 ⭐ **重要性**: ⭐ (如果数据库确实没有数据) ```sql -- 创建测试申请记录 INSERT INTO jcbt_scholarship_application ( id, batch_id, scholarship_type_id, student_code, student_name, student_id, dept_id, class_id, application_type, status, deleted, tenant_id, create_time, create_by ) VALUES ( UNIX_TIMESTAMP() * 1000, 1, 1, 'TEST001', '测试学生', 1, 100, 200, 'TEACHER_RECOMMEND', 'PENDING', 0, 1, NOW(), 1 ); ``` ### 步骤7: 检查多租户配置 ⭐ **重要性**: ⭐ (如果数据存在但tenant_id不匹配) 1. **确认当前用户的租户ID** - 在前台系统中查看用户信息 - 或在数据库中查询: ```sql SELECT tenant_id FROM sys_user WHERE user_name = '当前登录用户名'; ``` 2. **检查申请数据的租户ID** ```sql SELECT DISTINCT tenant_id, COUNT(*) as count FROM jcbt_scholarship_application WHERE deleted = 0 GROUP BY tenant_id; ``` 3. **如果租户ID不匹配** - 联系系统管理员调整数据或用户配置 ### 步骤8: 检查前端查询参数 ⭐ **重要性**: ⭐ (如果上述都正常但仍无数据) 在浏览器控制台中检查实际发送的查询参数: ```javascript // 在申请列表页面的控制台中执行 console.log('查询参数:', window.location.search); ``` 常见问题: - 状态过滤条件过于严格 - 时间范围过滤导致数据被过滤掉 - 其他业务字段过滤条件 --- ## 🎯 快速检查清单 ### ✅ 5分钟快速检查 1. [ ] 浏览器F12检查API请求状态码是否为200 2. [ ] 检查API响应中rows数组是否为空 3. [ ] 确认用户已正常登录 4. [ ] 确认用户有查询权限 ### ✅ 10分钟深入检查 5. [ ] 数据库中确实存在申请记录且deleted=0 6. [ ] 申请记录的application_type为正确值(非RECOMMEND) 7. [ ] 申请记录的tenant_id与当前用户匹配 8. [ ] 后端服务已重启且代码修复生效 --- ## 🚨 常见问题和解决方案 ### 问题1: API返回403权限不足 **原因**: 用户缺少查询权限 **解决**: 在角色管理中为用户角色添加 `jcbt:scholarshipApplication:list` 权限 ### 问题2: API返回空数组但数据库有数据 **原因**: 可能是申请类型值错误(RECOMMEND vs TEACHER_RECOMMEND) **解决**: 执行数据修复脚本 ### 问题3: 数据库连接失败 **原因**: 数据库用户名密码错误或服务未启动 **解决**: 检查数据库配置和服务状态 ### 问题4: 多租户数据隔离 **原因**: 当前用户的tenant_id与数据记录的tenant_id不匹配 **解决**: 检查和调整租户配置 --- ## 📞 技术支持 如果按照上述步骤仍无法解决问题,请收集以下信息: 1. **前端错误信息** - 浏览器控制台错误日志 - Network面板中API请求的完整信息 2. **后端日志信息** - 后端服务日志中与奖学金申请相关的错误 3. **数据库检查结果** - 奖学金申请表的记录数量和状态分布 4. **用户和权限信息** - 当前登录用户名和角色 - 用户的权限配置情况 --- **💡 提示**: 按照步骤顺序执行检查,大多数问题可以在步骤1-4中发现和解决。