Explorar el Código

Merge remote-tracking branch 'origin/wanzi'

liyanbo hace 1 mes
padre
commit
cd12bdec56

+ 1 - 1
src/views/AIPage/AIGeneralCourse.vue

@@ -131,7 +131,6 @@
           class="small-box"
           v-for="(outlineData, index) in currentCourseData"
           :key="index"
-          @click="goToAIExperience(outlineData)"
         >
           <div
             class="nested-box"
@@ -139,6 +138,7 @@
               backgroundImage: `url(${outlineData.ctTypeImage})`,
               backgroundSize: 'cover'
             }"
+            @click="goToAIExperience(outlineData)"
           ></div>
           <div class="additional-text">
             {{ outlineData.ctTypeSort }} {{ outlineData.ctType }}

+ 13 - 6
src/views/AIPage/aiGenerate/DialogContent.vue

@@ -379,8 +379,11 @@ const togglePlay = () => {
   if (isPlaying.value) {
     // 播放背景音
     playBackgroundAudio()
-    // 开始播放序列
-    playSequence()
+
+    if(!getIsPlaying() || !conversationInProgress.value){
+      // 开始播放序列
+      playSequence()
+    }
   } else {
     // 暂停所有音频
     stopAllAudio()
@@ -800,14 +803,18 @@ const stopStream = async () => {
 // 处理音频播放完成
 const handleAudioPlaybackComplete = () => {
   console.log('智能问答音频播放完成');
-  // AI回答完成后,如果之前是播放状态,继续播放
+
+  // 先清除回调,防止 playNext 内部调用 stopPlayback(false) 时
+  // 关闭 audioContext 触发 source.onended → processAudioQueue → 再次触发回调,造成二次跳转
+  setOnPlaybackComplete(null);
 
   stopAllAudio();
   // 如果处于自动播放状态,继续播放下一条对话
   if (isPlaying.value) {
-    if (playNext()) {
-      // 继续自动播放序列
-      playSequence();
+    // 恢复回调,供下一条 AI 对话使用
+    setOnPlaybackComplete(handleAudioPlaybackComplete);
+    if (playNext(true)) {
+      // playNext 内部已调用 playDialogueAudio(true),无需再调 playSequence
     } else {
       // 播放完毕
       isPlaying.value = false;