From 8aa7ffddc511138d61d64029157c11cfccc5431d Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期四, 10 四月 2025 13:30:25 +0800
Subject: [PATCH] VITE_OUTPUT_DIR

---
 src/components/chat/components/playBar/PlayBar.vue |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/src/components/chat/components/playBar/PlayBar.vue b/src/components/chat/components/playBar/PlayBar.vue
index 94e7d97..93aa6f6 100644
--- a/src/components/chat/components/playBar/PlayBar.vue
+++ b/src/components/chat/components/playBar/PlayBar.vue
@@ -145,7 +145,20 @@
 									<span class="ywifont ywicon-fujian !text-[20px] font-bold"></span>
 								</div>
 							</el-tooltip>
+						
 
+							<el-tooltip v-if="isSupportSpeech" placement="top" :content="recordState.isRecording ? '鍋滄璇煶杈撳叆' : '璇煶杈撳叆'">
+								<div class="cursor-pointer size-[24px] relative !z-10 rounded flex-center hover:bg-[#f2f2f2]" @click="speechClick">
+									<div v-if="recordState.isRecording" class="cursor-pointer flex items-center space-x-[1px]">
+										<div class="w-[2px] h-[6px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite]"></div>
+										<div class="w-[2px] h-[9px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.1s]"></div>
+										<div class="w-[2px] h-[12px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.2s]"></div>
+										<div class="w-[2px] h-[9px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.3s]"></div>
+										<div class="w-[2px] h-[6px] bg-[#0284ff] animate-[soundWave_1.5s_ease-in-out_infinite_0.4s]"></div>
+									</div>
+									<span v-else class="ywifont ywicon-maikefeng !text-[20px]"></span>
+								</div>
+							</el-tooltip>
 							<el-tooltip placement="top" content="鍋滄鐢熸垚" v-if="isTalking">
 								<div class="cursor-pointer !ml-0 size-[38px] bg-[#1d86ff] relative !z-10 rounded-full flex-center" link>
 									<div
@@ -157,7 +170,7 @@
 								</div>
 							</el-tooltip>
 							<el-tooltip v-else placement="top" content="鍙戦��">
-								<div class="size-[38px] rounded-full bg-black flex-center" @click="emits('sendClick')">
+								<div class="size-[38px] rounded-full bg-black flex-center" @click="sendClick">
 									<img src="/static/images/wave/QueryImg.png" />
 								</div>
 							</el-tooltip>
@@ -207,6 +220,8 @@
 import { newChatRoomClick, sidebarIsShow, toggleSidebar } from '/@/stores/chatRoom';
 
 import MetricValuesPreview from './metricValues/MetricValuesPreview.vue';
+import { useSpeech } from './hook/useSpeech';
+import { useDigitalHuman } from './hook/useDigitalHuman';
 
 const emits = defineEmits(['sendClick', 'stopGenClick']);
 const props = defineProps({
@@ -214,6 +229,13 @@
 	isHome: Boolean,
 	msgList: Array,
 });
+
+const sendClick = () => {
+	if (recordState.isRecording) {
+		cancelRecording();
+	}
+	emits('sendClick');
+};
 
 const voicePageIsShow = defineModel('voicePageIsShow', {
 	type: Boolean,
@@ -236,7 +258,9 @@
 	inputValue: inputValue,
 	inputRef: inputRef,
 });
-
+const { openDigitalHuman, isHumanTalking, digitalHumanIsShow } = useDigitalHuman({
+	container: '.duix-container',
+});
 const clearTextarea = () => {
 	inputValue.value = '';
 };
@@ -245,6 +269,18 @@
 	inputRef.value.focus();
 	commonPhraseRef.value.updatePhrase();
 };
+
+const speechClick = () => {
+	if (recordState.isRecording) {
+		stopRecording();
+	} else {
+		startRecording();
+	}
+};
+
+const { isSupportSpeech, startRecording, stopRecording, recordState, cancelRecording } = useSpeech({
+	inputText: inputValue,
+});
 
 //#region ====================== 甯哥敤璇姛鑳� ======================
 const commonPhraseRef = useCompRef(CommonPhrases);
@@ -292,6 +328,7 @@
 	pastTarget: inputRef as any,
 	attachFileList: attachList,
 });
+
 const deleteAttachInIndex = (index: number) => {
 	const attach = attachList.value[index];
 	if (attach.type === 'file') {

--
Gitblit v1.9.3