From be427ca931439f6aa067c30c78fa43b9b7f2cfc1 Mon Sep 17 00:00:00 2001 From: sion123 <450702724@qq.com> Date: Sun, 1 Mar 2026 20:44:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-gold/src/hooks/web/useVoiceText.ts | 61 +++++++++++++++++++ .../src/views/content-style/Copywriting.vue | 2 +- .../composables/useBenchmarkAnalysis.js | 2 +- .../app/web-gold/src/views/dh/VoiceCopy.vue | 57 +++++++++++++++-- .../web-gold/src/views/trends/Forecast.vue | 2 +- .../service/MemberUserProfileServiceImpl.java | 12 ++-- 6 files changed, 123 insertions(+), 13 deletions(-) create mode 100644 frontend/app/web-gold/src/hooks/web/useVoiceText.ts 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 @@

正在上传...

+