feat(aihr): align figma pages for release

This commit is contained in:
2026-07-14 02:04:36 +08:00
parent 922fe7ff29
commit 87360a25d3
51 changed files with 3575 additions and 629 deletions
+64
View File
@@ -42,6 +42,46 @@ export type PracticeScenarioEnabledRequest = {
enabled: boolean;
};
export type PracticeScenarioSaveRequest = {
id?: string;
name: string;
position: string;
scenarioType: string;
projectType: string;
difficulty: number;
customerPersona: string;
openingText: string;
explicitNeed: string;
hiddenNeed: string;
irritants: string;
delights: string;
sopRefs: string;
successCriteria: string;
strategy: string;
goal: string;
enabled: boolean;
};
export type PracticeRubricDimension = {
code: string;
name: string;
weight: number;
description: string;
};
export type PracticeRubricAdmin = {
code: string;
scenarioCode: string;
scenarioName: string;
name: string;
version: string;
enabled: boolean;
description: string;
dimensions: PracticeRubricDimension[];
};
export type PracticeRubricSaveRequest = Omit<PracticeRubricAdmin, 'scenarioName'>;
export type PracticePrepCardResponse = {
keyPoints: string[];
redLines: string[];
@@ -174,6 +214,30 @@ export function updatePracticeScenarioEnabled(id: string, data: PracticeScenario
});
}
export function savePracticeScenario(data: PracticeScenarioSaveRequest): Promise<ApiResult<PracticeScenarioResponse>> {
return request({
url: '/api/train/practice/scenarios',
method: 'post',
data
});
}
export function listPracticeRubrics(): Promise<ApiResult<PracticeRubricAdmin[]>> {
return request({ url: '/api/train/practice/rubrics/manage', method: 'get' });
}
export function savePracticeRubric(data: PracticeRubricSaveRequest): Promise<ApiResult<PracticeRubricAdmin>> {
return request({ url: '/api/train/practice/rubrics/manage', method: 'post', data });
}
export function updatePracticeRubricEnabled(code: string, enabled: boolean): Promise<ApiResult<null>> {
return request({
url: `/api/train/practice/rubrics/${encodeURIComponent(code)}/enabled`,
method: 'patch',
data: { enabled }
});
}
export function getPracticePrepCard(id: string): Promise<ApiResult<PracticePrepCardResponse>> {
return request({
url: `/api/train/practice/scenarios/${id}/prep-card`,
+36
View File
@@ -48,6 +48,25 @@ export type SopReviewResponse = {
reviewedAt: string;
};
export type AnswerFeedbackItem = {
id: number;
queryText: string;
queryNorm: string;
fragmentId: number;
verdict: string;
category: string;
position: string;
source: string;
reviewStatus: string;
createTime: string;
updateTime: string;
};
export type AnswerFeedbackReviewResponse = {
id: number;
reviewStatus: string;
};
export type SopUploadResponse = {
docId: string;
ossId: number;
@@ -87,6 +106,23 @@ export function reviewKnowledgeSop(id: number, data: { usable: boolean; reviewer
});
}
export function listAnswerFeedback(status = '待复核', limit = 50): Promise<ApiResult<AnswerFeedbackItem[]>> {
return request({
url: '/api/knowledge/answer-feedback',
method: 'get',
params: { status, limit },
headers: { repeatSubmit: false }
});
}
export function reviewAnswerFeedback(id: number): Promise<ApiResult<AnswerFeedbackReviewResponse>> {
return request({
url: `/api/knowledge/answer-feedback/${id}/review`,
method: 'post',
headers: { repeatSubmit: false }
});
}
export type UploadEnqueueResponse = {
itemId: number;
batchId: string;