|
|
@@ -1,12 +1,12 @@
|
|
|
import type { AiCoursewareOutline } from "@/api/aiCourseware"
|
|
|
|
|
|
export type AiCoursewareTemplateId =
|
|
|
- | "playful-handdrawn"
|
|
|
- | "fresh-education"
|
|
|
- | "academic-blue"
|
|
|
- | "oriental-culture"
|
|
|
- | "digital-tech"
|
|
|
- | "active-classroom"
|
|
|
+ | "fairytale-forest"
|
|
|
+ | "warm-handdrawn"
|
|
|
+ | "music-doodle"
|
|
|
+ | "ink-wash"
|
|
|
+ | "stage-documentary"
|
|
|
+ | "modern-geometry"
|
|
|
|
|
|
export type AiCoursewareTemplatePageRole =
|
|
|
| "cover"
|
|
|
@@ -63,10 +63,10 @@ const freshPalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
palette("#526FA8", "#5C9EAD", "#E98B73", "#F3C677", "#F7F9FC", "#E8EEF7", "#243040", "#6E7887", "#2C405F")
|
|
|
]
|
|
|
|
|
|
-const academicPalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
- palette("#1E4F86", "#2F6F66", "#C77D22", "#D8B45B", "#F4F7FA", "#E6EDF4", "#172534", "#647383", "#102A43"),
|
|
|
- palette("#243B64", "#356A72", "#B56B45", "#D1AF68", "#F5F6F8", "#E8EBF0", "#1D2733", "#69727E", "#17243A"),
|
|
|
- palette("#3E4C78", "#39736B", "#A75D72", "#D2B978", "#F6F6F9", "#EAEBF2", "#242636", "#707181", "#252B49")
|
|
|
+const stagePalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
+ palette("#26344E", "#697C9B", "#C88B3D", "#E6C26D", "#F7F8FA", "#E9EDF3", "#172231", "#697586", "#1C2940"),
|
|
|
+ palette("#4A3553", "#7E8EA8", "#C4725A", "#E2B567", "#FAF8FA", "#F0EBF1", "#2B2630", "#776F7A", "#392B40"),
|
|
|
+ palette("#344B5C", "#4C7D7D", "#B96B49", "#DAB66F", "#F7FAFA", "#E7F0EF", "#1F3034", "#63777A", "#263F49")
|
|
|
]
|
|
|
|
|
|
const orientalPalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
@@ -75,13 +75,13 @@ const orientalPalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
palette("#6E3F63", "#496554", "#B4864C", "#DCC68C", "#F8F3EA", "#EEE5D8", "#342D33", "#766D74", "#45333F")
|
|
|
]
|
|
|
|
|
|
-const techPalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
- palette("#2563EB", "#06B6D4", "#8B5CF6", "#FBBF24", "#071426", "#102744", "#EAF6FF", "#91AFC9", "#040B17", "#102744"),
|
|
|
- palette("#3B82F6", "#14B8A6", "#EC4899", "#F59E0B", "#081A24", "#12333B", "#ECFEFF", "#91B5B9", "#041013", "#12333B"),
|
|
|
- palette("#6366F1", "#22D3EE", "#A855F7", "#FACC15", "#0E1024", "#1C2142", "#F0F2FF", "#A1A7D0", "#080914", "#1C2142")
|
|
|
+const geometryPalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
+ palette("#287B72", "#4FAD93", "#E07A35", "#E9C66D", "#F8FBFA", "#E7F3EF", "#20342F", "#6B817A", "#1E5A52"),
|
|
|
+ palette("#236D98", "#58A6A6", "#E08D50", "#EBCB7A", "#F7FAFC", "#E6F1F4", "#1D3038", "#678089", "#1E5967"),
|
|
|
+ palette("#4B6E9B", "#76A48C", "#C87863", "#DCC280", "#FAFBF9", "#EDF2EA", "#273038", "#737E83", "#415B79")
|
|
|
]
|
|
|
|
|
|
-const activePalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
+const doodlePalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
palette("#F05A47", "#13A89E", "#6C63D9", "#F6C945", "#FFF8F2", "#FDEBDD", "#2D2B36", "#756F7C", "#3A3550"),
|
|
|
palette("#EC4899", "#0EA5A4", "#F97316", "#FACC15", "#FFF7FB", "#FCE7F3", "#302937", "#7A6D7D", "#46354D"),
|
|
|
palette("#7C5CE7", "#18A999", "#F06449", "#FFD166", "#FAF8FF", "#ECE8FB", "#302D3C", "#746E82", "#403755")
|
|
|
@@ -89,11 +89,11 @@ const activePalettes: AiCoursewareTemplate["palettes"] = [
|
|
|
|
|
|
export const AI_COURSEWARE_TEMPLATES: AiCoursewareTemplate[] = [
|
|
|
{
|
|
|
- id: "playful-handdrawn",
|
|
|
- name: "趣味手绘课堂",
|
|
|
- sourceName: "原创故事课堂布局包",
|
|
|
- scene: "小学低年级",
|
|
|
- description: "故事导入、情境欣赏和童趣互动",
|
|
|
+ id: "fairytale-forest",
|
|
|
+ name: "童话森林",
|
|
|
+ sourceName: "参考《动画音乐会》的童话场景语言",
|
|
|
+ scene: "低年级歌曲与律动",
|
|
|
+ description: "绘本场景、故事导入和童趣互动",
|
|
|
baseStyle: "cartoon",
|
|
|
layoutFamily: "story",
|
|
|
typography: "圆润醒目的低龄课堂字体层级,标题短而大,正文不低于30px",
|
|
|
@@ -111,15 +111,15 @@ export const AI_COURSEWARE_TEMPLATES: AiCoursewareTemplate[] = [
|
|
|
practice: "practice_check",
|
|
|
summary: "visual_summary"
|
|
|
},
|
|
|
- visualPrompt: "趣味手绘课堂风格,画面亲切活泼,使用统一插画语言和明确场景,避免商务卡片堆叠。",
|
|
|
+ visualPrompt: "童话森林音乐课堂风格,画面亲切活泼,使用统一绘本场景、自然边框和明确文字区,避免商务卡片堆叠。",
|
|
|
palettes: playfulPalettes
|
|
|
},
|
|
|
{
|
|
|
- id: "fresh-education",
|
|
|
- name: "清新教育课件",
|
|
|
- sourceName: "原创清新教育布局包",
|
|
|
- scene: "常规音乐课",
|
|
|
- description: "知识讲解、听赏练习和课堂总结",
|
|
|
+ id: "warm-handdrawn",
|
|
|
+ name: "温暖手绘",
|
|
|
+ sourceName: "参考《音乐小屋》的温暖手绘语言",
|
|
|
+ scene: "小学音乐活动",
|
|
|
+ description: "轻柔插画、情境聆听和课堂练习",
|
|
|
baseStyle: "clean",
|
|
|
layoutFamily: "education",
|
|
|
typography: "清晰现代的教学字体层级,标题明确,正文适合远距离投屏",
|
|
|
@@ -137,20 +137,20 @@ export const AI_COURSEWARE_TEMPLATES: AiCoursewareTemplate[] = [
|
|
|
practice: "practice_check",
|
|
|
summary: "summary_checklist"
|
|
|
},
|
|
|
- visualPrompt: "清新教育课件风格,留白充足、结构清楚、色彩温和,兼顾教师讲解和学生远距离阅读。",
|
|
|
+ visualPrompt: "温暖手绘音乐课件风格,留白充足、结构清楚、色彩柔和,使用统一儿童手绘元素,兼顾教师讲解和学生远距离阅读。",
|
|
|
palettes: freshPalettes
|
|
|
},
|
|
|
{
|
|
|
- id: "academic-blue",
|
|
|
- name: "蓝色学术课堂",
|
|
|
- sourceName: "原创蓝色学术布局包",
|
|
|
- scene: "初高中课堂",
|
|
|
- description: "乐理、作品结构和知识密集型内容",
|
|
|
+ id: "stage-documentary",
|
|
|
+ name: "舞台纪实",
|
|
|
+ sourceName: "参考《鼓乐》的写实音乐现场氛围",
|
|
|
+ scene: "世界音乐与演出欣赏",
|
|
|
+ description: "大图舞台、演出现场和音乐文化体验",
|
|
|
baseStyle: "clean",
|
|
|
layoutFamily: "academic",
|
|
|
- typography: "严谨的标题、正文和注释三级层级",
|
|
|
- backgroundStyle: "克制蓝灰背景与清晰内容分区",
|
|
|
- illustrationStyle: "写实乐器、谱例和结构图优先",
|
|
|
+ typography: "具有演出节目单感的标题、正文和注释三级层级",
|
|
|
+ backgroundStyle: "深浅对比的舞台画面与克制文字承载区",
|
|
|
+ illustrationStyle: "写实演出、乐器和地域音乐素材优先",
|
|
|
pageLayouts: {
|
|
|
cover: "cover_scene",
|
|
|
intro: "full_image_question",
|
|
|
@@ -162,13 +162,13 @@ export const AI_COURSEWARE_TEMPLATES: AiCoursewareTemplate[] = [
|
|
|
practice: "practice_check",
|
|
|
summary: "summary_checklist"
|
|
|
},
|
|
|
- visualPrompt: "蓝色学术课堂风格,严谨克制、层级明确,强化标题、数据和谱例焦点,减少无关装饰。",
|
|
|
- palettes: academicPalettes
|
|
|
+ visualPrompt: "舞台纪实音乐课堂风格,以高质量演出或音乐文化大图建立氛围,文字置于清晰承载区,标题有节目单感,减少无关装饰。",
|
|
|
+ palettes: stagePalettes
|
|
|
},
|
|
|
{
|
|
|
- id: "oriental-culture",
|
|
|
- name: "东方文化课堂",
|
|
|
- sourceName: "原创东方文化布局包",
|
|
|
+ id: "ink-wash",
|
|
|
+ name: "水墨国风",
|
|
|
+ sourceName: "参考《姑苏行》《十面埋伏》的东方意境",
|
|
|
scene: "传统文化主题",
|
|
|
description: "民歌、戏曲、民族音乐和传统节日",
|
|
|
baseStyle: "clean",
|
|
|
@@ -187,20 +187,20 @@ export const AI_COURSEWARE_TEMPLATES: AiCoursewareTemplate[] = [
|
|
|
practice: "practice_check",
|
|
|
summary: "visual_summary"
|
|
|
},
|
|
|
- visualPrompt: "现代东方文化课堂风格,使用米白、黛色和朱砂色,装饰克制,突出传统文化意境与课堂可读性。",
|
|
|
+ visualPrompt: "水墨国风音乐课堂风格,使用米白、黛色和朱砂色,借景留白、装饰克制,突出传统器乐意境与课堂可读性。",
|
|
|
palettes: orientalPalettes
|
|
|
},
|
|
|
{
|
|
|
- id: "digital-tech",
|
|
|
- name: "数字科技课堂",
|
|
|
- sourceName: "原创数字科技布局包",
|
|
|
- scene: "音乐科技主题",
|
|
|
- description: "电子音乐、数字工具和声音科技",
|
|
|
+ id: "modern-geometry",
|
|
|
+ name: "现代几何",
|
|
|
+ sourceName: "参考《探索旋律结构的规律》的现代几何版式",
|
|
|
+ scene: "项目学习与乐理分析",
|
|
|
+ description: "结构讲解、旋律分析和知识项目展示",
|
|
|
baseStyle: "clean",
|
|
|
layoutFamily: "technology",
|
|
|
- typography: "高对比科技标题与简洁正文层级",
|
|
|
- backgroundStyle: "深色网格、光点和节点背景",
|
|
|
- illustrationStyle: "统一数字音乐科技视觉,避免无关赛博装饰",
|
|
|
+ typography: "高对比现代标题与简洁正文层级",
|
|
|
+ backgroundStyle: "浅色几何分区、轻量网格和清晰信息层级",
|
|
|
+ illustrationStyle: "统一等距几何和音乐结构图形,避免无关赛博装饰",
|
|
|
pageLayouts: {
|
|
|
cover: "cover_scene",
|
|
|
intro: "full_image_question",
|
|
|
@@ -212,15 +212,15 @@ export const AI_COURSEWARE_TEMPLATES: AiCoursewareTemplate[] = [
|
|
|
practice: "practice_check",
|
|
|
summary: "visual_summary"
|
|
|
},
|
|
|
- visualPrompt: "数字科技课堂风格,深色背景配高对比蓝青光感,使用克制的网格和节点元素,保证教学文字清晰。",
|
|
|
- palettes: techPalettes
|
|
|
+ visualPrompt: "现代几何音乐课堂风格,使用浅色几何分区、等距图形和绿色蓝色点缀,突出旋律结构、项目步骤和知识关系。",
|
|
|
+ palettes: geometryPalettes
|
|
|
},
|
|
|
{
|
|
|
- id: "active-classroom",
|
|
|
- name: "活力互动课堂",
|
|
|
- sourceName: "原创互动课堂布局包",
|
|
|
- scene: "课堂活动",
|
|
|
- description: "分组练习、节奏游戏、表演与展示",
|
|
|
+ id: "music-doodle",
|
|
|
+ name: "音符涂鸦",
|
|
|
+ sourceName: "参考《溜冰圆舞曲》的音符涂鸦语言",
|
|
|
+ scene: "乐理、节奏与欣赏",
|
|
|
+ description: "音符插画、节奏任务和轻松知识讲解",
|
|
|
baseStyle: "cartoon",
|
|
|
layoutFamily: "activity",
|
|
|
typography: "大字号动作指令与清晰编号层级",
|
|
|
@@ -238,8 +238,8 @@ export const AI_COURSEWARE_TEMPLATES: AiCoursewareTemplate[] = [
|
|
|
practice: "practice_check",
|
|
|
summary: "visual_summary"
|
|
|
},
|
|
|
- visualPrompt: "活力互动课堂风格,节奏感强、色彩明快,用清晰编号和动作路径组织任务,避免信息拥挤。",
|
|
|
- palettes: activePalettes
|
|
|
+ visualPrompt: "音符涂鸦音乐课堂风格,使用深蓝手绘音符、轻量星点和清晰任务编号,轻松但不幼稚,避免信息拥挤。",
|
|
|
+ palettes: doodlePalettes
|
|
|
}
|
|
|
]
|
|
|
|
|
|
@@ -264,22 +264,25 @@ export function recommendAiCoursewareTemplate(outline: AiCoursewareOutline): { i
|
|
|
.filter(Boolean)
|
|
|
.join(" ")
|
|
|
|
|
|
- if (/民歌|民族|戏曲|京剧|昆曲|古琴|国乐|传统|节日|非遗|中国风/.test(text)) {
|
|
|
- return { id: "oriental-culture", reason: "课程包含传统文化或民族音乐内容" }
|
|
|
+ if (/民歌|民族|戏曲|京剧|昆曲|古琴|国乐|传统|节日|非遗|中国风|民乐|古筝|二胡|琵琶/.test(text)) {
|
|
|
+ return { id: "ink-wash", reason: "课程包含传统文化、民乐或民族音乐内容" }
|
|
|
}
|
|
|
- if (/电子音乐|数字音乐|音乐科技|人工智能|AI|编曲软件|录音|声学|科技/.test(text)) {
|
|
|
- return { id: "digital-tech", reason: "课程包含数字音乐或声音科技内容" }
|
|
|
+ if (/旋律结构|曲式|乐理|和声|分析|项目|探究|规律|结构/.test(text)) {
|
|
|
+ return { id: "modern-geometry", reason: "课程以结构分析、项目探究或乐理讲解为主" }
|
|
|
}
|
|
|
- if (/分组|小组|节奏游戏|律动|表演|展示|闯关|任务|活动/.test(text)) {
|
|
|
- return { id: "active-classroom", reason: "课程以课堂活动和学生参与为主" }
|
|
|
+ if (/分组|小组|节奏游戏|律动|表演|展示|闯关|任务|活动|节拍|节奏/.test(text)) {
|
|
|
+ return { id: "music-doodle", reason: "课程以节奏任务、互动练习或学生参与为主" }
|
|
|
}
|
|
|
- if (/[初高]中|七年级|八年级|九年级|乐理|曲式|和声|结构|分析|鉴赏/.test(text)) {
|
|
|
- return { id: "academic-blue", reason: "课程年级或内容需要更严谨的知识呈现" }
|
|
|
+ if (/世界音乐|打击乐|鼓乐|管弦乐|交响乐|音乐会|舞台|演出|爵士|摇滚|非洲|拉丁/.test(text)) {
|
|
|
+ return { id: "stage-documentary", reason: "课程适合以音乐现场或文化影像建立氛围" }
|
|
|
}
|
|
|
- if (/一年级|二年级|三年级|低年级|故事|童话|动物|情境/.test(text)) {
|
|
|
- return { id: "playful-handdrawn", reason: "课程面向低龄学生或采用故事化导入" }
|
|
|
+ if (/[初高]中|七年级|八年级|九年级/.test(text)) {
|
|
|
+ return { id: "stage-documentary", reason: "课程面向中学阶段,适合更成熟的演出与音乐文化视觉" }
|
|
|
}
|
|
|
- return { id: "fresh-education", reason: "适合常规音乐课堂的讲解与练习结构" }
|
|
|
+ if (/一年级|二年级|低年级|故事|童话|动物|情境|儿歌/.test(text)) {
|
|
|
+ return { id: "fairytale-forest", reason: "课程面向低龄学生或采用故事化导入" }
|
|
|
+ }
|
|
|
+ return { id: "warm-handdrawn", reason: "适合常规小学音乐课的聆听、演唱与练习结构" }
|
|
|
}
|
|
|
|
|
|
function palette(
|