feat(aihr): complete uni-app role workflows

This commit is contained in:
2026-07-09 10:42:20 +08:00
parent e4070c8b8c
commit 678543e8a5
73 changed files with 15696 additions and 134 deletions
+380
View File
@@ -0,0 +1,380 @@
export interface ApiPayload<T> {
code?: number;
msg?: string;
data?: T;
}
export interface LoginResult {
access_token: string;
client_id: string;
}
export type RoleKey = 'user' | 'supervisor' | 'candidate';
export interface ToolItem {
title: string;
desc: string;
tone?: string;
}
export interface PrimaryTask {
badge: string;
title: string;
desc: string;
progressText: string;
progress: number;
cta: string;
}
export interface TodoItem extends ToolItem {
count: number;
}
export interface ReviewTask {
title: string;
desc: string;
}
export interface RoleHome {
role: RoleKey;
roleLabel: string;
greeting: string;
location: string;
toolTitle?: string;
recommend?: string;
primary?: PrimaryTask;
review?: ReviewTask;
tools?: ToolItem[];
todos?: TodoItem[];
}
export interface KnowledgeSnippet {
docTitle: string;
content: string;
source?: string;
fragmentId?: number | null;
}
export interface KnowledgeDoc {
title: string;
category?: string;
score?: number;
}
export interface KnowledgeSearchResponse {
queryText: string;
category: string;
answer: string;
reference: string;
docs: KnowledgeDoc[];
snippets: KnowledgeSnippet[];
training: string[];
records: unknown[];
keyPoints?: string[];
cautions?: string[];
}
export type AnswerFeedbackVerdict = 'up' | 'down';
export interface SummaryCardStep {
label: string;
desc: string;
}
export interface SummaryCardObjection {
concern: string;
response: string;
}
export interface SummaryCardResponse {
title: string;
steps: SummaryCardStep[];
objections: SummaryCardObjection[];
scripts: string[];
reminders: string[];
}
export type PracticeRole = 'customer' | 'trainee' | 'coach';
export interface PracticeTurn {
role: PracticeRole;
text: string;
}
export interface PracticeStartResponse {
sessionId: string;
scenarioId: string;
scenarioName: string;
trainee: string;
customerText: string;
emotion?: number;
trust?: number;
customerAudioUrl?: string;
}
export interface PracticePrepCard {
keyPoints: string[];
redLines: string[];
scripts: string[];
promptVersion: string;
}
export interface PracticeTurnResponse {
customerText: string;
customerAudioUrl?: string;
emotion?: number;
trust?: number;
coachHint?: string;
redFlag?: boolean;
roundIndex: number;
finished: boolean;
message?: string;
}
export interface PracticeDimensionScore {
name: string;
score: number;
comment?: string;
}
export interface PracticeFinishResponse {
totalScore: number;
score?: PracticeDimensionScore[];
mentorRewrite: string;
aiComment: string;
trustCurve?: number[];
}
export interface PracticeRecord {
id?: number;
sessionId?: string;
extPartyId?: string;
time: string;
trainee: string;
scene: string;
score: number;
status: string;
summary: string;
}
export interface ReviewDialogue {
role: string;
label: string;
text: string;
audioUrl?: string;
}
export interface ReviewAnnotation {
turnIndex: number;
sourceText: string;
issue: string;
rewrite: string;
sopPoint: string;
}
export interface ReviewDetail extends PracticeRecord {
mentorRewrite: string;
aiComment: string;
reviewAdvice?: string;
incentivePoint?: number;
scoreItems: CompetencyDimension[];
dialogue: ReviewDialogue[];
annotations: ReviewAnnotation[];
}
export interface ReviewAdviceRequest {
reviewer?: string;
advice?: string;
incentivePoint?: number;
nextScenarioId?: string;
nextReason?: string;
}
export interface PracticeAssignment {
id: number;
extPartyId: string;
traineeName: string;
scenarioId: string;
scenarioName: string;
source: string;
reason: string;
status: string;
createTime: string;
question?: string;
referenceAnswer?: string;
userAnswer?: string;
feedback?: string;
correct?: boolean | null;
}
export interface PracticeAssignmentRequest {
extPartyId: string;
traineeName?: string;
scenarioId?: string;
scenarioName?: string;
source?: string;
reason?: string;
}
export interface DailyDrillAnswerResponse {
id: number;
status: string;
correct: boolean;
score: number;
feedback: string;
referenceAnswer: string;
}
export interface PracticeAlert {
type: string;
title: string;
desc: string;
severity: string;
extPartyId?: string;
}
export interface CandidateMaterial {
id: number | string;
ossId: number | string;
fileName: string;
materialType: string;
fileSize: number;
status: string;
time: string;
}
export interface CandidateSelectedFile {
path: string;
name: string;
size: number;
}
export interface CaseSelectedFile {
path: string;
name: string;
size: number;
}
export interface CaseTag {
text: string;
type: string;
}
export interface CaseSummaryItem {
label: string;
text: string;
}
export interface CaseRecord {
title: string;
type: string;
status: string;
time: string;
owner: string;
summary: string;
}
export interface CaseUploadResponse {
caseId: string;
fileName: string;
transcript: string;
tags: CaseTag[];
source: string;
}
export interface CaseOrganizeResponse {
caseId: string;
summary: CaseSummaryItem[];
tags: CaseTag[];
aiSummary: string;
source: string;
}
export interface CaseCurateResponse {
selectedCaseIds: string[];
records: CaseRecord[];
sampleHint: string;
}
export interface InterviewQuestion {
questionId: string;
seq: number;
questionText: string;
point: string;
scenario: string;
sampleAnswer: string;
}
export interface InterviewStartResponse {
sessionId: string;
candidateId: string;
candidateName: string;
positionCode: string;
questions: InterviewQuestion[];
source: string;
}
export interface InterviewDimension {
label: string;
value: number | string;
note: string;
}
export interface InterviewRecord {
time: string;
candidate: string;
position: string;
score: number;
result: string;
summary: string;
}
export interface InterviewFinishResponse {
totalScore: number;
suggestion: string;
result: string;
aiSummary: string;
evidence: string;
dimensions: InterviewDimension[];
records: InterviewRecord[];
source: string;
}
export interface CompetencyDimension {
label: string;
value: number | string;
note: string;
}
export interface GrowthStage {
level: string;
progress: number;
status: string;
evidence: string;
}
export interface CompetencyProfile {
score: number;
completed: number;
pendingReview: number;
trainingMinutes?: number;
contribution?: number;
assessmentScore?: number;
aiLevel?: string;
dimensions: CompetencyDimension[];
growthPath?: GrowthStage[];
}
export interface PromotionEvidence {
extPartyId: string;
currentLevel: string;
assessmentScore: number;
trainingMinutes: number;
contribution: number;
completed: number;
pendingReview: number;
dimensions: CompetencyDimension[];
latestRecords: PracticeRecord[];
assignments: PracticeAssignment[];
evidenceItems: string[];
}