feat: 添加AI课程集成和修复初始化错误
- 将终生学习系统课添加到公共课直播间 - 修复allCalendarEvents初始化顺序问题 - 更正AI课程导师为李奇 - 添加AI课程与日历页面同步功能
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
// 导入JSON数据
|
||||
import companyJobsData from './companyJobs.json';
|
||||
import calendarCoursesData from './calendarCourses.json';
|
||||
import aiCoursesData from '../../网页未导入数据/ai课程表.json';
|
||||
|
||||
// 转换函数:将JSON数据转换为页面所需格式
|
||||
const transformCompanyJobs = (jobsData) => {
|
||||
@@ -54,25 +55,46 @@ const transformCalendarCourses = (coursesData) => {
|
||||
|
||||
// 解析上课时间
|
||||
const timeStr = course["上课时间"] || "20:00-21:00";
|
||||
const [startTime, endTime] = timeStr.split('-').map(t => t.trim());
|
||||
let startTime = "20:00";
|
||||
let endTime = "21:00";
|
||||
|
||||
// 处理时间格式,确保有效
|
||||
if (timeStr && timeStr.includes('-')) {
|
||||
const timeParts = timeStr.split('-').map(t => t ? t.trim() : '');
|
||||
if (timeParts[0]) startTime = timeParts[0];
|
||||
if (timeParts[1]) endTime = timeParts[1];
|
||||
} else if (timeStr) {
|
||||
// 如果没有'-',假设是开始时间
|
||||
startTime = timeStr.trim();
|
||||
// 自动计算结束时间(加1小时)
|
||||
const [hour, minute] = startTime.split(':');
|
||||
const endHour = parseInt(hour) + 1;
|
||||
endTime = `${endHour.toString().padStart(2, '0')}:${minute || '00'}`;
|
||||
}
|
||||
|
||||
// 构建完整的时间戳
|
||||
const startDateTime = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${startTime}`;
|
||||
const endDateTime = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${endTime}`;
|
||||
|
||||
// 确定课程类型和颜色
|
||||
let type = 'course';
|
||||
let type = 'class';
|
||||
let color = '#3b82f6'; // 默认蓝色
|
||||
|
||||
if (course["公开课"]) {
|
||||
type = 'public';
|
||||
color = '#10b981'; // 绿色
|
||||
} else if (course["1V1 规划阶段"]) {
|
||||
type = 'planning';
|
||||
type = 'public-course';
|
||||
color = '#f59e0b'; // 橙色
|
||||
} else if (course["1V1 规划阶段"]) {
|
||||
type = 'one-on-one';
|
||||
color = '#ec4899'; // 粉色
|
||||
} else if (course["模拟面试实战练习阶段"]) {
|
||||
type = 'interview';
|
||||
color = '#ef4444'; // 红色
|
||||
color = '#3b82f6'; // 蓝色
|
||||
} else if (course["复合技能阶段"]) {
|
||||
type = 'compound-skill';
|
||||
color = '#667eea'; // 紫色
|
||||
} else if (course["垂直方向阶段(方向二:商业活动策划)"]) {
|
||||
type = 'vertical-skill';
|
||||
color = '#22c55e'; // 绿色
|
||||
}
|
||||
|
||||
// 确定课程状态
|
||||
@@ -104,39 +126,140 @@ const transformCalendarCourses = (coursesData) => {
|
||||
});
|
||||
};
|
||||
|
||||
// 转换AI课程数据为日历事件格式
|
||||
const transformAICourses = (aiData) => {
|
||||
return aiData
|
||||
.filter(course => course["AI课阶段"] && course["日期"])
|
||||
.map((course, index) => {
|
||||
// 解析日期
|
||||
const dateStr = course["日期"];
|
||||
const [year, month, day] = dateStr.split('/').map(Number);
|
||||
const courseDate = new Date(year, month - 1, day);
|
||||
|
||||
// 获取课程名称
|
||||
const courseName = course["AI课阶段"];
|
||||
|
||||
// 解析上课时间
|
||||
const timeStr = course["上课时间"] || "20:00~21:00";
|
||||
let startTime = "20:00";
|
||||
let endTime = "21:00";
|
||||
|
||||
if (timeStr && timeStr.includes('~')) {
|
||||
const [start, end] = timeStr.split('~');
|
||||
startTime = start.trim();
|
||||
endTime = end.trim();
|
||||
}
|
||||
|
||||
// 构建完整的时间戳
|
||||
const startDateTime = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${startTime}`;
|
||||
const endDateTime = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${endTime}`;
|
||||
|
||||
return {
|
||||
id: `ai-event-${index + 1}`,
|
||||
title: courseName,
|
||||
startTime: startDateTime,
|
||||
endTime: endDateTime,
|
||||
date: courseDate,
|
||||
type: 'ai-course',
|
||||
color: '#10b981', // 绿色,代表AI课程
|
||||
teacher: '李奇', // AI课程的默认讲师
|
||||
location: course["上课地点"] || "线上",
|
||||
status: course["课程状态"] || "",
|
||||
unit: "终生学习系统课"
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
// 生成课程直播列表:从日历课程数据生成单元和课程结构
|
||||
const generateCourseLiveListFromCalendar = (calendarEvents) => {
|
||||
// 按单元名称分组
|
||||
let globalCourseCounter = 0; // 全局课程计数器
|
||||
// 定义复合能力课的课程名称列表(完整版,包含所有72门课程)
|
||||
const 复合能力课名称 = [
|
||||
// 岗位体系认知
|
||||
"教育体系认知", "现代文旅类企业的管理体系", "专科生的职业规划",
|
||||
// 产业认知课
|
||||
"文旅产业认知课", "行业详解:旅游行业", "行业详解:酒店与民宿行业",
|
||||
"行业详解:活动与会展行业", "行业详解:文化服务行业",
|
||||
// 旅游产业全景与文旅基础知识
|
||||
"现代文旅产业生态图谱", "文旅政策法规与风险管理", "旅游产品与旅游资源",
|
||||
"游客行为心理学基础", "可持续旅游发展",
|
||||
// 文旅服务:形象、沟通与体验的融合艺术
|
||||
"文旅场景职业形象IP塑造", "情境化服务体验设计", "政务商务接待专项礼仪",
|
||||
"文旅服务中的非语言表达", "服务沟通技巧与表达训练", "多元文化下的服务表达差异",
|
||||
// 文旅与供应链基础
|
||||
"供应链管理的内容", "文旅资源调度", "文旅产品全生命周期管理",
|
||||
"文旅商品供应链", "住宿业资源协同", "小型文旅项目的供应链角色模拟",
|
||||
"文旅项目供应链特征", "文旅供应链中的B2B与B2C模式",
|
||||
// 商业设计基础
|
||||
"现代设计行业的发展现状", "设计基础", "字体设计与中文字体情绪表达",
|
||||
"商业平面色彩搭配", "平面设计构图", "图像编辑工具:Photoshop",
|
||||
"矢量与标志设计:Illustrator", "快速设计工具使用:Canva",
|
||||
"移动端视觉原型设计:Figma", "视频剪辑入门:剪映",
|
||||
// AIGC人工智能生成内容
|
||||
"AIGC发展简史与基本逻辑", "AIGC的基本概念与各领域的应用",
|
||||
"AIGC语言模型:chatgpt的灵活应用", "AIGC绘画模型:midjourney应用",
|
||||
"AIGC图像生成模型:Stable Diffusion的应用操作",
|
||||
"AIGC图像生成模型:Stable Diffusion Al摄影和平面设计",
|
||||
"AIGC视频应用:音视频生成与AI自动剪辑", "AI词曲创作:suno",
|
||||
"AIGC生成内容的版权问题与合规使用",
|
||||
// 全栈新媒体运营赋能文旅营销
|
||||
"新媒体应用传播学", "新媒体故事结构入门", "新媒体产品策划",
|
||||
"平台账号经营与内容赛道", "各平台变现方式与具体方法",
|
||||
"内容运营:短视频制作内容对标", "内容运营:短视频的制作工具",
|
||||
"直播运营:直播间的搭建", "私域运营:私域流量池的运营",
|
||||
"品牌运营:当地文化IP数字化传播", "品牌运营:跨界营销创新",
|
||||
// 活动策划基础
|
||||
"活动类型与功能认知", "受众定位与主题创意方法",
|
||||
"活动宣传渠道与推广方式", "活动文案写作与表达技巧",
|
||||
"活动流程设计与时间节点把控", "活动场地选择与布置基础",
|
||||
"活动预算与资源统筹", "活动复盘报告撰写与数据分析方法",
|
||||
"应急预案与活动风险管理",
|
||||
// 智慧文旅应用
|
||||
"智慧文旅概论", "OTA平台运营", "票务分销平台",
|
||||
"景区智能导览系统", "智能导览设备运用",
|
||||
"智慧酒店/智慧景区体验场景模拟",
|
||||
// 单元小结(多个单元都有)
|
||||
"单元小结"
|
||||
];
|
||||
|
||||
// 转换为Set以提高查找效率
|
||||
const 复合能力课Set = new Set(复合能力课名称);
|
||||
|
||||
// 按单元名称分组,只包含复合能力课
|
||||
const unitMap = {};
|
||||
|
||||
calendarEvents.forEach(event => {
|
||||
const unitName = event.unit || "未分类课程";
|
||||
|
||||
if (!unitMap[unitName]) {
|
||||
unitMap[unitName] = {
|
||||
unitId: `unit-${Object.keys(unitMap).length + 1}`,
|
||||
unitName: unitName,
|
||||
courses: []
|
||||
};
|
||||
// 只处理复合能力课(标题在复合能力课列表中,或type包含skill/class)
|
||||
const isSkillCourse = ['compound-skill', 'vertical-skill', 'class'].includes(event.type);
|
||||
if ((isSkillCourse || event.type === 'course') && event.title && 复合能力课Set.has(event.title)) {
|
||||
const unitName = event.unit || "未分类课程";
|
||||
|
||||
if (!unitMap[unitName]) {
|
||||
unitMap[unitName] = {
|
||||
unitId: `unit-${Object.keys(unitMap).length + 1}`,
|
||||
unitName: unitName,
|
||||
courses: []
|
||||
};
|
||||
}
|
||||
|
||||
const courseDate = new Date(event.startTime.split(' ')[0]);
|
||||
const now = new Date();
|
||||
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
const courseDay = new Date(courseDate.getFullYear(), courseDate.getMonth(), courseDate.getDate());
|
||||
|
||||
unitMap[unitName].courses.push({
|
||||
courseId: `c${++globalCourseCounter}`,
|
||||
courseName: event.title,
|
||||
teacherName: event.teacher,
|
||||
date: event.startTime.split(' ')[0],
|
||||
time: event.startTime.split(' ')[1] + ' - ' + event.endTime.split(' ')[1],
|
||||
completed: courseDay < today,
|
||||
current: courseDay.getTime() === today.getTime(),
|
||||
upcoming: courseDay > today,
|
||||
status: event.status,
|
||||
location: event.location || "线上"
|
||||
});
|
||||
}
|
||||
|
||||
const courseDate = new Date(event.startTime.split(' ')[0]);
|
||||
const now = new Date();
|
||||
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
const courseDay = new Date(courseDate.getFullYear(), courseDate.getMonth(), courseDate.getDate());
|
||||
|
||||
unitMap[unitName].courses.push({
|
||||
courseId: `c${unitMap[unitName].courses.length + 1}`,
|
||||
courseName: event.title,
|
||||
teacherName: event.teacher,
|
||||
date: event.startTime.split(' ')[0],
|
||||
time: event.startTime.split(' ')[1] + ' - ' + event.endTime.split(' ')[1],
|
||||
completed: courseDay < today,
|
||||
current: courseDay.getTime() === today.getTime(),
|
||||
upcoming: courseDay > today,
|
||||
status: event.status,
|
||||
location: event.location || "线上"
|
||||
});
|
||||
});
|
||||
|
||||
// 转换为数组并排序
|
||||
@@ -146,80 +269,160 @@ const generateCourseLiveListFromCalendar = (calendarEvents) => {
|
||||
const dateB = b.courses[0]?.date || '9999-12-31';
|
||||
return dateA.localeCompare(dateB);
|
||||
});
|
||||
};
|
||||
};;;
|
||||
|
||||
// 生成公共课程列表:从课程直播列表中提取公共课程
|
||||
const generatePublicCourseLiveList = (courseLiveList) => {
|
||||
// 生成公共课程列表:从日历事件中提取公共课程
|
||||
const generatePublicCourseLiveList = (calendarEvents) => {
|
||||
// 定义公共课单元
|
||||
const publicUnits = {
|
||||
"AI课": {
|
||||
unitId: "public-ai",
|
||||
unitName: "AI课",
|
||||
courses: []
|
||||
},
|
||||
"企业高管公开课": {
|
||||
unitId: "public-executive",
|
||||
unitName: "企业高管公开课",
|
||||
"终生学习系统课": {
|
||||
unitId: "public-ai-learning",
|
||||
unitName: "终生学习系统课",
|
||||
courses: []
|
||||
},
|
||||
"营销能力课": {
|
||||
unitId: "public-marketing",
|
||||
unitName: "营销能力课",
|
||||
courses: []
|
||||
},
|
||||
"企业高管公开课": {
|
||||
unitId: "public-executive",
|
||||
unitName: "企业高管公开课",
|
||||
courses: []
|
||||
}
|
||||
};
|
||||
|
||||
// 定义关键词映射到单元
|
||||
const keywordToUnit = {
|
||||
"AI": "AI课",
|
||||
"AIGC": "AI课",
|
||||
"人工智能": "AI课",
|
||||
"ChatGPT": "AI课",
|
||||
"Midjourney": "AI课",
|
||||
"企业": "企业高管公开课",
|
||||
"高管": "企业高管公开课",
|
||||
"管理": "企业高管公开课",
|
||||
"领导": "企业高管公开课",
|
||||
"战略": "企业高管公开课",
|
||||
"营销": "营销能力课",
|
||||
"销售": "营销能力课",
|
||||
"品牌": "营销能力课",
|
||||
"推广": "营销能力课",
|
||||
"市场": "营销能力课",
|
||||
"运营": "营销能力课",
|
||||
"新媒体": "营销能力课"
|
||||
// 导师头像映射
|
||||
const teacherAvatars = {
|
||||
"孙应战": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJCc6qecx.jpg",
|
||||
"李毅峰": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVPz0WRmxCK.jpeg",
|
||||
"周伏波": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7Gi9YxSN.jpeg",
|
||||
"范雪娇": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7JsHHDNZ.jpeg",
|
||||
"李奇": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7LDWK6iG.jpg"
|
||||
};
|
||||
|
||||
// 遍历所有课程,分类到相应单元
|
||||
courseLiveList.forEach(unit => {
|
||||
unit.courses.forEach(course => {
|
||||
let assigned = false;
|
||||
// 遍历日历事件,找出公开课和AI课程
|
||||
calendarEvents.forEach(event => {
|
||||
// 处理type为'public-course'的课程或AI课程
|
||||
if ((event.type === 'public-course' || event.type === 'ai-course') && event.title) {
|
||||
const courseDate = new Date(event.startTime.split(' ')[0]);
|
||||
const now = new Date();
|
||||
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
const courseDay = new Date(courseDate.getFullYear(), courseDate.getMonth(), courseDate.getDate());
|
||||
|
||||
// 检查课程名称是否包含关键词
|
||||
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;
|
||||
}
|
||||
}
|
||||
const courseData = {
|
||||
courseId: `public-${publicUnits["终生学习系统课"].courses.length + publicUnits["营销能力课"].courses.length + publicUnits["企业高管公开课"].courses.length + 1}`,
|
||||
courseName: event.title,
|
||||
teacherName: event.teacher,
|
||||
teacherAvatar: teacherAvatars[event.teacher] || "",
|
||||
date: event.startTime.split(' ')[0],
|
||||
time: event.startTime.split(' ')[1] + ' - ' + event.endTime.split(' ')[1],
|
||||
completed: courseDay < today,
|
||||
current: courseDay.getTime() === today.getTime(),
|
||||
upcoming: courseDay > today,
|
||||
status: event.status,
|
||||
location: "线上",
|
||||
duration: "60分钟",
|
||||
participants: 150
|
||||
};
|
||||
|
||||
// 如果没有匹配到任何公共课单元,检查是否是公开课类型
|
||||
if (!assigned && (unit.unitName.includes("公开课") || unit.unitName.includes("公共"))) {
|
||||
// 默认归类到企业高管公开课
|
||||
publicUnits["企业高管公开课"].courses.push({
|
||||
...course,
|
||||
originalUnit: unit.unitName
|
||||
});
|
||||
// 根据课程类型和讲师分类
|
||||
if (event.type === 'ai-course') {
|
||||
publicUnits["终生学习系统课"].courses.push(courseData);
|
||||
} else if (event.teacher === "孙应战") {
|
||||
publicUnits["营销能力课"].courses.push(courseData);
|
||||
} else {
|
||||
publicUnits["企业高管公开课"].courses.push(courseData);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 转换为数组格式并过滤空单元
|
||||
return Object.values(publicUnits).filter(unit => unit.courses.length > 0);
|
||||
// 转换为数组格式并过滤空单元,按顺序返回:终生学习系统课、企业高管公开课、营销能力课
|
||||
const result = [];
|
||||
if (publicUnits["终生学习系统课"].courses.length > 0) {
|
||||
result.push(publicUnits["终生学习系统课"]);
|
||||
}
|
||||
if (publicUnits["企业高管公开课"].courses.length > 0) {
|
||||
result.push(publicUnits["企业高管公开课"]);
|
||||
}
|
||||
if (publicUnits["营销能力课"].courses.length > 0) {
|
||||
result.push(publicUnits["营销能力课"]);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
// 生成垂直能力课列表:从日历事件中提取垂直能力课程
|
||||
const generateVerticalCourseLiveList = (calendarEvents, unitPosters = {}) => {
|
||||
let globalCourseCounter = 0; // 全局课程计数器
|
||||
// 定义垂直能力课单元名称映射
|
||||
const unitNameMap = {
|
||||
"职业规划课": "职业规划课",
|
||||
"商业活动策略设计与创意策划": "商业活动策略设计与创意策划",
|
||||
"商业活动全程策划执行与运营优化": "商业活动全程策划执行与运营优化",
|
||||
"商业空间与文创产品设计": "商业空间与文创产品设计",
|
||||
"短视频与自媒体运营": "短视频与自媒体运营",
|
||||
"漫展与二次元活动策划与执行": "漫展与二次元活动策划与执行",
|
||||
"户外音乐节主题策划与流程统筹": "户外音乐节主题策划与流程统筹",
|
||||
"城市 IP 赛事活动整合与策划": "城市 IP 赛事活动整合与策划",
|
||||
"消费电子展品牌策划与执行": "消费电子展品牌策划与执行",
|
||||
"品牌招商展全案策划与招商运营": "品牌招商展全案策划与招商运营",
|
||||
"商业街区打卡空间视觉呈现": "商业街区打卡空间视觉呈现",
|
||||
"文旅衍生文创产品设计": "文旅衍生文创产品设计"
|
||||
};
|
||||
|
||||
// 按单元名称分组
|
||||
const unitMap = {};
|
||||
|
||||
calendarEvents.forEach(event => {
|
||||
// 处理垂直能力课(type为'vertical-skill')
|
||||
if (event.type === 'vertical-skill' && event.title) {
|
||||
const unitName = event.unit || "未分类课程";
|
||||
|
||||
if (!unitMap[unitName]) {
|
||||
unitMap[unitName] = {
|
||||
unitId: `vertical-unit-${Object.keys(unitMap).length + 1}`,
|
||||
unitName: unitNameMap[unitName] || unitName,
|
||||
unitPoster: unitPosters[unitName] || "", // 添加单元海报
|
||||
courses: []
|
||||
};
|
||||
}
|
||||
|
||||
const courseDate = new Date(event.startTime.split(' ')[0]);
|
||||
const now = new Date();
|
||||
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||
const courseDay = new Date(courseDate.getFullYear(), courseDate.getMonth(), courseDate.getDate());
|
||||
|
||||
// 创建课程对象
|
||||
const courseObj = {
|
||||
courseId: `v${++globalCourseCounter}`,
|
||||
courseName: event.title,
|
||||
teacherName: event.teacher,
|
||||
date: event.startTime.split(' ')[0],
|
||||
time: event.startTime.split(' ')[1] + ' - ' + event.endTime.split(' ')[1],
|
||||
completed: courseDay < today,
|
||||
current: courseDay.getTime() === today.getTime(),
|
||||
upcoming: courseDay > today,
|
||||
status: event.status,
|
||||
location: event.location || "线上"
|
||||
};
|
||||
|
||||
// 为"展会主题与品牌定位"课程添加试看标签和链接
|
||||
if (event.title === "展会主题与品牌定位" && unitName === "消费电子展品牌策划与执行") {
|
||||
courseObj.canPreview = true;
|
||||
courseObj.previewUrl = "https://du9uay.github.io/zhanhui/";
|
||||
}
|
||||
|
||||
unitMap[unitName].courses.push(courseObj);
|
||||
}
|
||||
});
|
||||
|
||||
// 转换为数组并排序
|
||||
return Object.values(unitMap).sort((a, b) => {
|
||||
// 按第一个课程的日期排序
|
||||
const dateA = a.courses[0]?.date || '9999-12-31';
|
||||
const dateB = b.courses[0]?.date || '9999-12-31';
|
||||
return dateA.localeCompare(dateB);
|
||||
});
|
||||
};
|
||||
|
||||
// 更新导师课程信息:根据日历事件更新导师的课程列表
|
||||
@@ -267,6 +470,12 @@ const generateTasksFromCalendarEvents = (calendarEvents) => {
|
||||
};
|
||||
|
||||
// 模拟数据
|
||||
// 合并普通课程和AI课程(需要在mockData之前定义,避免引用错误)
|
||||
const allCalendarEvents = [
|
||||
...transformCalendarCourses(calendarCoursesData),
|
||||
...transformAICourses(aiCoursesData)
|
||||
];
|
||||
|
||||
export const mockData = {
|
||||
// 用户信息
|
||||
user: {
|
||||
@@ -313,7 +522,20 @@ export const mockData = {
|
||||
"AIGC人工智能生成内容": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJyThB.png",
|
||||
" 全栈新媒体运营赋能文旅营销": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJpmik.png",
|
||||
"活动策划基础": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJMV4g.png",
|
||||
"智慧文旅应用": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJWckP.png"
|
||||
"智慧文旅应用": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJWckP.png",
|
||||
// 垂直能力课单元海报
|
||||
"职业规划课": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJm4HJ.png",
|
||||
"商业活动策略设计与创意策划": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJRS3b.png",
|
||||
"商业活动全程策划执行与运营优化": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJnGUK.png",
|
||||
"商业空间与文创产品设计": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJp9xP.png",
|
||||
"短视频与自媒体运营": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJr7sV.png",
|
||||
"漫展与二次元活动策划与执行": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJy73s.png",
|
||||
"户外音乐节主题策划与流程统筹": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJA8Az.png",
|
||||
"城市 IP 赛事活动整合与策划": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJzIDN.png",
|
||||
"消费电子展品牌策划与执行": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJ99vz.png",
|
||||
"品牌招商展全案策划与招商运营": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJeHTm.png",
|
||||
"商业街区打卡空间视觉呈现": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJYZlr.png",
|
||||
"文旅衍生文创产品设计": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJsA0q.png"
|
||||
},
|
||||
|
||||
// 导师信息数据
|
||||
@@ -321,9 +543,10 @@ export const mockData = {
|
||||
"刘杰": {
|
||||
name: "刘杰",
|
||||
introduction: "15年民宿产业化研发与标准设计经验,专注民宿产品创新、职业化培训体系搭建及乡村文旅业态升级,主导多项国家级行业标准制定与落地实践。木亚文旅创始人兼董事长,全面负责民宿产业研发、标准制定及全国业务拓展,同时也是莫干山民宿行业协会执行会长兼秘书长以及浙江大学城市学院旅游管理专业校外导师。曾作为核心起草人,主持《乡村民宿服务质量规范》《民宿管家职业技能等级评定规范》等国标编制,推动民宿行业标准化发展;申报并推动'民宿管家'入选国家新职业目录,建立首个国家级职业技能评定体系。",
|
||||
specialties: ["一听就懂", "思路很清晰", "课堂不枯燥", "学习氛围爆棚"],
|
||||
specialties: ["民宿产业化专家","一听就懂", "思路很清晰", "课堂不枯燥", "学习氛围爆棚"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJBE4VCCx.png",
|
||||
type: "复合课导师",
|
||||
verticalDirection: "项目经营管理",
|
||||
courses: []
|
||||
},
|
||||
"郭建辉": {
|
||||
@@ -332,33 +555,67 @@ export const mockData = {
|
||||
specialties: ["经验传授权威", "实用可落地", "表达沟通提升", "跨界经验丰富"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJBMNLZL5.png",
|
||||
type: "复合课导师",
|
||||
verticalDirection: "商业活动策划",
|
||||
courses: []
|
||||
},
|
||||
"赵志强": {
|
||||
name: "赵志强",
|
||||
introduction: "深耕乡村旅游与民宿产业12年,从一线管家服务到国家级标准制定,全程参与中国民宿职业化与产业化进程。曾作为首席讲师为苏浙沪皖四地文旅部门提供'乡村振兴十大模式'培训,设计桑蚕文化园、谢家路村等沉浸式研学路线,促成区域人才协作机制,获江苏省人社厅列为省级高级研修示范项目。曾担任标准起草专家组核心成员,牵头《德清县地方民宿管理办法》试点,联合政府申报'民宿管理师'新职业,制定长三角区域民宿评级体系,推动了紫蓬山民宿学校(安徽)、吴江农文旅融合示范区落地,形成可复制的'民宿+'乡村振兴模式。",
|
||||
specialties: ["讲解有节奏", "讲解通俗", "幽默又有料", "善于启发"],
|
||||
specialties: ["乡村振兴实践者", "政企协作桥梁","讲解有节奏", "讲解通俗", "幽默又有料", "善于启发"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJC2oLPpC.png",
|
||||
type: "复合课导师",
|
||||
verticalDirection: "文化服务",
|
||||
courses: []
|
||||
},
|
||||
"孙应战": {
|
||||
name: "孙应战",
|
||||
introduction: "拥有18年制造业与产品营销经验,曾在上市公司与世界500强外企任职,参与大众MEB平台、奥迪EA888发动机及新能源汽车项目开发。作为德企内训讲师、国际演讲学会资深会员和中国心理卫生协会会员,善于将实践经验转化为通俗讲解,课堂氛围轻松易懂。",
|
||||
specialties: ["经验传授权威", "实用可落地", "表达沟通提升", "跨界经验丰富"],
|
||||
specialties: ["世界500强外企背景","学习零压力", "实用可落地", "善于启发"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJCc6qecx.jpg",
|
||||
type: "公共课导师",
|
||||
courses: []
|
||||
},
|
||||
"李毅峰": {
|
||||
name: "李毅峰",
|
||||
introduction: "拥有超过二十年的柔性电子产业从业经验,长期专注于柔性印制电路板(FPC)的材料研发、精密设计、自动化制造与产业化应用,具备从技术开发到市场交付的全流程掌控能力。职业生涯中先后主导完成数十项高密度FPC研发项目,涵盖5G通信终端、可穿戴设备、汽车电子、医疗影像、工业控制等多个应用场景。曾带领团队突破多层柔性板对位精度控制与微线宽蚀刻技术瓶颈,使线路最小宽距精度控制在±20μm以内,成功实现系列产品向超薄、超柔、高可靠性方向升级,批量供应多家国际知名电子企业。",
|
||||
specialties: ["善于启发", "易懂好理解", "讲解有节奏", "超有耐心"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVPz0WRmxCK.jpeg",
|
||||
type: "公共课导师",
|
||||
courses: []
|
||||
},
|
||||
"周伏波": {
|
||||
name: "周伏波",
|
||||
introduction: "具备二十年以上光电子技术领域深耕经验,长期致力于光电子芯片材料、光通信器件、半导体照明、激光器件及光电显示技术的研发与产业化工作,是推动中国光电子产业链升级的重要技术推动者与行业实践者。其主导完成的多项核心材料与芯片工艺突破,成功应用于光模块、光引擎、LED器件、激光显示模组等多个高精度、高性能领域,累计获得授权专利60余项,多项技术成果实现量产落地。",
|
||||
specialties: ["光电显示技术探索者", "60+专利技术成果持有者", "国家级重大专项牵头人", "一听就懂", "思路很清晰", "讲解易懂"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7Gi9YxSN.jpeg",
|
||||
type: "公共课导师",
|
||||
courses: []
|
||||
},
|
||||
"范雪娇": {
|
||||
name: "范雪娇",
|
||||
introduction: "拥有十八年的工业自动化与机电设备行业从业经验,长期专注于自动化装备研发、配件系统优化、机电一体化集成与工程项目落地,具备从核心部件开发到整线系统集成的全链条实践能力。职业生涯中,累计参与和主导项目超过百项,涵盖非标自动化装置、精密机电配件、控制系统架构设计与生产线智能改造等多个方向,广泛服务于汽车制造、3C电子、包装、医疗设备、家电装配等高标准行业。",
|
||||
specialties: ["工业自动化资深专家", "自动化装备研发实践者", "智能装备融合发展典型代表","讲解有节奏", "学习零压力", "善于总结", "超会举例"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7JsHHDNZ.jpeg",
|
||||
type: "公共课导师",
|
||||
courses: []
|
||||
},
|
||||
"李奇": {
|
||||
name: "李奇",
|
||||
introduction: "毕业于南洋理工学院,拥有硕士学位,具备扎实的人工智能理论基础与产业实践经验。近年来,专注于大模型工程化与AI应用课程体系建设,主持完成《AIGC实战:从模型调用到产品落地》《AI在视觉设计与内容生成中的应用》等多个应用型教学项目。曾主导开发'AI技能地图导航系统',实现课程内容与岗位技能的精准对齐,在2024年全国高校AI课程创新大赛中荣获一等奖。擅长将复杂的算法模型转化为通俗易懂的教学内容,致力于打造'人人可用AI'的实训课程体系,是众多高校与职业培训机构特聘的AI技术与课程体系顾问。",
|
||||
specialties: ["人工智能技术顾问", "大模型工程化研究者", "AI应用课程体系建设者", "教学内容转化能力强", "技巧随手教", "幽默又有料", "讲解有节奏"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuVU7LDWK6iG.jpg",
|
||||
type: "AI课导师",
|
||||
courses: []
|
||||
},
|
||||
"魏立慧": {
|
||||
name: "魏立慧",
|
||||
introduction: "企业资深一线HR主讲,专注于为求职者提供一对一的个性化指导。通过真实招聘视角,深入剖析个人优势与短板、传授面试技巧、规划职业定位与发展路径,帮助学生快速提升求职竞争力。求职策略以实用落地为核心,注重互动交流与角色定位,让学员在轻松氛围中获得直击痛点的求职策略。",
|
||||
specialties: ["点评直击要害", "擅长挖掘优势", "职业规划达人", "深谙用人逻辑"],
|
||||
specialties: ["点评直击要害", "擅长挖掘优势", "职业规划达人", "深谙用人逻辑", "一线HR资深讲师"],
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpSO4gUtJz.png",
|
||||
type: "企业资深HR",
|
||||
courses: []
|
||||
}
|
||||
}, transformCalendarCourses(calendarCoursesData)),
|
||||
}, allCalendarEvents),
|
||||
|
||||
// 个人档案详细信息
|
||||
profile: {
|
||||
@@ -444,7 +701,7 @@ export const mockData = {
|
||||
},
|
||||
|
||||
// 日历事件数据 - 使用当前月份的日期进行演示
|
||||
calendarEvents: transformCalendarCourses(calendarCoursesData),
|
||||
calendarEvents: allCalendarEvents,
|
||||
|
||||
// 日历配置
|
||||
calendarConfig: {
|
||||
@@ -1442,7 +1699,7 @@ export const mockData = {
|
||||
date: "2023-09-15",
|
||||
time: "14:30",
|
||||
status: "evaluated",
|
||||
videoUrl: "/live.mp4",
|
||||
videoUrl: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/video/teach_sys/interview_simulation/3years_ago.mov",
|
||||
interviewer: "职业导师",
|
||||
duration: "05:32",
|
||||
type: "first_experience",
|
||||
@@ -3675,8 +3932,8 @@ mockData.dashboardStatistics = {
|
||||
{
|
||||
rank: 4,
|
||||
studentId: "2325030602",
|
||||
studentName: "李奇",
|
||||
name: "李奇",
|
||||
studentName: "李伟",
|
||||
name: "李伟",
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/13c5709a3993fdf353d147209f8145cb.jpg",
|
||||
score: 95,
|
||||
credits: 95,
|
||||
@@ -3776,16 +4033,16 @@ mockData.profileOverview = {
|
||||
// 学习统计
|
||||
studyStatistics: {
|
||||
studyTime: {
|
||||
personal: 168,
|
||||
classAverage: 107,
|
||||
personal: 273,
|
||||
classAverage: 242,
|
||||
},
|
||||
courseCompletion: {
|
||||
personalProgress: 100,
|
||||
classAverageProgress: 63,
|
||||
classAverageProgress: 89,
|
||||
},
|
||||
homeworkCompletion: {
|
||||
personalProgress: 88,
|
||||
classAverageProgress: 56,
|
||||
personalProgress: 100,
|
||||
classAverageProgress: 71,
|
||||
},
|
||||
attendance: {
|
||||
attendanceRate: 98,
|
||||
@@ -3909,8 +4166,8 @@ mockData.profileOverview = {
|
||||
{
|
||||
rank: 4,
|
||||
studentId: "2325030602",
|
||||
studentName: "李奇",
|
||||
name: "李奇",
|
||||
studentName: "李伟",
|
||||
name: "李伟",
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/13c5709a3993fdf353d147209f8145cb.jpg",
|
||||
score: 95,
|
||||
credits: 95,
|
||||
@@ -4096,16 +4353,16 @@ mockData.profileOverview = {
|
||||
// 学习统计
|
||||
studyStatistics: {
|
||||
studyTime: {
|
||||
personal: 168,
|
||||
classAverage: 107,
|
||||
personal: 273,
|
||||
classAverage: 242,
|
||||
},
|
||||
courseCompletion: {
|
||||
personalProgress: 100,
|
||||
classAverageProgress: 63,
|
||||
classAverageProgress: 89,
|
||||
},
|
||||
homeworkCompletion: {
|
||||
personalProgress: 88,
|
||||
classAverageProgress: 56,
|
||||
personalProgress: 100,
|
||||
classAverageProgress: 71,
|
||||
},
|
||||
attendance: {
|
||||
attendanceRate: 98,
|
||||
@@ -4229,8 +4486,8 @@ mockData.profileOverview = {
|
||||
{
|
||||
rank: 4,
|
||||
studentId: "2325030602",
|
||||
studentName: "李奇",
|
||||
name: "李奇",
|
||||
studentName: "李伟",
|
||||
name: "李伟",
|
||||
avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/13c5709a3993fdf353d147209f8145cb.jpg",
|
||||
score: 95,
|
||||
credits: 95,
|
||||
@@ -4300,10 +4557,14 @@ mockData.profileOverview = {
|
||||
};
|
||||
|
||||
// 课程直播间的课程列表数据(从CSV生成)
|
||||
mockData.courseLiveList = generateCourseLiveListFromCalendar(transformCalendarCourses(calendarCoursesData));
|
||||
|
||||
mockData.courseLiveList = generateCourseLiveListFromCalendar(allCalendarEvents);
|
||||
|
||||
// 生成公共课程列表
|
||||
mockData.publicCourseLiveList = generatePublicCourseLiveList(mockData.courseLiveList);
|
||||
mockData.publicCourseLiveList = generatePublicCourseLiveList(allCalendarEvents);
|
||||
|
||||
// 生成垂直能力课列表(传入unitPosters以包含海报数据)
|
||||
mockData.verticalCourseLiveList = generateVerticalCourseLiveList(allCalendarEvents, mockData.unitPosters);
|
||||
|
||||
// 在courseLiveList定义后,更新dashboardStatistics的课程和任务数据
|
||||
const dashboardCourseData = generateDashboardCourses(mockData.courseLiveList);
|
||||
@@ -4433,7 +4694,7 @@ mockData.dashboardStatistics.courses = {
|
||||
"type": "course"
|
||||
}
|
||||
],
|
||||
allTasks: generateTasksFromCalendarEvents(transformCalendarCourses(calendarCoursesData))
|
||||
allTasks: generateTasksFromCalendarEvents(allCalendarEvents)
|
||||
};
|
||||
})();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user