3.6 KiB
3.6 KiB
代码调整记录 - 2025-01-21 - Cursor AI
📋 变更概述
时间: 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)
修复内容
1. 修改字典表数据
文件: backend/script/sql/stgl_volunteer_role_dict.sql
- 队长的
dict_value从'1'改为'0' - 队员的
dict_value从'2'改为'1'
2. 修改前端字典定义
文件: web/src/views/stgl/volunteer/member/index.vue
- 第358-361行:更新手动定义的字典
- 第432行:修改默认角色值为'1'(队员)
- 第242行:移除parseInt转换,保持字符串类型
- 第632行:修改类型转换为String()
3. 创建数据库更新脚本
文件: 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 -
重新构建前端:
cd web npm run build -
重启后端服务(如有缓存)
-
验证功能:
- 使用队长账号登录
- 访问志愿者成员管理页面
- 确认能看到所有队伍成员
🔍 验证要点
- 队长能查看所属队伍的所有成员
- 角色显示正确(队长/队员)
- 新增成员时角色选择正常
- 权限过滤按预期工作
📚 相关文档
- 问题分析: 本文档"问题描述"部分
- 技术规范:
.cursor/cursorrules-backend.md- 权限管理规范 - API文档:
docs/开发文档/API/志愿者管理API.md
🏷️ 标签
#志愿者管理 #权限过滤 #角色类型 #前后端统一 #字典数据 #Bug修复