feat: restore learning feedback and knowledge capabilities

This commit is contained in:
2026-07-18 00:50:11 +08:00
parent 876a23a123
commit 6bdc86e3fc
152 changed files with 30337 additions and 953 deletions
+63 -1
View File
@@ -13,10 +13,14 @@ import type {
OnboardTask,
QualificationSummary,
PracticeAssignmentRequest,
PracticeAssignmentBatchRequest,
PracticeAssignmentBatchResponse,
DailyDrillAnswerResponse,
PracticeAlert,
PromotionEvidence,
PracticeScenarioOption
PracticeScenarioOption,
PracticeDifficulty,
PracticeQuestionFeedback
} from '@/types/api';
import { apiRequest } from './api';
import { getAuth, getSelectedPosition } from './auth';
@@ -206,6 +210,14 @@ export const createPracticeAssignment = (data: PracticeAssignmentRequest) =>
timeout: 15000
});
export const createPracticeAssignmentsBatch = (data: PracticeAssignmentBatchRequest) =>
apiRequest<PracticeAssignmentBatchResponse>({
url: '/api/aihr/mobile/practice/assignments/batch',
method: 'POST',
data,
timeout: 30000
});
export const answerDailyDrill = (id: number, answer: string, audioUrl?: string, audioOssId?: number) =>
apiRequest<DailyDrillAnswerResponse>({
url: `/api/aihr/mobile/practice/assignments/${id}/answer`,
@@ -220,3 +232,53 @@ export const getPracticeAlerts = () =>
method: 'GET',
timeout: 15000
});
export const submitPracticeQuestionFeedback = (
assignmentId: number,
verdict: PracticeQuestionFeedback['verdict'],
comment = ''
) =>
apiRequest<PracticeQuestionFeedback>({
url: `/api/aihr/mobile/practice/assignments/${assignmentId}/feedback`,
method: 'POST',
data: { verdict, comment },
timeout: 15000
});
export const getPracticeDifficulties = async (windowDays = 30, position = ''): Promise<PracticeDifficulty[]> => {
const rows = await apiRequest<Array<{
scenarioId: string;
scenarioName: string;
position?: string;
attempts: number;
mistakeCount: number;
affectedPeople: number;
averageScore: number;
difficultyScore: number;
latestTime: string;
}>>({
url: `/api/aihr/mobile/practice/difficulties?windowDays=${windowDays}${position ? `&position=${encodeURIComponent(position)}` : ''}`,
method: 'GET',
timeout: 15000
});
return rows.map((item) => ({
...item,
cause: item.mistakeCount >= Math.max(2, Math.ceil(item.attempts / 2)) ? '高频错题或低分' : '近期低分记录',
count: item.mistakeCount
}));
};
export const assignPracticeDifficulty = (data: {
scenarioId: string;
cause: string;
dueDate: string;
requestId: string;
windowDays: number;
position?: string;
}) =>
apiRequest<PracticeAssignmentBatchResponse>({
url: '/api/aihr/mobile/practice/difficulties/assign',
method: 'POST',
data,
timeout: 30000
});