web-模块、权限、成就
This commit is contained in:
233
schoolNewsWeb/src/apis/achievement/achievement.ts
Normal file
233
schoolNewsWeb/src/apis/achievement/achievement.ts
Normal file
@@ -0,0 +1,233 @@
|
||||
/**
|
||||
* @description 成就相关API
|
||||
* @author yslg
|
||||
* @since 2025-10-24
|
||||
*/
|
||||
|
||||
import { api } from '@/apis/index';
|
||||
import type { Achievement, UserAchievement, UserAchievementProgress, AchievementVO, AchievementEvent, ResultDomain, PageParam } from '@/types';
|
||||
|
||||
/**
|
||||
* 成就API服务
|
||||
*/
|
||||
export const achievementApi = {
|
||||
// ==================== 成就定义管理(管理员)====================
|
||||
|
||||
/**
|
||||
* 创建成就
|
||||
* @param achievement 成就信息
|
||||
* @returns Promise<ResultDomain<Achievement>>
|
||||
*/
|
||||
async createAchievement(achievement: Achievement): Promise<ResultDomain<Achievement>> {
|
||||
const response = await api.post<Achievement>('/achievements/achievement', achievement);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新成就
|
||||
* @param achievement 成就信息
|
||||
* @returns Promise<ResultDomain<Achievement>>
|
||||
*/
|
||||
async updateAchievement(achievement: Achievement): Promise<ResultDomain<Achievement>> {
|
||||
const response = await api.put<Achievement>('/achievements/achievement', achievement);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除成就
|
||||
* @param achievement 成就信息(包含achievementID)
|
||||
* @returns Promise<ResultDomain<void>>
|
||||
*/
|
||||
async deleteAchievement(achievement: Achievement): Promise<ResultDomain<void>> {
|
||||
const response = await api.delete<void>('/achievements/achievement', achievement);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取所有成就列表
|
||||
* @param filter 过滤条件(type: 成就类型, level: 成就等级)
|
||||
* @returns Promise<ResultDomain<Achievement>>
|
||||
*/
|
||||
async getAllAchievements(filter?: Partial<Achievement>): Promise<ResultDomain<Achievement>> {
|
||||
const response = await api.post<Achievement>('/achievements/list', filter || {});
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 分页查询成就
|
||||
* @param filter 过滤条件
|
||||
* @param pageParam 分页参数
|
||||
* @returns Promise<ResultDomain<Achievement>>
|
||||
*/
|
||||
async getAchievementPage(filter?: Partial<Achievement>, pageParam?: PageParam): Promise<ResultDomain<Achievement>> {
|
||||
const response = await api.post<Achievement>('/achievements/page', { filter, pageParam });
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取成就详情
|
||||
* @param achievementID 成就ID
|
||||
* @returns Promise<ResultDomain<Achievement>>
|
||||
*/
|
||||
async getAchievementDetail(achievementID: string): Promise<ResultDomain<Achievement>> {
|
||||
const response = await api.get<Achievement>(`/achievements/detail/${achievementID}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
// ==================== 用户成就查询 ====================
|
||||
|
||||
/**
|
||||
* 获取用户已获得的成就
|
||||
* @param userID 用户ID
|
||||
* @param type 成就类型(可选)
|
||||
* @returns Promise<ResultDomain<UserAchievement>>
|
||||
*/
|
||||
async getUserAchievements(userID: string, type?: number): Promise<ResultDomain<UserAchievement>> {
|
||||
const params: Record<string, any> = {};
|
||||
if (type !== undefined) {
|
||||
params.type = type;
|
||||
}
|
||||
const response = await api.get<UserAchievement>(`/achievements/user/${userID}`, params);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取当前用户的成就列表(含进度信息)
|
||||
* 返回所有成就,包括:
|
||||
* - 已获得的成就:显示获得时间
|
||||
* - 未获得的成就:显示当前进度
|
||||
* @param type 成就类型(可选)
|
||||
* @returns Promise<ResultDomain<AchievementVO>>
|
||||
*/
|
||||
async getMyAchievements(type?: number): Promise<ResultDomain<AchievementVO>> {
|
||||
const params: Record<string, any> = {};
|
||||
if (type !== undefined) {
|
||||
params.type = type;
|
||||
}
|
||||
const response = await api.get<AchievementVO>('/achievements/my', params);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 检查用户是否已获得成就
|
||||
* @param userID 用户ID
|
||||
* @param achievementID 成就ID
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async hasAchievement(userID: string, achievementID: string): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.get<boolean>(`/achievements/check/${userID}/${achievementID}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
// ==================== 成就授予(管理员)====================
|
||||
|
||||
/**
|
||||
* 手动授予用户成就
|
||||
* @param userID 用户ID
|
||||
* @param achievementID 成就ID
|
||||
* @returns Promise<ResultDomain<UserAchievement>>
|
||||
*/
|
||||
async grantAchievement(userID: string, achievementID: string): Promise<ResultDomain<UserAchievement>> {
|
||||
const response = await api.post<UserAchievement>('/achievements/grant', null, {
|
||||
params: { userID, achievementID }
|
||||
});
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 撤销用户成就
|
||||
* @param userID 用户ID
|
||||
* @param achievementID 成就ID
|
||||
* @returns Promise<ResultDomain<void>>
|
||||
*/
|
||||
async revokeAchievement(userID: string, achievementID: string): Promise<ResultDomain<void>> {
|
||||
const response = await api.delete<void>('/achievements/revoke', null, {
|
||||
params: { userID, achievementID }
|
||||
});
|
||||
return response.data;
|
||||
},
|
||||
|
||||
// ==================== 成就进度查询 ====================
|
||||
|
||||
/**
|
||||
* 获取用户成就进度
|
||||
* @param userID 用户ID
|
||||
* @param achievementID 成就ID(可选,为空则获取所有进度)
|
||||
* @returns Promise<ResultDomain<UserAchievementProgress>>
|
||||
*/
|
||||
async getUserAchievementProgress(userID: string, achievementID?: string): Promise<ResultDomain<UserAchievementProgress>> {
|
||||
const params: Record<string, any> = {};
|
||||
if (achievementID) {
|
||||
params.achievementID = achievementID;
|
||||
}
|
||||
const response = await api.get<UserAchievementProgress>(`/achievements/progress/${userID}`, params);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
// ==================== 成就检测 ====================
|
||||
|
||||
/**
|
||||
* 处理成就事件(内部接口,由其他服务调用)
|
||||
* @param event 成就事件
|
||||
* @returns Promise<ResultDomain<UserAchievement>>
|
||||
*/
|
||||
async processAchievementEvent(event: AchievementEvent): Promise<ResultDomain<UserAchievement>> {
|
||||
const response = await api.post<UserAchievement>('/achievements/event/process', event);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 检查用户是否满足成就条件
|
||||
* @param userID 用户ID
|
||||
* @param achievementID 成就ID
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async checkAchievementCondition(userID: string, achievementID: string): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.get<boolean>(`/achievements/condition/check/${userID}/${achievementID}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 批量检查用户可获得的成就
|
||||
* @param userID 用户ID
|
||||
* @returns Promise<ResultDomain<Achievement>>
|
||||
*/
|
||||
async checkAvailableAchievements(userID: string): Promise<ResultDomain<Achievement>> {
|
||||
const response = await api.get<Achievement>(`/achievements/available/${userID}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
// ==================== 成就统计 ====================
|
||||
|
||||
/**
|
||||
* 获取用户成就统计
|
||||
* @param userID 用户ID
|
||||
* @returns Promise<ResultDomain<Record<string, any>>>
|
||||
*/
|
||||
async getUserAchievementStatistics(userID: string): Promise<ResultDomain<Record<string, any>>> {
|
||||
const response = await api.get<Record<string, any>>(`/achievements/statistics/${userID}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取成就排行榜
|
||||
* @param limit 排行榜条数(默认10条)
|
||||
* @returns Promise<ResultDomain<Record<string, any>>>
|
||||
*/
|
||||
async getAchievementRanking(limit = 10): Promise<ResultDomain<Record<string, any>>> {
|
||||
const response = await api.get<Record<string, any>>('/achievements/ranking', { limit });
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取最近获得成就的用户
|
||||
* @param pageParam 分页参数
|
||||
* @param filter 过滤条件
|
||||
* @param limit 查询条数(默认10条)
|
||||
* @returns Promise<ResultDomain<UserAchievement>>
|
||||
*/
|
||||
async getRecentAchievers(pageParam: PageParam, filter?:Achievement ): Promise<ResultDomain<UserAchievement>> {
|
||||
const response = await api.post<UserAchievement>(`/achievements/recent`, {pageParam, filter });
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
1
schoolNewsWeb/src/apis/achievement/index.ts
Normal file
1
schoolNewsWeb/src/apis/achievement/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from './achievement';
|
||||
@@ -178,9 +178,6 @@ request.interceptors.response.use(
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* API封装
|
||||
*/
|
||||
/**
|
||||
* API封装
|
||||
*/
|
||||
|
||||
@@ -12,4 +12,5 @@ export { menuApi } from './menu';
|
||||
export { permissionApi } from './permission';
|
||||
export { authApi } from './auth';
|
||||
export { fileApi } from './file';
|
||||
export { moduleApi } from './module';
|
||||
|
||||
|
||||
197
schoolNewsWeb/src/apis/system/module.ts
Normal file
197
schoolNewsWeb/src/apis/system/module.ts
Normal file
@@ -0,0 +1,197 @@
|
||||
/**
|
||||
* @description 系统模块相关API
|
||||
* @author yslg
|
||||
* @since 2025-10-25
|
||||
*/
|
||||
|
||||
import { api } from '@/apis/index';
|
||||
import type { SysModule, ResultDomain, PageParam, SysPermission } from '@/types';
|
||||
|
||||
/**
|
||||
* 系统模块API服务
|
||||
*/
|
||||
export const moduleApi = {
|
||||
baseUrl: '/system/modules',
|
||||
/**
|
||||
* 查询模块列表
|
||||
* @param filter 过滤条件
|
||||
* @returns Promise<ResultDomain<SysModule>>
|
||||
*/
|
||||
async getModuleList(filter?: Partial<SysModule>): Promise<ResultDomain<SysModule>> {
|
||||
const response = await api.post<SysModule>(`${this.baseUrl}/list`, filter);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 根据模块ID查询模块信息
|
||||
* @param moduleID 模块ID
|
||||
* @returns Promise<ResultDomain<SysModule>>
|
||||
*/
|
||||
async getModuleById(moduleID: string): Promise<ResultDomain<SysModule>> {
|
||||
const response = await api.get<SysModule>(`${this.baseUrl}/${moduleID}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 根据模块代码查询模块信息
|
||||
* @param code 模块代码
|
||||
* @returns Promise<ResultDomain<SysModule>>
|
||||
*/
|
||||
async getModuleByCode(code: string): Promise<ResultDomain<SysModule>> {
|
||||
const response = await api.get<SysModule>(`${this.baseUrl}/code/${code}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 查询启用的模块列表
|
||||
* @returns Promise<ResultDomain<SysModule>>
|
||||
*/
|
||||
async getActiveModules(): Promise<ResultDomain<SysModule>> {
|
||||
const response = await api.get<SysModule>(`${this.baseUrl}/active`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 创建模块
|
||||
* @param module 模块信息
|
||||
* @returns Promise<ResultDomain<SysModule>>
|
||||
*/
|
||||
async createModule(module: SysModule): Promise<ResultDomain<SysModule>> {
|
||||
const response = await api.post<SysModule>(`${this.baseUrl}/module`, module);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新模块
|
||||
* @param module 模块信息
|
||||
* @returns Promise<ResultDomain<SysModule>>
|
||||
*/
|
||||
async updateModule(module: SysModule): Promise<ResultDomain<SysModule>> {
|
||||
const response = await api.put<SysModule>(`${this.baseUrl}/module`, module);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除模块
|
||||
* @param moduleID 模块ID
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async deleteModule(moduleID: string): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.delete<boolean>(`${this.baseUrl}/module`, { moduleID });
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 批量删除模块
|
||||
* @param moduleIDs 模块ID列表
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async batchDeleteModules(moduleIDs: string[]): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.delete<boolean>(`${this.baseUrl}/batch`, { moduleIDs });
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新模块状态
|
||||
* @param moduleID 模块ID
|
||||
* @param status 状态(0禁用 1启用)
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async updateModuleStatus(moduleID: string, status: number): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.put<boolean>(`${this.baseUrl}/${moduleID}/status/${status}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新模块排序
|
||||
* @param moduleID 模块ID
|
||||
* @param orderNum 排序号
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async updateModuleOrder(moduleID: string, orderNum: number): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.put<boolean>(`${this.baseUrl}/${moduleID}/order/${orderNum}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 分页查询模块列表
|
||||
* @param filter 过滤条件
|
||||
* @param pageParam 分页参数
|
||||
* @returns Promise<ResultDomain<SysModule>>
|
||||
*/
|
||||
async getModuleListPage(filter?: Partial<SysModule>, pageParam?: PageParam): Promise<ResultDomain<SysModule>> {
|
||||
const response = await api.post<SysModule>(`${this.baseUrl}/page`, {
|
||||
filter,
|
||||
pageParam: {pageNumber: pageParam?.page || 1, pageSize: pageParam?.size || 10}
|
||||
});
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 统计模块数量
|
||||
* @param filter 过滤条件
|
||||
* @returns Promise<ResultDomain<number>>
|
||||
*/
|
||||
async countModules(filter?: Partial<SysModule>): Promise<ResultDomain<number>> {
|
||||
const response = await api.post<number>(`${this.baseUrl}/count`, filter);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 检查模块代码是否存在
|
||||
* @param code 模块代码
|
||||
* @param excludeID 排除的模块ID
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async checkModuleCodeExists(code: string, excludeID?: string): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.get<boolean>(`${this.baseUrl}/check-code`, {
|
||||
code,
|
||||
excludeID
|
||||
});
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 在模块中创建权限
|
||||
* @param moduleID 模块ID
|
||||
* @param permission 权限信息
|
||||
* @returns Promise<ResultDomain<SysPermission>>
|
||||
*/
|
||||
async createPermissionInModule(moduleID: string, permission: SysPermission): Promise<ResultDomain<SysPermission>> {
|
||||
const response = await api.post<SysPermission>(`${this.baseUrl}/${moduleID}/permissions`, permission);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新模块中的权限
|
||||
* @param moduleID 模块ID
|
||||
* @param permission 权限信息
|
||||
* @returns Promise<ResultDomain<SysPermission>>
|
||||
*/
|
||||
async updatePermissionInModule(moduleID: string, permission: SysPermission): Promise<ResultDomain<SysPermission>> {
|
||||
const response = await api.put<SysPermission>(`${this.baseUrl}/${moduleID}/permissions`, permission);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除模块中的权限
|
||||
* @param moduleID 模块ID
|
||||
* @param permissionID 权限ID
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async deletePermissionInModule(moduleID: string, permissionID: string): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.delete<boolean>(`${this.baseUrl}/${moduleID}/permissions/${permissionID}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取模块的权限列表
|
||||
* @param moduleID 模块ID
|
||||
* @returns Promise<ResultDomain<SysPermission>>
|
||||
*/
|
||||
async getModulePermissions(moduleID: string): Promise<ResultDomain<SysPermission>> {
|
||||
const response = await api.get<SysPermission>(`${this.baseUrl}/${moduleID}/permissions`);
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
/**
|
||||
* @description 用户成就相关API
|
||||
* @author yslg
|
||||
* @since 2025-10-15
|
||||
*/
|
||||
|
||||
import { api } from '@/apis/index';
|
||||
import type { UserAchievement, Achievement, ResultDomain } from '@/types';
|
||||
|
||||
/**
|
||||
* 用户成就API服务
|
||||
*/
|
||||
export const userAchievementApi = {
|
||||
/**
|
||||
* 获取用户成就列表
|
||||
* @param userID 用户ID
|
||||
* @returns Promise<ResultDomain<UserAchievement>>
|
||||
*/
|
||||
async getUserAchievements(userID: string): Promise<ResultDomain<UserAchievement>> {
|
||||
const response = await api.get<UserAchievement>('/usercenter/achievement/user-list', { userID });
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取所有成就列表
|
||||
* @returns Promise<ResultDomain<Achievement>>
|
||||
*/
|
||||
async getAllAchievements(): Promise<ResultDomain<Achievement>> {
|
||||
const response = await api.get<Achievement>('/usercenter/achievement/list');
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 检查用户成就进度
|
||||
* @param userID 用户ID
|
||||
* @param achievementID 成就ID
|
||||
* @returns Promise<ResultDomain<{ progress: number; isCompleted: boolean }>>
|
||||
*/
|
||||
async checkAchievementProgress(userID: string, achievementID: string): Promise<ResultDomain<{ progress: number; isCompleted: boolean }>> {
|
||||
const response = await api.get<{ progress: number; isCompleted: boolean }>('/usercenter/achievement/progress', {
|
||||
userID,
|
||||
achievementID
|
||||
});
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
@@ -8,5 +8,4 @@
|
||||
export { userCollectionApi } from './collection';
|
||||
export { userBrowseRecordApi } from './browse-record';
|
||||
export { userPointsApi } from './points';
|
||||
export { userAchievementApi } from './achievement';
|
||||
export { userProfileApi } from './profile';
|
||||
|
||||
Reference in New Issue
Block a user