时间: 2025-01-21 10:30:00
操作人: Cursor AI
变更类型: 🐛 Bug修复
影响范围: 志愿者成员管理模块
问题现象: 当前登录用户2025LY23117是志愿者马拉松工作组的队长,该队伍总共有3个人,但在志愿者成员管理页面只能看到一个成员。
根本原因: 志愿者角色类型(roleType)在前后端定义不一致,导致权限过滤逻辑失效。
| 组件 | 队长值 | 队员值 | 状态 |
|---|---|---|---|
| 前端字典(修复前) | 1 | 2 | ❌ 错误 |
| 后端权限过滤 | 0 | 1 | ✅ 正确 |
| 数据库SQL映射 | 0 | 1 | ✅ 正确 |
| 字典表(修复前) | 1 | 2 | ❌ 错误 |
影响:
getCaptainTeamIds查找roleType=0时找不到队长记录relationId=-1L,导致返回空结果采用方案A: 统一使用数据库SQL的定义(队长=0,队员=1)
文件: backend/script/sql/stgl_volunteer_role_dict.sql
dict_value从'1'改为'0'dict_value从'2'改为'1'文件: web/src/views/stgl/volunteer/member/index.vue
文件: script/update-volunteer-role-dict.sql
// 修复前
const stgl_volunteer_role = ref([
{ value: '1', label: '队长' },
{ value: '2', label: '队员' }
]);
// 修复后
const stgl_volunteer_role = ref([
{ value: '0', label: '队长' },
{ value: '1', label: '队员' }
]);
-- 修复前字典数据
VALUES (..., '队长', '1', ...)
VALUES (..., '队员', '2', ...)
-- 修复后字典数据
VALUES (..., '队长', '0', ...)
VALUES (..., '队员', '1', ...)
后端权限过滤逻辑保持不变(已正确):
captainBo.setRoleType(0); // 队长角色 = 0
数据库SQL映射保持不变(已正确):
WHEN 0 THEN '队长' <!-- 队长 = 0 -->
WHEN 1 THEN '队员' <!-- 队员 = 1 -->
修复完成后:
执行数据库更新脚本:
mysql -u username -p database < script/update-volunteer-role-dict.sql
bash
cd web
npm run build
重启后端服务(如有缓存)
验证功能:
.cursor/cursorrules-backend.md - 权限管理规范docs/开发文档/API/志愿者管理API.md#志愿者管理 #权限过滤 #角色类型 #前后端统一 #字典数据 #Bug修复