公共课直播间页面改造:将直播纪要替换为课程列表
功能更新: - 创建了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:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user