Selaa lähdekoodia

1、语音输入10秒倒计时,没结束点击发送的时候先结束语音
2、绑定生成主题下拉框数据

丸子 1 kuukausi sitten
vanhempi
sitoutus
f870443b73

+ 12 - 0
src/components/ai/image/ImageToImage.vue

@@ -300,6 +300,18 @@ const stopStream = async () => {
 // 发送消息函数,图片数据
 const sendMessage = async() => {
   if (uploadedImage.value) {
+    // 如果正在录音,先停止录音
+    if (isVoiceRecording.value) {
+      const voiceInputComponent = document.querySelector('.voice-input-container .speech-btn');
+      if (voiceInputComponent) {
+        voiceInputComponent.click();
+      }
+      // 等待录音结束后再发送
+      setTimeout(() => {
+        sendMessage();
+      }, 100);
+      return;
+    }
     // 创建 AbortController 实例,以便中止请求
     conversationInAbortController.value = new AbortController();
     // 标记对话进行中

+ 12 - 0
src/components/ai/text/TextToText.vue

@@ -320,6 +320,18 @@ const handleSendByKeydown = async (event) => {
 
 /** 处理来自【发送】按钮的发送消息 */
 const handleSendByButton = () => {
+    // 如果正在录音,先停止录音
+  if (isVoiceRecording.value) {
+    const voiceInputComponent = document.querySelector('.voice-input-container .speech-btn');
+    if (voiceInputComponent) {
+      voiceInputComponent.click();
+    }
+    // 等待录音结束后再发送
+    setTimeout(() => {
+      doSendMessage(prompt.value?.trim());
+    }, 100);
+    return;
+  }
   doSendMessage(prompt.value?.trim());
 };
 

+ 12 - 0
src/components/ai/video/ImageToVideo.vue

@@ -248,6 +248,18 @@ const stopStream = async () => {
 // 发送消息函数
 const sendMessage = async() => {
   if (uploadedImage.value) {
+    // 如果正在录音,先停止录音
+    if (isVoiceRecording.value) {
+      const voiceInputComponent = document.querySelector('.voice-input-container .speech-btn');
+      if (voiceInputComponent) {
+        voiceInputComponent.click();
+      }
+      // 等待录音结束后再发送
+      setTimeout(() => {
+        sendMessage(inputMessage.value);
+      }, 100);
+      return;
+    }
     // 创建 AbortController 实例,以便中止请求
     conversationInAbortController.value = new AbortController();
     // 标记对话进行中

+ 12 - 0
src/components/ai/vision/VisionThink.vue

@@ -241,6 +241,18 @@ const stopStream = async () => {
 // 发送消息函数
 const sendMessage = async() => {
   if (uploadedImage.value) {
+    // 如果正在录音,先停止录音
+    if (isVoiceRecording.value) {
+      const voiceInputComponent = document.querySelector('.voice-input-container .speech-btn');
+      if (voiceInputComponent) {
+        voiceInputComponent.click();
+      }
+      // 等待录音结束后再发送
+      setTimeout(() => {
+        sendMessage();
+      }, 100);
+      return;
+    }
     // 标记对话进行中
     conversationInProgress.value = true;
     // 先保存内容 再置空输入框

+ 5 - 10
src/components/study/SelfDirectedLearning.vue

@@ -918,17 +918,12 @@ const assistantOptions = computed(() => {
   return options;
 });
 
-// 计算生成主题下拉框选项,基于 lessonList 动态生成
+// 计算生成主题下拉框选项
 const courseOptions = computed(() => {
-  // 提取 lessonList 中的课程名称
-  const lessonNames = lessonList.value.map(lesson => lesson.name).join('、');
-  const options = [
-    {
-      label: `诗词课(${lessonNames})`,
-      value: '诗词课'
-    }
-  ];
-  console.log('【生成主题下拉框选项】', options);
+  const options = lessonList.value.map(lesson => ({
+    label: lesson.name,
+    value: lesson.id
+  }));
   return options;
 });