9.0 KiB
9.0 KiB
✅ 出国登记选项卡数据显示问题修复完成
📋 修复时间
2025-10-11
🐛 问题描述
修复出国登记数据筛选后,发现两个选项卡都不显示列表数据了。
🔍 问题原因分析
根本原因
前端状态选项定义与数据库字典不一致!
1. 数据库中的正确定义(rs_overseas_registration_status)
0 = 待审核 (warning - 橙色)
1 = 已通过 (success - 绿色)
2 = 已拒绝 (danger - 红色)
3 = 已取消 (info - 灰色)
4 = 已完成 (primary - 蓝色)
2. 前端错误的定义(修复前)
const statusOptions = ref([
{ label: '草稿', value: '0' }, // ❌ 错误:数据库中0是待审核
{ label: '待审核', value: '1' }, // ❌ 错误:数据库中1是已通过
{ label: '已通过', value: '2' }, // ❌ 错误:数据库中2是已拒绝
{ label: '已拒绝', value: '3' } // ❌ 错误:数据库中3是已取消
]);
3. 问题影响
- 前端查询
status=0(想查待审核),但显示为"草稿" - 前端查询
status=1(想查已通过),但显示为"待审核" - 状态值与标签完全错位
- 查询条件与数据库数据不匹配,导致无数据返回
🔧 修复内容
1. 修复状态选项定义
文件位置:web/src/views/rs/overseas-registration/index.vue (第491-497行)
修复前:
const statusOptions = ref([
{ label: '草稿', value: '0' },
{ label: '待审核', value: '1' },
{ label: '已通过', value: '2' },
{ label: '已拒绝', value: '3' }
]);
修复后:
const statusOptions = ref([
{ label: '待审核', value: '0' },
{ label: '已通过', value: '1' },
{ label: '已拒绝', value: '2' },
{ label: '已取消', value: '3' },
{ label: '已完成', value: '4' }
]);
2. 修复状态标签颜色函数
文件位置:web/src/views/rs/overseas-registration/index.vue (第616-625行)
修复前:
const getStatusTagType = (status: string): 'success' | 'warning' | 'info' | 'primary' | 'danger' => {
const tagTypes: Record<string, 'success' | 'warning' | 'info' | 'primary' | 'danger'> = {
'0': 'info', // 草稿 ❌
'1': 'warning', // 待审核 ❌
'2': 'success', // 已通过 ❌
'3': 'danger' // 已拒绝 ❌
};
return tagTypes[status] || 'info';
};
修复后:
const getStatusTagType = (status: string): 'success' | 'warning' | 'info' | 'primary' | 'danger' => {
const tagTypes: Record<string, 'success' | 'warning' | 'info' | 'primary' | 'danger'> = {
'0': 'warning', // 待审核 ✅
'1': 'success', // 已通过 ✅
'2': 'danger', // 已拒绝 ✅
'3': 'info', // 已取消 ✅
'4': 'primary' // 已完成 ✅
};
return tagTypes[status] || 'info';
};
3. 优化查询参数逻辑
文件位置:web/src/views/rs/overseas-registration/index.vue
出国登记列表查询(第647-666行)
修复前:
const queryParams = {
...registrationQueryParams.value,
status: registrationQueryParams.value.status || '0' // ❌ 空字符串时不生效
};
修复后:
const queryParams = {
...registrationQueryParams.value
};
// 如果status为空,则默认查询待审核状态
if (!queryParams.status) {
queryParams.status = '0';
}
登记历史列表查询(第801-821行)
修复前:
const queryParams = {
...historyQueryParams.value,
status: historyQueryParams.value.status || '1' // ❌ 空字符串时不生效
};
修复后:
const queryParams = {
...historyQueryParams.value
};
// 如果status为空,则默认查询已通过状态
if (!queryParams.status) {
queryParams.status = '1';
}
📊 修复后的正确逻辑
状态定义(与数据库完全一致)
| 状态值 | 状态名称 | 标签颜色 | 说明 | 显示位置 |
|---|---|---|---|---|
| 0 | 待审核 | 🟠 warning | 已提交,等待审批 | 出国登记选项卡 ✅ |
| 1 | 已通过 | 🟢 success | 审批通过,登记信息确认 | 登记历史选项卡 ✅ |
| 2 | 已拒绝 | 🔴 danger | 审批拒绝 | 需手动筛选 |
| 3 | 已取消 | ⚪ info | 用户主动取消 | 需手动筛选 |
| 4 | 已完成 | 🔵 primary | 出国已完成 | 需手动筛选 |
查询逻辑
-
出国登记选项卡:
- 默认查询:
status=0(待审核) - 用户可以手动选择其他状态进行筛选
- 点击"重置"按钮后恢复默认筛选
- 默认查询:
-
登记历史选项卡:
- 默认查询:
status=1(已通过) - 用户可以手动选择其他状态进行筛选
- 点击"重置"按钮后恢复默认筛选
- 默认查询:
🎯 修复验证步骤
1. 清除浏览器缓存
⚠️ 非常重要! 必须清除缓存才能看到新的状态定义!
- Windows:
Ctrl + Shift + R或Ctrl + F5 - Mac:
Cmd + Shift + R
2. 访问页面
- 登录系统
- 进入菜单:人事管理 → 出国登记
3. 验证状态下拉框
- ✅ 搜索条件中的"登记状态"下拉框应该显示5个选项
- ✅ 选项顺序:待审核、已通过、已拒绝、已取消、已完成
- ✅ 不应该再有"草稿"选项
4. 验证出国登记选项卡
- 打开浏览器开发者工具(F12)
- 切换到"Network"标签
- 点击"出国登记"选项卡
- 查看API请求:
- ✅ URL:
/rs/overseas/registration/list - ✅ 查询参数包含:
status=0 - ✅ 列表显示待审核状态的数据
- ✅ URL:
5. 验证登记历史选项卡
- 保持开发者工具打开
- 点击"登记历史"选项卡
- 查看API请求:
- ✅ URL:
/rs/overseas/registration/list - ✅ 查询参数包含:
status=1 - ✅ 列表显示已通过状态的数据
- ✅ URL:
6. 验证状态标签颜色
- ✅ 待审核(status=0)→ 橙色标签
- ✅ 已通过(status=1)→ 绿色标签
- ✅ 已拒绝(status=2)→ 红色标签
- ✅ 已取消(status=3)→ 灰色标签
- ✅ 已完成(status=4)→ 蓝色标签
📝 知识点总结
1. 前后端状态定义必须一致
教训:前端的状态选项必须与数据库字典定义完全一致!
检查方法:
-- 查询数据库中的状态字典
SELECT dict_value, dict_label, list_class, remark
FROM sys_dict_data
WHERE dict_type = 'rs_overseas_registration_status'
ORDER BY CAST(dict_value AS UNSIGNED);
2. 空字符串的判断问题
问题:status 初始化为空字符串 '' 时,|| '0' 的默认值逻辑不生效
错误写法:
status: registrationQueryParams.value.status || '0' // ❌ 空字符串时不生效
正确写法:
if (!queryParams.status) { // ✅ 明确判断空值
queryParams.status = '0';
}
3. 调试技巧
-
使用浏览器开发者工具
- Network标签查看API请求参数
- Console查看数据和错误信息
-
对比数据库定义
- 确认前端状态值与数据库一致
- 检查标签颜色是否匹配
-
清除缓存测试
- 修改状态定义后必须清除缓存
- 使用硬刷新强制更新
✅ 修复完成清单
- 修复状态选项定义(与数据库字典一致)
- 修复状态标签颜色函数
- 优化查询参数逻辑(处理空字符串)
- 代码无linter错误
- 创建修复文档
- 功能测试通过(需要用户验证)
📁 相关文档
- 📄 出国登记状态定义:
出国登记状态修改总结-最终版.md - 📄 数据库字典定义:
backend/ruoyi-modules/ruoyi-rs/出国登记状态恢复正确定义.sql - 📄 API文档:
docs/开发文档/API/(待创建)
🚀 立即测试
快速测试命令
# 1. 确保前端正在运行
cd /Users/weizzzz/Documents/Cursor/0828CURSOR/all-project/web
npm run dev
# 2. 打开浏览器访问
# http://localhost
# 3. 清除浏览器缓存后进入页面
# 人事管理 → 出国登记
测试重点
- ✅ 状态下拉框显示5个选项(没有"草稿")
- ✅ 出国登记选项卡显示待审核数据(status=0)
- ✅ 登记历史选项卡显示已通过数据(status=1)
- ✅ 状态标签颜色正确
- ✅ 搜索和重置功能正常
📞 问题排查
如果还是没有数据
-
检查数据库数据
SELECT id, name, status, create_time FROM rs_overseas_registration ORDER BY create_time DESC LIMIT 10; -
检查浏览器控制台
- 是否有API报错?
- status参数是否正确传递?
-
检查后端日志
- 后端是否正常接收请求?
- SQL查询是否正确?
如果状态标签颜色不对
- 清除浏览器缓存(Ctrl+Shift+R)
- 检查前端代码是否已保存
- 确认前端服务已重新编译
修改人: Cursor AI
修复时间: 2025-10-11
修复状态: ✅ 代码修复完成
测试状态: ⏳ 待用户验证
文档版本: v2.0(问题修复版)