|
|
@@ -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()
|