diff --git a/frontend/app/web-gold/src/hooks/web/useVoiceText.ts b/frontend/app/web-gold/src/hooks/web/useVoiceText.ts new file mode 100644 index 0000000000..af66705160 --- /dev/null +++ b/frontend/app/web-gold/src/hooks/web/useVoiceText.ts @@ -0,0 +1,61 @@ +import type { + AudioItem, + TranscriptionResult, + TranscriptionResponse, + TranscriptionData +} from '@gold/config/types' + +import BaiLianService from '@/api/bailian' + +/** + * 音频转文本 + * @param list - 音频项列表 + * @returns 转录结果数组 + */ +export async function getVoiceText( + list: AudioItem[] +): Promise { + const ret = await (BaiLianService as any).videoToCharacters({ + fileLinkList: list.map(item => item.audio_url), + }) + + const data: string = ret.data + const rst: TranscriptionResponse = JSON.parse(data) + const transcription_url: string[] = rst.results.map(item => item.transcription_url) + + const transcriptions: TranscriptionResult[] = await Promise.all( + (transcription_url || []).filter(Boolean).map(async (url: string): Promise => { + try { + const resp: Response = await fetch(url) + const contentType: string = resp.headers.get('content-type') || '' + const value: string = contentType.includes('application/json') + ? JSON.stringify(await resp.json()) + : await resp.text() + const parsed: TranscriptionData = JSON.parse(value) + return { + key: url, + audio_url: parsed.file_url, + value: parsed.transcripts?.[0]?.text || '' + } + } catch (e: unknown) { + console.warn('获取转写内容失败:', url, e) + return { key: url, value: '' } + } + }) + ) + return transcriptions +} + +interface UseVoiceTextReturn { + getVoiceText: (list: AudioItem[]) => Promise +} + +/** + * 语音文本转换Hook + * @returns 包含getVoiceText方法的对象 + */ +export default function useVoiceText(): UseVoiceTextReturn { + return { + getVoiceText + } +} diff --git a/frontend/app/web-gold/src/views/content-style/Copywriting.vue b/frontend/app/web-gold/src/views/content-style/Copywriting.vue index b552fb8219..309a0f2879 100644 --- a/frontend/app/web-gold/src/views/content-style/Copywriting.vue +++ b/frontend/app/web-gold/src/views/content-style/Copywriting.vue @@ -4,7 +4,7 @@ import { usePromptStore } from '@/stores/prompt' import MarkdownIt from 'markdown-it' import { message } from 'ant-design-vue' import { CommonService } from '@/api/common' -import useVoiceText from '@gold/hooks/web/useVoiceText' +import useVoiceText from '@/hooks/web/useVoiceText' import GmIcon from '@/components/icons/Icon.vue' import { UserPromptApi } from '@/api/userPrompt' import { useUserStore } from '@/stores/user' diff --git a/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js b/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js index 8a29ef1736..55bf504fef 100644 --- a/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js +++ b/frontend/app/web-gold/src/views/content-style/composables/useBenchmarkAnalysis.js @@ -1,7 +1,7 @@ import { ref } from 'vue' import { message } from 'ant-design-vue' import { ChatMessageApi } from '@/api/chat' -import useVoiceText from '@gold/hooks/web/useVoiceText' +import useVoiceText from '@/hooks/web/useVoiceText' import { streamChat } from '@/utils/streamChat' import { buildPromptFromTranscription } from '../utils/benchmarkUtils' diff --git a/frontend/app/web-gold/src/views/dh/VoiceCopy.vue b/frontend/app/web-gold/src/views/dh/VoiceCopy.vue index d681cdfa93..ba5e128326 100644 --- a/frontend/app/web-gold/src/views/dh/VoiceCopy.vue +++ b/frontend/app/web-gold/src/views/dh/VoiceCopy.vue @@ -63,6 +63,7 @@ ok-text="保存" cancel-text="取消" :confirm-loading="submitting" + :ok-button-props="{ disabled: isSubmitDisabled }" :mask-closable="false" centered @ok="handleSubmit" @@ -100,11 +101,21 @@

正在上传...

+