公共课直播间页面改造:将直播纪要替换为课程列表

功能更新:
- 创建了PublicCourseList组件,与课程直播间保持一致的课程列表样式
- 实现了公共课程数据结构,包含三个单元:AI课、企业高管公开课、营销能力课
- 添加了generatePublicCourseLiveList函数,自动将课程分类到对应单元
- 基于关键词智能分类课程(AI/AIGC、企业/管理、营销/运营等)
- 垂直方向课程保留在原未分类单元中,不显示在公共课列表

UI优化:
- 课程列表支持折叠展开,显示单元完成进度
- 时间轴样式显示课程进度状态
- 支持课程选择联动视频播放器
- 响应式布局,与课程直播间保持一致的交互体验

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-09-06 16:43:50 +08:00
parent 1536175248
commit 94610142af
6 changed files with 432 additions and 7 deletions

View File

@@ -148,6 +148,80 @@ const generateCourseLiveListFromCalendar = (calendarEvents) => {
});
};
// 生成公共课程列表:从课程直播列表中提取公共课程
const generatePublicCourseLiveList = (courseLiveList) => {
// 定义公共课单元
const publicUnits = {
"AI课": {
unitId: "public-ai",
unitName: "AI课",
courses: []
},
"企业高管公开课": {
unitId: "public-executive",
unitName: "企业高管公开课",
courses: []
},
"营销能力课": {
unitId: "public-marketing",
unitName: "营销能力课",
courses: []
}
};
// 定义关键词映射到单元
const keywordToUnit = {
"AI": "AI课",
"AIGC": "AI课",
"人工智能": "AI课",
"ChatGPT": "AI课",
"Midjourney": "AI课",
"企业": "企业高管公开课",
"高管": "企业高管公开课",
"管理": "企业高管公开课",
"领导": "企业高管公开课",
"战略": "企业高管公开课",
"营销": "营销能力课",
"销售": "营销能力课",
"品牌": "营销能力课",
"推广": "营销能力课",
"市场": "营销能力课",
"运营": "营销能力课",
"新媒体": "营销能力课"
};
// 遍历所有课程,分类到相应单元
courseLiveList.forEach(unit => {
unit.courses.forEach(course => {
let assigned = false;
// 检查课程名称是否包含关键词
for (const [keyword, unitName] of Object.entries(keywordToUnit)) {
if (course.courseName.includes(keyword) || unit.unitName.includes(keyword)) {
publicUnits[unitName].courses.push({
...course,
originalUnit: unit.unitName
});
assigned = true;
break;
}
}
// 如果没有匹配到任何公共课单元,检查是否是公开课类型
if (!assigned && (unit.unitName.includes("公开课") || unit.unitName.includes("公共"))) {
// 默认归类到企业高管公开课
publicUnits["企业高管公开课"].courses.push({
...course,
originalUnit: unit.unitName
});
}
});
});
// 转换为数组格式并过滤空单元
return Object.values(publicUnits).filter(unit => unit.courses.length > 0);
};
// 更新导师课程信息:根据日历事件更新导师的课程列表
const updateTeacherCourses = (teacherData, calendarEvents) => {
// 深拷贝教师数据
@@ -4228,6 +4302,9 @@ mockData.profileOverview = {
// 课程直播间的课程列表数据从CSV生成
mockData.courseLiveList = generateCourseLiveListFromCalendar(transformCalendarCourses(calendarCoursesData));
// 生成公共课程列表
mockData.publicCourseLiveList = generatePublicCourseLiveList(mockData.courseLiveList);
// 在courseLiveList定义后更新dashboardStatistics的课程和任务数据
const dashboardCourseData = generateDashboardCourses(mockData.courseLiveList);