serv\web-学习历史修改
This commit is contained in:
@@ -9,3 +9,4 @@ export { courseApi } from './course';
|
||||
export { learningTaskApi } from './learning-task';
|
||||
export { learningRecordApi } from './learning-record';
|
||||
export { learningPlanApi } from './learning-plan';
|
||||
export { learningHistoryApi } from './learning-history';
|
||||
|
||||
204
schoolNewsWeb/src/apis/study/learning-history.ts
Normal file
204
schoolNewsWeb/src/apis/study/learning-history.ts
Normal file
@@ -0,0 +1,204 @@
|
||||
/**
|
||||
* @description 学习历史相关API
|
||||
* @author yslg
|
||||
* @since 2025-10-27
|
||||
*/
|
||||
|
||||
import { api } from '@/apis/index';
|
||||
import type {
|
||||
TbLearningHistory,
|
||||
LearningHistoryVO,
|
||||
LearningStatisticsVO,
|
||||
ResultDomain,
|
||||
PageDomain,
|
||||
PageRequest
|
||||
} from '@/types';
|
||||
|
||||
/**
|
||||
* 学习历史API服务
|
||||
*/
|
||||
export const learningHistoryApi = {
|
||||
/**
|
||||
* 记录学习历史
|
||||
* @param learningHistory 学习历史数据
|
||||
* @returns Promise<ResultDomain<TbLearningHistory>>
|
||||
*/
|
||||
async recordLearningHistory(learningHistory: TbLearningHistory): Promise<ResultDomain<TbLearningHistory>> {
|
||||
const response = await api.post<TbLearningHistory>('/study/history/record', learningHistory, {
|
||||
showLoading: false // 禁用 loading 动画,避免影响用户体验
|
||||
} as any);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 批量记录学习历史
|
||||
* @param historyList 学习历史列表
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async batchRecordLearningHistory(historyList: TbLearningHistory[]): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.post<boolean>('/study/history/batch-record', historyList);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 查询学习历史列表
|
||||
* @param filter 过滤条件
|
||||
* @returns Promise<ResultDomain<LearningHistoryVO[]>>
|
||||
*/
|
||||
async getLearningHistories(filter?: Partial<TbLearningHistory>): Promise<ResultDomain<LearningHistoryVO[]>> {
|
||||
const response = await api.post<LearningHistoryVO[]>('/study/history/list', filter || {});
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 分页查询学习历史
|
||||
* @param pageRequest 分页查询请求
|
||||
* @returns Promise<ResultDomain<PageDomain<LearningHistoryVO>>>
|
||||
*/
|
||||
async getLearningHistoriesPage(pageRequest: PageRequest<TbLearningHistory>): Promise<ResultDomain<PageDomain<LearningHistoryVO>>> {
|
||||
const response = await api.post<PageDomain<LearningHistoryVO>>('/study/history/page', pageRequest);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 根据ID查询学习历史
|
||||
* @param id 历史记录ID
|
||||
* @returns Promise<ResultDomain<TbLearningHistory>>
|
||||
*/
|
||||
async getLearningHistoryById(id: string): Promise<ResultDomain<TbLearningHistory>> {
|
||||
const response = await api.get<TbLearningHistory>(`/study/history/${id}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取当前用户的学习历史
|
||||
* @param filter 过滤条件
|
||||
* @returns Promise<ResultDomain<LearningHistoryVO[]>>
|
||||
*/
|
||||
async getCurrentUserLearningHistories(filter?: Partial<TbLearningHistory>): Promise<ResultDomain<LearningHistoryVO[]>> {
|
||||
const response = await api.post<LearningHistoryVO[]>('/study/history/my-histories', filter || {});
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取当前用户最近的学习历史
|
||||
* @param limit 限制数量(默认10)
|
||||
* @returns Promise<ResultDomain<LearningHistoryVO[]>>
|
||||
*/
|
||||
async getRecentLearningHistories(limit = 10): Promise<ResultDomain<LearningHistoryVO[]>> {
|
||||
const response = await api.get<LearningHistoryVO[]>(`/study/history/recent?limit=${limit}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取用户学习统计(按时间范围)
|
||||
* @param userId 用户ID
|
||||
* @param startTime 开始时间(Date对象)
|
||||
* @param endTime 结束时间(Date对象)
|
||||
* @returns Promise<ResultDomain<LearningStatisticsVO>>
|
||||
*/
|
||||
async getUserLearningStatistics(userId: string, startTime: Date, endTime: Date): Promise<ResultDomain<LearningStatisticsVO>> {
|
||||
const response = await api.get<LearningStatisticsVO>(
|
||||
`/study/history/statistics?userId=${userId}&startTime=${startTime.getTime()}&endTime=${endTime.getTime()}`
|
||||
);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取用户学习统计(按周期)
|
||||
* @param userId 用户ID
|
||||
* @param periodType 周期类型(day/week/month)
|
||||
* @returns Promise<ResultDomain<LearningStatisticsVO>>
|
||||
*/
|
||||
async getUserLearningStatisticsByPeriod(userId: string, periodType: 'day' | 'week' | 'month'): Promise<ResultDomain<LearningStatisticsVO>> {
|
||||
const response = await api.get<LearningStatisticsVO>(`/study/history/statistics/${userId}/${periodType}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取当前用户的学习统计
|
||||
* @param periodType 周期类型(day/week/month)
|
||||
* @returns Promise<ResultDomain<LearningStatisticsVO>>
|
||||
*/
|
||||
async getCurrentUserLearningStatistics(periodType: 'day' | 'week' | 'month'): Promise<ResultDomain<LearningStatisticsVO>> {
|
||||
const response = await api.get<LearningStatisticsVO>(`/study/history/my-statistics/${periodType}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除学习历史
|
||||
* @param id 历史记录ID
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async deleteLearningHistory(id: string): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.delete<boolean>(`/study/history/${id}`);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 批量删除学习历史
|
||||
* @param ids 历史记录ID列表
|
||||
* @returns Promise<ResultDomain<boolean>>
|
||||
*/
|
||||
async batchDeleteLearningHistories(ids: string[]): Promise<ResultDomain<boolean>> {
|
||||
const response = await api.delete<boolean>('/study/history/batch', ids);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 简化记录方法 - 观看新闻/资源
|
||||
* @param userId 用户ID
|
||||
* @param resourceId 资源ID
|
||||
* @param duration 学习时长(秒)
|
||||
* @returns Promise<ResultDomain<TbLearningHistory>>
|
||||
*/
|
||||
async recordResourceView(userId: string, resourceId: string, duration: number): Promise<ResultDomain<TbLearningHistory>> {
|
||||
const learningHistory: TbLearningHistory = {
|
||||
userID: userId,
|
||||
resourceType: 1, // 1资源/新闻
|
||||
resourceID: resourceId,
|
||||
duration: duration,
|
||||
deviceType: 'web'
|
||||
};
|
||||
return this.recordLearningHistory(learningHistory);
|
||||
},
|
||||
|
||||
/**
|
||||
* 简化记录方法 - 学习课程
|
||||
* @param userId 用户ID
|
||||
* @param courseId 课程ID
|
||||
* @param chapterId 章节ID(可选)
|
||||
* @param nodeId 节点ID(可选)
|
||||
* @param duration 学习时长(秒)
|
||||
* @returns Promise<ResultDomain<TbLearningHistory>>
|
||||
*/
|
||||
async recordCourseLearn(
|
||||
userId: string,
|
||||
courseId: string,
|
||||
chapterId?: string,
|
||||
nodeId?: string,
|
||||
duration?: number
|
||||
): Promise<ResultDomain<TbLearningHistory>> {
|
||||
const learningHistory: TbLearningHistory = {
|
||||
userID: userId,
|
||||
resourceType: nodeId ? 4 : (chapterId ? 3 : 2), // 2课程 3章节 4节点
|
||||
resourceID: nodeId || chapterId || courseId,
|
||||
courseID: courseId,
|
||||
chapterID: chapterId,
|
||||
nodeID: nodeId,
|
||||
duration: duration || 0,
|
||||
deviceType: 'web'
|
||||
};
|
||||
return this.recordLearningHistory(learningHistory);
|
||||
},
|
||||
|
||||
/**
|
||||
* 健康检查
|
||||
* @returns Promise<ResultDomain<string>>
|
||||
*/
|
||||
async health(): Promise<ResultDomain<string>> {
|
||||
const response = await api.get<string>('/study/history/health');
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user