web-模块、权限、成就

This commit is contained in:
2025-10-25 17:45:47 +08:00
parent f7057a0cc9
commit 5d211faee1
32 changed files with 4024 additions and 876 deletions

View File

@@ -0,0 +1,114 @@
import { BaseDTO } from '../base';
import { AchievementEventType } from '../enums';
/**
* 成就实体
*/
export interface Achievement extends BaseDTO {
/** 成就唯一标识 */
achievementID?: string;
/** 成就名称 */
name?: string;
/** 成就描述 */
description?: string;
/** 成就图标 */
icon?: string;
/** 成就类型1勋章 2等级 */
type?: number;
/** 成就等级 */
level?: number;
/** 获取条件类型1学习时长 2资源数量 3课程数量 4连续学习天数 */
conditionType?: number;
/** 条件值 */
conditionValue?: number;
/** 获得积分 */
points?: number;
/** 排序号 */
orderNum?: number;
/** 创建者 */
creator?: string;
/** 更新者 */
updater?: string;
}
/**
* 用户成就实体
*/
export interface UserAchievement extends BaseDTO {
/** 用户ID */
userID?: string;
/** 成就ID */
achievementID?: string;
/** 获得时间 */
obtainTime?: string;
}
/**
* 用户成就进度实体
*/
export interface UserAchievementProgress extends BaseDTO {
/** 用户ID */
userID?: string;
/** 成就ID */
achievementID?: string;
/** 当前进度值 */
currentValue?: number;
/** 目标进度值 */
targetValue?: number;
/** 进度百分比 (0-100) */
progressPercentage?: number;
/** 是否已完成 */
completed?: boolean;
/** 最后更新时间 */
lastUpdateTime?: string;
}
/**
* 成就视图对象 - 包含成就信息、获得状态和进度信息
*/
export interface AchievementVO extends Achievement {
// ==================== 用户成就表的字段 ====================
/** 用户成就记录ID */
userAchievementID?: string;
/** 用户ID */
userID?: string;
/** 获得时间 */
obtainTime?: string;
// ==================== 成就进度表的字段 ====================
/** 进度记录ID */
progressID?: string;
/** 当前进度值 */
currentValue?: number;
/** 目标进度值 */
targetValue?: number;
/** 进度百分比 (0-100) */
progressPercentage?: number;
/** 是否已完成 */
completed?: boolean;
/** 最后更新时间 */
lastUpdateTime?: string;
// ==================== 扩展字段 ====================
/** 是否已获得该成就 */
obtained?: boolean;
}
/**
* 成就事件实体
* 用于触发成就检测和授予
* @since 2025-10-24
*/
export interface AchievementEvent {
/** 用户ID */
userID: string;
/** 事件类型 */
eventType: AchievementEventType;
/** 事件值(如学习时长、资源数量等) */
eventValue?: number;
/** 事件时间 */
eventTime?: string;
/** 额外数据 */
extraData?: Record<string, any>;
}

View File

@@ -0,0 +1 @@
export * from './achievement';

View File

@@ -0,0 +1,186 @@
/**
* @description 成就相关枚举辅助工具
* @author yslg
* @since 2025-10-25
*/
import { AchievementType, AchievementConditionType, AchievementEventType } from './index';
/**
* 成就类型描述映射
*/
export const AchievementTypeDescriptions: Record<AchievementType, string> = {
[AchievementType.BADGE]: '勋章',
[AchievementType.LEVEL]: '等级'
};
/**
* 成就条件类型描述映射
*/
export const AchievementConditionTypeDescriptions: Record<AchievementConditionType, string> = {
[AchievementConditionType.LEARNING_TIME]: '学习时长',
[AchievementConditionType.RESOURCE_VIEW_COUNT]: '浏览资源数量',
[AchievementConditionType.COURSE_COMPLETE_COUNT]: '完成课程数量',
[AchievementConditionType.CONTINUOUS_LOGIN_DAYS]: '连续登录天数',
[AchievementConditionType.RESOURCE_COLLECT_COUNT]: '收藏资源数量',
[AchievementConditionType.TASK_COMPLETE_COUNT]: '完成任务数量',
[AchievementConditionType.POINTS_EARNED]: '获得积分数量',
[AchievementConditionType.COMMENT_COUNT]: '发表评论数量',
[AchievementConditionType.CHAPTER_COMPLETE_COUNT]: '完成章节数量',
[AchievementConditionType.TOTAL_LOGIN_DAYS]: '累计登录天数'
};
/**
* 成就事件类型描述映射
*/
export const AchievementEventTypeDescriptions: Record<AchievementEventType, string> = {
// 学习相关事件
[AchievementEventType.LEARNING_TIME_UPDATED]: '学习时长更新',
[AchievementEventType.COURSE_COMPLETED]: '课程完成',
[AchievementEventType.COURSE_STARTED]: '开始学习课程',
[AchievementEventType.CHAPTER_COMPLETED]: '章节完成',
// 资源相关事件
[AchievementEventType.RESOURCE_VIEWED]: '浏览资源',
[AchievementEventType.RESOURCE_COLLECTED]: '收藏资源',
[AchievementEventType.RESOURCE_SHARED]: '分享资源',
// 任务相关事件
[AchievementEventType.TASK_COMPLETED]: '任务完成',
[AchievementEventType.TASK_ITEM_COMPLETED]: '任务项完成',
// 互动相关事件
[AchievementEventType.COMMENT_POSTED]: '发表评论',
[AchievementEventType.LIKE_GIVEN]: '点赞',
// 登录相关事件
[AchievementEventType.USER_LOGIN]: '用户登录',
[AchievementEventType.CONTINUOUS_LOGIN]: '连续登录',
// 积分相关事件
[AchievementEventType.POINTS_EARNED_EVENT]: '获得积分',
// 测试相关事件
[AchievementEventType.TEST_PASSED]: '测试通过',
[AchievementEventType.TEST_PERFECT_SCORE]: '测试满分'
};
/**
* 成就枚举辅助类
*/
export class AchievementEnumHelper {
/**
* 获取成就类型描述
* @param type 成就类型
* @returns 描述文本
*/
static getAchievementTypeDescription(type: AchievementType): string {
return AchievementTypeDescriptions[type] || '未知类型';
}
/**
* 获取成就条件类型描述
* @param type 条件类型
* @returns 描述文本
*/
static getConditionTypeDescription(type: AchievementConditionType): string {
return AchievementConditionTypeDescriptions[type] || '未知条件';
}
/**
* 获取成就事件类型描述
* @param type 事件类型
* @returns 描述文本
*/
static getEventTypeDescription(type: AchievementEventType): string {
return AchievementEventTypeDescriptions[type] || '未知事件';
}
/**
* 根据code获取成就条件类型
* @param code 条件类型代码
* @returns 条件类型枚举值或null
*/
static getConditionTypeFromCode(code: number): AchievementConditionType | null {
const types = Object.values(AchievementConditionType).filter(
(value): value is AchievementConditionType => typeof value === 'number'
);
return types.find(type => type === code) || null;
}
/**
* 根据code获取成就事件类型
* @param code 事件类型代码
* @returns 事件类型枚举值或null
*/
static getEventTypeFromCode(code: string): AchievementEventType | null {
const types = Object.values(AchievementEventType).filter(
(value): value is AchievementEventType => typeof value === 'string'
);
return types.find(type => type === code) || null;
}
/**
* 获取所有成就条件类型选项(用于下拉框等)
* @returns 选项数组
*/
static getAllConditionTypeOptions(): Array<{ value: AchievementConditionType; label: string }> {
return Object.entries(AchievementConditionTypeDescriptions).map(([value, label]) => ({
value: Number(value) as AchievementConditionType,
label
}));
}
/**
* 获取所有成就类型选项(用于下拉框等)
* @returns 选项数组
*/
static getAllAchievementTypeOptions(): Array<{ value: AchievementType; label: string }> {
return Object.entries(AchievementTypeDescriptions).map(([value, label]) => ({
value: Number(value) as AchievementType,
label
}));
}
/**
* 获取所有成就事件类型选项(用于下拉框等)
* @returns 选项数组
*/
static getAllEventTypeOptions(): Array<{ value: AchievementEventType; label: string }> {
return Object.entries(AchievementEventTypeDescriptions).map(([value, label]) => ({
value: value as AchievementEventType,
label
}));
}
/**
* 格式化条件值显示
* @param conditionType 条件类型
* @param conditionValue 条件值
* @returns 格式化后的显示文本
*/
static formatConditionValue(conditionType: AchievementConditionType, conditionValue: number): string {
const typeDesc = this.getConditionTypeDescription(conditionType);
switch (conditionType) {
case AchievementConditionType.LEARNING_TIME:
return `${typeDesc}达到${conditionValue}分钟`;
case AchievementConditionType.RESOURCE_VIEW_COUNT:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.COURSE_COMPLETE_COUNT:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.CONTINUOUS_LOGIN_DAYS:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.RESOURCE_COLLECT_COUNT:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.TASK_COMPLETE_COUNT:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.POINTS_EARNED:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.COMMENT_COUNT:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.CHAPTER_COMPLETE_COUNT:
return `${typeDesc}达到${conditionValue}`;
case AchievementConditionType.TOTAL_LOGIN_DAYS:
return `${typeDesc}达到${conditionValue}`;
default:
return `${typeDesc}达到${conditionValue}`;
}
}
}

View File

@@ -210,3 +210,90 @@ export enum TaskItemType {
/** 课程类型 */
COURSE = 2
}
/**
* 成就类型枚举
*/
export enum AchievementType {
/** 勋章 */
BADGE = 1,
/** 等级 */
LEVEL = 2
}
/**
* 成就条件类型枚举
*/
export enum AchievementConditionType {
/** 学习时长(分钟) */
LEARNING_TIME = 1,
/** 浏览资源数量 */
RESOURCE_VIEW_COUNT = 2,
/** 完成课程数量 */
COURSE_COMPLETE_COUNT = 3,
/** 连续登录天数 */
CONTINUOUS_LOGIN_DAYS = 4,
/** 收藏资源数量 */
RESOURCE_COLLECT_COUNT = 5,
/** 完成任务数量 */
TASK_COMPLETE_COUNT = 6,
/** 获得积分数量 */
POINTS_EARNED = 7,
/** 发表评论数量 */
COMMENT_COUNT = 8,
/** 完成章节数量 */
CHAPTER_COMPLETE_COUNT = 9,
/** 累计登录天数 */
TOTAL_LOGIN_DAYS = 10
}
/**
* 成就事件类型枚举
*/
export enum AchievementEventType {
// ==================== 学习相关事件 ====================
/** 学习时长更新 */
LEARNING_TIME_UPDATED = 'learning_time_updated',
/** 课程完成 */
COURSE_COMPLETED = 'course_completed',
/** 开始学习课程 */
COURSE_STARTED = 'course_started',
/** 章节完成 */
CHAPTER_COMPLETED = 'chapter_completed',
// ==================== 资源相关事件 ====================
/** 浏览资源 */
RESOURCE_VIEWED = 'resource_viewed',
/** 收藏资源 */
RESOURCE_COLLECTED = 'resource_collected',
/** 分享资源 */
RESOURCE_SHARED = 'resource_shared',
// ==================== 任务相关事件 ====================
/** 任务完成 */
TASK_COMPLETED = 'task_completed',
/** 任务项完成 */
TASK_ITEM_COMPLETED = 'task_item_completed',
// ==================== 互动相关事件 ====================
/** 发表评论 */
COMMENT_POSTED = 'comment_posted',
/** 点赞 */
LIKE_GIVEN = 'like_given',
// ==================== 登录相关事件 ====================
/** 用户登录 */
USER_LOGIN = 'user_login',
/** 连续登录 */
CONTINUOUS_LOGIN = 'continuous_login',
// ==================== 积分相关事件 ====================
/** 获得积分 */
POINTS_EARNED_EVENT = 'points_earned',
// ==================== 测试相关事件 ====================
/** 测试通过 */
TEST_PASSED = 'test_passed',
/** 测试满分 */
TEST_PERFECT_SCORE = 'test_perfect_score'
}

View File

@@ -22,6 +22,11 @@ export * from './menu';
// 权限相关
export * from './permission';
// 系统相关
export * from './module';
export * from './achievement';
// 认证相关
export * from './auth';
@@ -42,6 +47,7 @@ export * from './usercenter';
// 枚举类型
export * from './enums';
export * from './enums/achievement-enums';
// 常量
export * from './constants';

View File

@@ -0,0 +1,162 @@
/**
* @description 系统相关类型定义
* @author yslg
* @since 2025-10-25
*/
import { BaseDTO } from '../base';
/**
* 系统模块
*/
export interface SysModule extends BaseDTO {
/** 模块ID */
moduleID?: string;
/** 模块名称 */
name?: string;
/** 模块代码 */
code?: string;
/** 模块描述 */
description?: string;
/** 模块图标 */
icon?: string;
/** 模块排序号 */
orderNum?: number;
/** 模块状态0禁用 1启用 */
status?: number;
/** 创建者 */
creator?: string;
/** 更新者 */
updater?: string;
}
/**
* 系统配置
*/
export interface SysConfig extends BaseDTO {
/** 配置键 */
configKey?: string;
/** 配置值 */
configValue?: string;
/** 配置名称 */
configName?: string;
/** 配置描述 */
description?: string;
/** 配置类型 */
configType?: string;
/** 是否系统内置 */
isSystem?: boolean;
/** 创建者 */
creator?: string;
/** 更新者 */
updater?: string;
}
/**
* 系统字典类型
*/
export interface SysDictType extends BaseDTO {
/** 字典类型 */
dictType?: string;
/** 字典名称 */
dictName?: string;
/** 状态0禁用 1启用 */
status?: number;
/** 备注 */
remark?: string;
/** 创建者 */
creator?: string;
/** 更新者 */
updater?: string;
}
/**
* 系统字典数据
*/
export interface SysDictData extends BaseDTO {
/** 字典排序 */
dictSort?: number;
/** 字典标签 */
dictLabel?: string;
/** 字典键值 */
dictValue?: string;
/** 字典类型 */
dictType?: string;
/** 状态0禁用 1启用 */
status?: number;
/** 是否默认 */
isDefault?: boolean;
/** 备注 */
remark?: string;
/** 创建者 */
creator?: string;
/** 更新者 */
updater?: string;
}
/**
* 系统通知
*/
export interface SysNotification extends BaseDTO {
/** 通知ID */
notificationID?: string;
/** 通知标题 */
title?: string;
/** 通知内容 */
content?: string;
/** 通知类型 */
type?: number;
/** 接收用户ID */
receiverID?: string;
/** 是否已读 */
isRead?: boolean;
/** 已读时间 */
readTime?: string;
/** 创建者 */
creator?: string;
}
/**
* 系统操作日志
*/
export interface SysOperationLog extends BaseDTO {
/** 操作用户 */
operator?: string;
/** 操作模块 */
module?: string;
/** 操作类型 */
operationType?: string;
/** 操作方法 */
method?: string;
/** 请求参数 */
requestParams?: string;
/** 返回结果 */
responseResult?: string;
/** 操作状态0失败 1成功 */
status?: number;
/** 错误消息 */
errorMsg?: string;
/** 操作IP */
operationIP?: string;
/** 操作时间 */
operationTime?: string;
/** 执行时长(毫秒) */
duration?: number;
}
/**
* 系统访问统计
*/
export interface SysVisitStatistics extends BaseDTO {
/** 统计日期 */
statisticsDate?: string;
/** 访问量 */
visitCount?: number;
/** 独立访客数 */
uniqueVisitors?: number;
/** 页面浏览量 */
pageViews?: number;
/** 平均访问时长(秒) */
avgDuration?: number;
}

View File

@@ -7,6 +7,7 @@
import { BaseDTO } from '../base';
import { SysMenu } from '../menu';
import { SysRole } from '../role';
import { SysModule } from '../module';
/**
* 系统权限
@@ -16,6 +17,7 @@ export interface SysPermission extends BaseDTO {
id?:string;
/** 权限ID */
permissionID?: string;
moduleID?: string;
/** 权限名称 */
name?: string;
/** 权限描述 */
@@ -34,5 +36,5 @@ export interface SysPermission extends BaseDTO {
menus?: SysMenu[];
roles?: SysRole[];
permissions?: SysPermission[];
}
module?: SysModule;
}

View File

@@ -68,38 +68,6 @@ export interface PointsRecord extends BaseDTO {
relatedType?: number;
}
/**
* 用户成就实体
*/
export interface UserAchievement extends BaseDTO {
/** 用户ID */
userID?: string;
/** 成就ID */
achievementID?: string;
/** 获得时间 */
achieveTime?: string;
}
/**
* 成就实体
*/
export interface Achievement extends BaseDTO {
/** 成就名称 */
name?: string;
/** 成就描述 */
description?: string;
/** 成就图标 */
icon?: string;
/** 成就类型 */
type?: number;
/** 获得条件 */
condition?: string;
/** 奖励积分 */
rewardPoints?: number;
/** 状态0禁用 1启用 */
status?: number;
}
/**
* 个人中心统计信息
*/