81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
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
|
|
});
|