Files
aurak/web/src/services/assessmentStatsService.ts
T
Developer 649844a657 feat: 添加复查功能和批量审核操作
- 复查功能: PUT /assessment/:id/review
  * 支持调整最终总分
  * 记录复查历史(reviewHistory)
  * 保存原始分数(originalScore)
  * 保留复查人、复查时间、复查意见

- 批量审核: POST /question-banks/:bankId/items/batch-review
  * 支持批量通过/拒绝题目
  * 可添加审核意见

- AssessmentSession实体: 添加复查相关字段
2026-05-13 23:06:40 +08:00

52 lines
1.7 KiB
TypeScript

import { apiClient } from '../../services/apiClient';
export interface AssessmentStats {
totalAttempts: number;
highestScore: number;
averageScore: number;
completionRate: number;
recentRecords: {
id: string;
userId?: string;
knowledgeBase: string;
template: string;
score: number | null;
status: 'IN_PROGRESS' | 'COMPLETED';
createdAt: string;
user?: { id: string };
}[];
}
export interface StatsQueryParams {
startDate?: string;
endDate?: string;
templateId?: string;
knowledgeGroupId?: string;
}
export class AssessmentStatsService {
async getStats(params?: StatsQueryParams): Promise<AssessmentStats> {
const query = new URLSearchParams();
if (params?.startDate) query.set('startDate', params.startDate);
if (params?.endDate) query.set('endDate', params.endDate);
if (params?.templateId) query.set('templateId', params.templateId);
if (params?.knowledgeGroupId) query.set('knowledgeGroupId', params.knowledgeGroupId);
const queryString = query.toString();
const url = `/assessment/stats${queryString ? `?${queryString}` : ''}`;
const { data } = await apiClient.get<AssessmentStats>(url);
return data;
}
async reviewAssessment(sessionId: string, newScore: number, comment?: string): Promise<any> {
const response = await apiClient.request(`/assessment/${sessionId}/review`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ newScore, comment }),
});
if (!response.ok) throw new Error('Failed to review assessment');
return await response.json();
}
}
export const assessmentStatsService = new AssessmentStatsService();