feat(aihr): finalize practice growth and access boundaries

This commit is contained in:
2026-07-25 00:42:19 +08:00
parent a90f40e4d8
commit c9d2012ec1
87 changed files with 6804 additions and 2538 deletions
+69
View File
@@ -18,6 +18,17 @@ export type PracticeScenarioResponse = {
position: string;
scenarioType: string;
projectType: string;
growthLevel: string;
competencyCode: string;
collaborationPositions: string;
reviewStatus: string;
riskLevel: '待评估' | '常规' | '高风险';
requiresDualReview: boolean;
curriculumVersion: string;
reviewer?: string;
reviewedTime?: string;
secondReviewer?: string;
secondReviewedTime?: string;
difficulty: number;
customerPersona: string;
openingText: string;
@@ -58,6 +69,11 @@ export type PracticeScenarioSaveRequest = {
position: string;
scenarioType: string;
projectType: string;
growthLevel: string;
competencyCode: string;
collaborationPositions: string;
riskLevel: '待评估' | '常规' | '高风险';
curriculumVersion: string;
difficulty: number;
customerPersona: string;
openingText: string;
@@ -73,6 +89,35 @@ export type PracticeScenarioSaveRequest = {
rounds: PracticeScenarioRound[];
};
export type PracticeScenarioReviewStatusRequest = {
reviewStatus: '草稿' | '待业务审核' | '已发布' | '已下线';
};
export type PracticeScenarioReviewStatusResponse = {
reviewStatus: '草稿' | '待业务审核' | '已发布' | '已下线';
awaitingSecondReview: boolean;
message: string;
};
export type PracticeCurriculumCapability = {
position: string;
growthLevel: string;
code: string;
name: string;
};
export type PracticeCurriculumMatrixRow = {
position: string;
growthLevel: string;
competencyCode: string;
competencyName: string;
publishedCount: number;
pendingReviewCount: number;
draftCount: number;
offlineCount: number;
coverageStatus: string;
};
export type PracticeRubricDimension = {
code: string;
name: string;
@@ -289,6 +334,30 @@ export function updatePracticeScenarioEnabled(id: string, data: PracticeScenario
});
}
export function updatePracticeScenarioReviewStatus(
id: string,
data: PracticeScenarioReviewStatusRequest
): Promise<ApiResult<PracticeScenarioReviewStatusResponse>> {
return request({
url: `/api/train/practice/scenarios/${encodeURIComponent(id)}/review-status`,
method: 'patch',
data
});
}
export function listPracticeCurriculumCapabilities(params?: {
position?: string;
growthLevel?: string;
}): Promise<ApiResult<PracticeCurriculumCapability[]>> {
return request({ url: '/api/train/practice/curriculum/capabilities', method: 'get', params });
}
export function listPracticeCurriculumMatrix(params?: {
position?: string;
}): Promise<ApiResult<PracticeCurriculumMatrixRow[]>> {
return request({ url: '/api/train/practice/curriculum/matrix', method: 'get', params });
}
export function savePracticeScenario(data: PracticeScenarioSaveRequest): Promise<ApiResult<PracticeScenarioResponse>> {
return request({
url: '/api/train/practice/scenarios',