feat: 新增等级与奖章系统
Some checks failed
continuous-integration/drone/push Build is failing

- 后端: 新增 user_levels, exp_history, badge_definitions, user_badges, level_configs 表
- 后端: 新增 LevelService 和 BadgeService 服务
- 后端: 新增等级/奖章/签到/排行榜 API 端点
- 后端: 考试/练习/陪练完成时触发经验值和奖章检查
- 前端: 新增 LevelBadge, ExpProgress, BadgeCard, LevelUpDialog 组件
- 前端: 新增排行榜页面
- 前端: 成长路径页面集成真实等级数据
- 数据库: 包含迁移脚本和初始数据
This commit is contained in:
yuliang_guo
2026-01-29 16:19:22 +08:00
parent 5dfe23831d
commit 0933b936f9
19 changed files with 3207 additions and 65 deletions

View File

@@ -877,12 +877,26 @@ const fetchUserInfo = async () => {
userInfo.value = {
name: user.full_name || user.username || '未命名',
position: user.position_name || (user.role === 'admin' ? '管理员' : user.role === 'trainer' ? '培训师' : '学员'),
level: 1, // TODO: 从用户统计数据获取
exp: 0, // TODO: 从用户统计数据获取
nextLevelExp: 1000, // TODO: 从用户统计数据获取
level: 1,
exp: 0,
nextLevelExp: 1000,
avatar: user.avatar_url || '',
role: user.role || 'trainee', // 保存用户角色
phone: user.phone || '' // 保存用户手机号
role: user.role || 'trainee',
phone: user.phone || ''
}
// 获取等级信息
try {
const { getMyLevel } = await import('@/api/level')
const levelResponse = await getMyLevel()
if (levelResponse.code === 200 && levelResponse.data) {
const levelData = levelResponse.data
userInfo.value.level = levelData.level
userInfo.value.exp = levelData.total_exp
userInfo.value.nextLevelExp = levelData.next_level_exp || 1000
}
} catch (levelError) {
console.warn('获取等级信息失败:', levelError)
}
}
} catch (error) {