|
@@ -189,80 +189,6 @@ const checkImagesCompleteTimer = ref(null) // 图片完成检查定时器
|
|
|
// 单个脚本数据的缓存键(用于存储最终生成的脚本数据)
|
|
// 单个脚本数据的缓存键(用于存储最终生成的脚本数据)
|
|
|
const SCRIPT_DATA_KEY = 'scriptData'
|
|
const SCRIPT_DATA_KEY = 'scriptData'
|
|
|
|
|
|
|
|
-// 小节列表(包含详细讲解要求,适用于所有课程类型)
|
|
|
|
|
-const lessonList = ref([
|
|
|
|
|
- {
|
|
|
|
|
- id: '1',
|
|
|
|
|
- name: '课程引入',
|
|
|
|
|
- description: '作为课程的开篇,建立学习背景,引发学生兴趣',
|
|
|
|
|
- requirements: `
|
|
|
|
|
- 1. 介绍课程主题的背景知识(如相关历史、文化背景或基本概念)
|
|
|
|
|
- 2. 用生动有趣的方式引发学生兴趣(可以讲一个小故事或提一个有趣的问题)
|
|
|
|
|
- 3. 明确本节课程的学习目标和预期收获
|
|
|
|
|
- 4. 简单介绍课程内容的整体框架和重点
|
|
|
|
|
- 5. 结尾用自然的过渡语引导到正式讲解
|
|
|
|
|
- 要求:语言亲切自然,符合学生认知水平,篇幅适中,结构为:问候→背景介绍→学习目标→过渡语
|
|
|
|
|
- `.trim()
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '2',
|
|
|
|
|
- name: '知识讲解',
|
|
|
|
|
- description: '深入解析课程内容,详细讲解知识点',
|
|
|
|
|
- requirements: `
|
|
|
|
|
- 1. 详细讲解课程核心内容(如知识点、概念、原理等,确保覆盖所有关键内容)
|
|
|
|
|
- 2. 分析内容中的重点和难点,结合实例进行说明
|
|
|
|
|
- 3. 解读内容所表达的思想、情感或核心价值
|
|
|
|
|
- 4. 介绍关键术语的含义、用法和相关知识
|
|
|
|
|
- 5. 设计1-2个互动问题引导学生思考和应用知识点
|
|
|
|
|
- 要求:讲解详细透彻,逻辑清晰,确保学生理解每一个知识点,结构为:内容解析→重点分析→实例说明→互动提问
|
|
|
|
|
- `.trim()
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '3',
|
|
|
|
|
- name: '课程总结',
|
|
|
|
|
- description: '回顾课程内容,总结要点,拓展延伸',
|
|
|
|
|
- requirements: `
|
|
|
|
|
- 1. 回顾本节课的核心知识点(重点内容复述)
|
|
|
|
|
- 2. 概括课程的主旨思想和核心要点
|
|
|
|
|
- 3. 总结学习方法和要点(帮助记忆)
|
|
|
|
|
- 4. 联系生活实际,进行拓展延伸
|
|
|
|
|
- 5. 布置简单的课后思考或练习建议
|
|
|
|
|
- 要求:条理清晰,重点突出,语言简洁,易于记忆,篇幅适中,结构为:回顾要点→总结方法→拓展延伸→课后建议
|
|
|
|
|
- `.trim()
|
|
|
|
|
- },
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- {
|
|
|
|
|
- id: '4',
|
|
|
|
|
- name: '初识诗境',
|
|
|
|
|
- description: '读·共读辨情,初识诗境',
|
|
|
|
|
- requirements: ``.trim()
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '5',
|
|
|
|
|
- name: '解码精神',
|
|
|
|
|
- description: '悟·深究共情,解码精神',
|
|
|
|
|
- requirements: ``.trim()
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '6',
|
|
|
|
|
- name: '联结现实',
|
|
|
|
|
- description: '用·印证文脉,联结现实',
|
|
|
|
|
- requirements: ``.trim()
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '7',
|
|
|
|
|
- name: '创意表达',
|
|
|
|
|
- description: '创·汲智明志,创意表达',
|
|
|
|
|
- requirements: ``.trim()
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: '8',
|
|
|
|
|
- name: '知行合一',
|
|
|
|
|
- description: '评·多元评价,知行合一',
|
|
|
|
|
- requirements: ``.trim()
|
|
|
|
|
- },
|
|
|
|
|
-])
|
|
|
|
|
// 主讲人、助讲人
|
|
// 主讲人、助讲人
|
|
|
const selectedMainTeacher = ref('')
|
|
const selectedMainTeacher = ref('')
|
|
|
const selectedAssistants = ref([''])
|
|
const selectedAssistants = ref([''])
|
|
@@ -568,15 +494,22 @@ const generateScript = async () => {
|
|
|
const courseLessons = []
|
|
const courseLessons = []
|
|
|
scriptData.lessons = []
|
|
scriptData.lessons = []
|
|
|
|
|
|
|
|
|
|
+ // 根据选中的主题获取对应的课程小节列表
|
|
|
|
|
+ const selectedTheme = themeOptions.value.find(item => item.value === courseDropdown.value.value)
|
|
|
|
|
+ if (!selectedTheme || !selectedTheme.lessonList || selectedTheme.lessonList.length === 0) {
|
|
|
|
|
+ throw new Error('未找到对应主题的课程小节配置')
|
|
|
|
|
+ }
|
|
|
|
|
+ const currentLessonList = selectedTheme.lessonList
|
|
|
|
|
+
|
|
|
// 循环生成每节课程内容(从第0节开始)
|
|
// 循环生成每节课程内容(从第0节开始)
|
|
|
- for (let i = 0; i < lessonList.value.length; i++) {
|
|
|
|
|
|
|
+ for (let i = 0; i < currentLessonList.length; i++) {
|
|
|
// 检查是否已取消或组件已卸载
|
|
// 检查是否已取消或组件已卸载
|
|
|
if (isCancelled.value || isUnmounted.value) {
|
|
if (isCancelled.value || isUnmounted.value) {
|
|
|
throw new Error('生成已取消')
|
|
throw new Error('生成已取消')
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- let lesson = lessonList.value[i]
|
|
|
|
|
- progressSteps.value[1].text = "生成课程小节【" + lesson.name + "】..."
|
|
|
|
|
|
|
+ let lesson = currentLessonList[i]
|
|
|
|
|
+ progressSteps.value[1].text = "生成课程小节【" + lesson.name + "】(" + (i+1) + "/" + currentLessonList.length + ")..."
|
|
|
|
|
|
|
|
// 构建当前小节的专属提示词(只针对当前小节)
|
|
// 构建当前小节的专属提示词(只针对当前小节)
|
|
|
let content = `${baseContent}。这是系列课程的第${i+1}节,本节主题:【${lesson.name}】。${lesson.requirements}`
|
|
let content = `${baseContent}。这是系列课程的第${i+1}节,本节主题:【${lesson.name}】。${lesson.requirements}`
|
|
@@ -1349,7 +1282,7 @@ const showNewContainer = ref(false);
|
|
|
|
|
|
|
|
// 生成进度步骤(4个步骤)
|
|
// 生成进度步骤(4个步骤)
|
|
|
const progressSteps = ref([
|
|
const progressSteps = ref([
|
|
|
- { text: '生成课程脚本...', completed: false, active: false, visible: false, progress: 0 },
|
|
|
|
|
|
|
+ { text: '生成课程主题...', completed: false, active: false, visible: false, progress: 0 },
|
|
|
{ text: '生成课程小节...', completed: false, active: false, visible: false, progress: 0 },
|
|
{ text: '生成课程小节...', completed: false, active: false, visible: false, progress: 0 },
|
|
|
{ text: '生成背景图...', completed: false, active: false, visible: false, progress: 0 },
|
|
{ text: '生成背景图...', completed: false, active: false, visible: false, progress: 0 },
|
|
|
{ text: '生成配音...', completed: false, active: false, visible: false, progress: 0 }
|
|
{ text: '生成配音...', completed: false, active: false, visible: false, progress: 0 }
|
|
@@ -1388,7 +1321,7 @@ const themeOptions = ref([
|
|
|
{
|
|
{
|
|
|
name: '课程封面',
|
|
name: '课程封面',
|
|
|
value: 255,
|
|
value: 255,
|
|
|
- sections: [],
|
|
|
|
|
|
|
+ lessonList: [],
|
|
|
show: false,
|
|
show: false,
|
|
|
get label() {
|
|
get label() {
|
|
|
return '课程封面'
|
|
return '课程封面'
|
|
@@ -1397,14 +1330,47 @@ const themeOptions = ref([
|
|
|
{
|
|
{
|
|
|
name: '诗词课',
|
|
name: '诗词课',
|
|
|
value: 256,
|
|
value: 256,
|
|
|
- sections: [4, 5, 6, 7, 8],
|
|
|
|
|
|
|
+ lessonList: [
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '1',
|
|
|
|
|
+ name: '初识诗境',
|
|
|
|
|
+ description: '读·共读辨情,初识诗境',
|
|
|
|
|
+ requirements: `课程围绕「共读辨情,初识诗境」展开,教学重点:组织集体朗读、分层诵读,引导学生从字音节奏、词句表层分辨诗人喜怒哀乐的情感基调,不带深度解读,仅带领学生初步感知诗词画面与意境;
|
|
|
|
|
+ 受众为中小学诗词学习者,脚本包含课堂导入、齐读环节、分句品读、意境浅感知、课堂小结,语言温润有书卷气,流程完整可直接授课`.trim()
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '2',
|
|
|
|
|
+ name: '解码精神',
|
|
|
|
|
+ description: '悟·深究共情,解码精神',
|
|
|
|
|
+ requirements: `课程围绕「深究共情,解码精神」展开,教学重点:深挖创作背景、诗人境遇,引导学生换位思考与古人共情,拆解文字背后蕴藏的品格、理想、家国情怀等精神内核,跳出字面读懂诗文主旨;
|
|
|
|
|
+ 设置背景拓展、词句深挖、共情问答、主旨解析模块,逻辑层层递进,适配深度诗词赏析课堂。`.trim()
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '3',
|
|
|
|
|
+ name: '联结现实',
|
|
|
|
|
+ description: '用·印证文脉,联结现实',
|
|
|
|
|
+ requirements: `课程围绕「印证文脉,联结现实」展开,教学重点:梳理诗词传承文脉,挖掘诗文道理、价值内涵,搭建古代诗意与当代生活的桥梁,引导学生用古人智慧看待当下生活、社会现象;
|
|
|
|
|
+ 设计古今对照案例、生活情境讨论、文脉梳理小任务,实现古诗文学以致用,弱化单纯赏析,侧重现实关联。`.trim()
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '4',
|
|
|
|
|
+ name: '创意表达',
|
|
|
|
|
+ description: '创·汲智明志,创意表达',
|
|
|
|
|
+ requirements: `课程围绕「汲智明志,创意表达」展开,教学重点:汲取经典诗词的意象、手法、情志智慧,引导学生借鉴古人笔法,结合自身志向、生活感悟进行创意文字创作,包含短句仿写、意象活用、原创小诗、抒怀习作环节;
|
|
|
|
|
+ 课堂鼓励个性化表达,兼顾格律基础与自由创意,激发文字创作能力。`.trim()
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '5',
|
|
|
|
|
+ name: '知行合一',
|
|
|
|
|
+ description: '评·多元评价,知行合一',
|
|
|
|
|
+ requirements: `课程围绕「多元评价,知行合一」展开,教学重点:采用朗读、赏析、运用、创作多维度多元评价方式,复盘前四节课诵读、体悟、活用、创作全部知识点,引导学生内化诗意精神,并落实到日常言行;
|
|
|
|
|
+ 设置作品互评、自我复盘、知行践行任务、整体课堂总结,实现学诗、悟诗、践行诗意融为一体。`.trim()
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
show: true,
|
|
show: true,
|
|
|
get label() {
|
|
get label() {
|
|
|
- const lessonNames = this.sections
|
|
|
|
|
- .map(sectionId => {
|
|
|
|
|
- const lesson = lessonList.value.find(l => l.id === sectionId.toString())
|
|
|
|
|
- return lesson ? lesson.name : ''
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ const lessonNames = this.lessonList
|
|
|
|
|
+ .map(lesson => lesson.name)
|
|
|
.filter(Boolean)
|
|
.filter(Boolean)
|
|
|
return `诗词课(${lessonNames.join(', ')})`
|
|
return `诗词课(${lessonNames.join(', ')})`
|
|
|
}
|
|
}
|
|
@@ -1412,14 +1378,51 @@ const themeOptions = ref([
|
|
|
{
|
|
{
|
|
|
name: '通用课程',
|
|
name: '通用课程',
|
|
|
value: 13,
|
|
value: 13,
|
|
|
- sections: [1, 2, 3] ,
|
|
|
|
|
|
|
+ lessonList: [
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '1',
|
|
|
|
|
+ name: '课程引入',
|
|
|
|
|
+ description: '作为课程的开篇,建立学习背景,引发学生兴趣',
|
|
|
|
|
+ requirements: `
|
|
|
|
|
+ 1. 介绍课程主题的背景知识(如相关历史、文化背景或基本概念)
|
|
|
|
|
+ 2. 用生动有趣的方式引发学生兴趣(可以讲一个小故事或提一个有趣的问题)
|
|
|
|
|
+ 3. 明确本节课程的学习目标和预期收获
|
|
|
|
|
+ 4. 简单介绍课程内容的整体框架和重点
|
|
|
|
|
+ 5. 结尾用自然的过渡语引导到正式讲解
|
|
|
|
|
+ 要求:语言亲切自然,符合学生认知水平,篇幅适中,结构为:问候→背景介绍→学习目标→过渡语
|
|
|
|
|
+ `.trim()
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '2',
|
|
|
|
|
+ name: '知识讲解',
|
|
|
|
|
+ description: '深入解析课程内容,详细讲解知识点',
|
|
|
|
|
+ requirements: `
|
|
|
|
|
+ 1. 详细讲解课程核心内容(如知识点、概念、原理等,确保覆盖所有关键内容)
|
|
|
|
|
+ 2. 分析内容中的重点和难点,结合实例进行说明
|
|
|
|
|
+ 3. 解读内容所表达的思想、情感或核心价值
|
|
|
|
|
+ 4. 介绍关键术语的含义、用法和相关知识
|
|
|
|
|
+ 5. 设计1-2个互动问题引导学生思考和应用知识点
|
|
|
|
|
+ 要求:讲解详细透彻,逻辑清晰,确保学生理解每一个知识点,结构为:内容解析→重点分析→实例说明→互动提问
|
|
|
|
|
+ `.trim()
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ id: '3',
|
|
|
|
|
+ name: '课程总结',
|
|
|
|
|
+ description: '回顾课程内容,总结要点,拓展延伸',
|
|
|
|
|
+ requirements: `
|
|
|
|
|
+ 1. 回顾本节课的核心知识点(重点内容复述)
|
|
|
|
|
+ 2. 概括课程的主旨思想和核心要点
|
|
|
|
|
+ 3. 总结学习方法和要点(帮助记忆)
|
|
|
|
|
+ 4. 联系生活实际,进行拓展延伸
|
|
|
|
|
+ 5. 布置简单的课后思考或练习建议
|
|
|
|
|
+ 要求:条理清晰,重点突出,语言简洁,易于记忆,篇幅适中,结构为:回顾要点→总结方法→拓展延伸→课后建议
|
|
|
|
|
+ `.trim()
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
show: true,
|
|
show: true,
|
|
|
get label() {
|
|
get label() {
|
|
|
- const lessonNames = this.sections
|
|
|
|
|
- .map(sectionId => {
|
|
|
|
|
- const lesson = lessonList.value.find(l => l.id === sectionId.toString())
|
|
|
|
|
- return lesson ? lesson.name : ''
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ const lessonNames = this.lessonList
|
|
|
|
|
+ .map(lesson => lesson.name)
|
|
|
.filter(Boolean)
|
|
.filter(Boolean)
|
|
|
return `通用课程(${lessonNames.join(', ')})`
|
|
return `通用课程(${lessonNames.join(', ')})`
|
|
|
}
|
|
}
|