Просмотр исходного кода

feat(speaking): create new slide when adding tool from recommend card

Match the existing addContent flow in CollapsibleToolbar (createSlide → insertContent), so clicking a recommend card or the manual-create button always lands the speaking tool on a fresh slide instead of erroring when the current slide already has a frame.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jimmylee 1 неделя назад
Родитель
Сommit
34423451c1
1 измененных файлов с 4 добавлено и 10 удалено
  1. 4 10
      src/views/Editor/EnglishSpeaking/layers/Layer2Speaking.vue

+ 4 - 10
src/views/Editor/EnglishSpeaking/layers/Layer2Speaking.vue

@@ -75,12 +75,11 @@
 
 <script lang="ts" setup>
 import { ref, computed } from 'vue'
-import { storeToRefs } from 'pinia'
 import { lang } from '@/main'
 import type { CreationMode, TopicDiscussionTask } from '@/types/englishSpeaking'
 import { useSpeakingStore } from '@/store/speaking'
-import { useSlidesStore } from '@/store'
 import useCreateElement from '@/hooks/useCreateElement'
+import useSlideHandler from '@/hooks/useSlideHandler'
 import { createSpeakingConfig } from '@/services/speaking'
 import message from '@/utils/message'
 import tasksData from '../data/topicDiscussionTasks.json'
@@ -130,22 +129,17 @@ const filteredTasks = computed(() => {
   return unitTasks.value
 })
 
-// 新交互:点卡片即创建配置 + 插入画布元素;配置页改由"点击画布里的 77 型元素"唤起
+// 新交互:点卡片即新建一页 + 创建配置 + 插入画布元素;配置页改由"点击画布里的 77 型元素"唤起
 const { createFrameElement } = useCreateElement()
-const { currentSlide } = storeToRefs(useSlidesStore())
+const { createSlide } = useSlideHandler()
 const inserting = ref(false)
 
 async function insertSpeakingToolToCanvas(source: 'select' | 'manual') {
   if (inserting.value) return
-  // 防御:当前 slide 已有 frame(不管类型)则阻止(createFrameElement 内部也会挡)
-  const hasFrame = currentSlide.value?.elements?.some((el: any) => el.type === 'frame')
-  if (hasFrame) {
-    message.error(lang.ssSlideLearn as string)
-    return
-  }
   inserting.value = true
   try {
     const { id } = await createSpeakingConfig(speakingStore.config)
+    createSlide()
     createFrameElement(id, 77)
     // 创建后立即唤起左侧配置面板(与点击画布 77 型 frame 同款信号),使用户可直接编辑
     speakingStore.openConfigPanel()