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
+80
View File
@@ -0,0 +1,80 @@
import type {
CaseCurateResponse,
CaseOrganizeResponse,
CaseRecord,
CaseSelectedFile,
CaseUploadResponse
} from '@/types/api';
import { apiRequest, apiUrl, authHeaders, readTextPayload } from './api';
const audioExtensions = ['.mp3', '.wav', '.m4a', '.webm', '.aac', '.ogg'];
export const chooseCaseAudio = () =>
new Promise<CaseSelectedFile>((resolve, reject) => {
uni.chooseFile({
count: 1,
type: 'all',
extension: audioExtensions,
success: (result) => {
const tempFiles = Array.isArray(result.tempFiles) ? result.tempFiles : [];
const file = (tempFiles[0] || {}) as Partial<CaseSelectedFile>;
const path = file.path || result.tempFilePaths?.[0] || '';
if (!path) {
reject(new Error('未获取到文件路径'));
return;
}
resolve({
path,
name: file.name || path.split('/').pop() || 'case-audio',
size: Number(file.size || 0)
});
},
fail: () => reject(new Error('未选择音频'))
});
});
export const uploadCaseAudio = (file: CaseSelectedFile) =>
new Promise<CaseUploadResponse>((resolve, reject) => {
uni.uploadFile({
url: apiUrl('/api/knowledge/case/upload'),
filePath: file.path,
name: 'file',
header: authHeaders(false),
formData: {},
success: (response) => {
try {
resolve(readTextPayload<CaseUploadResponse>(response.statusCode, response.data));
} catch (error) {
reject(error);
}
},
fail: () => reject(new Error('案例音频上传失败'))
});
});
export const organizeCase = (caseId: string) =>
apiRequest<CaseOrganizeResponse>({
url: '/api/knowledge/case/organize',
method: 'POST',
data: { caseId },
timeout: 45000
});
export const curateCase = (caseId: string) =>
apiRequest<CaseCurateResponse>({
url: '/api/knowledge/case/curate',
method: 'POST',
data: {
caseId,
criteria: '一线可复用培训案例',
limit: 1
},
timeout: 30000
});
export const getCaseRecords = () =>
apiRequest<CaseRecord[]>({
url: '/api/knowledge/case/records?limit=10',
method: 'GET',
timeout: 15000
});