fix: 代码整合修复 - Entity类型、题库生成、评估流程等14项修复

This commit is contained in:
Developer
2026-05-14 09:55:07 +08:00
parent 122ab5e96f
commit 368eddfd75
17 changed files with 1666 additions and 115 deletions
+109 -1
View File
@@ -28,6 +28,40 @@ export interface AssessmentState {
finalScore?: number;
}
export interface Certificate {
id: string;
level: string;
totalScore: number;
passed: boolean;
issuedAt: string;
qrCode?: string;
dimensionScores?: Record<string, number>;
}
export interface TimeCheck {
totalTimeRemaining: number;
questionTimeRemaining: number;
isTotalTimeout: boolean;
isQuestionTimeout: boolean;
}
export interface StatsData {
totalAssessments: number;
averageScore: number;
completionRate: number;
passRate: number;
}
export interface RadarData {
dimensions: Record<string, number>;
}
export interface TrendData {
date: string;
score: number;
count: number;
}
export class AssessmentService {
async startSession(knowledgeBaseId: string, language: string, templateId?: string): Promise<AssessmentSession> {
const { data } = await apiClient.post<AssessmentSession>('/assessment/start', { knowledgeBaseId, language, templateId });
@@ -43,7 +77,12 @@ export class AssessmentService {
}
async getHistory(): Promise<AssessmentSession[]> {
const { data } = await apiClient.get<AssessmentSession[]>('/assessment');
const { data } = await apiClient.get<AssessmentSession[]>('/assessment/history');
return data;
}
async getUserHistory(): Promise<AssessmentSession[]> {
const { data } = await apiClient.get<AssessmentSession[]>('/assessment/history');
return data;
}
@@ -51,6 +90,75 @@ export class AssessmentService {
await apiClient.delete(`/assessment/${sessionId}`);
}
async getCertificate(sessionId: string): Promise<Certificate> {
const { data } = await apiClient.get<Certificate>(`/assessment/${sessionId}/certificate`);
return data;
}
async reviewAssessment(sessionId: string, newScore: number, comment?: string): Promise<AssessmentSession> {
const { data } = await apiClient.put<AssessmentSession>(`/assessment/${sessionId}/review`, { newScore, comment });
return data;
}
async getStats(startDate?: string, endDate?: string, templateId?: string, knowledgeGroupId?: string): Promise<StatsData> {
const params = new URLSearchParams();
if (startDate) params.append('startDate', startDate);
if (endDate) params.append('endDate', endDate);
if (templateId) params.append('templateId', templateId);
if (knowledgeGroupId) params.append('knowledgeGroupId', knowledgeGroupId);
const { data } = await apiClient.get<StatsData>(`/assessment/stats?${params.toString()}`);
return data;
}
async getRadarStats(templateId?: string): Promise<RadarData> {
const params = templateId ? `?templateId=${templateId}` : '';
const { data } = await apiClient.get<RadarData>(`/assessment/stats/radar${params}`);
return data;
}
async getTrendStats(startDate?: string, endDate?: string): Promise<TrendData[]> {
const params = new URLSearchParams();
if (startDate) params.append('startDate', startDate);
if (endDate) params.append('endDate', endDate);
const { data } = await apiClient.get<TrendData[]>(`/assessment/stats/trend?${params.toString()}`);
return data;
}
async checkTimeLimits(sessionId: string): Promise<TimeCheck> {
const { data } = await apiClient.get<TimeCheck>(`/assessment/${sessionId}/time-check`);
return data;
}
async startNextQuestion(sessionId: string): Promise<{ success: boolean }> {
const { data } = await apiClient.post<{ success: boolean }>(`/assessment/${sessionId}/next-question`, {});
return data;
}
async exportExcel(sessionId: string): Promise<{ filename: string; buffer: string }> {
const { data } = await apiClient.get<{ filename: string; buffer: string }>(`/assessment/${sessionId}/export/excel`);
return data;
}
async exportPdf(sessionId: string): Promise<{ filename: string; content: string }> {
const { data } = await apiClient.get<{ filename: string; content: string }>(`/assessment/${sessionId}/export/pdf`);
return data;
}
async forceEnd(sessionId: string): Promise<AssessmentSession> {
const { data } = await apiClient.post<AssessmentSession>(`/assessment/${sessionId}/force-end`, {});
return data;
}
async verifyCertificate(certificateId: string): Promise<{ valid: boolean; certificate?: Certificate; message?: string }> {
const { data } = await apiClient.get(`/assessment/certificate/verify/${certificateId}`);
return data;
}
async getPublicCertificate(sessionId: string): Promise<{ exists: boolean; certificate?: Certificate; message?: string }> {
const { data } = await apiClient.get(`/assessment/certificate/public/${sessionId}`);
return data;
}
async *startSessionStream(sessionId: string, templateId?: string): AsyncIterableIterator<any> {
const query = templateId ? `?templateId=${templateId}` : '';
const response = await apiClient.request(`/assessment/${sessionId}/start-stream${query}`, {