diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 55a9cb3..7d9d096 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -36,7 +36,12 @@ "Bash(git push:*)", "Read(/private/tmp/**)", "Read(/private/tmp/reference_repo/src/components/ClassRank/**)", - "Bash(pnpm run dev:*)" + "Bash(pnpm run dev:*)", + "Read(//**)", + "Bash(for func in \"calculateStageProgress\" \"checkMilestoneBlockage\" \"generateCalendarDays\" \"getCurrentActiveStage\" \"getOverallProgress\" \"getWeekDays\" \"updateStageStatuses\")", + "Bash(do)", + "Bash(echo \"=== $func ===\")", + "Bash(done)" ], "deny": [], "ask": [] diff --git a/.serena/.gitignore b/.serena/.gitignore new file mode 100644 index 0000000..14d86ad --- /dev/null +++ b/.serena/.gitignore @@ -0,0 +1 @@ +/cache diff --git a/courseLiveListData.json b/courseLiveListData.json index bc44226..739f4cc 100644 --- a/courseLiveListData.json +++ b/courseLiveListData.json @@ -468,8 +468,8 @@ "courseName": "AIGC的基本概念与各领域的应用", "teacherName": "赵志强", "date": "2025-09-03", - "completed": true, - "current": false, + "completed": false, + "current": true, "upcoming": false }, { @@ -477,99 +477,99 @@ "courseName": "AIGC语言模型:chatgpt的灵活应...", "teacherName": "赵志强", "date": "2025-09-04", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-4", "courseName": "AIGC生成内容的版权问题与合规使用", "teacherName": "刘杰", "date": "2025-09-09", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-5", "courseName": "AIGC图像生成模型:Stable Di...", "teacherName": "刘杰", "date": "2025-09-10", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-6", "courseName": "AIGC图像生成模型:Stable Di...", "teacherName": "刘杰", "date": "2025-09-11", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-7", "courseName": "AIGC图像生成模型:Stable Di...", "teacherName": "刘杰", "date": "2025-09-16", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-8", "courseName": "AIGC图像生成模型:Stable Di...", "teacherName": "刘杰", "date": "2025-09-17", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-9", "courseName": "AIGC视频应用:音视频生成与AI自动剪...", "teacherName": "赵志强", "date": "2025-09-18", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-10", "courseName": "AIGC视频应用:音视频生成与AI自动剪...", "teacherName": "赵志强", "date": "2025-09-23", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-11", "courseName": "AI词曲创作:suno", "teacherName": "赵志强", "date": "2025-09-24", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-12", "courseName": "AI词曲创作:suno", "teacherName": "赵志强", "date": "2025-09-25", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c7-13", "courseName": "单元小结", "teacherName": "赵志强", "date": "2025-09-30", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true } ] }, @@ -582,117 +582,117 @@ "courseName": "新媒体应用传播学", "teacherName": "赵志强", "date": "2025-10-01", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-2", "courseName": "新媒体故事结构入门", "teacherName": "赵志强", "date": "2025-10-02", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-3", "courseName": "新媒体产品策划", "teacherName": "赵志强", "date": "2025-10-07", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-4", "courseName": "平台账号经营与内容赛道", "teacherName": "赵志强", "date": "2025-10-08", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-5", "courseName": "各平台变现方式与具体方法", "teacherName": "赵志强", "date": "2025-10-09", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-6", "courseName": "内容运营:短视频的制作工具", "teacherName": "赵志强", "date": "2025-10-14", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-7", "courseName": "内容运营:短视频的制作工具", "teacherName": "赵志强", "date": "2025-10-15", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-8", "courseName": "内容运营:短视频的制作工具", "teacherName": "赵志强", "date": "2025-10-16", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-9", "courseName": "内容运营:短视频的制作工具", "teacherName": "赵志强", "date": "2025-10-21", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-10", "courseName": "内容运营:短视频制作内容对标", "teacherName": "刘杰", "date": "2025-10-22", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-11", "courseName": "内容运营:短视频制作内容对标", "teacherName": "刘杰", "date": "2025-10-23", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-12", "courseName": "直播运营:直播间的搭建", "teacherName": "刘杰", "date": "2025-10-28", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-13", "courseName": "直播运营:直播间的搭建", "teacherName": "刘杰", "date": "2025-10-29", - "completed": true, + "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-14", @@ -701,7 +701,7 @@ "date": "2025-10-30", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-15", @@ -710,7 +710,7 @@ "date": "2025-11-04", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-16", @@ -719,7 +719,7 @@ "date": "2025-11-05", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-17", @@ -728,7 +728,7 @@ "date": "2025-11-06", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-18", @@ -737,7 +737,7 @@ "date": "2025-11-11", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-19", @@ -746,7 +746,7 @@ "date": "2025-11-12", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c8-20", @@ -755,7 +755,7 @@ "date": "2025-11-13", "completed": false, "current": false, - "upcoming": false + "upcoming": true } ] }, @@ -770,7 +770,7 @@ "date": "2025-11-18", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-2", @@ -779,7 +779,7 @@ "date": "2025-11-19", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-3", @@ -788,7 +788,7 @@ "date": "2025-11-20", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-4", @@ -797,7 +797,7 @@ "date": "2025-11-25", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-5", @@ -806,7 +806,7 @@ "date": "2025-11-26", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-6", @@ -815,7 +815,7 @@ "date": "2025-11-27", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-7", @@ -824,7 +824,7 @@ "date": "2025-12-02", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-8", @@ -833,7 +833,7 @@ "date": "2025-12-03", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-9", @@ -842,7 +842,7 @@ "date": "2025-12-04", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-10", @@ -851,7 +851,7 @@ "date": "2025-12-09", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-11", @@ -860,7 +860,7 @@ "date": "2025-12-10", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-12", @@ -869,7 +869,7 @@ "date": "2025-12-11", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-13", @@ -878,7 +878,7 @@ "date": "2025-12-16", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c9-14", @@ -887,7 +887,7 @@ "date": "2025-12-17", "completed": false, "current": false, - "upcoming": false + "upcoming": true } ] }, @@ -902,7 +902,7 @@ "date": "2025-12-18", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c10-2", @@ -911,7 +911,7 @@ "date": "2025-12-23", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c10-3", @@ -920,7 +920,7 @@ "date": "2025-12-24", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c10-4", @@ -929,7 +929,7 @@ "date": "2025-12-25", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c10-5", @@ -938,7 +938,7 @@ "date": "2025-12-30", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c10-6", @@ -947,7 +947,7 @@ "date": "2025-12-31", "completed": false, "current": false, - "upcoming": false + "upcoming": true }, { "courseId": "c10-7", @@ -956,7 +956,7 @@ "date": "2026-01-01", "completed": false, "current": false, - "upcoming": false + "upcoming": true } ] } diff --git a/dashboardTasksData.json b/dashboardTasksData.json new file mode 100644 index 0000000..8fbddcd --- /dev/null +++ b/dashboardTasksData.json @@ -0,0 +1,619 @@ +{ + "todayTasks": [ + { + "id": 48, + "title": "完成AIGC的基本概念与各领域的应用课程学习", + "courseName": "AIGC的基本概念与各领域的应用", + "date": "2025-09-03", + "deadline": "2025-09-03 21:00", + "priority": "high", + "status": "IN_PROGRESS", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + } + ], + "allTasks": [ + { + "id": 1, + "title": "完成教育体系认知课程学习", + "courseName": "教育体系认知", + "date": "2025-03-04", + "deadline": "2025-03-04 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "岗位体系认知", + "type": "course" + }, + { + "id": 2, + "title": "完成现代文旅类企业的管理体系课程学习", + "courseName": "现代文旅类企业的管理体系", + "date": "2025-03-05", + "deadline": "2025-03-05 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "岗位体系认知", + "type": "course" + }, + { + "id": 3, + "title": "完成专科生的职业规划课程学习", + "courseName": "专科生的职业规划", + "date": "2025-03-06", + "deadline": "2025-03-06 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "岗位体系认知", + "type": "course" + }, + { + "id": 4, + "title": "完成文旅产业认知课课程学习", + "courseName": "文旅产业认知课", + "date": "2025-03-11", + "deadline": "2025-03-11 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 5, + "title": "完成行业详解:旅游行业课程学习", + "courseName": "行业详解:旅游行业", + "date": "2025-03-12", + "deadline": "2025-03-12 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 6, + "title": "完成行业详解:酒店与民宿行业课程学习", + "courseName": "行业详解:酒店与民宿行业", + "date": "2025-03-13", + "deadline": "2025-03-13 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 7, + "title": "完成行业详解:活动与会展行业课程学习", + "courseName": "行业详解:活动与会展行业", + "date": "2025-03-18", + "deadline": "2025-03-18 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 8, + "title": "完成行业详解:文化服务行业课程学习", + "courseName": "行业详解:文化服务行业", + "date": "2025-03-19", + "deadline": "2025-03-19 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 9, + "title": "完成现代文旅产业生态图谱课程学习", + "courseName": "现代文旅产业生态图谱", + "date": "2025-03-20", + "deadline": "2025-03-20 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 10, + "title": "完成文旅政策法规与风险管理课程学习", + "courseName": "文旅政策法规与风险管理", + "date": "2025-03-25", + "deadline": "2025-03-25 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 11, + "title": "完成旅游产品与旅游资源课程学习", + "courseName": "旅游产品与旅游资源", + "date": "2025-03-26", + "deadline": "2025-03-26 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 12, + "title": "完成游客行为心理学基础课程学习", + "courseName": "游客行为心理学基础", + "date": "2025-03-27", + "deadline": "2025-03-27 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 13, + "title": "完成可持续旅游发展课程学习", + "courseName": "可持续旅游发展", + "date": "2025-04-01", + "deadline": "2025-04-01 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 14, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-04-02", + "deadline": "2025-04-02 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 15, + "title": "完成文旅场景职业形象IP塑造课程学习", + "courseName": "文旅场景职业形象IP塑造", + "date": "2025-04-03", + "deadline": "2025-04-03 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 16, + "title": "完成情境化服务体验设计课程学习", + "courseName": "情境化服务体验设计", + "date": "2025-04-08", + "deadline": "2025-04-08 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 17, + "title": "完成政务商务接待专项礼仪课程学习", + "courseName": "政务商务接待专项礼仪", + "date": "2025-04-09", + "deadline": "2025-04-09 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 18, + "title": "完成文旅服务中的非语言表达课程学习", + "courseName": "文旅服务中的非语言表达", + "date": "2025-04-10", + "deadline": "2025-04-10 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 19, + "title": "完成服务沟通技巧与表达训练课程学习", + "courseName": "服务沟通技巧与表达训练", + "date": "2025-04-15", + "deadline": "2025-04-15 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 20, + "title": "完成多元文化下的服务表达差异课程学习", + "courseName": "多元文化下的服务表达差异", + "date": "2025-04-16", + "deadline": "2025-04-16 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 21, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-04-17", + "deadline": "2025-04-17 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 22, + "title": "完成供应链管理的内容课程学习", + "courseName": "供应链管理的内容", + "date": "2025-04-22", + "deadline": "2025-04-22 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 23, + "title": "完成文旅资源调度课程学习", + "courseName": "文旅资源调度", + "date": "2025-04-23", + "deadline": "2025-04-23 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 24, + "title": "完成文旅产品全生命周期管理课程学习", + "courseName": "文旅产品全生命周期管理", + "date": "2025-04-24", + "deadline": "2025-04-24 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 25, + "title": "完成文旅商品供应链课程学习", + "courseName": "文旅商品供应链", + "date": "2025-04-29", + "deadline": "2025-04-29 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 26, + "title": "完成住宿业资源协同课程学习", + "courseName": "住宿业资源协同", + "date": "2025-04-30", + "deadline": "2025-04-30 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 27, + "title": "完成小型文旅项目的供应链角色模拟课程学习", + "courseName": "小型文旅项目的供应链角色模拟", + "date": "2025-05-01", + "deadline": "2025-05-01 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 28, + "title": "完成文旅项目供应链特征课程学习", + "courseName": "文旅项目供应链特征", + "date": "2025-05-06", + "deadline": "2025-05-06 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 29, + "title": "完成文旅供应链中的B2B与B2C模式课程学习", + "courseName": "文旅供应链中的B2B与B2C模式", + "date": "2025-05-07", + "deadline": "2025-05-07 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 30, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-05-08", + "deadline": "2025-05-08 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 31, + "title": "完成现代设计行业的发展现状课程学习", + "courseName": "现代设计行业的发展现状", + "date": "2025-05-13", + "deadline": "2025-05-13 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 32, + "title": "完成设计基础课程学习", + "courseName": "设计基础", + "date": "2025-05-14", + "deadline": "2025-05-14 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 33, + "title": "完成字体设计与中文字体情绪表达课程学习", + "courseName": "字体设计与中文字体情绪表达", + "date": "2025-05-15", + "deadline": "2025-05-15 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 34, + "title": "完成商业平面色彩搭配课程学习", + "courseName": "商业平面色彩搭配", + "date": "2025-05-20", + "deadline": "2025-05-20 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 35, + "title": "完成平面设计构图课程学习", + "courseName": "平面设计构图", + "date": "2025-05-21", + "deadline": "2025-05-21 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 36, + "title": "完成图像编辑工具:Photoshop课程学习", + "courseName": "图像编辑工具:Photoshop", + "date": "2025-05-22", + "deadline": "2025-05-22 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 37, + "title": "完成图像编辑工具:Photoshop课程学习", + "courseName": "图像编辑工具:Photoshop", + "date": "2025-05-27", + "deadline": "2025-05-27 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 38, + "title": "完成矢量与标志设计:Illustrator课程学习", + "courseName": "矢量与标志设计:Illustrator", + "date": "2025-05-28", + "deadline": "2025-05-28 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 39, + "title": "完成矢量与标志设计:Illustrator课程学习", + "courseName": "矢量与标志设计:Illustrator", + "date": "2025-05-29", + "deadline": "2025-05-29 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 40, + "title": "完成快速设计工具使用:Canva课程学习", + "courseName": "快速设计工具使用:Canva", + "date": "2025-06-03", + "deadline": "2025-06-03 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 41, + "title": "完成快速设计工具使用:Canva课程学习", + "courseName": "快速设计工具使用:Canva", + "date": "2025-06-04", + "deadline": "2025-06-04 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 42, + "title": "完成移动端视觉原型设计:Figma课程学习", + "courseName": "移动端视觉原型设计:Figma", + "date": "2025-06-05", + "deadline": "2025-06-05 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 43, + "title": "完成移动端视觉原型设计:Figma课程学习", + "courseName": "移动端视觉原型设计:Figma", + "date": "2025-06-10", + "deadline": "2025-06-10 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 44, + "title": "完成视频剪辑入门:剪映课程学习", + "courseName": "视频剪辑入门:剪映", + "date": "2025-06-11", + "deadline": "2025-06-11 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 45, + "title": "完成视频剪辑入门:剪映课程学习", + "courseName": "视频剪辑入门:剪映", + "date": "2025-06-12", + "deadline": "2025-06-12 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 46, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-06-17", + "deadline": "2025-06-17 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 47, + "title": "完成AIGC发展简史与基本逻辑课程学习", + "courseName": "AIGC发展简史与基本逻辑", + "date": "2025-09-02", + "deadline": "2025-09-02 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 48, + "title": "完成AIGC的基本概念与各领域的应用课程学习", + "courseName": "AIGC的基本概念与各领域的应用", + "date": "2025-09-03", + "deadline": "2025-09-03 21:00", + "priority": "high", + "status": "IN_PROGRESS", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 49, + "title": "完成AIGC语言模型:chatgpt的灵活应...课程学习", + "courseName": "AIGC语言模型:chatgpt的灵活应...", + "date": "2025-09-04", + "deadline": "2025-09-04 21:00", + "priority": "medium", + "status": "PENDING", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 50, + "title": "完成AIGC生成内容的版权问题与合规使用课程学习", + "courseName": "AIGC生成内容的版权问题与合规使用", + "date": "2025-09-09", + "deadline": "2025-09-09 21:00", + "priority": "medium", + "status": "PENDING", + "teacher": "刘杰", + "unit": "AIGC人工智能生成内容", + "type": "course" + } + ], + "todayStr": "2025-09-03" +} \ No newline at end of file diff --git a/generateCourseLiveList.js b/generateCourseLiveList.js index 2963ea3..dbff6af 100644 --- a/generateCourseLiveList.js +++ b/generateCourseLiveList.js @@ -73,12 +73,13 @@ for (let i = 1; i < lines.length; i++) { const daysDiff = Math.floor(timeDiff / (24 * 60 * 60 * 1000)); // 判断课程状态: - // - 已完成:状态为"已结束"或日期在今天之前 + // - 已完成:日期在今天之前 // - 直播中(current):今天的课程 - // - 即将开始(upcoming):未来7天内的课程(在组件中会显示为"即将开始") - const isCompleted = status === '已结束' || daysDiff < 0; + // - 即将开始(upcoming):未来的课程 + // 注意:忽略CSV中的状态,根据日期自动判断 + const isCompleted = daysDiff < 0; // 只根据日期判断,过去的课程为已完成 const isCurrent = daysDiff === 0; // 今天的课程设为直播中 - const isUpcoming = !isCompleted && !isCurrent && daysDiff > 0 && daysDiff <= 7; // 未来7天内 + const isUpcoming = daysDiff > 0; // 所有未来的课程都标记为即将开始 unitData.courses.push({ courseId: `c${unitData.unitId.replace('unit', '')}-${unitData.courses.length + 1}`, @@ -86,8 +87,8 @@ for (let i = 1; i < lines.length; i++) { teacherName: teacher || '未知老师', date: formattedDate, completed: isCompleted, - current: isCurrent && !isCompleted, - upcoming: isUpcoming // 添加即将开始标识 + current: isCurrent, // 今天的课程标记为current + upcoming: isUpcoming // 未来7天内的课程 }); } } diff --git a/regenerateDashboardTasks.js b/regenerateDashboardTasks.js new file mode 100644 index 0000000..acc93dd --- /dev/null +++ b/regenerateDashboardTasks.js @@ -0,0 +1,86 @@ +import fs from 'fs'; + +// 读取更新后的mockData +const mockDataContent = fs.readFileSync('src/data/mockData.js', 'utf-8'); + +// 提取courseLiveList数据 +const courseLiveListMatch = mockDataContent.match(/mockData\.courseLiveList = (\[[\s\S]*?\]);/); +if (!courseLiveListMatch) { + console.error('无法找到courseLiveList数据'); + process.exit(1); +} + +const courseLiveList = eval('(' + courseLiveListMatch[1] + ')'); + +// 重新生成任务数据 +const today = new Date(); +today.setHours(0, 0, 0, 0); +const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; + +console.log('今天的日期:', todayStr); + +// 查找今天的课程(9月3日) +const todaysCourses = []; +courseLiveList.forEach(unit => { + unit.courses.forEach(course => { + if (course.date === todayStr) { + todaysCourses.push({ + ...course, + unitName: unit.unitName, + unitId: unit.unitId + }); + } + }); +}); + +console.log('找到今天的课程:', todaysCourses.length, '门'); +todaysCourses.forEach(course => { + console.log(` - ${course.courseName} (${course.teacherName})`); +}); + +// 生成allTasks +const allTasks = []; +let taskId = 1; + +courseLiveList.forEach(unit => { + unit.courses.forEach(course => { + const courseDate = new Date(course.date); + const status = course.completed ? 'COMPLETED' : + course.current ? 'IN_PROGRESS' : + courseDate > today ? 'PENDING' : 'COMPLETED'; + + allTasks.push({ + id: taskId++, + title: `完成${course.courseName}课程学习`, + courseName: course.courseName, + date: course.date, + deadline: `${course.date} 21:00`, + priority: course.current ? 'high' : course.upcoming ? 'medium' : 'low', + status: status, + teacher: course.teacherName, + unit: unit.unitName, + type: 'course' + }); + }); +}); + +// 过滤今天的任务 +const todayTasks = allTasks.filter(task => task.date === todayStr); + +console.log('\n生成的今日任务:', todayTasks.length, '个'); +todayTasks.forEach(task => { + console.log(` - ${task.title}`); + console.log(` 状态: ${task.status}, 优先级: ${task.priority}`); +}); + +// 输出结果到文件 +const result = { + todayTasks, + allTasks: allTasks.slice(0, 50), // 限制数量 + todayStr +}; + +fs.writeFileSync('dashboardTasksData.json', JSON.stringify(result, null, 2)); +console.log('\n✅ Dashboard任务数据已生成到 dashboardTasksData.json'); +console.log(`📝 今日任务: ${todayTasks.length} 个`); +console.log(`📋 总任务: ${allTasks.length} 个`); \ No newline at end of file diff --git a/removeDuplicates.js b/removeDuplicates.js new file mode 100644 index 0000000..c99cb8e --- /dev/null +++ b/removeDuplicates.js @@ -0,0 +1,69 @@ +import fs from 'fs'; + +const content = fs.readFileSync('src/data/mockData.js', 'utf-8'); +const lines = content.split('\n'); + +// 要删除的重复函数及其行号范围 +const duplicatesToRemove = [ + { name: 'generateCalendarDays', start: 6018 }, + { name: 'getWeekDays', start: 6091 }, + { name: 'calculateStageProgress', start: 6108 }, + { name: 'getCurrentActiveStage', start: 6133 }, + { name: 'checkMilestoneBlockage', start: 6149 }, + { name: 'updateStageStatuses', start: 6182 }, + { name: 'getOverallProgress', start: 6214 } +]; + +// 找到每个函数的结束行 +duplicatesToRemove.forEach(func => { + let braceCount = 0; + let inFunction = false; + + for (let i = func.start - 1; i < lines.length; i++) { + const line = lines[i]; + + if (!inFunction && line.includes('export const ' + func.name)) { + inFunction = true; + } + + if (inFunction) { + // 计算大括号 + for (const char of line) { + if (char === '{') braceCount++; + if (char === '}') braceCount--; + } + + // 函数结束 + if (braceCount === 0 && line.includes('};')) { + func.end = i + 1; // 行号(从1开始) + break; + } + } + } +}); + +// 标记要删除的行 +const linesToDelete = new Set(); +duplicatesToRemove.forEach(func => { + if (func.end) { + for (let i = func.start; i <= func.end; i++) { + linesToDelete.add(i); + } + console.log(`标记删除 ${func.name}: 行 ${func.start}-${func.end}`); + } +}); + +// 创建新内容,跳过标记的行 +const newLines = []; +lines.forEach((line, index) => { + const lineNum = index + 1; + if (!linesToDelete.has(lineNum)) { + newLines.push(line); + } +}); + +// 写入文件 +fs.writeFileSync('src/data/mockData.js', newLines.join('\n')); + +console.log(`\n✅ 已删除 ${duplicatesToRemove.length} 个重复的函数`); +console.log(`📄 文件已更新`); \ No newline at end of file diff --git a/src/components/CourseList/index.css b/src/components/CourseList/index.css index 907fec1..74807da 100644 --- a/src/components/CourseList/index.css +++ b/src/components/CourseList/index.css @@ -142,6 +142,27 @@ border: 1px solid #c9cdd4; } } + + .not-started { + &::before { + content: "未开始"; + position: absolute; + right: 10px; + top: 10px; + width: 48px; + height: 20px; + line-height: 18px; + text-align: center; + border-radius: 12px; + background-color: #e8e8e8; + color: #86909c; + font-size: 12px; + font-weight: 600; + box-sizing: border-box; + border: 1px solid #e8e8e8; + } + } + .active { border: 1px solid #0275f2; @@ -156,6 +177,18 @@ background-size: 100% 100%; } } + + .selected { + background-color: #f2f8ff; + border: 1px solid #4080ff !important; + box-shadow: 0 2px 8px rgba(64, 128, 255, 0.15); + + p { + color: #1d2129; + font-weight: 500; + } + } + .pending { opacity: 0.6; cursor: not-allowed; diff --git a/src/components/CoursesVideoPlayer/index.css b/src/components/CoursesVideoPlayer/index.css index d5627cd..00acd7a 100644 --- a/src/components/CoursesVideoPlayer/index.css +++ b/src/components/CoursesVideoPlayer/index.css @@ -101,6 +101,16 @@ } } + /* 刘杰导师头像特殊调整 */ + .teacher-avatar.teacher-liujie { + img { + width: 400%; /* 大幅放大 */ + height: 400%; + object-position: center 30%; /* 调整位置 */ + top: -100%; /* 继续大幅上移 */ + } + } + .avatar-wrapper { position: relative; width: 64px; diff --git a/src/components/CoursesVideoPlayer/index.jsx b/src/components/CoursesVideoPlayer/index.jsx index 099319a..a06619a 100644 --- a/src/components/CoursesVideoPlayer/index.jsx +++ b/src/components/CoursesVideoPlayer/index.jsx @@ -33,8 +33,6 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u return backgrounds[name] || "#E3E2E0"; }; - console.log("当前导师:", currentTeacher.name, "需要调整:", needsAdjustment); - // 获取当前课程信息 const courseName = selectedCourse?.courseName || "钢铁是怎样炼成的"; const courseDate = selectedCourse?.date || "09.01"; @@ -81,7 +79,8 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u handleClickBtn(2)}>下一集 >
- {selectedCourse?.current ? ( + {/* 如果没有selectedCourse(公共课直播间)或者selectedCourse.current为true,都播放视频 */} + {!selectedCourse || selectedCourse?.current ? ( ) : (
span { position: absolute; diff --git a/src/data/mockData.js.backup b/src/data/mockData.js.backup index 5a7d6e8..e5051de 100644 --- a/src/data/mockData.js.backup +++ b/src/data/mockData.js.backup @@ -34,6 +34,20 @@ export const mockData = { ], }, + // 单元海报数据 + unitPosters: { + "岗位体系认知": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJkjjd.png", + "产业认知课": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJakCU.png", + "旅游产业全景与文旅基础知识": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJsPKb.png", + "文旅服务:形象、沟通与体验的融合艺术": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJ4LRL.png", + "文旅与供应链基础": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJOl8F.png", + "商业设计基础": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJx0iL.png", + "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" + }, + // 导师信息数据 teacherData: { "刘杰": { @@ -5648,233 +5662,6113 @@ mockData.interviewLiveRoom = { }, }; -// 添加Dashboard主页数据 +// 生成Dashboard课程数据的函数(需要在courseLiveList定义后调用) +const generateDashboardCourses = (courseLiveList) => { + const today = new Date(); + today.setHours(0, 0, 0, 0); + + // 获取所有课程 + const allCourses = []; + courseLiveList.forEach(unit => { + unit.courses.forEach(course => { + allCourses.push({ + ...course, + unitName: unit.unitName + }); + }); + }); + + // 根据日期排序 + allCourses.sort((a, b) => new Date(a.date) - new Date(b.date)); + + // 查找今天的课程 + const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; + const todaysCourses = allCourses.filter(course => course.date === todayStr); + + // 查找下一节课(今天之后的第一节课) + const nextCourse = allCourses.find(course => new Date(course.date) > today); + + // 查找最近的课程(最近7天内已完成的课程) + const sevenDaysAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000); + const recentCourses = allCourses + .filter(course => { + const courseDate = new Date(course.date); + return courseDate < today && courseDate >= sevenDaysAgo; + }) + .slice(-3) // 取最近3个 + .reverse(); // 按时间倒序 + + // 统计数据 + const completedCourses = allCourses.filter(course => course.completed).length; + const totalCourses = allCourses.length; + const overallProgress = Math.round((completedCourses / totalCourses) * 100); + + return { + todaysCourses: todaysCourses.map(course => ({ + id: course.courseId, + courseName: course.courseName, + teacher: course.teacherName, + time: "20:00-21:00", // 固定时间 + location: "线上直播", + status: course.current ? "直播中" : "待开始", + unit: course.unitName + })), + nextCourse: nextCourse ? { + id: nextCourse.courseId, + courseName: nextCourse.courseName, + teacher: nextCourse.teacherName, + date: nextCourse.date, + time: "20:00", + location: "线上直播", + unit: nextCourse.unitName + } : null, + recentCourses: recentCourses.map(course => ({ + id: course.courseId, + courseName: course.courseName, + date: course.date, + teacher: course.teacherName, + unit: course.unitName + })) + }; +}; + +// 添加Dashboard主页数据(先定义结构,稍后填充数据) mockData.dashboardStatistics = { - // 概览数据 + // 概览数据(临时数据,稍后更新) overview: { - totalCourses: 12, - completedCourses: 10, + totalCourses: 100, + completedCourses: 80, ongoingCourses: 2, - overallProgress: 85, + overallProgress: 80, totalCredits: 99, currentRank: 1, }, - // 课程数据 + // 课程数据(临时数据,稍后更新) courses: { - todaysCourses: [ + todaysCourses: [], + nextCourse: null, + recentCourses: [] + }, + + // 任务数据(临时数据,稍后更新) + tasks: { + todayTasks: [], + weekTasks: [], + allTasks: [] + }, + + // 排名数据 + ranking: { + myRank: { + rank: 1, + totalStudents: 45, + trend: "up", + change: 0, + }, + topStudents: [ { - id: 1, - courseName: "展会策划教学", - teacher: "李老师", - time: "08:00-09:30", - location: "教学楼A301", - status: "即将开始", + rank: 1, + studentId: "2426030612", + studentName: "万圆", + name: "万圆", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 99, + credits: 99, + isMe: true, }, { - id: 2, - courseName: "数字媒体设计", - teacher: "王老师", - time: "10:00-11:30", - location: "设计楼B202", - status: "进行中", + rank: 2, + studentId: "2426030613", + studentName: "李明", + name: "李明", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 95, + credits: 95, }, { - id: 3, - courseName: "文旅产业分析", - teacher: "张老师", - time: "14:00-15:30", - location: "教学楼C105", - status: "待开始", + rank: 3, + studentId: "2426030614", + studentName: "张华", + name: "张华", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 92, + credits: 92, + }, + { + rank: 4, + studentId: "2426030615", + studentName: "王丽", + name: "王丽", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 90, + credits: 90, + }, + { + rank: 5, + studentId: "2426030616", + studentName: "赵强", + name: "赵强", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 88, + credits: 88, }, ], - recentCourses: [ - { - id: 4, - courseName: "品牌视觉设计", - date: "2025-08-26", - progress: 85, - nextClass: "周三 14:00", - }, - { - id: 5, - courseName: "创意策划实务", - date: "2025-08-25", - progress: 70, - nextClass: "周四 10:00", - }, - ], - nextCourse: { - courseName: "展会策划教学", - time: "明天 08:00", - location: "教学楼A301", + classInfo: { + className: "文旅班", + totalStudents: 45, + averageScore: 75.5, + }, + }, + }, + +// 添加Profile个人档案页面数据 +mockData.profileOverview = { + // 学生基本信息 + studentInfo: { + name: "万圆", + realName: "万圆", + studentId: "2426030612", + studentNo: "2426030612", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + school: "苏州工艺美术职业技术学院", + major: "数字媒体艺术设计", + className: "文旅班", + grade: "2024级", + studyPhase: "复合能力培养", + mbti: "ENFJ", + mbtiType: "ENFJ", + enrollmentDate: "2024-09-01", + expectedGraduation: "2027-06-30", + credits: 99, + gpa: 4.8, + classRank: 1, + totalStudents: 45, + myRank: { + rank: 1, + score: 99, }, }, - // 任务数据 - tasks: { - todayTasks: [ + // 学习统计 + studyStatistics: { + studyTime: { + personal: 168, + classAverage: 107, + }, + courseCompletion: { + personalProgress: 85, + classAverageProgress: 63, + }, + homeworkCompletion: { + personalProgress: 88, + classAverageProgress: 56, + }, + attendance: { + attendanceRate: 98, + absenceRate: 2, + }, + ranking: { + study: { rank: 1, total: 45 }, + attendance: { rank: 1, total: 45 }, + homework: { rank: 1, total: 45 }, + }, + }, + + // 学习进度 + learningProgress: { + overallProgress: 85, + currentStage: "复合能力培养", + stageProgress: 65, + completedModules: [ + "基础理论", + "设计软件应用", + "创意思维训练", + "项目管理基础", + ], + ongoingModules: [ + "展会策划实务", + "文旅产业研究", + "数字创意设计", + "品牌营销策略", + ], + upcomingModules: [ + "实习实训", + "毕业设计", + ], + }, + + // 技能标签 + skills: [ + "Photoshop精通", + "Illustrator熟练", + "After Effects", + "展会策划", + "文案撰写", + "创意设计", + "项目管理", + "团队协作", + ], + + // 获得的证书 + certificates: [ + { + name: "Adobe认证设计师", + issueDate: "2024-12-15", + issuer: "Adobe", + }, + { + name: "展会策划师初级", + issueDate: "2024-11-20", + issuer: "中国会展协会", + }, + ], + + // 参与的项目 + projects: [ + { + name: "苏州园林文创设计", + role: "主设计师", + period: "2024.10 - 2024.12", + status: "已完成", + }, + { + name: "江南水乡旅游品牌策划", + role: "策划组长", + period: "2024.11 - 至今", + status: "进行中", + }, + ], + + // 排名信息(与dashboard共享) + ranking: { + myRank: { + rank: 1, + score: 99, + totalStudents: 45, + trend: "stable", + change: 0, + }, + classInfo: { + className: "文旅班", + totalStudents: 45, + averageScore: 75.5, + }, + rankings: [ { - id: 1, - title: "完成展会策划方案初稿", - courseName: "展会策划教学", - deadline: "今天 18:00", - priority: "high", - status: "PENDING", + rank: 1, + studentId: "2426030612", + studentName: "万圆", + name: "万圆", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 99, + credits: 99, + isMe: true, }, { - id: 2, - title: "提交数字创意作品", - courseName: "数字媒体设计", - deadline: "今天 22:00", - priority: "medium", - status: "IN_PROGRESS", + rank: 2, + studentId: "2426030613", + studentName: "李明", + name: "李明", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 95, + credits: 95, }, { - id: 3, - title: "文旅案例分析报告", - courseName: "文旅产业分析", - deadline: "明天 12:00", - priority: "low", - status: "PENDING", + rank: 3, + studentId: "2426030614", + studentName: "张华", + name: "张华", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 92, + credits: 92, + }, + { + rank: 4, + studentId: "2426030615", + studentName: "王丽", + name: "王丽", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 90, + credits: 90, + }, + { + rank: 5, + studentId: "2426030616", + studentName: "赵强", + name: "赵强", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + score: 88, + credits: 88, }, ], - weekTasks: [ - { - id: 4, - title: "团队项目汇报", - date: "2025-08-29", - status: "PENDING", - }, - { - id: 5, - title: "期中作品展示", - date: "2025-08-30", - status: "PENDING", - }, + classInfo: { + className: "文旅班", + totalStudents: 45, + averageScore: 75.5, + myPercentile: 100, + }, + }, + }; + +// 课程直播间的课程列表数据(从CSV生成) +// 模拟数据 - 删除重复的export,继续使用第一个mockData对象 + // 用户信息 + user: { + name: "万圆", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + role: "学生", + studentId: "2426030612", + }, + + // 系统消息通知数据 - 简化版本 + notifications: { + unreadCount: 1, + messages: [ + { + id: 1, + type: "course", + title: "欢迎使用教务系统", + content: + "欢迎来到多多畅职教务原型系统!这是一个功能完整的教务管理系统演示版本。", + time: "2024-01-15 14:30", + isRead: false, + priority: "medium", + }, + { + id: 2, + type: "announcement", + title: "系统功能说明", + content: "您可以在左侧导航栏中体验各个功能模块,所有数据均为演示数据。", + time: "2024-01-14 10:15", + isRead: true, + priority: "low", + }, + ], + }, + + // 单元海报数据 + unitPosters: { + "岗位体系认知": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJkjjd.png", + "产业认知课": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJakCU.png", + "旅游产业全景与文旅基础知识": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJsPKb.png", + "文旅服务:形象、沟通与体验的融合艺术": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJ4LRL.png", + "文旅与供应链基础": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJOl8F.png", + "商业设计基础": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/butler_course_cover/compression/recuSHuSaJx0iL.png", + "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" + }, + + // 导师信息数据 + teacherData: { + "刘杰": { + name: "刘杰", + introduction: "15年民宿产业化研发与标准设计经验,专注民宿产品创新、职业化培训体系搭建及乡村文旅业态升级,主导多项国家级行业标准制定与落地实践。木亚文旅创始人兼董事长,全面负责民宿产业研发、标准制定及全国业务拓展,同时也是莫干山民宿行业协会执行会长兼秘书长以及浙江大学城市学院旅游管理专业校外导师。曾作为核心起草人,主持《乡村民宿服务质量规范》《民宿管家职业技能等级评定规范》等国标编制,推动民宿行业标准化发展;申报并推动'民宿管家'入选国家新职业目录,建立首个国家级职业技能评定体系。", + specialties: ["一听就懂", "思路很清晰", "课堂不枯燥", "学习氛围爆棚"], + avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJBE4VCCx.png", + type: "复合课导师", + courses: [] + }, + "郭建辉": { + name: "郭建辉", + introduction: "拥有18年文化旅游规划与产业运营经验,专注景区产品创新设计、文旅人才培养体系构建及城市文化更新模式研究,主导多项省部级文旅项目及行业标准实践落地。山行文旅研究院创始人兼院长,全面负责文旅规划研发、运营标准制定与全国学术交流,同时兼任中国文化旅游协会文创专委会副主任委员、华东师范大学旅游与会展专业硕士生导师。", + specialties: ["经验传授权威", "实用可落地", "表达沟通提升", "跨界经验丰富"], + avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJBMNLZL5.png", + type: "复合课导师", + courses: [] + }, + "赵志强": { + name: "赵志强", + introduction: "深耕乡村旅游与民宿产业12年,从一线管家服务到国家级标准制定,全程参与中国民宿职业化与产业化进程。曾作为首席讲师为苏浙沪皖四地文旅部门提供'乡村振兴十大模式'培训,设计桑蚕文化园、谢家路村等沉浸式研学路线,促成区域人才协作机制,获江苏省人社厅列为省级高级研修示范项目。曾担任标准起草专家组核心成员,牵头《德清县地方民宿管理办法》试点,联合政府申报'民宿管理师'新职业,制定长三角区域民宿评级体系,推动了紫蓬山民宿学校(安徽)、吴江农文旅融合示范区落地,形成可复制的'民宿+'乡村振兴模式。", + specialties: ["讲解有节奏", "讲解通俗", "幽默又有料", "善于启发"], + avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJC2oLPpC.png", + type: "复合课导师", + courses: [] + }, + "孙应战": { + name: "孙应战", + introduction: "拥有18年制造业与产品营销经验,曾在上市公司与世界500强外企任职,参与大众MEB平台、奥迪EA888发动机及新能源汽车项目开发。作为德企内训讲师、国际演讲学会资深会员和中国心理卫生协会会员,善于将实践经验转化为通俗讲解,课堂氛围轻松易懂。", + specialties: ["经验传授权威", "实用可落地", "表达沟通提升", "跨界经验丰富"], + avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpJCc6qecx.jpg", + type: "公共课导师", + courses: [] + }, + "魏立慧": { + name: "魏立慧", + introduction: "企业资深一线HR主讲,专注于为求职者提供一对一的个性化指导。通过真实招聘视角,深入剖析个人优势与短板、传授面试技巧、规划职业定位与发展路径,帮助学生快速提升求职竞争力。求职策略以实用落地为核心,注重互动交流与角色定位,让学员在轻松氛围中获得直击痛点的求职策略。", + specialties: ["点评直击要害", "擅长挖掘优势", "职业规划达人", "深谙用人逻辑"], + avatar: "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_teacher-avatar/recuUpSO4gUtJz.png", + type: "企业资深HR", + courses: [] + } + }, + + // 个人档案详细信息 + profile: { + name: "万圆", + gender: "女", + studentId: "2426030612", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + school: "苏州工艺美术职业技术学院", + major: "数字媒体艺术设计", + courses: ["复合能力培养", "文旅方向", "展会策划", "数字创意设计"], + className: "文旅", + studyPhase: "复合能力培养", + badges: { + credits: 99, + classRank: 1, + mbti: "ENFJ", + }, + // MBTI测评报告详细数据 + mbtiReport: { + type: "ENFJ", + title: "主人公 (Protagonist)", + description: + "充满魅力和鼓舞力的领袖,总能设法帮助他人。你天生善于理解他人,能够轻易感知他人的情绪和需求。", + characteristics: [ + "天生的领导者,充满感染力", + "极富同理心和洞察力", + "善于激励和鼓舞他人", + "具有强烈的责任感", + "重视团队合作与和谐", + "追求个人成长和自我实现", ], - allTasks: [ + strengths: [ + "卓越的人际交往能力", + "强大的组织和协调能力", + "善于发现他人潜力", + "具有感染力的热情", + "可靠值得信赖", + "富有创造性的问题解决能力", + ], + recommendations: [ + "充分发挥在团队中的领导和协调能力", + "学会适度关注自己的需求和感受", + "培养独立思考和决策能力", + "避免过度承担他人的情绪负担", + "保持工作与生活的平衡", + "在艺术设计中融入人文关怀理念", + ], + careerSuggestions: [ + "文旅项目策划经理", + "展会设计总监", + "品牌创意总监", + "用户体验设计师", + "文化产业运营经理", + "数字媒体艺术指导", + "社区运营经理", + "公关活动策划师", + ], + }, + }, + + // 学习统计数据 + studyStats: { + myHours: 168, + classAverage: 107, + completionRate: 95, + chartData: [ + { label: "我的学习时长", value: 168, color: "#10b981" }, + { label: "班级平均学习时长", value: 107, color: "#3b82f6" }, + ], + // 新增完成率统计数据 + attendanceStats: { + myAttendance: 98.5, + classAverageAttendance: 65, + }, + courseCompletionStats: { + myCourseCompletion: 96.8, + classAverageCourseCompletion: 63, + }, + homeworkCompletionStats: { + myHomeworkCompletion: 95, + classAverageHomeworkCompletion: 56, + }, + }, + + // 日历事件数据 - 使用当前月份的日期进行演示 + calendarEvents: [ { id: 1, - title: '完成AIGC发展简史与基本逻辑课程学习', - date: '2025-09-02', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC发展简史与基本逻辑', - status: 'COMPLETED', - teacherName: '赵志强', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '教育体系认知', + fullTitle: '教育体系认知', + teacher: '刘杰', + unit: '岗位体系认知', + startTime: '2025-03-04 20:00', + endTime: '2025-03-04 21:00', + type: 'course', + color: '#3b82f6', + textColor: '#1d2129', + description: '岗位体系认知 - 刘杰老师', + status: 'completed', + weekday: '星期二' }, { id: 2, - title: '完成AIGC的基本概念与各领域的应用课程学习', - date: '2025-09-03', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC的基本概念与各领域的应用', - status: 'COMPLETED', - teacherName: '赵志强', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '现代文旅类企业的管理体系', + fullTitle: '现代文旅类企业的管理体系', + teacher: '刘杰', + unit: '岗位体系认知', + startTime: '2025-03-05 20:00', + endTime: '2025-03-05 21:00', + type: 'course', + color: '#3b82f6', + textColor: '#1d2129', + description: '岗位体系认知 - 刘杰老师', + status: 'completed', + weekday: '星期三' }, { id: 3, - title: '完成AIGC语言模型:chatgpt的灵活应用课程学习', - date: '2025-09-04', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC语言模型:chatgpt的灵活应用', - status: 'COMPLETED', - teacherName: '赵志强', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '专科生的职业规划', + fullTitle: '专科生的职业规划', + teacher: '刘杰', + unit: '岗位体系认知', + startTime: '2025-03-06 20:00', + endTime: '2025-03-06 21:00', + type: 'course', + color: '#3b82f6', + textColor: '#1d2129', + description: '岗位体系认知 - 刘杰老师', + status: 'completed', + weekday: '星期四' }, { id: 4, - title: '完成AIGC生成内容的版权问题与合规使用课程学习', - date: '2025-09-09', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC生成内容的版权问题与合规使用', - status: 'COMPLETED', - teacherName: '刘杰', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '文旅产业认知课', + fullTitle: '文旅产业认知课', + teacher: '刘杰', + unit: '产业认知课', + startTime: '2025-03-11 20:00', + endTime: '2025-03-11 21:00', + type: 'course', + color: '#10b981', + textColor: '#1d2129', + description: '产业认知课 - 刘杰老师', + status: 'completed', + weekday: '星期二' }, { id: 5, - title: '完成AIGC图像生成模型:Stable Diffusion Al摄影和平面设计课程学习', - date: '2025-09-10', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC图像生成模型:Stable Diffusion Al摄影和平面设计', - status: 'COMPLETED', - teacherName: '刘杰', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '行业详解:旅游行业', + fullTitle: '行业详解:旅游行业', + teacher: '刘杰', + unit: '产业认知课', + startTime: '2025-03-12 20:00', + endTime: '2025-03-12 21:00', + type: 'course', + color: '#10b981', + textColor: '#1d2129', + description: '产业认知课 - 刘杰老师', + status: 'completed', + weekday: '星期三' }, { id: 6, - title: '完成AIGC图像生成模型:Stable Diffusion Al摄影和平面设计课程学习', - date: '2025-09-11', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC图像生成模型:Stable Diffusion Al摄影和平面设计', - status: 'COMPLETED', - teacherName: '刘杰', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '行业详解:酒店与民宿行业', + fullTitle: '行业详解:酒店与民宿行业', + teacher: '刘杰', + unit: '产业认知课', + startTime: '2025-03-13 20:00', + endTime: '2025-03-13 21:00', + type: 'course', + color: '#10b981', + textColor: '#1d2129', + description: '产业认知课 - 刘杰老师', + status: 'completed', + weekday: '星期四' }, { id: 7, - title: '完成AIGC图像生成模型:Stable Diffusion的应用操作课程学习', - date: '2025-09-16', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC图像生成模型:Stable Diffusion的应用操作', - status: 'COMPLETED', - teacherName: '刘杰', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '企业文化与职场适应', + fullTitle: '企业文化与职场适应', + teacher: '公开课讲师', + unit: '公开课', + startTime: '2025-03-14 20:00', + endTime: '2025-03-14 21:00', + type: 'public', + color: '#9333ea', + textColor: '#1d2129', + description: '职业技能公开课', + status: 'upcoming', + weekday: '星期五' }, { id: 8, - title: '完成AIGC图像生成模型:Stable Diffusion的应用操作课程学习', - date: '2025-09-17', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC图像生成模型:Stable Diffusion的应用操作', - status: 'COMPLETED', - teacherName: '刘杰', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '行业详解:活动与会展行业', + fullTitle: '行业详解:活动与会展行业', + teacher: '刘杰', + unit: '产业认知课', + startTime: '2025-03-18 20:00', + endTime: '2025-03-18 21:00', + type: 'course', + color: '#10b981', + textColor: '#1d2129', + description: '产业认知课 - 刘杰老师', + status: 'completed', + weekday: '星期二' }, { id: 9, - title: '完成AIGC视频应用:音视频生成与AI自动剪辑课程学习', - date: '2025-09-18', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC视频应用:音视频生成与AI自动剪辑', - status: 'COMPLETED', - teacherName: '赵志强', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '行业详解:文化服务行业', + fullTitle: '行业详解:文化服务行业', + teacher: '刘杰', + unit: '产业认知课', + startTime: '2025-03-19 20:00', + endTime: '2025-03-19 21:00', + type: 'course', + color: '#10b981', + textColor: '#1d2129', + description: '产业认知课 - 刘杰老师', + status: 'completed', + weekday: '星期三' }, { id: 10, - title: '完成AIGC视频应用:音视频生成与AI自动剪辑课程学习', - date: '2025-09-23', - time: '20:00', - type: 'HOMEWORK', - courseName: 'AIGC视频应用:音视频生成与AI自动剪辑', - status: 'COMPLETED', - teacherName: '赵志强', - teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', - duration: '1小时' + title: '现代文旅产业生态图谱', + fullTitle: '现代文旅产业生态图谱', + teacher: '刘杰', + unit: '旅游产业全景与文旅基础知识', + startTime: '2025-03-20 20:00', + endTime: '2025-03-20 21:00', + type: 'course', + color: '#f59e0b', + textColor: '#1d2129', + description: '旅游产业全景与文旅基础知识 - 刘杰老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 11, + title: '文旅政策法规与风险管理', + fullTitle: '文旅政策法规与风险管理', + teacher: '刘杰', + unit: '旅游产业全景与文旅基础知识', + startTime: '2025-03-25 20:00', + endTime: '2025-03-25 21:00', + type: 'course', + color: '#f59e0b', + textColor: '#1d2129', + description: '旅游产业全景与文旅基础知识 - 刘杰老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 12, + title: '旅游产品与旅游资源', + fullTitle: '旅游产品与旅游资源', + teacher: '刘杰', + unit: '旅游产业全景与文旅基础知识', + startTime: '2025-03-26 20:00', + endTime: '2025-03-26 21:00', + type: 'course', + color: '#f59e0b', + textColor: '#1d2129', + description: '旅游产业全景与文旅基础知识 - 刘杰老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 13, + title: '游客行为心理学基础', + fullTitle: '游客行为心理学基础', + teacher: '刘杰', + unit: '旅游产业全景与文旅基础知识', + startTime: '2025-03-27 20:00', + endTime: '2025-03-27 21:00', + type: 'course', + color: '#f59e0b', + textColor: '#1d2129', + description: '旅游产业全景与文旅基础知识 - 刘杰老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 14, + title: '可持续旅游发展', + fullTitle: '可持续旅游发展', + teacher: '刘杰', + unit: '旅游产业全景与文旅基础知识', + startTime: '2025-04-01 20:00', + endTime: '2025-04-01 21:00', + type: 'course', + color: '#f59e0b', + textColor: '#1d2129', + description: '旅游产业全景与文旅基础知识 - 刘杰老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 15, + title: '单元小结', + fullTitle: '单元小结', + teacher: '刘杰', + unit: '旅游产业全景与文旅基础知识', + startTime: '2025-04-02 20:00', + endTime: '2025-04-02 21:00', + type: 'course', + color: '#f59e0b', + textColor: '#1d2129', + description: '旅游产业全景与文旅基础知识 - 刘杰老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 16, + title: '文旅场景职业形象IP塑造', + fullTitle: '文旅场景职业形象IP塑造', + teacher: '郭建辉', + unit: '文旅服务:形象、沟通与体验的融合艺术', + startTime: '2025-04-03 20:00', + endTime: '2025-04-03 21:00', + type: 'course', + color: '#ef4444', + textColor: '#1d2129', + description: '文旅服务:形象、沟通与体验的融合艺术 - 郭建辉老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 17, + title: '在企业中如何进行自我管...', + fullTitle: '在企业中如何进行自我管理与自主学习', + teacher: '公开课讲师', + unit: '公开课', + startTime: '2025-04-04 20:00', + endTime: '2025-04-04 21:00', + type: 'public', + color: '#9333ea', + textColor: '#1d2129', + description: '职业技能公开课', + status: 'upcoming', + weekday: '星期五' + }, + { + id: 18, + title: '情境化服务体验设计', + fullTitle: '情境化服务体验设计', + teacher: '郭建辉', + unit: '文旅服务:形象、沟通与体验的融合艺术', + startTime: '2025-04-08 20:00', + endTime: '2025-04-08 21:00', + type: 'course', + color: '#ef4444', + textColor: '#1d2129', + description: '文旅服务:形象、沟通与体验的融合艺术 - 郭建辉老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 19, + title: '政务商务接待专项礼仪', + fullTitle: '政务商务接待专项礼仪', + teacher: '郭建辉', + unit: '文旅服务:形象、沟通与体验的融合艺术', + startTime: '2025-04-09 20:00', + endTime: '2025-04-09 21:00', + type: 'course', + color: '#ef4444', + textColor: '#1d2129', + description: '文旅服务:形象、沟通与体验的融合艺术 - 郭建辉老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 20, + title: '文旅服务中的非语言表达', + fullTitle: '文旅服务中的非语言表达', + teacher: '郭建辉', + unit: '文旅服务:形象、沟通与体验的融合艺术', + startTime: '2025-04-10 20:00', + endTime: '2025-04-10 21:00', + type: 'course', + color: '#ef4444', + textColor: '#1d2129', + description: '文旅服务:形象、沟通与体验的融合艺术 - 郭建辉老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 21, + title: '服务沟通技巧与表达训练', + fullTitle: '服务沟通技巧与表达训练', + teacher: '郭建辉', + unit: '文旅服务:形象、沟通与体验的融合艺术', + startTime: '2025-04-15 20:00', + endTime: '2025-04-15 21:00', + type: 'course', + color: '#ef4444', + textColor: '#1d2129', + description: '文旅服务:形象、沟通与体验的融合艺术 - 郭建辉老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 22, + title: '多元文化下的服务表达差异', + fullTitle: '多元文化下的服务表达差异', + teacher: '郭建辉', + unit: '文旅服务:形象、沟通与体验的融合艺术', + startTime: '2025-04-16 20:00', + endTime: '2025-04-16 21:00', + type: 'course', + color: '#ef4444', + textColor: '#1d2129', + description: '文旅服务:形象、沟通与体验的融合艺术 - 郭建辉老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 23, + title: '单元小结', + fullTitle: '单元小结', + teacher: '郭建辉', + unit: '文旅服务:形象、沟通与体验的融合艺术', + startTime: '2025-04-17 20:00', + endTime: '2025-04-17 21:00', + type: 'course', + color: '#ef4444', + textColor: '#1d2129', + description: '文旅服务:形象、沟通与体验的融合艺术 - 郭建辉老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 24, + title: '供应链管理的内容', + fullTitle: '供应链管理的内容', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-04-22 20:00', + endTime: '2025-04-22 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 25, + title: '文旅资源调度', + fullTitle: '文旅资源调度', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-04-23 20:00', + endTime: '2025-04-23 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 26, + title: '文旅产品全生命周期管理', + fullTitle: '文旅产品全生命周期管理', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-04-24 20:00', + endTime: '2025-04-24 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 27, + title: '如何利用AI工具在企业...', + fullTitle: '如何利用AI工具在企业中升职加薪', + teacher: '公开课讲师', + unit: '公开课', + startTime: '2025-04-25 20:00', + endTime: '2025-04-25 21:00', + type: 'public', + color: '#9333ea', + textColor: '#1d2129', + description: '职业技能公开课', + status: 'upcoming', + weekday: '星期五' + }, + { + id: 28, + title: '文旅商品供应链', + fullTitle: '文旅商品供应链', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-04-29 20:00', + endTime: '2025-04-29 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 29, + title: '住宿业资源协同', + fullTitle: '住宿业资源协同', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-04-30 20:00', + endTime: '2025-04-30 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 30, + title: '小型文旅项目的供应链角...', + fullTitle: '小型文旅项目的供应链角色模拟', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-05-01 20:00', + endTime: '2025-05-01 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 31, + title: '文旅项目供应链特征', + fullTitle: '文旅项目供应链特征', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-05-06 20:00', + endTime: '2025-05-06 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 32, + title: '文旅供应链中的B2B与...', + fullTitle: '文旅供应链中的B2B与B2C模式', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-05-07 20:00', + endTime: '2025-05-07 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 33, + title: '单元小结', + fullTitle: '单元小结', + teacher: '赵志强', + unit: '文旅与供应链基础', + startTime: '2025-05-08 20:00', + endTime: '2025-05-08 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '文旅与供应链基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 34, + title: '如何进行有效的沟通与表达', + fullTitle: '如何进行有效的沟通与表达', + teacher: '公开课讲师', + unit: '公开课', + startTime: '2025-05-09 20:00', + endTime: '2025-05-09 21:00', + type: 'public', + color: '#9333ea', + textColor: '#1d2129', + description: '职业技能公开课', + status: 'upcoming', + weekday: '星期五' + }, + { + id: 35, + title: '现代设计行业的发展现状', + fullTitle: '现代设计行业的发展现状', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-13 20:00', + endTime: '2025-05-13 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 36, + title: '设计基础', + fullTitle: '设计基础', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-14 20:00', + endTime: '2025-05-14 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 37, + title: '字体设计与中文字体情绪...', + fullTitle: '字体设计与中文字体情绪表达', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-15 20:00', + endTime: '2025-05-15 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 38, + title: '商业平面色彩搭配', + fullTitle: '商业平面色彩搭配', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-20 20:00', + endTime: '2025-05-20 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 39, + title: '平面设计构图', + fullTitle: '平面设计构图', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-21 20:00', + endTime: '2025-05-21 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 40, + title: '图像编辑工具:Phot...', + fullTitle: '图像编辑工具:Photoshop', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-22 20:00', + endTime: '2025-05-22 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 41, + title: '图像编辑工具:Phot...', + fullTitle: '图像编辑工具:Photoshop', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-27 20:00', + endTime: '2025-05-27 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 42, + title: '矢量与标志设计:Ill...', + fullTitle: '矢量与标志设计:Illustrator', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-28 20:00', + endTime: '2025-05-28 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 43, + title: '矢量与标志设计:Ill...', + fullTitle: '矢量与标志设计:Illustrator', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-05-29 20:00', + endTime: '2025-05-29 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 44, + title: '个人品牌与网络形象管理', + fullTitle: '个人品牌与网络形象管理', + teacher: '公开课讲师', + unit: '公开课', + startTime: '2025-05-30 20:00', + endTime: '2025-05-30 21:00', + type: 'public', + color: '#9333ea', + textColor: '#1d2129', + description: '职业技能公开课', + status: 'upcoming', + weekday: '星期五' + }, + { + id: 45, + title: '快速设计工具使用:Ca...', + fullTitle: '快速设计工具使用:Canva', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-06-03 20:00', + endTime: '2025-06-03 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 46, + title: '快速设计工具使用:Ca...', + fullTitle: '快速设计工具使用:Canva', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-06-04 20:00', + endTime: '2025-06-04 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 47, + title: '移动端视觉原型设计:F...', + fullTitle: '移动端视觉原型设计:Figma', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-06-05 20:00', + endTime: '2025-06-05 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 48, + title: '移动端视觉原型设计:F...', + fullTitle: '移动端视觉原型设计:Figma', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-06-10 20:00', + endTime: '2025-06-10 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 49, + title: '视频剪辑入门:剪映', + fullTitle: '视频剪辑入门:剪映', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-06-11 20:00', + endTime: '2025-06-11 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 50, + title: '视频剪辑入门:剪映', + fullTitle: '视频剪辑入门:剪映', + teacher: '赵志强', + unit: '商业设计基础', + startTime: '2025-06-12 20:00', + endTime: '2025-06-12 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: '商业设计基础 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 51, + title: '单元小结', + fullTitle: '单元小结', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-06-17 20:00', + endTime: '2025-06-17 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 52, + title: '情商管理与压力应对', + fullTitle: '情商管理与压力应对', + teacher: '公开课讲师', + unit: '公开课', + startTime: '2025-06-20 20:00', + endTime: '2025-06-20 21:00', + type: 'public', + color: '#9333ea', + textColor: '#1d2129', + description: '职业技能公开课', + status: 'upcoming', + weekday: '星期五' + }, + { + id: 53, + title: 'AIGC发展简史与基本...', + fullTitle: 'AIGC发展简史与基本逻辑', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-02 20:00', + endTime: '2025-09-02 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 54, + title: 'AIGC的基本概念与各...', + fullTitle: 'AIGC的基本概念与各领域的应用', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-03 20:00', + endTime: '2025-09-03 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 55, + title: 'AIGC语言模型:ch...', + fullTitle: 'AIGC语言模型:chatgpt的灵活应用', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-04 20:00', + endTime: '2025-09-04 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 56, + title: 'AIGC生成内容的版权...', + fullTitle: 'AIGC生成内容的版权问题与合规使用', + teacher: '刘杰', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-09 20:00', + endTime: '2025-09-09 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 刘杰老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 57, + title: 'AIGC图像生成模型:...', + fullTitle: 'AIGC图像生成模型:Stable Diffusion Al摄影和平面设计', + teacher: '刘杰', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-10 20:00', + endTime: '2025-09-10 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 刘杰老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 58, + title: 'AIGC图像生成模型:...', + fullTitle: 'AIGC图像生成模型:Stable Diffusion Al摄影和平面设计', + teacher: '刘杰', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-11 20:00', + endTime: '2025-09-11 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 刘杰老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 59, + title: 'AIGC图像生成模型:...', + fullTitle: 'AIGC图像生成模型:Stable Diffusion的应用操作', + teacher: '刘杰', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-16 20:00', + endTime: '2025-09-16 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 刘杰老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 60, + title: 'AIGC图像生成模型:...', + fullTitle: 'AIGC图像生成模型:Stable Diffusion的应用操作', + teacher: '刘杰', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-17 20:00', + endTime: '2025-09-17 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 刘杰老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 61, + title: 'AIGC视频应用:音视...', + fullTitle: 'AIGC视频应用:音视频生成与AI自动剪辑', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-18 20:00', + endTime: '2025-09-18 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 62, + title: 'AIGC视频应用:音视...', + fullTitle: 'AIGC视频应用:音视频生成与AI自动剪辑', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-23 20:00', + endTime: '2025-09-23 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 63, + title: 'AI词曲创作:suno', + fullTitle: 'AI词曲创作:suno', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-24 20:00', + endTime: '2025-09-24 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 64, + title: 'AI词曲创作:suno', + fullTitle: 'AI词曲创作:suno', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-25 20:00', + endTime: '2025-09-25 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 65, + title: '单元小结', + fullTitle: '单元小结', + teacher: '赵志强', + unit: 'AIGC人工智能生成内容', + startTime: '2025-09-30 20:00', + endTime: '2025-09-30 21:00', + type: 'course', + color: '#ec4899', + textColor: '#1d2129', + description: 'AIGC人工智能生成内容 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 66, + title: '新媒体应用传播学', + fullTitle: '新媒体应用传播学', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-01 20:00', + endTime: '2025-10-01 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 67, + title: '新媒体故事结构入门', + fullTitle: '新媒体故事结构入门', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-02 20:00', + endTime: '2025-10-02 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 68, + title: '新媒体产品策划', + fullTitle: '新媒体产品策划', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-07 20:00', + endTime: '2025-10-07 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 69, + title: '平台账号经营与内容赛道', + fullTitle: '平台账号经营与内容赛道', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-08 20:00', + endTime: '2025-10-08 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 70, + title: '各平台变现方式与具体方法', + fullTitle: '各平台变现方式与具体方法', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-09 20:00', + endTime: '2025-10-09 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 71, + title: '内容运营:短视频的制作...', + fullTitle: '内容运营:短视频的制作工具', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-14 20:00', + endTime: '2025-10-14 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 72, + title: '内容运营:短视频的制作...', + fullTitle: '内容运营:短视频的制作工具', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-15 20:00', + endTime: '2025-10-15 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 73, + title: '内容运营:短视频的制作...', + fullTitle: '内容运营:短视频的制作工具', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-16 20:00', + endTime: '2025-10-16 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 74, + title: '内容运营:短视频的制作...', + fullTitle: '内容运营:短视频的制作工具', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-21 20:00', + endTime: '2025-10-21 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 75, + title: '内容运营:短视频制作内...', + fullTitle: '内容运营:短视频制作内容对标', + teacher: '刘杰', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-22 20:00', + endTime: '2025-10-22 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 刘杰老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 76, + title: '内容运营:短视频制作内...', + fullTitle: '内容运营:短视频制作内容对标', + teacher: '刘杰', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-23 20:00', + endTime: '2025-10-23 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 刘杰老师', + status: 'completed', + weekday: '星期四' + }, + { + id: 77, + title: '直播运营:直播间的搭建', + fullTitle: '直播运营:直播间的搭建', + teacher: '刘杰', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-28 20:00', + endTime: '2025-10-28 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 刘杰老师', + status: 'completed', + weekday: '星期二' + }, + { + id: 78, + title: '直播运营:直播间的搭建', + fullTitle: '直播运营:直播间的搭建', + teacher: '刘杰', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-29 20:00', + endTime: '2025-10-29 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 刘杰老师', + status: 'completed', + weekday: '星期三' + }, + { + id: 79, + title: '品牌运营:当地文化IP...', + fullTitle: '品牌运营:当地文化IP数字化传播', + teacher: '刘杰', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-10-30 20:00', + endTime: '2025-10-30 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 刘杰老师', + status: 'future', + weekday: '星期四' + }, + { + id: 80, + title: '品牌运营:当地文化IP...', + fullTitle: '品牌运营:当地文化IP数字化传播', + teacher: '刘杰', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-11-04 20:00', + endTime: '2025-11-04 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 刘杰老师', + status: 'future', + weekday: '星期二' + }, + { + id: 81, + title: '品牌运营:跨界营销创新', + fullTitle: '品牌运营:跨界营销创新', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-11-05 20:00', + endTime: '2025-11-05 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'future', + weekday: '星期三' + }, + { + id: 82, + title: '品牌运营:跨界营销创新', + fullTitle: '品牌运营:跨界营销创新', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-11-06 20:00', + endTime: '2025-11-06 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'future', + weekday: '星期四' + }, + { + id: 83, + title: '私域运营:私域流量池的...', + fullTitle: '私域运营:私域流量池的运营', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-11-11 20:00', + endTime: '2025-11-11 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'future', + weekday: '星期二' + }, + { + id: 84, + title: '私域运营:私域流量池的...', + fullTitle: '私域运营:私域流量池的运营', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-11-12 20:00', + endTime: '2025-11-12 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'future', + weekday: '星期三' + }, + { + id: 85, + title: '单元小结', + fullTitle: '单元小结', + teacher: '赵志强', + unit: ' 全栈新媒体运营赋能文旅营销', + startTime: '2025-11-13 20:00', + endTime: '2025-11-13 21:00', + type: 'course', + color: '#6b7280', + textColor: '#1d2129', + description: ' 全栈新媒体运营赋能文旅营销 - 赵志强老师', + status: 'future', + weekday: '星期四' + }, + { + id: 86, + title: '活动类型与功能认知', + fullTitle: '活动类型与功能认知', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-11-18 20:00', + endTime: '2025-11-18 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期二' + }, + { + id: 87, + title: '受众定位与主题创意方法', + fullTitle: '受众定位与主题创意方法', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-11-19 20:00', + endTime: '2025-11-19 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期三' + }, + { + id: 88, + title: '活动宣传渠道与推广方式', + fullTitle: '活动宣传渠道与推广方式', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-11-20 20:00', + endTime: '2025-11-20 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期四' + }, + { + id: 89, + title: '活动宣传渠道与推广方式', + fullTitle: '活动宣传渠道与推广方式', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-11-25 20:00', + endTime: '2025-11-25 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期二' + }, + { + id: 90, + title: '活动文案写作与表达技巧', + fullTitle: '活动文案写作与表达技巧', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-11-26 20:00', + endTime: '2025-11-26 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期三' + }, + { + id: 91, + title: '活动文案写作与表达技巧', + fullTitle: '活动文案写作与表达技巧', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-11-27 20:00', + endTime: '2025-11-27 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期四' + }, + { + id: 92, + title: '活动流程设计与时间节点...', + fullTitle: '活动流程设计与时间节点把控', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-12-02 20:00', + endTime: '2025-12-02 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期二' + }, + { + id: 93, + title: '活动流程设计与时间节点...', + fullTitle: '活动流程设计与时间节点把控', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-12-03 20:00', + endTime: '2025-12-03 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期三' + }, + { + id: 94, + title: '活动场地选择与布置基础', + fullTitle: '活动场地选择与布置基础', + teacher: '郭建辉', + unit: '活动策划基础', + startTime: '2025-12-04 20:00', + endTime: '2025-12-04 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 郭建辉老师', + status: 'future', + weekday: '星期四' + }, + { + id: 95, + title: '活动预算与资源统筹', + fullTitle: '活动预算与资源统筹', + teacher: '赵志强', + unit: '活动策划基础', + startTime: '2025-12-09 20:00', + endTime: '2025-12-09 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 赵志强老师', + status: 'future', + weekday: '星期二' + }, + { + id: 96, + title: '应急预案与活动风险管理', + fullTitle: '应急预案与活动风险管理', + teacher: '赵志强', + unit: '活动策划基础', + startTime: '2025-12-10 20:00', + endTime: '2025-12-10 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 赵志强老师', + status: 'future', + weekday: '星期三' + }, + { + id: 97, + title: '活动复盘报告撰写与数据...', + fullTitle: '活动复盘报告撰写与数据分析方法', + teacher: '赵志强', + unit: '活动策划基础', + startTime: '2025-12-11 20:00', + endTime: '2025-12-11 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 赵志强老师', + status: 'future', + weekday: '星期四' + }, + { + id: 98, + title: '活动复盘报告撰写与数据...', + fullTitle: '活动复盘报告撰写与数据分析方法', + teacher: '赵志强', + unit: '活动策划基础', + startTime: '2025-12-16 20:00', + endTime: '2025-12-16 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 赵志强老师', + status: 'future', + weekday: '星期二' + }, + { + id: 99, + title: '单元小结', + fullTitle: '单元小结', + teacher: '赵志强', + unit: '活动策划基础', + startTime: '2025-12-17 20:00', + endTime: '2025-12-17 21:00', + type: 'course', + color: '#f97316', + textColor: '#1d2129', + description: '活动策划基础 - 赵志强老师', + status: 'future', + weekday: '星期三' + }, + { + id: 100, + title: '智慧文旅概论', + fullTitle: '智慧文旅概论', + teacher: '赵志强', + unit: '智慧文旅应用', + startTime: '2025-12-18 20:00', + endTime: '2025-12-18 21:00', + type: 'course', + color: '#6366f1', + textColor: '#1d2129', + description: '智慧文旅应用 - 赵志强老师', + status: 'future', + weekday: '星期四' + }, + { + id: 101, + title: 'OTA平台运营', + fullTitle: 'OTA平台运营', + teacher: '赵志强', + unit: '智慧文旅应用', + startTime: '2025-12-23 20:00', + endTime: '2025-12-23 21:00', + type: 'course', + color: '#6366f1', + textColor: '#1d2129', + description: '智慧文旅应用 - 赵志强老师', + status: 'future', + weekday: '星期二' + }, + { + id: 102, + title: '票务分销平台', + fullTitle: '票务分销平台', + teacher: '刘杰', + unit: '智慧文旅应用', + startTime: '2025-12-24 20:00', + endTime: '2025-12-24 21:00', + type: 'course', + color: '#6366f1', + textColor: '#1d2129', + description: '智慧文旅应用 - 刘杰老师', + status: 'future', + weekday: '星期三' + }, + { + id: 103, + title: '景区智能导览系统', + fullTitle: '景区智能导览系统', + teacher: '赵志强', + unit: '智慧文旅应用', + startTime: '2025-12-25 20:00', + endTime: '2025-12-25 21:00', + type: 'course', + color: '#6366f1', + textColor: '#1d2129', + description: '智慧文旅应用 - 赵志强老师', + status: 'future', + weekday: '星期四' + }, + { + id: 104, + title: '智能导览设备运用', + fullTitle: '智能导览设备运用', + teacher: '刘杰', + unit: '智慧文旅应用', + startTime: '2025-12-30 20:00', + endTime: '2025-12-30 21:00', + type: 'course', + color: '#6366f1', + textColor: '#1d2129', + description: '智慧文旅应用 - 刘杰老师', + status: 'future', + weekday: '星期二' + }, + { + id: 105, + title: '智慧酒店/智慧景区体验...', + fullTitle: '智慧酒店/智慧景区体验场景模拟', + teacher: '刘杰', + unit: '智慧文旅应用', + startTime: '2025-12-31 20:00', + endTime: '2025-12-31 21:00', + type: 'course', + color: '#6366f1', + textColor: '#1d2129', + description: '智慧文旅应用 - 刘杰老师', + status: 'future', + weekday: '星期三' + }, + { + id: 106, + title: '单元小结', + fullTitle: '单元小结', + teacher: '刘杰', + unit: '智慧文旅应用', + startTime: '2026-01-01 20:00', + endTime: '2026-01-01 21:00', + type: 'course', + color: '#6366f1', + textColor: '#1d2129', + description: '智慧文旅应用 - 刘杰老师', + status: 'future', + weekday: '星期四' } ], + + // 日历配置 + calendarConfig: { + weekDays: ["日", "一", "二", "三", "四", "五", "六"], + weekDaysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], + timeSlots: Array.from( + { length: 24 }, + (_, i) => `${i.toString().padStart(2, "0")}:00` + ), + defaultView: "month", + firstDayOfWeek: 0, + eventTypes: { + class: { name: "课程", color: "#10b981" }, // 绿色 + meeting: { name: "会议", color: "#3b82f6" }, + lab: { name: "实验", color: "#3b82f6" }, + exam: { name: "考试", color: "#ef4444" }, + strategy: { name: "1v1求职策略定制", color: "#f59e0b" }, // 橙色 + interview: { name: "线下面试模拟", color: "#ef4444" }, // 红色 + other: { name: "其他", color: "#8b5cf6" }, + }, + }, + + // 课程数据 + courses: [ + { + id: 1, + courseId: 101, + name: "展会策划教学", + teacher: "李老师", + time: "09:00-10:30", + status: "进行中", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 2, + courseId: 102, + name: "品牌视觉设计", + teacher: "王老师", + time: "昨天 14:00-15:30", + status: "已结束", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 3, + courseId: 201, + name: "文旅产业分析", + teacher: "张教授", + time: "前天 16:00-17:30", + status: "已结束", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 4, + courseId: 202, + name: "数字媒体设计", + teacher: "陈教授", + time: "明天 10:00-11:30", + status: "即将开始", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 5, + courseId: 301, + name: "创意策划实务", + teacher: "赵教授", + time: "后天 14:00-15:30", + status: "待开始", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 6, + courseId: 401, + name: "文化创意产业", + teacher: "张教授", + time: "上周三 09:00-10:30", + status: "已结束", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + ], + + // 待办事项 + todos: [ + { id: 1, task: "完成数学作业", deadline: "今天 18:00" }, + { id: 2, task: "准备计算机网络实验", deadline: "明天 10:00" }, + { id: 3, task: "复习数据结构", deadline: "后天 14:00" }, + ], + // 学习进度 + studyProgress: { + completed: 72, + total: 100, + percentage: 72, + }, + + // 班级排名 + classRanking: [ + { id: 1, name: "小明", score: 95, rank: 1 }, + { id: 2, name: "小华", score: 92, rank: 2 }, + { id: 3, name: "小李", score: 89, rank: 3 }, + { id: 4, name: "小王", score: 86, rank: 4 }, + { id: 5, name: "小张", score: 83, rank: 5 }, + ], + + // 事项列表 + tasks: [ + { + id: 1, + teacher: "李教授", + time: "下午16:40", + course: "高等数学课程作业", + type: "作业提交", + duration: "1小时", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 2, + teacher: "王老师", + time: "下午18:20", + course: "计算机网络实验报告", + type: "实验报告", + duration: "1小时", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 3, + teacher: "陈教授", + time: "明天09:00", + course: "数据结构课程设计", + type: "课程设计", + duration: "1小时", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 4, + teacher: "陈教授", + time: "明天09:00", + course: "数据结构课程设计", + type: "课程设计", + duration: "1小时", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + { + id: 5, + teacher: "陈教授", + time: "明天09:00", + course: "数据结构课程设计", + type: "课程设计", + duration: "1小时", + avatar: "https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp", + }, + ], + + // 增强的任务数据 - 支持日期关联和状态管理 + enhancedTasks: (() => { + const today = new Date(); + const year = today.getFullYear(); + const month = (today.getMonth() + 1).toString().padStart(2, "0"); + + return [ + { + id: 1, + title: "高等数学课程作业", + teacher: "李教授", + time: "16:40", + date: `${year}-${month}-05`, + type: "作业提交", + status: "PENDING", + description: "完成第三章习题1-15题", + priority: "high", + }, + { + id: 2, + title: "计算机网络实验报告", + teacher: "王老师", + time: "18:20", + date: `${year}-${month}-05`, + type: "实验报告", + status: "in-progress", + description: "网络协议分析实验报告", + priority: "medium", + }, + { + id: 3, + title: "数据结构课程设计", + teacher: "陈教授", + time: "09:00", + date: `${year}-${month}-12`, + type: "课程设计", + status: "PENDING", + description: "设计并实现二叉搜索树", + priority: "high", + }, + { + id: 4, + title: "1v1求职策略定制", + teacher: "职业导师", + time: "14:00", + date: `${year}-${month}-18`, + type: "strategy", + status: "PENDING", + description: "个人求职策略制定与简历优化", + priority: "high", + }, + { + id: 5, + title: "线下面试模拟", + teacher: "面试官", + time: "15:30", + date: `${year}-${month}-25`, + type: "interview", + status: "PENDING", + description: "模拟技术面试环节", + priority: "high", + }, + { + id: 6, + title: "英语口语练习", + teacher: "外教老师", + time: "10:00", + date: `${year}-${month}-28`, + type: "作业提交", + status: "completed", + description: "日常英语对话练习", + priority: "low", + }, + ]; + })(), + + // 日历数据 + calendar: { + currentMonth: "2024年1月", + today: 15, + events: [ + { date: 10, type: "exam" }, + { date: 15, type: "today" }, + { date: 20, type: "assignment" }, + { date: 25, type: "holiday" }, + ], + }, + + // 学习计划配置 + learningPlan: { + // 学生学习计划总开始日期(注册/加入计划之日) + startDate: "2024-01-01", // 示例:2024年1月1日开始 + studentId: "STU001", + studentName: "张同学", + }, + + // 学习阶段信息 - 符合需求文档的完整数据结构 + learningStages: [ + { + id: 1, + name: "生涯启航阶段", + duration: 4, // 月数 + description: "基础技能建立期", + // 时间字段 - 根据学习计划开始日期自动计算 + startDate: "2024-01-01", + endDate: "2024-05-01", + // 状态字段 + status: "completed", // completed | in_progress | locked | stalled + progressPercentage: 100, // 基于时间计算的进度百分比 + }, + { + id: 2, + name: "能力跃升阶段", + duration: 8, // 月数 - 是其他阶段的两倍 + description: "核心能力发展期", + startDate: "2024-05-01", + endDate: "2025-01-01", + status: "completed", // 修正:能力跃升阶段已完成 + progressPercentage: 100, // 修正:100%完成,这样才会触发垂直方向选择任务 + }, + { + id: 3, + name: "垂直精进阶段", + duration: 4, // 月数 + description: "专业深度提升期", + startDate: "2025-01-01", + endDate: "2025-05-01", + status: "locked", // 需要完成"垂直方向选择"里程碑才能解锁 + progressPercentage: 0, // 确保为0,因为尚未解锁 + // 解锁条件 + prerequisiteMilestone: "vertical-direction-selection", + }, + { + id: 4, + name: "决胜求职阶段", + duration: 4, // 月数 + description: "就业准备冲刺期", + startDate: "2025-05-01", + endDate: "2025-09-01", + status: "locked", // 确保为locked状态 + progressPercentage: 0, // 确保为0,因为尚未解锁 + }, + ], + + // 关键里程碑事件定义 + milestones: [ + { + id: "vertical-direction-selection", + name: "垂直方向选择", + description: "选择专业发展的垂直方向", + // 位置:能力跃升阶段和垂直精进阶段的交界处 + position: { + afterStageId: 2, // 能力跃升阶段之后 + beforeStageId: 3, // 垂直精进阶段之前 + }, + // 状态 + status: "PENDING", // pending | completed + completedDate: null, + // 交互配置 + interaction: { + clickable: true, + targetRoute: "/career-tree", // 点击跳转到就业管家知识树 + targetModule: "就业管家知识树", + }, + // 视觉配置 + visual: { + icon: "★", // 星形图标 + pendingStyle: { + color: "#ef4444", // 红色 + animation: "blink", // 闪烁效果 + fillType: "outline", // 轮廓线 + }, + completedStyle: { + color: "#fbbf24", // 金色 + fillType: "filled", // 填充 + }, + }, + }, + ], + + // 保留原有阶段信息以兼容其他模块 + stages: [ + { name: "基础阶段", active: false }, + { name: "进阶阶段", active: true }, + { name: "提高阶段", active: false }, + { name: "冲刺阶段", active: false }, + ], + + // 直播相关数据 + courseUnits: [ + { + id: 1, + title: "数据库基础", + isExpanded: true, + courses: [ + { + id: 101, + title: "数据库系统原理", + teacher: "李教授", + date: "2023.09.01", + time: "14:00-15:30", + status: "live", + viewCount: 1205, + thumbnail: "/api/placeholder/120/80", + startTime: "2023-09-01 14:00", + endTime: "2023-09-01 15:30", + description: "本课程主要讲解数据库系统的基本原理和设计方法", + }, + { + id: 102, + title: "SQL语言基础", + teacher: "李教授", + date: "2023.09.03", + time: "10:00-11:30", + status: "upcoming", + viewCount: 0, + thumbnail: "/api/placeholder/120/80", + startTime: "2023-09-03 10:00", + endTime: "2023-09-03 11:30", + description: "SQL语言的基本语法和数据操作", + }, + ], + }, + { + id: 2, + title: "高级数据库", + isExpanded: false, + courses: [ + { + id: 201, + title: "数据库优化技术", + teacher: "王教授", + date: "2023.09.05", + time: "16:00-17:30", + status: "completed", + viewCount: 856, + thumbnail: "/api/placeholder/120/80", + startTime: "2023-09-05 16:00", + endTime: "2023-09-05 17:30", + description: "数据库性能优化和索引设计", + }, + { + id: 202, + title: "分布式数据库", + teacher: "王教授", + date: "2023.09.07", + time: "14:00-15:30", + status: "upcoming", + viewCount: 0, + thumbnail: "/api/placeholder/120/80", + startTime: "2023-09-07 14:00", + endTime: "2023-09-07 15:30", + description: "分布式数据库系统架构和设计", + }, + ], + }, + { + id: 3, + title: "数据挖掘", + isExpanded: false, + courses: [ + { + id: 301, + title: "数据挖掘算法", + teacher: "陈教授", + date: "2023.09.10", + time: "09:00-10:30", + status: "upcoming", + viewCount: 0, + thumbnail: "/api/placeholder/120/80", + startTime: "2023-09-10 09:00", + endTime: "2023-09-10 10:30", + description: "常用数据挖掘算法原理和应用", + }, + ], + }, + ], + + // 当前直播信息 + currentLive: { + courseId: 101, + title: "数据库系统原理", + teacher: "李教授", + + startTime: "2023-09-01 14:00", + viewers: 1205, + description: + "本课程主要讲解数据库系统的基本原理和设计方法,涵盖关系数据库理论、SQL语言、数据库设计、事务处理、并发控制等核心内容。通过理论学习和实践操作,帮助学生掌握数据库系统的核心技术。", + status: "live", + duration: "1小时30分钟", + }, + + // 直播状态配置 + liveConfig: { + statusTypes: { + live: { name: "直播中", color: "#ef4444", bgColor: "#fef2f2" }, + upcoming: { name: "即将开始", color: "#f59e0b", bgColor: "#fffbeb" }, + completed: { name: "已结束", color: "#6b7280", bgColor: "#f9fafb" }, + replay: { name: "课程回放中", color: "#8b5cf6", bgColor: "#f3f4f6" }, + }, + playerSettings: { + autoplay: true, + controls: true, + responsive: true, + aspectRatio: "16:9", + }, + }, + + // 就业管家知识树数据 + careerTree: { + title: "就业管家知识树", + centerSections: [ + { + id: 1, + title: "产业认知课", + expanded: true, + child: [ + { + unit_id: 1, + unit_name: "互联网行业概述", + course_list: [ + { + id: 1, + course_name: "互联网发展史", + is_ai: true, + currentPoster: 1, + }, + { + id: 2, + course_name: "行业分析方法", + is_ai: false, + currentPoster: 2, + }, + { + id: 3, + course_name: "技术趋势解读", + is_ai: true, + currentPoster: 3, + }, + ], + resume_resources: + "高级产品经理简历\n资深运营经理简历\n技术总监简历", + portfolio_resources: "产品设计作品集\n运营案例合集\n技术项目展示", + tools: "Axure RP\nFigma\nSketch\nXmind", + advanced_learning_resources: + "产品思维训练\n数据分析进阶\n用户体验设计", + }, + { + unit_id: 2, + unit_name: "技术架构基础", + course_list: [ + { + id: 4, + course_name: "前端技术栈", + is_ai: true, + currentPoster: 4, + }, + { + id: 5, + course_name: "后端架构设计", + is_ai: false, + currentPoster: 5, + }, + ], + resume_resources: "前端工程师简历\n全栈工程师简历\n架构师简历", + portfolio_resources: "前端项目作品\n全栈应用展示\n架构设计文档", + tools: "VS Code\nGit\nDocker\nKubernetes", + advanced_learning_resources: "微服务架构\n性能优化\n系统设计", + }, + { + unit_id: 3, + unit_name: "市场竞争分析", + course_list: [ + { + id: 6, + course_name: "竞品分析方法", + is_ai: false, + currentPoster: 6, + }, + { + id: 7, + course_name: "用户需求调研", + is_ai: true, + currentPoster: 7, + }, + ], + resume_resources: "市场分析师简历\n用户研究员简历\n产品运营简历", + portfolio_resources: "竞品分析报告\n用户调研案例\n市场洞察文档", + tools: + "Questionnaire Star\nUser Interviews\nGoogle Forms\nSurvey Monkey", + advanced_learning_resources: + "市场趋势分析\n用户行为学\n商业模式设计", + }, + ], + }, + { + id: 2, + title: "产业技能课", + expanded: false, + child: [ + { + unit_id: 3, + unit_name: "编程技能提升", + course_list: [ + { + id: 8, + course_name: "JavaScript高级特性", + is_ai: true, + currentPoster: 8, + }, + { + id: 9, + course_name: "React框架实战", + is_ai: true, + currentPoster: 9, + }, + { + id: 10, + course_name: "Node.js后端开发", + is_ai: false, + currentPoster: 10, + }, + ], + resume_resources: + "高级前端工程师简历\nReact专家简历\nNode.js开发者简历", + portfolio_resources: "React项目作品\nNode.js应用\n全栈项目展示", + tools: "React DevTools\nWebpack\nBabel\nESLint", + advanced_learning_resources: + "React源码解析\nNode.js性能优化\n前端工程化", + }, + { + unit_id: 4, + unit_name: "数据库与云服务", + course_list: [ + { + id: 11, + course_name: "MySQL数据库优化", + is_ai: false, + currentPoster: 11, + }, + { + id: 12, + course_name: "Redis缓存实战", + is_ai: true, + currentPoster: 12, + }, + ], + resume_resources: "数据库工程师简历\n运维工程师简历\n云架构师简历", + portfolio_resources: "数据库设计案例\n缓存优化方案\n云服务部署", + tools: "MySQL Workbench\nRedis Desktop Manager\nAWS\nAliyun", + advanced_learning_resources: "数据库内核\n分布式缓存\n云原生架构", + }, + { + unit_id: 5, + unit_name: "开发工具与流程", + course_list: [ + { + id: 13, + course_name: "版本控制系统", + is_ai: false, + currentPoster: 13, + }, + { + id: 14, + course_name: "自动化测试", + is_ai: true, + currentPoster: 14, + }, + { + id: 15, + course_name: "持续集成部署", + is_ai: true, + currentPoster: 15, + }, + ], + resume_resources: "DevOps工程师简历\n测试工程师简历\n运维开发简历", + portfolio_resources: "CI/CD流水线\n自动化测试套件\n部署脚本集", + tools: "Git\nJenkins\nDocker\nKubernetes\nSonarQube", + advanced_learning_resources: "DevOps最佳实践\n容器化部署\n服务网格", + }, + ], + }, + { + id: 3, + title: "项目实战课", + expanded: false, + child: [ + { + unit_id: 6, + unit_name: "企业级项目开发", + course_list: [ + { + id: 16, + course_name: "电商平台开发", + is_ai: true, + currentPoster: 16, + }, + { + id: 17, + course_name: "内容管理系统", + is_ai: false, + currentPoster: 17, + }, + { + id: 18, + course_name: "移动应用开发", + is_ai: true, + currentPoster: 18, + }, + ], + resume_resources: + "项目经理简历\n技术负责人简历\n全栈工程师简历\n移动端开发简历", + portfolio_resources: + "电商项目展示\nCMS系统演示\n项目管理文档\n移动应用作品", + tools: "Jira\nConfluence\nGitLab\nJenkins\nAndroid Studio", + advanced_learning_resources: + "项目管理实践\n敏捷开发\n持续集成\n移动端架构", + }, + { + unit_id: 7, + unit_name: "数据分析项目", + course_list: [ + { + id: 19, + course_name: "大数据平台搭建", + is_ai: true, + currentPoster: 19, + }, + { + id: 20, + course_name: "机器学习实战", + is_ai: true, + currentPoster: 20, + }, + ], + resume_resources: + "数据分析师简历\n算法工程师简历\n大数据工程师简历", + portfolio_resources: "数据分析报告\n机器学习模型\n数据可视化作品", + tools: "Python\nJupyter\nTableau\nSpark\nHadoop", + advanced_learning_resources: "深度学习\n数据挖掘\n分布式计算", + }, + { + unit_id: 8, + unit_name: "创新产品设计", + course_list: [ + { + id: 21, + course_name: "AI产品设计", + is_ai: true, + currentPoster: 21, + }, + { + id: 22, + course_name: "用户体验优化", + is_ai: false, + currentPoster: 22, + }, + ], + resume_resources: "产品经理简历\nUX设计师简历\nAI产品专家简历", + portfolio_resources: "AI产品原型\n用户研究报告\n设计系统文档", + tools: "Figma\nSketch\nProtoPie\nMiro\nAxure", + advanced_learning_resources: "AI产品策略\n用户心理学\n设计思维", + }, + ], + }, + { + id: 4, + title: "就业指导课", + expanded: false, + child: [ + { + unit_id: 9, + unit_name: "简历优化与包装", + course_list: [ + { + id: 23, + course_name: "简历写作技巧", + is_ai: false, + currentPoster: 23, + }, + { + id: 24, + course_name: "作品集制作", + is_ai: true, + currentPoster: 24, + }, + ], + resume_resources: "技术类简历模板\n产品类简历模板\n设计类简历模板", + portfolio_resources: "技术作品集\n产品作品集\n设计作品集", + tools: "Canva\nAdobe Suite\nGitHub Pages\nNotion", + advanced_learning_resources: "个人品牌打造\n职业规划\n行业洞察", + }, + { + unit_id: 10, + unit_name: "面试技巧训练", + course_list: [ + { + id: 25, + course_name: "技术面试准备", + is_ai: true, + currentPoster: 25, + }, + { + id: 26, + course_name: "行为面试技巧", + is_ai: false, + currentPoster: 26, + }, + ], + resume_resources: "面试官简历\nHR专员简历\n技术面试官简历", + portfolio_resources: "面试案例集\n答题技巧\n模拟面试视频", + tools: "Zoom\nTencent Meeting\nLeetCode\nHackerRank", + advanced_learning_resources: "薪资谈判\n职场沟通\n压力面试应对", + }, + ], + }, + { + id: 5, + title: "职业发展课", + expanded: false, + child: [ + { + unit_id: 11, + unit_name: "职场软技能", + course_list: [ + { + id: 27, + course_name: "团队协作能力", + is_ai: false, + currentPoster: 27, + }, + { + id: 28, + course_name: "沟通表达技巧", + is_ai: true, + currentPoster: 28, + }, + ], + resume_resources: "团队领导简历\n项目协调员简历\n培训师简历", + portfolio_resources: "团队项目案例\n沟通培训材料\n领导力展示", + tools: "Slack\nTrello\nZoom\nMindMeister", + advanced_learning_resources: "领导力培养\n冲突管理\n跨文化沟通", + }, + { + unit_id: 12, + unit_name: "行业趋势分析", + course_list: [ + { + id: 29, + course_name: "技术发展趋势", + is_ai: true, + currentPoster: 29, + }, + { + id: 30, + course_name: "市场需求分析", + is_ai: false, + currentPoster: 30, + }, + ], + resume_resources: "行业分析师简历\n市场研究员简历\n战略顾问简历", + portfolio_resources: "行业报告\n趋势分析\n市场调研", + tools: "Google Analytics\nSimilarWeb\nCrunchbase\nPitchBook", + advanced_learning_resources: "商业分析\n战略思维\n创新管理", + }, + ], + }, + ], + rightResourcesAll: [ + { + title: "简历资源", + items: [], + key: "resume_resources", + order: 1, + }, + { + title: "作品集资源", + items: [], + key: "portfolio_resources", + order: 2, + }, + { + title: "工具资源", + items: [], + key: "tools", + order: 3, + }, + { + title: "进阶学习资料", + items: [], + key: "advanced_learning_resources", + order: 4, + }, + ], + }, + // 课后作业数据 + + homework: [ + { + name: "复合能力培养", + id: 1, + list: [ + { id: 1, name: "展会策划教学", level: "completed" }, + { id: 2, name: "文旅场景策划教学", level: "completed" }, + { id: 3, name: "文旅IP主题策划教学", level: "completed" }, + { + id: 4, + name: "文旅品牌策划教学", + level: "in-progress", + }, + { + id: 5, + name: "文旅用户运营教学", + level: "in-progress", + }, + { + id: 6, + name: "文旅综合运营教学", + level: "in-progress", + }, + { id: 7, name: "用户运营与管理", level: "locked" }, + { id: 8, name: "会员运营与管理", level: "locked" }, + { id: 9, name: "促活运营与管理", level: "locked" }, + { id: 10, name: "裂变运营与管理", level: "locked" }, + { id: 11, name: "社群运营与管理", level: "locked" }, + { id: 12, name: "用户转化与管理", level: "locked" }, + ], + }, + { + name: "垂直能力提升", + id: 2, + list: [ + { id: 1, name: "品牌运营实训", level: "completed" }, + { id: 2, name: "内容运营实训", level: "completed" }, + { + id: 3, + name: "拉新策略项目", + level: "in-progress", + }, + { + id: 4, + name: "拉新落地项目", + level: "in-progress", + }, + { + id: 5, + name: "拉新优化项目", + level: "in-progress", + }, + { id: 6, name: "激活策略项目", level: "locked" }, + { id: 7, name: "激活落地项目", level: "locked" }, + { id: 8, name: "激活优化项目", level: "locked" }, + { id: 9, name: "全渠道运营", level: "locked" }, + { id: 10, name: "全渠道统筹", level: "locked" }, + { id: 11, name: "全渠道复盘", level: "locked" }, + { id: 12, name: "文旅项目策划", level: "locked" }, + { id: 13, name: "文旅项目运营", level: "locked" }, + { id: 14, name: "文旅项目推广", level: "locked" }, + { id: 15, name: "文旅项目复盘", level: "locked" }, + ], + }, + ], + // 1v1定制求职策略数据 + jobStrategy: { + title: "1v1定制求职策略", + isLocked: true, + lockMessage: '还没收到了"综合能力培养",你的综合能力有所欠缺', + lockSubMessage: "您还在低收费阶段进行1v1求职策略咨询", + requirements: ["基础求职技能", "简历优化", "面试技巧", "薪资谈判"], + }, + + // 线下面试模拟数据 + interviewSimulation: { + title: "线下面试模拟", + stages: [ + { + id: "stage1", + name: "懵懂初试", + description: "初次接触面试,记录成长起点", + interviews: [ + { + id: 1, + company: "求职面试初体验", + position: "自我介绍练习", + date: "2023-09-15", + time: "14:30", + status: "evaluated", + videoUrl: "/live.mp4", + interviewer: "职业导师", + duration: "05:32", + type: "first_experience", + }, + { + id: 2, + company: "未来三年的我", + position: "AI模拟展望", + date: "2023-09-20", + time: "10:00", + status: "evaluated", + videoUrl: "/live.mp4", + interviewer: "AI助手", + duration: "08:15", + type: "future_simulation", + }, + ], + }, + { + id: "stage2", + name: "有备而战", + description: "系统训练,不断精进", + interviews: [ + { + id: 3, + company: "第一次线下模拟演练", + position: "全流程面试训练", + date: "2023-10-10", + time: "14:00", + status: "evaluated", + videoUrl: "/live.mp4", + interviewer: "资深HR", + duration: "25:18", + type: "practice", + }, + { + id: 4, + company: "第二次线下模拟演练", + position: "全流程面试训练", + date: "2023-11-05", + time: "15:30", + status: "evaluated", + videoUrl: "/live.mp4", + interviewer: "行业专家", + duration: "28:43", + type: "practice", + }, + { + id: 5, + company: "第三次线下模拟演练", + position: "全流程面试训练", + date: "2023-12-02", + time: "16:00", + status: "evaluated", + videoUrl: "/live.mp4", + interviewer: "企业高管", + duration: "32:15", + type: "practice", + }, + { + id: 6, + company: "第四次线下模拟演练", + position: "全流程面试训练", + date: "2024-01-08", + time: "09:30", + status: "evaluated", + videoUrl: "/live.mp4", + interviewer: "技术总监", + duration: "30:45", + type: "practice", + }, + { + id: 7, + company: "第五次线下模拟演练", + position: "全流程面试训练", + date: "2024-01-15", + time: "11:00", + status: "completed", + videoUrl: "/live.mp4", + interviewer: "CEO", + duration: "35:20", + type: "practice", + }, + ], + }, + ], + currentInterview: null, + // 不同类型面试的评分数据 + evaluationDataMap: { + // 初次体验的评分 + first_experience: { + scores: [ + { + category: "表达能力", + score: 65, + total: 100, + description: "声音略显紧张,需加强语言组织", + }, + { + category: "仪态形象", + score: 70, + total: 100, + description: "着装得体,眼神交流需改进", + }, + { + category: "内容完整度", + score: 72, + total: 100, + description: "基本信息完整,亮点展示不足", + }, + { + category: "时间控制", + score: 80, + total: 100, + description: "控制在合理范围内", + }, + ], + totalScore: 287, + totalPossible: 400, + hrComments: [ + { + interviewer: "职业导师", + comment: + "第一次面试表现不错!虽然有些紧张,但能完整表达自己的基本信息。建议多练习眼神交流,增强自信心。", + timestamp: "2023-09-15 14:40", + }, + { + interviewer: "心理辅导老师", + comment: + "看得出你很认真准备了。紧张是正常的,随着练习次数增加会越来越自然。记住微笑是最好的名片!", + timestamp: "2023-09-15 14:45", + }, + ], + recommendation: "continue", + nextSteps: "建议参加表达能力训练课程,多进行模拟练习,培养自信心。", + }, + // 未来三年的我 - 完美状态 + future_simulation: { + scores: [ + { + category: "表达能力", + score: 95, + total: 100, + description: "声音自信有力,逻辑清晰,富有感染力", + }, + { + category: "仪态形象", + score: 98, + total: 100, + description: "职业形象完美,眼神坚定,气场强大", + }, + { + category: "内容完整度", + score: 96, + total: 100, + description: "内容丰富翔实,亮点突出,令人印象深刻", + }, + { + category: "时间控制", + score: 100, + total: 100, + description: "节奏把控完美,张弛有度", + }, + ], + totalScore: 389, + totalPossible: 400, + hrComments: [ + { + interviewer: "AI分析系统", + comment: + "这就是三年后的你!自信、专业、充满魅力。你已经完全掌握了面试技巧,能够从容应对各种挑战。你的专业知识深厚,项目经验丰富,更重要的是你散发出的自信光芒让人无法忽视。", + timestamp: "2023-09-20 10:15", + }, + { + interviewer: "未来导师", + comment: + "看到这样的你,我由衷地感到骄傲!你不仅技术过硬,更具备了优秀的软实力。你的故事有温度,你的目标有高度,你的规划有深度。相信自己,这就是你努力的方向!", + timestamp: "2023-09-20 10:20", + }, + ], + recommendation: "excellent", + nextSteps: + "继续保持这种状态!记住,这不是幻想,而是你通过努力完全可以达到的目标。每一次练习都让你离这个理想状态更近一步。加油!", + }, + // 正式模拟演练的评分 + practice: { + scores: [ + { + category: "技术能力", + score: 85, + total: 100, + description: "基础扎实,框架理解到位", + }, + { + category: "沟通表达", + score: 78, + total: 100, + description: "表达清晰,逻辑性强", + }, + { + category: "问题解决", + score: 82, + total: 100, + description: "思路清晰,方案合理", + }, + { + category: "团队协作", + score: 80, + total: 100, + description: "有良好的团队意识", + }, + ], + totalScore: 325, + totalPossible: 400, + hrComments: [ + { + interviewer: "资深HR", + comment: + "整体表现良好,专业知识扎实,沟通能力不错。建议在项目经验的讲述上更加具体,突出自己的贡献。", + timestamp: "2023-10-10 14:30", + }, + { + interviewer: "技术面试官", + comment: + "技术基础不错,对常见问题都能给出合理答案。建议深入学习一些高级特性和最佳实践。", + timestamp: "2023-10-10 14:45", + }, + ], + recommendation: "pass", + nextSteps: + "表现不错!建议继续加强技术深度,多准备一些实际项目中的技术难点和解决方案。", + }, + }, + }, + + // 专家支持中心数据 + expertSupport: { + title: "专家支持中心", + subtitle: "Expert Tutor Support Center", + categories: [ + { id: 1, name: "专业咨询", isActive: true }, + { id: 2, name: "技术指导", isActive: false }, + { id: 3, name: "24小时服务", isActive: false }, + ], + experts: [ + { + id: 1, + name: "多多教务数据系统", + avatar: "/api/placeholder/60/60", + time: "2023-09-07 13:11", + message: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...", + isBot: true, + }, + { + id: 2, + name: "张老师", + avatar: "/api/placeholder/60/60", + time: "2023-09-07 14:20", + message: + "收到-项目需求的设计图----项目需求的设计图----项目需求的设计图...", + isBot: false, + }, + ], + promotion: { + title: "学有所问,向专有答", + subtitle: "有问题联系专家咨询吧", + buttonText: "联系专家", + topics: ["基础概念", "技术分析", "问题排查", "性能优化", "架构设计"], + }, + }, + + // 企业内推岗位数据 + companyJobs: { + title: "企业内推岗位", + subtitle: "基于AI智能匹配的企业内推岗位推荐系统", + companyPositions: [ + + + + + + + + + { + "id": 8, + "company": "公司1", + "position": "品牌公关", + "salary": "8-10k", + "status": "available", + "jobType": "internship", + "remainingPositions": 2, + "applicationStatus": "interview_failed", + "tags": [ + "公关媒介代理商/服务商(乙方)", + "市场营销", + "甲方品牌公关经验", + "媒介投放经验", + "优秀的传播策划能力" + ], + "deadline": "2025-7-11 17:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "东莞", + "experience": "2-5年", + "education": "本科及以上", + "positions": "4人", + "description": "1、策划并执行品牌公关活动,提升公司在行业内的品牌形象和知名度;\n2、建立并维护媒体关系,有效管理危机公关,确保公司信息准确传达;\n3、组织和参与各类行业会议、展览及活动,扩大品牌影响力;\n4、监测并分析市场动态及竞争对手公关策略,为公司品牌发展提供参考。", + "requirements": [ + "本科及以上学历,市场营销、新闻传播、公共关系等相关专业优先;", + "1年以上品牌公关或相关领域工作经验,有石油化工行业背景者优先;", + "具备出色的沟通能力及谈判技巧,能独立处理媒体关系和公关危机;", + "具有较强的创意策划能力和项目管理经验,能够带领团队完成高质量的项目。" + ], + "benefits": [ + "带薪年假", + "双休", + "员工培训" + ], + "companyInfo": "我与我(广州)科技有限公司成立于2021年,是一家充满活力与创新精神的年轻企业。公司坐落于繁华都市中的甲级创意园内,多路公交及地铁8号线可直达。我们拥有一间充满现代气息的办公室,这里不仅是我们的工作场所,更是创意与灵感碰撞的火花源地。\n我们的团队由一群年轻、热爱美妆、追求时尚的年轻人组成;\n我们专注于彩妆、美妆及护肤产品的研发与销售,希望通过缤纷的色彩和独特的风格,为女性打造个性且精致的妆容;\n我们坚持选用高品质的材料,先进的技术,深入洞察女性最切实需求,打造极具高性价比且精致的产品;\n我们坚持孵化更多品牌产品,凭借对美的独到见解和市场趋势的敏锐洞察,致力于为消费者带来更高品质及更个性化的体验。\n在这里,每一份努力都汇聚成美丽的力量,让美丽触手可及,期待您的加入。" + } +}, + { + "id": 9, + "company": "公司2", + "position": "文创产品设计师", + "salary": "6-11k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 3, + "applicationStatus": "interview_success", + "tags": [ + "手绘", + "1-3年插画经验", + "有插画经验/技能", + "带薪假期", + "年终奖", + "年终奖", + "大小周" + ], + "deadline": "2025-6-23 11:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "佛山", + "experience": "3-5年", + "education": "本科及以上", + "positions": "8人", + "description": "1. 负责公司文创品牌的产品设计,制作打样稿。产品包括所有类目本册,胶带,贴纸,礼盒等创意类文创产品 ;\n2. 能独立完成平面图,能根据运营策略将文案与平面设计进行深度融合;\n3. 本人热爱文创行业且了解国内,韩国的文创市场热度和趋势;\n4. 能独立制作产品开发提案并进行相关产品的创作,保证设计版权的原创性;\n5. 对产品设计有自己的观点和见解,具备独立完成设计项目的能力。", + "requirements": [ + "本科及以上,设计相关专业,有成功的文创设计案例者优先。", + "熟练掌握各类设计软件,如AI 、Photoshop等,具备扎实设计功底与文案转化能力。", + "熟悉国内外(含韩国)文创市场,热爱文创行业,有独立设计思维与创新力。", + "注重细节,执行力强,具备用户思维与团队协作能力。" + ], + "benefits": [ + "双休", + "节日福利", + "带薪假期", + "五险一金", + "年终奖" + ], + "companyInfo": "哇赛优尚(广东)品牌管理有限公司是一家集开发设计、生产和销售为一体的品牌公司,专营文创文玩类商品。公司创始人自1994年开始经营贴纸产品以来,公司逐步成立生产基地,创立自有品牌,IP代理生产销售和开发授权原创IP及周边产品,深耕贴纸文创行业30年,为全国文具玩具精品百货等相关连锁终端渠道提供服务,致力于成为文创文玩领域的领航者!\n公司现有员工100多人,拥有年轻创新的95后设计团队近20人,专注于原创产品的设计开发。公司拥有“哇噻优尚”“Inamazy”等自主品牌,拥有“Melon、SULI、RuRu”多个原创IP,拥有二十几件版权登记和专利证书。公司旗下吉登生产基地是迪士尼官方Fama认证工厂,通过ISO9001和佛山市环评报告认证。\n公司是集合原创开发、文创用品自主设计、版权运营为一体的综合型文创品牌企业,专营文化用品及礼品、创意文教用品的线下及线上销售。企业提倡“无限惊喜,治愈生活”的品牌理念,致力于为对生活有追求、有热情的年轻一族,打造出富有创意的IP形象与精致实用的文创产品,为他们的生活创造更多的惊喜与美好!" + } +}, + { + "id": 10, + "company": "公司3", + "position": "旅游计调专员", + "salary": "6-8k", + "status": "available", + "jobType": "internship", + "remainingPositions": 5, + "applicationStatus": "accepted", + "tags": [ + "OTA平台接单", + "组团社", + "需要计调经验", + "旅游行业资源", + "维护同业客户", + "不需要出差/跟团出游" + ], + "deadline": "2025-6-28 14:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "滁州", + "experience": "2-4年", + "education": "大专及以上", + "positions": "8人", + "description": "1、负责旅游团队的全程计调工作,行程规划、资源调配与协调;\n2、与客户进行有效沟通,了解客户需求,提供专业的旅游咨询与解决方案;\n3、监控旅游服务质量,及时处理行程中的突发情况,确保客户满意度;\n4、与供应商建立并维护良好的合作关系,确保资源的稳定与优惠;", + "requirements": [ + "具备较强的组织协调能力和解决问题的能力;", + "热爱旅游行业,具有良好的服务意识和团队合作精神;", + "熟练使用办公软件,具备良好的文案撰写和数据分析能力;", + "有旅游行业相关工作经验者优先考虑。" + ], + "benefits": [ + "团队建设", + "五险一金", + "餐饮补贴" + ], + "companyInfo": "广西驴友邦信息科技有限公司成立于2013年,前身为桂林佳音旅游,是一家集旅行社+互联网+科技为一体的新型互联网旅游科技公司。\n公司自成立以来一直践行“让旅游更美好”这一理念,多年来专注打造高品质的纯玩旅游产品,并以独特的互联网+旅游+科技为核心的经营模式,充分利用各大旅游乎台及短视频直播等载体,通过十年的深耕拓展,一跃成为头部的旅行品牌。\n公司本着以创新谋发展的宗旨,依托桂林旅游辐射全国,不断复制壮大,目前已分别在新疆、西藏、四川青海、云南五个旅游大省创立了全资子公司。公司还致力于开辟全球市场,产品线路遍布世界各地,年交易规模超过2亿。\n未来公司将继续恪守并弘扬企业价值观和企业文化,追求极致、务实敢为,以优质的产品和服务回馈客户需求,努力使驴友邦成为中国领先的旅游品牌。" + } +}, + { + "id": 11, + "company": "公司4", + "position": "活动策划师", + "salary": "6-9k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 2, + "applicationStatus": "applied", + "tags": [ + "文案策划", + "策划", + "B端客户", + "活动策划" + ], + "deadline": "2025-7-12 9:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "苏州", + "experience": "1-2年", + "education": "大专及以上", + "positions": "7人", + "description": "1、根据客户提供的业务信息撰写输出活动策划全案;\n2、负责与客户的前期沟通,协助项目部完成提案,向客户初步阐述方案内的创意及流程;\n3、根据活动需求进行资料,资源的搜集、整合,协助主案撰写活动策划全案、活动主题;\n4、将活动策划全案转化落地为活动执行案,细化活动执行流程,\n5、提供最有性价比的执行方式或创意,制定具体执行方案,能把控协助统筹执行落地;\n6、与设计、执行等团队成员高度配合,结合活动举办地点完成方案创意的执行,协助设计师和执行人员进行相关的设计和制作;", + "requirements": [ + "有活动策划经验,类目不限,愿意长期从事策划方向,大专及以上学历", + "文字功底强,工作效率高,学习能力强", + "逻辑思维能力比较强,创新及创意能力强,洞察力强" + ], + "benefits": [ + "节日福利", + "五险一金", + "双休" + ], + "companyInfo": "磁力文化,雇主品牌建设落地解决方案领导者.以“让企业组织更信任”为使命,致力于为企业打造更有吸引力的雇主品牌.专注于以创意内容为核心,以创意驱动传播,以数字互联网为平台,为企业提供全场景的雇主品牌服务.围绕以员工价值主张(EVP-Employee Value Proposition),以员工为核心,以体验为基础,与期望相结合,以贴近受众群体的表达方式。核心部门:客户服务中心、创意研发中心、项目管理中心、技术中心。涉及业务范围:企业文化活动、福利、文化宣传、文化咨询\n目前拥有三家全资子公司:乐游团建、闪一点传媒、上上礼礼品" + } +}, + { + "id": 12, + "company": "公司5", + "position": "二次元周边店店长", + "salary": "8-9k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 1, + "applicationStatus": "not_applied", + "tags": [ + "损耗管理", + "员工培训", + "五险一金", + "1-3年门店店长经验", + "连锁门店经验" + ], + "deadline": "2025-8-5 17:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "上海", + "experience": "2-4年", + "education": "大专及以上", + "positions": "2人", + "description": "1、了解公司对门店管理的经营标准(店务标准、陈列标准、货品管理、管理红线、门店标准化制度)以及各项规章制度;\n2、规划及监督店铺人员配置数量,负责门店员工的日常工作、员工能力提升及培养工作;\n3、维护公司品牌形象及为顾客提供优质的服务(包括但不仅限于:接待顾客、解答顾客查询、处理投诉及提供售后服务等);\n4、管理门店商品进销存,清楚店铺货品流转情况, 店铺货品正常周转,确保商品库存合理,产品陈列储存恰当,查验产品,保证产品品质,做好商品台账;\n5、较强的团队管理能力和沟通能力,及时解决基本的员工关系事件;\n6、积极主动配合上级领导处理门店相关事宜,态度端正,情绪稳定 。", + "requirements": [ + "大专或同等以上学历,并持有营业员上岗证、健康证;", + "三年或以上零售店铺管理经验,有潮玩品牌或相似品类销售工作背景者优先;", + "能熟练操作计算机、POS系统及Microsoft Office办公软件;", + "具备高度的责任心及店铺人员管理理念,主动性强并能承受工作压力;", + "须了解、认同并实践“优质服务”理念;", + "有亲和力,语言表达沟通能力强;", + "诚实守信,忠诚度高,热忱于零售工作并适应其工作节奏;", + "对二次元文化有一定了解者优先。" + ], + "benefits": [ + "五险一金", + "年终奖", + "员工培训" + ], + "companyInfo": "雪叶是主做游戏&动漫周边产品,并致力于IP衍生品研发的电商平台;是集代运营,产品开发,创意设计于一身的综合服务公司;\n目前合作有食物语、卡拉比丘、天涯明月刀、光与夜之恋,仙剑奇侠传、王者荣耀等十几个知名品牌;品类涉及手办模型、毛绒玩偶、3C数码、服装配饰等;" + } +}, + { + "id": 13, + "company": "公司6", + "position": "宠物店店长", + "salary": "6-9k", + "status": "available", + "jobType": "internship", + "remainingPositions": 2, + "applicationStatus": "applied", + "tags": [ + "1-3年门店店长经验", + "不需要晚班/夜班", + "员工培训", + "连锁门店经验", + "业绩管理" + ], + "deadline": "2025-7-20 22:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "泸州", + "experience": "1-3年", + "education": "大专及以上", + "positions": "2人", + "description": "1.熟练掌握宠物店前台接待、销售的各项工作;\n2.带领团队达到公司各项工作指标;\n3.监督管理门店日常运营达到公司要求:礼仪,分工,卫生,安全,业绩等;\n4.监督管理门店团队,正向引导,定期培训考核,提升团队综合能力;\n5.监督管理门店安全,包括服务安全,客诉安全,人员安全,财务安全等;\n6.监督管理门店商品,耗材等进销存;\n7.监督管理门店客户服务,客户维护,降低客户流失率;\n8.制作并分析门店各项运营报表,对公司决策提供数据支持;\n9.与公司其他部门协作完成各项工作;\n10.完成公司交办的其他相关工作。", + "requirements": [ + "喜爱小动物,对待小动物有爱心,有耐心,有责任心;", + "同岗位从业经验1年以上;", + "亲和力,沟通理解能力,普通话表达能力佳;", + "思维敏捷,服务意识,团队意识,职业素养佳;", + "积极上进,吃苦耐劳,执行力佳;", + "熟悉基本电脑操作及办公软件操作,如word ,excel,钉钉等。", + "有相关工作经验者优先录用;" + ], + "benefits": [ + "双休", + "交通补贴", + "员工培训" + ], + "companyInfo": "厉害宠物公司简介:公司旗下分别有帕帕拉兹宠物、独角兽宠物、强力猫宠物以及厉害宠物医院服务品牌。公司于2015年在成都正式成立,于2021年完成千万级天使轮投资。为顾客提供宠物的相关服务,是一家集宠物食品用品销售、洗澡美容、护理、宠物酒店住宿、游泳竞赛玩乐, 宠物售卖、宠物主人交流放松 的宠物休闲中心。目前在成都有30余家直营店和加盟店, 以“一生的陪伴与呵护”为口号,力求全方位发展。\n\n从外部装修环境,门店设计细节都能击中用户,想会员所想,用心服务好每一位客人,宠物超市超低价格品质保障,打造连锁品牌体量优势,做到网状覆盖,线上运营,实现足不出户即可满足宠物一切衣食住行,做到全方位一条龙。为提高运营效率, 自主开发一套管理系统,实现门店管理信息化。" + } +}, + { + "id": 14, + "company": "公司7", + "position": "客房经理", + "salary": "6-8k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 6, + "applicationStatus": "not_applied", + "tags": [ + "包住", + "客房管理经验", + "经济型", + "餐补", + "普通话标准" + ], + "deadline": "2025-6-3 5:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "海南", + "experience": "3-5年", + "education": "大专及以上", + "positions": "8人", + "description": "1、负责客房部的日常管理工作,确保服务质量和客房清洁达到高标准;\n2、监督客房清洁、客房服务和设备维护,确保所有设施处于良好状态;\n3、培训和发展部门员工,提升团队的专业技能和服务意识;\n4、制定和实施客房部的运营计划,优化工作流程,提高工作效率;\n5、处理客户反馈和投诉,改善客户体验,确保客户满意度。", + "requirements": [ + "具备酒店管理或相关领域的专业背景,至少3年客房管理经验;", + "熟悉客房服务流程和标准,有较强的组织能力和团队领导力;", + "优秀的沟通能力和问题解决能力,能够处理突发事件;", + "注重细节,具有良好的客户服务意识和高度的责任心;", + "能够适应灵活的工作时间,包括周末和节假日。" + ], + "benefits": [ + "交通补贴", + "五险一金", + "双休" + ], + "companyInfo": "马氏集团坐落于著名的“武术之乡”——河北沧州,由知名企业家马千里先生创建于1995年,总部位于狮城标志性建筑之一管业大厦,现有员工500余名,总资产达6亿余元,年营业额1.8亿余元,年上缴利税约800万元,总营业面积7万余平方米。集团下辖7个子公司,是一家以引进和经营国际国内顶尖高端品牌为主,专业致力于餐饮、酒店管理运营的大型综合性企业集团。" + } +}, + { + "id": 15, + "company": "公司8", + "position": "民宿客房管家", + "salary": "6-8k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 9, + "applicationStatus": "accepted", + "tags": [ + "包住", + "星级酒店经验", + "全勤奖", + "普通话标准" + ], + "deadline": "2025-7-25 13:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "黄冈", + "experience": "2-4年", + "education": "大专及以上", + "positions": "10人", + "description": "1、负责民宿客房的日常清洁与维护,确保提供舒适的住宿环境;\n2、检查客房设施,及时发现并解决潜在问题,保障客房服务质量;\n3、协助处理客房内的简单维修工作,保持卫生和整洁;\n4、驾驶工作用车,接送客人", + "requirements": [ + "会熟练驾驶手动挡汽车", + "会基础客房水电维修", + "具备良好的服务意识和沟通技巧,能够热情接待每一位客人;", + "有责任心,注重细节,能够独立完成客房清洁和准备工作;", + "有相关工作经验者优先,但愿意学习和适应民宿行业者也可;", + "身体健康,能适应灵活的工作时间,包括周末和节假日;", + "热爱自然,对乡村生活有一定的了解和兴趣,能够与团队良好合作。" + ], + "benefits": [ + "年终奖", + "全勤奖", + "双休", + "餐饮补贴" + ], + "companyInfo": "纵横寓是一家颠覆传统 开启全新房屋管理模式的租赁公司�未来5年到10年将发展遍布23个省会城市,每个城市设置总部和6家签约中心,整体规模达到3000人以上。我公司将人力资源储备作为战略发展第一要务。公司为员工提供完善的福利计划、系统的培训和晋升机制��如果你是充满理想,品行正直,渴望成就人生的年轻人,诚邀加入我们的团队!" + } +}, + { + "id": 16, + "company": "公司9", + "position": "ip运营", + "salary": "8-13k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 4, + "applicationStatus": "interview_success", + "tags": [ + "短视频运营", + "客资转化", + "IP打造" + ], + "deadline": "2025-8-19 3:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "河南", + "experience": "1-3年", + "education": "大专及以上", + "positions": "4人", + "description": "1.熟悉抖音平台运营规则和玩法,负责 IP 、账号打造。\n2.负责媒体内容运营以及推广,打造个人 ip 垂直领域内容。\n3.负责公司老板的个人 ip 打造,视频为主。\n4.善于挖掘用户痛点,需求点,能很好的把文案,用户的痛点,产品特色,有效结合,从而提出建设性意见,调整内容方向和推广方案。\n5.打造粉丝运营以及变现能力,并推动0-1的落地执行。", + "requirements": [ + "拥有3 年以上 IP 运营相关经验,熟悉 IP 孵化、内容运营、商业化变现等全流程,有成功打造知名 IP 的案例者优先。", + "具备敏锐的市场洞察力和战略思维,能够准确把握 IP 行业的发展趋势,为公司 IP 战略提供前瞻性建议。", + "拥有出色的团队管理能力和沟通协调能力,能够带领团队高效协作,同时与公司内部各部门及外部合作伙伴建立良好的合作关系。", + "对建材领域有浓厚兴趣,具备创新精神,能为 IP 运营注入新鲜创意。" + ], + "benefits": [ + "团队建设", + "交通补贴", + "员工培训" + ], + "companyInfo": "河南豪莱特集团是河南豪莱特装饰工程有限公司旗下品牌。河南豪莱特装饰工程有限公司于2022年03月31日创办,公司创立于河南省郑州市新郑市孟庄镇第一幼儿园东南侧150米2号;全心致力于一般项目:建筑装饰材料销售、建筑材料销售、有色金属合金销售、金属材料销售、金属制品销售、高性能有色金属及合金材料销售、金属结构销售、建筑用金属配件销售、金属工具销售、金属切割及焊接设备销售、五金产品零售、门窗销售、轻质建筑材料销售、金属切削加工服务、金属门窗工程施工、园林绿化工程施工等服务。公司性质为有限责任公司(自然人独资),注册资本500万人民币," + } +}, + { + "id": 17, + "company": "公司10", + "position": "品牌推广专员", + "salary": "7-10k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 6, + "applicationStatus": "accepted", + "tags": [ + "销售工作经验", + "直播", + "可接受外勤和出差" + ], + "deadline": "2025-9-10 8:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "海口", + "experience": "2-5年", + "education": "大专及以上", + "positions": "7人", + "description": "1. 负责公司品牌形象的推广与建设,提升品牌知名度和美誉度;\n2. 策划并执行线上线下品牌营销活动,增强用户互动和品牌忠诚度;\n3. 监测市场动态及竞争对手品牌策略,为品牌调整提供有效建议;\n4. 协调内外部资源,确保品牌推广活动的顺利进行和效果最大化;\n5. 维护并拓展媒体关系,提升品牌在目标受众中的影响力。", + "requirements": [ + "相关专业优先;", + "具备良好的创意策划能力和文案撰写技巧,能够独立完成品牌推广方案;", + "熟悉社交媒体运营及数字营销工具,有成功案例者优先;", + "具有较强的沟通协调能力,能够高效推进项目执行;", + "对市场趋势敏感,具备较强的数据分析能力和问题解决能力。" + ], + "benefits": [ + "节日福利", + "年终奖", + "双休" + ], + "companyInfo": "海南老友通讯坐落于海口市龙华区金龙路7号兴业银行大厦B座1303。隶属于香港路尚集团,是一家集移动支付、AI人工智能科技研发、日用百货贸易,投资管理为一体的综合型企业。一直秉承着创业的激情与梦想,在变化莫测的市场中,不断变革,不断创新,不断超越,经过几十年的蜕变与发展成功打造出<路尚>,<路易百纳>,< 海灵顿>,<芙德里娜>,<胡芙>等自主品牌,并与李时珍、蓝月亮、袋鼠皮具、民生银行、兴业银行、海南银行、广发银行、平安银行等国内外知名企业品牌进行深度战略合作。从单一的公司结构发展到今天公司覆盖全国93个城市近237家分公司的集团企业。老友通讯主要运营通讯业务,范围遍布全国各个大中型城市,目前已与深圳电信,海南联通等达成战略合作协议。致力于全国更多城市的电信、联通业务拓展和深度合作,未来主要服务于国内电信、移动、联通三大运营商。二十年来我们集团管理层都是从内部提升,给予企业内部员工更大的发展空间。在这里没有人能限制你赚钱的能力和对成功的渴望。我们不仅像天使基金一样为“未来企业家”提供资金支持,更为他们提供能力成长所需资源,如完善的轮岗轮部门培训、系统的实践、成长期的收入保障。 公司人性化的管理为员工定期组织各种国内外的旅行,并有丰厚职位津贴、绩效奖金、带薪年假、住房补助、奖车奖房计划等。海口公司向全国培养输送了二十几名职业经理人,为集团的发展做出了巨大贡献,被集团誉为:职业经理人的摇篮! 结合国家最大自贸港的建设,根据集团的战略规划,现在大力度布局华南自贸港地区拓展更多的分公司与新部门,欢迎有志之士加入我们果知数字科技的大家庭。让我们一起合一、共赢、卓越、创造属于我们的佳绩!" + } +}, + { + "id": 18, + "company": "公司11", + "position": "社群运营", + "salary": "6-11k", + "status": "available", + "jobType": "internship", + "remainingPositions": 2, + "applicationStatus": "not_applied", + "tags": [ + "接受居家办公", + "用户精细化运营", + "数据分析能力" + ], + "deadline": "2025-6-25 13:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "贺州", + "experience": "2-4年", + "education": "大专及以上", + "positions": "12人", + "description": "1.负责社群的日常运营管理,确保社群活跃度;\n2.策划并执行社群相关活动,增强社群成员的参与感和归属感;\n3.监控社群动态,及时处理社群内的各类问题;\n4.收集和分析社群反馈,为社群运营策略提供参考;\n5.与其他部门合作,共同提升社群运营效果。", + "requirements": [ + "具备良好的沟通能力和团队合作精神;", + "对社群运营有浓厚的兴趣,能够灵活运用社群工具;", + "具有较强的问题解决能力,能够迅速应对社群中的突发事件;", + "拥有良好的数据分析能力,能够根据数据调整运营策略;", + "具备创新思维,能够不断优化社群运营方案。" + ], + "benefits": [ + "团队建设", + "五险一金", + "餐饮补贴" + ], + "companyInfo": "湖南元特企业管理服务有限公司是一家专注于为年轻人以及有梦想敢于拼搏的人提供全方位创业支持的新型企业管理服务平台。我们深刻理解当代年轻人在创业初期面临的资金短缺、经验不足、资源匮乏、后端服务等核心痛点,因此创新性地提出了“0投资0风险0门槛”的创业扶持模式,旨在彻底打破传统创业的高投资高风险高门槛壁垒,让每一个有梦想的人都能平等获得创业机会。\n\n在数字经济蓬勃发展的时代背景下,我们整合了超过200家战略合作伙伴资源,构建起包含项目孵化、技能培训、渠道共享、法律咨询、品牌推广、中后端运行、在内的十二大赋能体系。通过独创的\"创业帮扶\"服务模式,创业者无需承担场地租金、设备采购、人员工资等传统成本,即可通过我们的共享创业平台开展业务。目前我们已经成功孵化了涵盖电商运营、新媒体营销、拓客渠道、创意引流、人工智能Ai获客系统、等领域的36个前端运营体系化,能达到极高的成效,让天下没有难做的生意!\n\n我们的专业团队由资深创业导师、行业专家和成功企业家组成,平均拥有10年以上企业服务经验。区别于传统孵化器,我们更注重实战能力的培养,通过\"理论培训+项目实操+资源对接+一对一帮扶\"的四维成长路径,帮助创业者在真实商业环境中快速成长。同时,我们与多家风险投资机构建立了深度合作,为优质项目提供后续融资支持,真正实现从0到1再到100的全程陪伴扶持式成长。" + } +}, + { + "id": 19, + "company": "公司12", + "position": "演出执行经理", + "salary": "6-8k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 4, + "applicationStatus": "interview_failed", + "tags": [ + "活动执行统筹经验", + "一般企业", + "艺术/文化展" + ], + "deadline": "2025-7-7 8:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "武汉", + "experience": "2-5年", + "education": "本科及以上", + "positions": "8人", + "description": "1. 负责演出现场执行工作,确保演出顺利进行;\n2. 整理演出项目报批材料,确保所有相关事项符合标准;\n3. 与团队成员进行有效沟通,协调演出各版块事项;\n4. 负责演出物料的输出与新媒体运营工作。", + "requirements": [ + "具备演出执行经验;", + "熟悉文化产业管理或演出制作等相关专业;", + "具有良好的文案撰写能力和语言表达能力,能够有效进行沟通与协作;", + "对工作细心负责,思维敏捷;", + "熟练掌握OFFICE、WPS等办公软件;", + "能够承受工作压力,具有良好的执行应变能力。" + ], + "benefits": [ + "五险一金", + "双休", + "餐饮补贴" + ], + "companyInfo": "新东联合文化成立于2016年,主营文化演出、会议会展、场馆运营、体育赛事,专注于组织举办各类大型文体活动,并致力于繁荣文化演出市场,活跃大众文化生活。截至2025年,新东联合组织举办各类文体活动超过300场,观众累计超过100万人次。运营活动类型包括大型巡演、大型会议、品牌发布会、明星见面会、体育赛事等。曾连续获得第七届世界军人运动会拳击比赛、女子篮球比赛“优质供应商”、演出市场年度贡献奖等荣誉称号,在世界级文体活动中展现了企业的专业与实力。" + } +}, + { + "id": 20, + "company": "公司13", + "position": "新媒体运营专员", + "salary": "6-10k", + "status": "available", + "jobType": "internship", + "remainingPositions": 3, + "applicationStatus": "interview_failed", + "tags": [ + "电商", + "团队管理经验", + "策划热点事件", + "短视频运营" + ], + "deadline": "2025-8-15 16:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "呼伦贝尔", + "experience": "2-5年", + "education": "大专及以上", + "positions": "13人", + "description": "1、负责公司新媒体平台(抖音,视频号等)的内容策划与日常运营;\n2、撰写创意文案,制作吸引人的图文、视频内容,提升品牌曝光度和用户互动;\n3、监控和分析新媒体平台的数据表现,根据反馈调整运营策略;\n4、策划并执行线上活动,增强粉丝活跃度和用户粘性;\n5、与团队协作,确保品牌信息的一致性和传播效果的最大化。", + "requirements": [ + "熟悉主流社交媒体运营机制,有成功的新媒体运营案例;", + "具备良好的文案撰写能力,能够独立完成内容创作;", + "对新媒体趋势有敏锐的洞察力,能够把握用户喜好;", + "数据分析能力强,能够通过数据指导内容优化;", + "具有良好的团队合作精神,能够高效沟通并快速响应市场变化。" + ], + "benefits": [ + "团队建设", + "交通补贴", + "年终奖" + ], + "companyInfo": "本公司深耕直播及短视频拍摄等网红孵化业务,自2020年7月创立至今,根据主播需求为主播提供包括但不限于直播技巧培训、短视频拍摄、线下直播间场地等特色服务。公会拥有直播运营经验丰富地成熟团队,日常主要帮助主播打造直播人设、优化直播内容;短视频团队,主要负责短视频拍摄、剪辑、脚本策划等内容;全方位服务于主播,提升主播内容生产及流量获取能力。" + } +}, + { + "id": 21, + "company": "公司14", + "position": "餐厅运营经理", + "salary": "8-13k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 7, + "applicationStatus": "applied", + "tags": [ + "餐厅运营", + "品类运营", + "运营部门管理", + "有餐饮店长经验", + "活动策划" + ], + "deadline": "2025-9-2 21:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "渭南", + "experience": "2-5年", + "education": "大专及以上", + "positions": "7人", + "description": "1、负责餐厅日常运营管理工作,确保服务质量和食品安全标准;\n2、优化餐厅运营流程,提升顾客满意度和营业额;\n3、管理并培训员工,提升团队的专业技能和服务意识;\n4、监控成本控制,确保财务目标的实现;\n5、处理顾客反馈和投诉,维护品牌形象。", + "requirements": [ + "具备餐饮行业相关管理岗位经验,熟悉餐厅运营流程;", + "出色的团队领导能力和沟通技巧,能够激励团队达成目标;", + "优秀的解决问题能力,能够在高压环境下作出快速决策;", + "熟悉财务报表和成本控制,具备良好的数据分析能力;", + "热爱餐饮行业,对顾客服务有深刻理解并追求卓越。负责自营大学档口餐厅" + ], + "benefits": [ + "团队建设", + "节日福利", + "餐饮补贴" + ], + "companyInfo": "陕西候鸟家园国际旅行社有限公司是上海生道堂旗下的旅居养老健康高端服务品牌,坐落于西安市未央区凤城一路雅荷花园中环大厦A座,上海生道堂成立于2010年,在北京、上海、重庆、黄山、海南、四川、陕西等地设立多个分支机构,生道堂是一家集中医药研究、基地疗养、健康管理、社区养老、生命监护、候鸟式养生、养老、旅居等健康研究管理机构,将中医与养老相集合的新型健康养老产业,是生道堂未来发展的方向,未来生道堂陆续在全国乃至世界各地,建立舒适高品质的候鸟式养生养老基地。\n陕西候鸟家园秉承“敬老爱老、真诚奉献、孝行天下”的企业宗旨,建立一个以健康、快乐为宗旨,以旅游旅居为核心,以健康服务为根本的,为老服务产业体系,争取在6年内,在中国建立500家旅居基地,国外一百多家旅居基地的家园,让客户家人到哪里都感到家的温暖与细致服务,并提供健康服务与养老服务一体化的,成为为天下老人健康、快乐做出贡献的有价值的伟大公司!" + } +}, + { + "id": 22, + "company": "公司15", + "position": "景区运营专员", + "salary": "6-8k", + "status": "available", + "jobType": "internship", + "remainingPositions": 5, + "applicationStatus": "interview_failed", + "tags": [ + "业务运营", + "OTA平台", + "经验一年以内" + ], + "deadline": "2025-6-30 7:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "四川成都", + "experience": "2-4年", + "education": "大专及以上", + "positions": "9人", + "description": "1、切换工作:在规定时间内完成项目所有链路对接及切换工作(票务系统链路、核销链路、回款链路、发票链路);\n2、线上运营:门票上下架、渠道筛查、POI信息维护;\n3、线下执行:项目线下票口切换工作、线下活动执行所需要的物料落地;\n4、沟通协调:协调各方如景区、上级、驻场同事等解决项目运营过程中遇到的任何问题;\n5、数据统筹:核销数据汇总,同期对比,原因分析", + "requirements": [ + "具备文旅行业相关工作经验,熟悉景区运营管理、票务系统及线上线下运营流程;有景区、OTA平台(如抖音、携程、美团等)工作经验者优先考虑", + "具备良好的沟通协调能力,能够高效对接多方资源(如景区、上级部门、驻场团队),推动项目落地;", + "优秀的执行力与问题解决能力,能够在规定时间内完成复杂链路的切换及线下执行任务;", + "熟悉数据统计与分析方法,能独立完成核销数据汇总、对比及原因分析,为运营决策提供支持;", + "具备一定的线上运营意识,了解渠道管理、POI信息维护及相关操作;", + "工作认真负责,具备较强的责任心与抗压能力,适应临时性任务安排,能接受短期出差;" + ], + "benefits": [ + "带薪年假", + "五险一金", + "餐饮补贴" + ], + "companyInfo": "成都所见所得传媒集团有限公司总部位于成都高新区,注册于2022年4月,是国内领先的“新媒体+文旅集团”。 集团业务涵盖直播电商、数字文旅、品牌管理、MCN+娱乐等,于2023年开创文旅RBF合作模式并正式开展文旅业务,重点从事文化、旅游及运营业务,业务模式以RBF业务为主。是全球首个文旅RBF模式,服务于中国境内各大景区、旅游、演出、体育POI。" + } +}, + { + "id": 23, + "company": "公司16", + "position": "会展策划师", + "salary": "6-7.5k", + "status": "available", + "jobType": "internship", + "remainingPositions": 1, + "applicationStatus": "interview_success", + "tags": [ + "展馆策划", + "多媒体文案策划", + "脚本分镜策划", + "文案策划", + "PS" + ], + "deadline": "2025-7-18 14:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "西安", + "experience": "2-4年", + "education": "大专及以上", + "positions": "5人", + "description": "1、负责展厅项目(如政府规划馆、博物馆、企业展厅、各类主题展馆等)相关展馆的理念、内容等创意策划;并针对客户需求进行方向确定、整体策划、提案;文案的策划、创意、撰写与执行(尤其是创意脚本);设计过程中的管控和进度推进,如:时间节点、多方沟通协调、汇报;项目案场效果跟进;\n2、独立跟进项目,负责向客户提案讲解,参与项目招投标流程;\n3、参与项目考察及前期调研工作,并进行相关资料的收集与整理;\n4、能够统筹完成各类大案,负责项目的创意构思和营销策略、推广的总体思路、有效的把握项目进程;\n5、根据策划方案指导设计人员进行空间、平面等设计工作。配合市场客服部工作需要,和相关人员完成客户需求;\n6、文笔流畅,善于撰写脚本创作,有较强的文字驾驭能力和创意能力;具有较强的分析判断能力文字组织能力、方案策划能力、谈判能力以及公关能力;\n7、对展厅类项目有较好的见解,能完成大型展览展示创意策划;\n8、用PPT、WORD等制作策划方案;", + "requirements": [ + "大专以上学历,会展策划、多媒体艺术、空间设计、广告传播、中文等相关专业;", + "1年以上策划工作经验;2年以上大型展馆(规划馆、博物馆、科技馆、主题馆等)主案策展经验;对展厅类项目有较好的见解,能完成大型展览展示策划设计;能够准确了解客户要求,把握策划方向;", + "有较强的理解能力、策略分析能力、文字撰写能力、协调能力;责任心强;较强的PPT制作能力;具有一定的审美;对新的互动科技有兴趣;", + "诚实敬业,有激情、工作认真负责,责任心强,具备较强的团队合作精神,思维活跃积极向上;", + "根据策划方案指导设计人员进行空间、平面等设计工作。配合市场客服部工作需要,和相关设计人员完成客户需求;", + "文字功底深厚,具有独立提案能力;创意型策略人才,准确了解客户要求,能正确把握策划方向。对展览展示有独到的理解能力,对展览展示空间设计有一定程度的了解;" + ], + "benefits": [ + "带薪年假", + "交通补贴", + "餐饮补贴" + ], + "companyInfo": "西安西缘网络科技有限公司(以下简称“西缘科技)成立于2018年1月,公司以人工智能(AI)和虚拟现实(VR)技术创新研发的国家高新技术企业。产品应用领域覆盖文旅、教育、医疗、党政机关、企事业单位。\n成立至今,已成功实施落成项目2300余例,拥有丰富的硬件产品研发、软件技术开发,多媒体内容制作的经验。\n西缘科技将致力于成为国内教育、科普、文旅与科技跨界融合的一流高端服务商,为各界合作伙伴打造领先的产品,树立品牌标杆,为客户提供更加优质的产品和服务。" + } +}, + { + "id": 24, + "company": "公司17", + "position": "商业会展执行专员", + "salary": "7-10k", + "status": "available", + "jobType": "fulltime", + "remainingPositions": 2, + "applicationStatus": "interview_success", + "tags": [ + "会展策划执行经验", + "可接受出差", + "会展活动", + "公关会展专业" + ], + "deadline": "2025-8-9 19:00", + "type": "岗位信息录入机收录名", + "isRecommended": true, + "details": { + "location": "武汉", + "experience": "2-5年", + "education": "大专及以上", + "positions": "10人", + "description": "1、独立开展项目调研、立项、运营、实施工作;\n2、组织开展招商、邀观、重大活动自办、引进工作;\n3、与政府部门/主协办单位/展馆/行业协会/媒体机构等开展对接并维护公共关系;\n4、展会项目的现场管理,含主场服务组织、配套商务服务的组织实施、项目预算结算管理;", + "requirements": [ + "2年以上展览(含会议)项目管理经验,熟悉会展的立项实施流程", + "具备带领团队完成新项目开拓的拓展能力;", + "具备文案写作、策划案写作能力;", + "具备良好的沟通能力,敏锐的分析及判断能力;", + "性格开朗,态度积极,能承受较强的工作压力,有创业激情,对环境及岗位适应能力强;英语六级者优先" + ], + "benefits": [ + "五险一金", + "双休", + "餐饮补贴" + ], + "companyInfo": "武汉食和岛网络科技有限公司成立于2016年,是一家“致力于食材展览,服务于食材流通”的食材展业综合服务公司,创建了食材商务服务营销平台,为餐饮食材供需双方提供高效互动。食和岛旗下会展品牌“良之隆·中国食材电商节”创立于2008年,曾荣获2017年度中国十佳品牌展会项目大奖,在2018年11月成为了湖北省第一家获得国际展览联盟(简称UFI )会员认证的会展品牌,在2019年9月正式成为国际大会及会议协会(简称ICCA)的会员单位,成为湖北省唯一获得“双料”国际认证的会展公司,逐步打开国际展览及会议市场,国际化进程稳步提升。" + } +}, + { + "id": 25, + "company": "公司18", + "position": "文创产品策划师", + "salary": "6-9k", + "status": "available", + "jobType": "internship", + "remainingPositions": 7, + "applicationStatus": "applied", + "tags": [ + "文创成品", + "C端产品", + "策略产品", + "传统文化" + ], + "deadline": "2025-9-13 23:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "丽水", + "experience": "1-2年", + "education": "大专及以上", + "positions": "7人", + "description": "1.负责公司文创产品开发、策划,配合制定公司文创产品线的发展策略;\n2.具有研究市场趋势,挖掘潜在的市场需求,结合公司资源和公司内部优势,提出并落地文创产品项目,包括但不限于文化创意设计、包装策划等能力;\n3.对材料和结构呈现有深入的理解;\n4.文创产品的创意构思、内容策划、落地执行等全过程;\n5.及时反馈及完成公司交办的相关工作。", + "requirements": [ + "喜欢传统文化,热爱文创行业,具有3年以上相关工作经验,熟悉各类文创产品,具备较强的市场敏感性和产品设计能力;", + "具备良好的沟通协调能力,能够与公司内部团队、外部合作伙伴进行有效沟通,推动文创产品线的发展;", + "具有敏锐的市场洞察能力,能够准确判断市场趋势,为公司提供决策支持;", + "具有较强的学习能力和创新思维,敢于尝试新事物,对手工艺、非遗文化、潮流设计等有深入了解或实践经验;", + "对文创产品生产过程、工艺有了解,具有较强的生产过程控制和协调能力。" + ], + "benefits": [ + "团队建设", + "年终奖", + "双休" + ], + "companyInfo": "不止设计事务所成立于2015年4月,2020年底成立杭州分公司。丽水公司现有团队成员20人,杭州公司32人。\n本公司致力于为品牌方、企事业单位提供视觉设计服务与营销策划建议。\n涉及业务如:品牌VI设计、应用物料设计、文创产品研发、h5动画、mg动画、视频特效、商业产品摄影、展厅规划、网页网站等设计类项目。先后服务于新西兰贸发局,新西兰航空,新西兰旅游局,维珍航空,宁波市环保局,宁波市卫生局,丽水市供电公司、敦煌研究院等企事业单位和商业公" + } +}, + { + "id": 26, + "company": "公司19", + "position": "SEO专员", + "salary": "6-8k", + "status": "available", + "jobType": "internship", + "remainingPositions": 6, + "applicationStatus": "interview_failed", + "tags": [ + "搜索引擎优化", + "百度" + ], + "deadline": "2025-6-17 10:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "苏州", + "experience": "2-5年", + "education": "大专及以上", + "positions": "6人", + "description": "1. SEO规划与实施,提升公司网站在自然搜索中的排名;\n2. 制定并执行营销方案,增加公司的营销曝光度;\n3. 分析数据和趋势,提出可行的优化建议并跟踪实现效果。", + "requirements": [ + "深入了解常用搜索引擎算法规则,并能根据其变化及时制定相应的优化方案;", + "熟练掌握SEO工具,例如:Google Analytics、Baidu Tongji等;", + "具备良好的沟通能力和团队协作精神,能够积极推动SEO中心与其他部门紧密配合。" + ], + "benefits": [ + "带薪年假", + "五险一金", + "年终奖" + ], + "companyInfo": "广东双鹰玩具实业有限公司创立于1988年,专注于互动遥控和科技积木两大品类,经过30多年的发展,成为国内领先的高端玩具制造商,集研发、生产、销售、品牌于一体,拥有员工1000名以上,2大核心生产基地,2016-2021年相继成立北京、深圳分公司负责品牌传播和产品设计。" + } +}, + { + "id": 27, + "company": "公司20", + "position": "酒店餐饮主管", + "salary": "8-9k", + "status": "available", + "jobType": "internship", + "remainingPositions": 1, + "applicationStatus": "interview_success", + "tags": [ + "酒店管理经验", + "包住" + ], + "deadline": "2025-7-22 15:00", + "type": "岗位信息录入机收录名", + "isRecommended": false, + "details": { + "location": "重庆", + "experience": "1-2年", + "education": "大专及以上", + "positions": "2人", + "description": "1. 负责酒店餐饮部门的整体运营管理,确保服务质量和顾客满意度;\n2. 制定并执行餐饮部门的营销策略,提升餐厅营业额;\n3. 监督食材采购、库存管理及成本控制,保证食品安全与高效运营;\n4. 指导并培训餐饮团队,提升团队专业能力和工作效率;\n5. 协调各部门间合作,优化顾客就餐体验。", + "requirements": [ + "具备出色的领导能力和团队管理经验,能够激励团队达成目标;", + "熟悉餐饮业务运作流程,有成本控制意识及食品安全管理经验;", + "优秀的沟通能力和客户服务意识,能够处理顾客投诉和意见;", + "具有较强的市场洞察力和创新能力,能够开发新菜品及营销方案;", + "能够在快节奏的工作环境中保持冷静,有效解决问题。" + ], + "benefits": [ + "团队建设", + "交通补贴", + "年终奖" + ], + "companyInfo": "湖北金狮酒店管理有限公司成立于1998年,历经二十七年的发展,目前旗下有金狮酒店、鑫金狮酒店、孝感人家酒店等三大商务型连锁酒店,六家直营门店家常菜品牌“福味馆”,在孝感当地具有影响力和较高的市场美誉度。" + } +} + ], + internalPositions: [ + { + id: 1, + company: "苏州文旅集团有限公司", + position: "文旅产品策划师", + salary: "中阶段/8K-12K", + interviewTime: "2025-07-16 14:00", + status: "scheduled", + tags: ["苏州", "双休", "朝九晚五", "五险一金"], + type: "online", + statusText: "线上面试等待中", + }, + { + id: 2, + company: "华东旅游开发有限公司", + position: "景区运营专员", + salary: "中阶段/7K-10K", + interviewTime: "2025-07-17 10:00", + status: "location", + type: "offline", + statusText: "线下面试地点", + }, + { + id: 3, + company: "江南文化传媒集团", + position: "民宿管理师", + salary: "中阶段/6K-9K", + interviewTime: "2025-07-18 15:00", + status: "completed", + type: "completed", + statusText: "已面试", + }, + { + id: 4, + company: "太湖度假村管理公司", + position: "酒店管理专员", + salary: "中阶段/7K-11K", + interviewTime: "2025-07-19 09:00", + status: "completed", + type: "completed", + statusText: "已面试", + }, + { + id: 5, + company: "古镇文化旅游有限公司", + position: "文化导游讲解员", + salary: "中阶段/5K-8K", + interviewTime: "2025-07-20 14:30", + status: "scheduled", + type: "online", + statusText: "线上面试等待中", + }, + { + id: 6, + company: "智慧旅游科技公司", + position: "旅游数据分析师", + salary: "中阶段/9K-13K", + interviewTime: "2025-07-21 16:00", + status: "location", + type: "offline", + statusText: "线下面试地点", + }, + ], + }, + + // 用户简历数据 + userResumes: [ + { + id: 1, + title: "物联网工程师简历", + targetPosition: "物联网实施工程师", + status: "active", + statusText: "活跃", + updateTime: "2024-01-15", + submitCount: 8, + type: "技术类", + skills: [ + "物联网技术", + "Linux系统", + "TCP/IP", + "MQTT", + "嵌入式开发", + "项目管理", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "物联网工程", + degree: "专科", + graduationYear: "2024", + }, + experience: "1-2年", + company: "华为技术有限公司", + }, + { + id: 2, + title: "前端开发工程师简历", + targetPosition: "前端开发工程师", + status: "draft", + statusText: "草稿", + updateTime: "2024-01-10", + submitCount: 3, + type: "技术类", + skills: [ + "React", + "Vue", + "JavaScript", + "TypeScript", + "Node.js", + "Webpack", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "计算机科学与技术", + degree: "专科", + graduationYear: "2024", + }, + experience: "2-3年", + company: "腾讯科技", + }, + { + id: 3, + title: "数据分析师简历", + targetPosition: "数据分析师", + status: "active", + statusText: "活跃", + updateTime: "2024-01-12", + submitCount: 5, + type: "分析类", + skills: ["Python", "SQL", "数据可视化", "Excel", "统计分析", "Tableau"], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "数据科学与大数据技术", + degree: "专科", + graduationYear: "2024", + }, + experience: "1-3年", + company: "阿里巴巴", + }, + { + id: 4, + title: "项目管理简历", + targetPosition: "项目经理", + status: "inactive", + statusText: "未激活", + updateTime: "2023-12-20", + submitCount: 1, + type: "管理类", + skills: [ + "项目管理", + "PMP", + "敏捷开发", + "团队协作", + "风险控制", + "需求分析", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "工商管理", + degree: "专科", + graduationYear: "2024", + }, + experience: "3-5年", + company: "美团", + }, + { + id: 5, + title: "物联网工程师简历", + targetPosition: "物联网实施工程师", + status: "active", + statusText: "活跃", + updateTime: "2024-01-15", + submitCount: 8, + type: "技术类", + skills: [ + "物联网技术", + "Linux系统", + "TCP/IP", + "MQTT", + "嵌入式开发", + "项目管理", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "物联网工程", + degree: "专科", + graduationYear: "2024", + }, + experience: "1-2年", + company: "华为技术有限公司", + }, + { + id: 6, + title: "前端开发工程师简历", + targetPosition: "前端开发工程师", + status: "draft", + statusText: "草稿", + updateTime: "2024-01-10", + submitCount: 3, + type: "技术类", + skills: [ + "React", + "Vue", + "JavaScript", + "TypeScript", + "Node.js", + "Webpack", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "计算机科学与技术", + degree: "专科", + graduationYear: "2024", + }, + experience: "2-3年", + company: "腾讯科技", + }, + { + id: 7, + title: "数据分析师简历", + targetPosition: "数据分析师", + status: "active", + statusText: "活跃", + updateTime: "2024-01-12", + submitCount: 5, + type: "分析类", + skills: ["Python", "SQL", "数据可视化", "Excel", "统计分析", "Tableau"], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "数据科学与大数据技术", + degree: "专科", + graduationYear: "2024", + }, + experience: "1-3年", + company: "阿里巴巴", + }, + { + id: 8, + title: "项目管理简历", + targetPosition: "项目经理", + status: "inactive", + statusText: "未激活", + updateTime: "2023-12-20", + submitCount: 1, + type: "管理类", + skills: [ + "项目管理", + "PMP", + "敏捷开发", + "团队协作", + "风险控制", + "需求分析", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "工商管理", + degree: "专科", + graduationYear: "2024", + }, + experience: "3-5年", + company: "美团", + }, + { + id: 9, + title: "物联网工程师简历", + targetPosition: "物联网实施工程师", + status: "active", + statusText: "活跃", + updateTime: "2024-01-15", + submitCount: 8, + type: "技术类", + skills: [ + "物联网技术", + "Linux系统", + "TCP/IP", + "MQTT", + "嵌入式开发", + "项目管理", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "物联网工程", + degree: "专科", + graduationYear: "2024", + }, + experience: "1-2年", + company: "华为技术有限公司", + }, + { + id: 10, + title: "前端开发工程师简历", + targetPosition: "前端开发工程师", + status: "draft", + statusText: "草稿", + updateTime: "2024-01-10", + submitCount: 3, + type: "技术类", + skills: [ + "React", + "Vue", + "JavaScript", + "TypeScript", + "Node.js", + "Webpack", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "计算机科学与技术", + degree: "专科", + graduationYear: "2024", + }, + experience: "2-3年", + company: "腾讯科技", + }, + { + id: 11, + title: "数据分析师简历", + targetPosition: "数据分析师", + status: "active", + statusText: "活跃", + updateTime: "2024-01-12", + submitCount: 5, + type: "分析类", + skills: ["Python", "SQL", "数据可视化", "Excel", "统计分析", "Tableau"], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "数据科学与大数据技术", + degree: "专科", + graduationYear: "2024", + }, + experience: "1-3年", + company: "阿里巴巴", + }, + { + id: 12, + title: "项目管理简历", + targetPosition: "项目经理", + status: "inactive", + statusText: "未激活", + updateTime: "2023-12-20", + submitCount: 1, + type: "管理类", + skills: [ + "项目管理", + "PMP", + "敏捷开发", + "团队协作", + "风险控制", + "需求分析", + ], + personalInfo: { + name: "张同学", + phone: "138****8888", + email: "zhangxue@example.com", + location: "苏州市", + }, + education: { + university: "苏州信息职业技术学院", + major: "工商管理", + degree: "专科", + graduationYear: "2024", + }, + experience: "3-5年", + company: "美团", + }, + ], + + // 我的简历与面试题数据 + resumeInterview: { + title: "我的简历与面试题", + industries: [ + { + id: "frontend", + name: "前端开发", + positions: [ + { + id: "react-developer", + name: "React开发工程师", + company: "腾讯科技", + level: "中级", + salary: "12-20K", + experience: "2-4年", + resume: { + personalInfo: { + name: "张三", + phone: "138****8888", + email: "zhangsan@example.com", + location: "深圳市南山区", + }, + education: { + university: "华南理工大学", + major: "计算机科学与技术", + degree: "本科", + graduationYear: "2021", + }, + experience: [ + { + company: "腾讯科技有限公司", + position: "React开发工程师", + duration: "2022.03-至今", + responsibilities: [ + "负责QQ音乐Web端核心功能开发,日活用户500万+", + "主导前端架构重构,性能提升40%", + "建立组件库体系,提升开发效率30%", + ], + }, + ], + skills: ["React", "Vue", "TypeScript", "Node.js", "Webpack"], + }, + interviews: { + hookQuestions: [ + "如何优化React应用的性能?", + "什么是虚拟DOM?它的优势是什么?", + "React Hooks相比Class组件有什么优势?", + "如何处理React组件的状态管理?", + "React18的新特性有哪些?", + ], + allQuestions: [ + { + id: 1, + category: "技术基础", + question: "如何优化React应用的性能?", + answer: + "1. 使用React.memo避免不必要的重渲染;2. 使用useMemo和useCallback缓存计算结果;3. 代码分割和懒加载;4. 虚拟化长列表;5. 优化bundle大小。", + }, + ], + }, + }, + { + id: "vue-developer", + name: "Vue开发工程师", + company: "阿里巴巴", + level: "高级", + salary: "15-25K", + experience: "3-5年", + resume: { personalInfo: { name: "李四" } }, + interviews: { + hookQuestions: [ + "Vue3相比Vue2有哪些重大改进?", + "什么是响应式原理?", + "如何进行Vue项目性能优化?", + "Composition API的优势是什么?", + "Pinia与Vuex的区别?", + ], + allQuestions: [], + }, + }, + { + id: "angular-developer", + name: "Angular开发工程师", + company: "华为技术", + level: "中级", + salary: "12-18K", + experience: "2-4年", + resume: { personalInfo: { name: "王五" } }, + interviews: { + hookQuestions: [ + "Angular的依赖注入是如何工作的?", + "什么是RxJS?", + "Angular的生命周期钩子有哪些?", + "Angular模块系统的设计?", + "如何进行Angular单元测试?", + ], + allQuestions: [], + }, + }, + { + id: "frontend-architect", + name: "前端架构师", + company: "美团", + level: "资深", + salary: "25-35K", + experience: "5-8年", + resume: { personalInfo: { name: "赵六" } }, + interviews: { + hookQuestions: [ + "如何设计一个大型前端应用的架构?", + "微前端架构的优缺点是什么?", + "如何制定前端技术选型标准?", + "前端监控系统如何设计?", + "如何处理跨团队协作?", + ], + allQuestions: [], + }, + }, + { + id: "mobile-developer", + name: "移动端开发工程师", + company: "小米科技", + level: "高级", + salary: "18-28K", + experience: "3-6年", + resume: { personalInfo: { name: "钱七" } }, + interviews: { + hookQuestions: [ + "React Native与原生开发的区别?", + "如何优化移动端应用性能?", + "Flutter与React Native如何选择?", + "移动端适配方案有哪些?", + "Hybrid开发的优缺点?", + ], + allQuestions: [], + }, + }, + { + id: "ui-developer", + name: "UI开发工程师", + company: "网易", + level: "中级", + salary: "10-16K", + experience: "2-4年", + resume: { personalInfo: { name: "孙八" } }, + interviews: { + hookQuestions: [ + "如何实现响应式设计?", + "CSS3动画的最佳实践是什么?", + "如何处理浏览器兼容性问题?", + "CSS预处理器的选择?", + "组件化开发的思路?", + ], + allQuestions: [], + }, + }, + { + id: "fullstack-developer", + name: "全栈开发工程师", + company: "京东", + level: "高级", + salary: "20-30K", + experience: "4-7年", + resume: { personalInfo: { name: "周九" } }, + interviews: { + hookQuestions: [ + "全栈开发的技术栈如何选择?", + "如何平衡前后端开发时间?", + "DevOps在全栈开发中的作用?", + "数据库设计原则?", + "系统架构如何演进?", + ], + allQuestions: [], + }, + }, + { + id: "frontend-lead", + name: "前端技术负责人", + company: "滴滴出行", + level: "专家", + salary: "30-50K", + experience: "6-10年", + resume: { personalInfo: { name: "吴十" } }, + interviews: { + hookQuestions: [ + "如何管理前端团队?", + "如何制定前端规范?", + "如何处理技术债务?", + "人才培养体系建设?", + "技术决策的制定流程?", + ], + allQuestions: [], + }, + }, + { + id: "frontend-intern", + name: "前端开发实习生", + company: "百度", + level: "实习", + salary: "3-5K", + experience: "应届生", + resume: { personalInfo: { name: "郑十一" } }, + interviews: { + hookQuestions: [ + "JavaScript基础知识掌握程度?", + "如何学习前端技术?", + "对前端发展趋势的看法?", + "项目经验分享?", + "学习规划是什么?", + ], + allQuestions: [], + }, + }, + ], + }, + { + id: "backend", + name: "后端开发", + positions: [ + { + id: "java-developer", + name: "Java开发工程师", + company: "阿里巴巴", + level: "高级", + salary: "18-30K", + resume: { personalInfo: { name: "陈一" } }, + interviews: { + hookQuestions: [ + "Spring Boot的核心特性是什么?", + "JVM调优有哪些关键参数?", + "如何设计高并发系统?", + ], + allQuestions: [], + }, + }, + { + id: "python-developer", + name: "Python开发工程师", + company: "字节跳动", + level: "中级", + salary: "12-20K", + resume: { personalInfo: { name: "林二" } }, + interviews: { + hookQuestions: [ + "Django与Flask的区别?", + "Python的GIL是什么?", + "如何优化Python程序性能?", + ], + allQuestions: [], + }, + }, + { + id: "golang-developer", + name: "Go开发工程师", + company: "腾讯", + level: "高级", + salary: "20-35K", + resume: { personalInfo: { name: "黄三" } }, + interviews: { + hookQuestions: [ + "Go语言的并发模型是什么?", + "Go的垃圾回收机制?", + "如何进行Go程序调优?", + ], + allQuestions: [], + }, + }, + { + id: "nodejs-developer", + name: "Node.js开发工程师", + company: "美团", + level: "中级", + salary: "14-22K", + resume: { personalInfo: { name: "何四" } }, + interviews: { + hookQuestions: [ + "Node.js的事件循环机制?", + "如何处理Node.js内存泄漏?", + "Express与Koa的区别?", + ], + allQuestions: [], + }, + }, + { + id: "php-developer", + name: "PHP开发工程师", + company: "新浪", + level: "中级", + salary: "10-18K", + resume: { personalInfo: { name: "罗五" } }, + interviews: { + hookQuestions: [ + "PHP8的新特性有哪些?", + "Laravel框架的核心概念?", + "如何优化PHP应用性能?", + ], + allQuestions: [], + }, + }, + { + id: "microservice-architect", + name: "微服务架构师", + company: "华为", + level: "专家", + salary: "35-60K", + resume: { personalInfo: { name: "高六" } }, + interviews: { + hookQuestions: [ + "微服务拆分的原则是什么?", + "如何处理分布式事务?", + "服务网格的作用是什么?", + ], + allQuestions: [], + }, + }, + { + id: "devops-engineer", + name: "DevOps工程师", + company: "小米", + level: "高级", + salary: "18-32K", + resume: { personalInfo: { name: "梁七" } }, + interviews: { + hookQuestions: [ + "CI/CD流水线如何设计?", + "Docker与Kubernetes的关系?", + "如何实现灰度发布?", + ], + allQuestions: [], + }, + }, + { + id: "database-engineer", + name: "数据库工程师", + company: "蚂蚁金服", + level: "专家", + salary: "30-50K", + resume: { personalInfo: { name: "韩八" } }, + interviews: { + hookQuestions: [ + "MySQL索引优化策略?", + "分库分表如何设计?", + "Redis与MySQL的使用场景?", + ], + allQuestions: [], + }, + }, + { + id: "backend-intern", + name: "后端开发实习生", + company: "网易", + level: "实习", + salary: "3-6K", + resume: { personalInfo: { name: "冯九" } }, + interviews: { + hookQuestions: [ + "计算机网络基础知识?", + "数据结构与算法掌握程度?", + "对后端技术栈的理解?", + ], + allQuestions: [], + }, + }, + ], + }, + { + id: "data-analysis", + name: "数据分析", + positions: [ + { + id: "data-analyst", + name: "数据分析师", + company: "阿里巴巴", + level: "高级", + salary: "15-25K", + resume: { personalInfo: { name: "陈数据" } }, + interviews: { + hookQuestions: [ + "SQL优化的常用技巧?", + "如何进行用户行为分析?", + "A/B测试的设计原则?", + ], + allQuestions: [], + }, + }, + { + id: "data-scientist", + name: "数据科学家", + company: "腾讯", + level: "专家", + salary: "30-50K", + resume: { personalInfo: { name: "李科学" } }, + interviews: { + hookQuestions: [ + "机器学习算法如何选择?", + "特征工程的最佳实践?", + "如何评估模型效果?", + ], + allQuestions: [], + }, + }, + { + id: "ml-engineer", + name: "机器学习工程师", + company: "百度", + level: "高级", + salary: "20-35K", + resume: { personalInfo: { name: "王学习" } }, + interviews: { + hookQuestions: [ + "深度学习框架比较?", + "模型部署的挑战?", + "如何处理数据倾斜?", + ], + allQuestions: [], + }, + }, + { + id: "bi-analyst", + name: "BI分析师", + company: "美团", + level: "中级", + salary: "12-20K", + resume: { personalInfo: { name: "赵商业" } }, + interviews: { + hookQuestions: [ + "数据仓库建模方法?", + "ETL流程设计原则?", + "可视化工具选择?", + ], + allQuestions: [], + }, + }, + { + id: "data-engineer", + name: "数据工程师", + company: "字节跳动", + level: "高级", + salary: "18-30K", + resume: { personalInfo: { name: "钱工程" } }, + interviews: { + hookQuestions: [ + "大数据处理架构设计?", + "Spark与Hadoop的区别?", + "实时数据处理方案?", + ], + allQuestions: [], + }, + }, + { + id: "algorithm-engineer", + name: "算法工程师", + company: "华为", + level: "专家", + salary: "25-45K", + resume: { personalInfo: { name: "孙算法" } }, + interviews: { + hookQuestions: [ + "推荐算法的演进?", + "深度学习在推荐中的应用?", + "算法效果如何评估?", + ], + allQuestions: [], + }, + }, + { + id: "quant-analyst", + name: "量化分析师", + company: "招商证券", + level: "高级", + salary: "25-40K", + resume: { personalInfo: { name: "周量化" } }, + interviews: { + hookQuestions: [ + "量化交易策略设计?", + "风险管理模型?", + "因子挖掘方法?", + ], + allQuestions: [], + }, + }, + { + id: "research-scientist", + name: "研究科学家", + company: "微软亚洲研究院", + level: "专家", + salary: "35-60K", + resume: { personalInfo: { name: "吴研究" } }, + interviews: { + hookQuestions: [ + "前沿技术研究方向?", + "学术成果转化?", + "研究方法论?", + ], + allQuestions: [], + }, + }, + { + id: "data-intern", + name: "数据分析实习生", + company: "京东", + level: "实习", + salary: "3-5K", + resume: { personalInfo: { name: "郑实习" } }, + interviews: { + hookQuestions: [ + "统计学基础知识?", + "Python数据分析库?", + "数据可视化经验?", + ], + allQuestions: [], + }, + }, + ], + }, + { + id: "product-design", + name: "产品设计", + positions: [ + { + id: "product-manager", + name: "产品经理", + company: "腾讯", + level: "高级", + salary: "20-35K", + resume: { personalInfo: { name: "陈产品" } }, + interviews: { + hookQuestions: [ + "如何进行需求分析?", + "产品规划方法论?", + "用户体验设计原则?", + ], + allQuestions: [], + }, + }, + { + id: "ui-designer", + name: "UI设计师", + company: "字节跳动", + level: "中级", + salary: "12-22K", + resume: { personalInfo: { name: "李设计" } }, + interviews: { + hookQuestions: [ + "设计系统如何建立?", + "色彩搭配原理?", + "移动端设计规范?", + ], + allQuestions: [], + }, + }, + { + id: "ux-designer", + name: "UX设计师", + company: "阿里巴巴", + level: "高级", + salary: "18-30K", + resume: { personalInfo: { name: "王体验" } }, + interviews: { + hookQuestions: [ + "用户研究方法?", + "交互设计原则?", + "可用性测试流程?", + ], + allQuestions: [], + }, + }, + { + id: "product-designer", + name: "产品设计师", + company: "美团", + level: "高级", + salary: "16-28K", + resume: { personalInfo: { name: "赵全能" } }, + interviews: { + hookQuestions: [ + "设计思维流程?", + "跨平台设计一致性?", + "设计与开发协作?", + ], + allQuestions: [], + }, + }, + { + id: "interaction-designer", + name: "交互设计师", + company: "网易", + level: "中级", + salary: "14-24K", + resume: { personalInfo: { name: "钱交互" } }, + interviews: { + hookQuestions: [ + "交互原型工具比较?", + "手势交互设计?", + "无障碍设计考虑?", + ], + allQuestions: [], + }, + }, + { + id: "visual-designer", + name: "视觉设计师", + company: "小米", + level: "中级", + salary: "10-18K", + resume: { personalInfo: { name: "孙视觉" } }, + interviews: { + hookQuestions: [ + "品牌视觉一致性?", + "图标设计规范?", + "视觉层次构建?", + ], + allQuestions: [], + }, + }, + { + id: "design-director", + name: "设计总监", + company: "华为", + level: "专家", + salary: "35-60K", + resume: { personalInfo: { name: "周总监" } }, + interviews: { + hookQuestions: [ + "设计团队管理?", + "设计质量控制?", + "设计文化建设?", + ], + allQuestions: [], + }, + }, + { + id: "motion-designer", + name: "动效设计师", + company: "蚂蚁金服", + level: "高级", + salary: "15-26K", + resume: { personalInfo: { name: "吴动效" } }, + interviews: { + hookQuestions: [ + "动效设计原则?", + "性能与美观平衡?", + "动效实现技术?", + ], + allQuestions: [], + }, + }, + { + id: "design-intern", + name: "设计实习生", + company: "滴滴", + level: "实习", + salary: "3-5K", + resume: { personalInfo: { name: "郑新人" } }, + interviews: { + hookQuestions: [ + "设计基础理论?", + "软件工具掌握?", + "作品集展示?", + ], + allQuestions: [], + }, + }, + ], + }, + { + id: "project-management", + name: "项目管理", + positions: [ + { + id: "project-manager", + name: "项目经理", + company: "华为", + level: "高级", + salary: "18-30K", + resume: { personalInfo: { name: "陈项目" } }, + interviews: { + hookQuestions: [ + "项目管理方法论?", + "风险管理策略?", + "团队沟通技巧?", + ], + allQuestions: [], + }, + }, + { + id: "scrum-master", + name: "Scrum Master", + company: "阿里巴巴", + level: "中级", + salary: "15-25K", + resume: { personalInfo: { name: "李敏捷" } }, + interviews: { + hookQuestions: [ + "Scrum框架实践?", + "敏捷转型挑战?", + "团队效能提升?", + ], + allQuestions: [], + }, + }, + { + id: "pmo", + name: "PMO专员", + company: "腾讯", + level: "中级", + salary: "12-20K", + resume: { personalInfo: { name: "王规范" } }, + interviews: { + hookQuestions: [ + "PMO职能定位?", + "项目治理体系?", + "流程标准化?", + ], + allQuestions: [], + }, + }, + { + id: "program-manager", + name: "项目群经理", + company: "字节跳动", + level: "专家", + salary: "28-45K", + resume: { personalInfo: { name: "赵项目群" } }, + interviews: { + hookQuestions: [ + "多项目协调?", + "资源优化配置?", + "战略目标分解?", + ], + allQuestions: [], + }, + }, + { + id: "business-analyst", + name: "业务分析师", + company: "美团", + level: "高级", + salary: "16-28K", + resume: { personalInfo: { name: "钱分析" } }, + interviews: { + hookQuestions: [ + "需求分析方法?", + "业务流程梳理?", + "干系人管理?", + ], + allQuestions: [], + }, + }, + { + id: "delivery-manager", + name: "交付经理", + company: "百度", + level: "高级", + salary: "20-32K", + resume: { personalInfo: { name: "孙交付" } }, + interviews: { + hookQuestions: [ + "交付质量保证?", + "客户满意度管理?", + "交付流程优化?", + ], + allQuestions: [], + }, + }, + { + id: "change-manager", + name: "变更管理专员", + company: "IBM", + level: "中级", + salary: "14-22K", + resume: { personalInfo: { name: "周变更" } }, + interviews: { + hookQuestions: [ + "变更管理流程?", + "组织变革策略?", + "变更阻力应对?", + ], + allQuestions: [], + }, + }, + { + id: "agile-coach", + name: "敏捷教练", + company: "微软", + level: "专家", + salary: "30-50K", + resume: { personalInfo: { name: "吴教练" } }, + interviews: { + hookQuestions: [ + "敏捷文化建设?", + "团队辅导方法?", + "持续改进机制?", + ], + allQuestions: [], + }, + }, + { + id: "pm-intern", + name: "项目管理实习生", + company: "京东", + level: "实习", + salary: "3-5K", + resume: { personalInfo: { name: "郑学习者" } }, + interviews: { + hookQuestions: [ + "项目管理基础?", + "沟通协调能力?", + "学习成长规划?", + ], + allQuestions: [], + }, + }, + ], + }, + ], + }, + + // 我的项目库数据 + projectLibrary: { + title: "我的项目库", + searchPlaceholder: "搜索", + projects: [ + { + id: 1, + title: "长安汽车车机测试项目案例", + subtitle: "物联网业务管理课程", + tags: ["物联网", "车机测试", "项目管理"], + details: { + overview: + "本项目旨在为长安汽车设计并实施一套完整的车机测试系统,通过物联网技术实现对车载设备的远程监控和管理。项目涵盖了从需求分析到系统部署的完整开发流程,采用微服务架构和云原生技术,确保系统的高可用性和可扩展性。项目团队运用敏捷开发方法,在6个月内成功交付了符合客户要求的产品。", + teamConfig: [ + { role: "项目经理", name: "XXXXXXXXX" }, + { role: "技术经理", name: "XXXXXXXXX" }, + { role: "前端开发", name: "XXXXXXXXX" }, + { role: "后端开发", name: "XXXXXXXXX" }, + { role: "测试工程师", name: "XXXXXXXXX" }, + { role: "运维工程师", name: "XXXXXXXXX" }, + ], + dataInterface: [ + { label: "服务器", value: "XXXXXXXXX" }, + { label: "中间件", value: "XXXXXXXXX" }, + { label: "数据库", value: "XXXXXXXXX" }, + ], + businessFlow: [ + { + title: "需求分析", + description: + "深入分析客户需求,确定项目范围和技术方案。与客户进行多轮沟通,明确功能需求和性能指标,形成详细的需求文档和技术架构设计。", + }, + { + title: "系统设计", + description: + "设计系统架构和数据库结构,制定开发计划。采用微服务架构,确保系统的模块化和可扩展性,同时制定详细的接口规范。", + }, + { title: "XXXXXXXXX", description: "XXXXXXXXXXXXXXXXXX" }, + { title: "XXXXXXXXX", description: "XXXXXXXXXXXXXXXXXX" }, + ], + keyTechnologies: [ + "基于微服务架构的系统设计,XXXXXXXXXXXXXXXXXX", + "XXXXXXXXXXXXX,XXXXXXXXXXXXXXXXXX", + "XXXXXXXXX,XXXXXXXXXXXXXXXXXX", + "XXXXXXXXX,XXXXXXXXXXXXXXXXXX", + ], + attachments: [ + { + name: "车机测试报告.pdf", + type: "pdf", + size: "2.5MB", + url: "/files/report.pdf", + }, + { + name: "项目需求文档.docx", + type: "word", + size: "1.8MB", + url: "/files/requirements.docx", + }, + { + name: "系统架构图.pptx", + type: "ppt", + size: "3.2MB", + url: "/files/architecture.pptx", + }, + { + name: "测试数据分析.xlsx", + type: "excel", + size: "4.1MB", + url: "/files/analysis.xlsx", + }, + ], + }, + }, + ...Array.from({ length: 17 }, (_, i) => ({ + id: i + 2, + title: `长安汽车车机测试项目案例`, + subtitle: `物联网业务管理课程`, + tags: ["物联网", "车机测试", "项目管理"], + details: { + overview: "项目概述数据加载中...", + teamConfig: [], + dataInterface: [], + businessFlow: [], + keyTechnologies: [], + attachments: [], + }, + })), + ], + }, + + // 1V1求职策略直播数据 + jobStrategyLive: { + courseId: "job-strategy-001", + title: "1V1定制求职策略直播指导", + teacher: "企业资深HR - 魏立慧", + teacherAvatar: "/api/placeholder/48/48", + startTime: new Date().toISOString(), + viewers: 1, + description: + "企业资深一线HR,专注于为求职者提供一对一的个性化指导。通过真实招聘视角,深入剖析个人优势与短板、传授面试技巧、规划职业定位与发展路径,帮助学生快速提升求职竞争力。求职策略以实用落地为核心,注重互动交流与角色定位,让学员在轻松氛围中获得直击痛点的求职策略。", + status: "live", + duration: "60分钟", + }, + + // 求职策略直播纪要 + jobStrategyNotes: { + title: "直播纪要", + keyPoints: [ + { + id: 1, + time: "10:05", + type: "strategy", + title: "个人优势挖掘与定位", + content: "通过深入分析你的专业背景、项目经验和个人特质,确定最适合的求职方向。魏老师强调要从企业用人需求角度出发,找到个人优势与市场需求的最佳匹配点,避免盲目投递简历。" + }, + { + id: 2, + time: "10:18", + type: "advice", + title: "简历包装的黄金法则", + content: "简历要讲故事,不是流水账。每一个项目经验都要用STAR法则(情景、任务、行动、结果)来描述,量化成果数据。技能部分要与目标岗位高度匹配,删除无关经历,确保HR在30秒内抓住重点。" + }, + { + id: 3, + time: "10:32", + type: "technique", + title: "面试谈薪的心理博弈", + content: "薪资谈判不是讨价还价,而是价值展示。要提前调研行业薪资水平,准备3个薪资区间,学会用非货币化福利进行缓冲。魏老师分享了HR心理:他们更愿意给有准备、有底气的候选人更高的薪资。" + }, + { + id: 4, + time: "10:45", + type: "strategy", + title: "面试流程全解析", + content: "从企业角度解读面试环节设置的真实意图:初面看基本素质、复面看专业能力、终面看文化匹配。每个环节的考核重点不同,要针对性准备。特别是行为面试题,要提前准备5-8个核心故事。" + }, + { + id: 5, + time: "10:58", + type: "timeline", + title: "求职时间管理策略", + content: "制定3阶段求职计划:第1-2周完成市场调研和简历优化,第3-5周集中投递和面试准备,第6-8周面试冲刺和offer选择。合理安排时间节点,避免拖延症和焦虑情绪影响求职效果。" + }, + { + id: 6, + time: "11:12", + type: "advice", + title: "职场新人的发展路径规划", + content: "入职后的前3年是职业发展的黄金期,要主动承担挑战性工作,建立个人品牌。魏老师建议制定'321职业规划':3年内成为业务骨干,2年内获得晋升机会,1年内建立核心竞争力。" + }, + { + id: 7, + time: "11:25", + type: "qa", + title: "热门问题答疑", + content: "针对学员提出的跳槽时机、职业转型、学历不足等问题,魏老师给出针对性建议。特别强调要用成长思维面对职场挑战,每一次求职都是个人品牌的重新包装和升级。" + } + ], + expertAdvices: [ + "投递简历要有针对性,避免海投浪费时间", + "面试前深度研究目标公司业务模式和企业文化", + "用STAR法则准备5-8个核心项目故事", + "薪资谈判要基于充分市场调研,准备3个薪资区间", + "简历要突出量化成果,用数据说话", + "建立个人职业品牌,持续输出专业内容", + "保持学习心态,跟上行业发展趋势" + ], + personalPlan: { + currentStatus: "求职准备阶段", + targetRole: "文旅产品策划师", + targetSalary: "6K-10K", + targetCompanies: ["携程", "马蜂窝", "途牛", "飞猪", "去哪儿"], + targetIndustries: ["在线旅游", "文化传媒", "主题乐园", "民宿酒店"], + strengthAreas: [ + "创意策划能力", + "用户体验设计", + "数据分析思维", + "跨部门协作经验", + "文案撰写能力" + ], + improvementAreas: [ + "行业深度认知", + "商业模式理解", + "项目管理技能", + "用户调研方法", + "营销推广策略" + ], + careerGoals: { + shortTerm: "3个月内获得心仪offer,快速适应新环境", + midTerm: "1年内成为产品策划骨干,主导重要项目", + longTerm: "3年内晋升为高级策划师,具备团队管理能力" + } + }, + interviewPreparation: { + commonQuestions: [ + { + question: "请介绍一下你最有成就感的项目经历", + tips: "用STAR法则,重点突出你的贡献和最终成果", + keywords: ["项目背景", "个人职责", "解决方案", "量化结果"] + }, + { + question: "为什么选择文旅行业?", + tips: "结合个人兴趣和行业发展趋势,体现深度思考", + keywords: ["行业前景", "个人匹配", "职业规划", "价值认同"] + }, + { + question: "如何看待文旅行业的未来发展?", + tips: "展现行业洞察力,结合实际案例分析", + keywords: ["数字化转型", "体验升级", "个性化需求", "可持续发展"] + } + ], + skillAssessment: { + technical: ["方案设计", "数据分析", "用户调研", "项目管理"], + soft: ["沟通协调", "创新思维", "抗压能力", "学习能力"], + industry: ["市场敏感度", "用户洞察", "运营思维", "成本控制"] + } + }, + upcomingActions: [ + { + id: 1, + task: "简历优化升级", + description: "根据魏老师建议,重点突出文旅项目经验,量化成果数据", + deadline: "3天内", + priority: "high", + status: "PENDING", + checklist: [ + "调整简历结构,突出核心竞争力", + "补充3个STAR格式的项目案例", + "优化技能关键词匹配度", + "完善自我评价和职业目标" + ] + }, + { + id: 2, + task: "准备3个项目案例详细介绍", + deadline: "下周二", + priority: "high", + status: "PENDING", + }, + { + id: 3, + task: "练习2分钟自我介绍", + deadline: "本周日", + priority: "medium", + status: "PENDING", + }, + { + id: 4, + task: "调研目标公司岗位要求", + deadline: "下周五", + priority: "medium", + status: "PENDING", + }, + ], + }, + + // 日历事件将在后面添加引用 +}; + +// 获取指定日期的事项 +export const getEventsForDate = (year, month, date) => { + // 格式化日期字符串 (YYYY-MM-DD) + const dateString = `${year}-${(month + 1).toString().padStart(2, "0")}-${date + .toString() + .padStart(2, "0")}`; + + // 从 calendarEvents 中筛选匹配的事项 + const matchingEvents = mockData.calendarEvents.filter((event) => { + const eventDate = event.startTime.split(" ")[0]; + return eventDate === dateString; + }); + + return matchingEvents; +}; + +// 生成日历数据的辅助函数 +export const generateCalendarDays = ( + calendarEvents = [], + targetDate = new Date(), + enhancedTasks = [] +) => { + const days = []; + const today = new Date(); + const currentMonth = targetDate.getMonth(); + const currentYear = targetDate.getFullYear(); + const firstDay = new Date(currentYear, currentMonth, 1); + const lastDay = new Date(currentYear, currentMonth + 1, 0); + const daysInMonth = lastDay.getDate(); + const startingDayOfWeek = firstDay.getDay(); + + // 添加前一个月的日期(灰色显示) + for (let i = startingDayOfWeek - 1; i >= 0; i--) { + const date = new Date(currentYear, currentMonth, -i); + days.push({ + date: date.getDate(), + isCurrentMonth: false, + isToday: false, + hasEvent: false, + }); + } + + // 添加当前月的日期 + for (let day = 1; day <= daysInMonth; day++) { + const isToday = + day === today.getDate() && + currentMonth === today.getMonth() && + currentYear === today.getFullYear(); + + // 检查是否有日历事件 + const hasCalendarEvent = calendarEvents.some((event) => { + const eventDate = event.startTime.split(" ")[0]; + return ( + eventDate === + `${currentYear}-${(currentMonth + 1).toString().padStart(2, "0")}-${day + .toString() + .padStart(2, "0")}` + ); + }); + + // 检查是否有任务事项 + const dateString = `${currentYear}-${(currentMonth + 1) + .toString() + .padStart(2, "0")}-${day.toString().padStart(2, "0")}`; + const hasTask = enhancedTasks.some((task) => task.date === dateString); + + days.push({ + date: day, + isCurrentMonth: true, + isToday, + hasEvent: hasCalendarEvent || hasTask, + }); + } + + // 添加下个月的日期(完整显示42天) + const totalCells = 42; + const remainingCells = totalCells - days.length; + for (let day = 1; day <= remainingCells; day++) { + days.push({ + date: day, + isCurrentMonth: false, + isToday: false, + hasEvent: false, + }); + } + + return days; +}; + +// 日历工具函数 +export const getMonthDays = (year, month) => { + const firstDay = new Date(year, month, 1); + const lastDay = new Date(year, month + 1, 0); + const daysInMonth = lastDay.getDate(); + const startingDayOfWeek = firstDay.getDay(); + + const days = []; + + // 添加上个月的末尾几天 + const prevMonth = month === 0 ? 11 : month - 1; + const prevYear = month === 0 ? year - 1 : year; + const prevMonthLastDay = new Date(prevYear, prevMonth + 1, 0).getDate(); + + for (let i = startingDayOfWeek - 1; i >= 0; i--) { + days.push({ + date: prevMonthLastDay - i, + month: prevMonth, + year: prevYear, + isCurrentMonth: false, + isToday: false, + }); + } + + // 添加当前月的天数 + const today = new Date(); + for (let day = 1; day <= daysInMonth; day++) { + const isToday = + today.getFullYear() === year && + today.getMonth() === month && + today.getDate() === day; + + days.push({ + date: day, + month: month, + year: year, + isCurrentMonth: true, + isToday, + }); + } + + // 补齐到42天(6周) + const nextMonth = month === 11 ? 0 : month + 1; + const nextYear = month === 11 ? year + 1 : year; + const remainingDays = 42 - days.length; + + for (let day = 1; day <= remainingDays; day++) { + days.push({ + date: day, + month: nextMonth, + year: nextYear, + isCurrentMonth: false, + isToday: false, + }); + } + + return days; +}; + +// 获取周的日期 +export const getWeekDays = (date) => { + const week = []; + const startOfWeek = new Date(date); + const day = startOfWeek.getDay(); + const diff = startOfWeek.getDate() - day; + startOfWeek.setDate(diff); + + for (let i = 0; i < 7; i++) { + const weekDay = new Date(startOfWeek); + weekDay.setDate(startOfWeek.getDate() + i); + week.push(weekDay); + } + + return week; +}; + +// 时间驱动的进度计算工具函数 +export const calculateStageProgress = (stage, currentDate = new Date()) => { + const startDate = new Date(stage.startDate); + const endDate = new Date(stage.endDate); + const current = new Date(currentDate); + + // 如果当前日期在阶段开始之前,进度为0% + if (current < startDate) { + return 0; + } + + // 如果当前日期在阶段结束之后,进度为100% + if (current >= endDate) { + return 100; + } + + // 计算当前阶段的进度百分比 + const totalDuration = endDate.getTime() - startDate.getTime(); + const elapsedDuration = current.getTime() - startDate.getTime(); + const progressPercentage = (elapsedDuration / totalDuration) * 100; + + // 限制在0%到100%之间 + return Math.max(0, Math.min(100, Math.round(progressPercentage * 100) / 100)); +}; + +// 获取当前活跃阶段 +export const getCurrentActiveStage = (stages, currentDate = new Date()) => { + const current = new Date(currentDate); + + for (const stage of stages) { + const startDate = new Date(stage.startDate); + const endDate = new Date(stage.endDate); + + if (current >= startDate && current < endDate) { + return stage; + } + } + + return null; +}; + +// 检查里程碑是否阻塞阶段切换 +export const checkMilestoneBlockage = ( + stages, + milestones, + currentDate = new Date() +) => { + const current = new Date(currentDate); + + for (const stage of stages) { + const endDate = new Date(stage.endDate); + + // 如果阶段时间已结束但状态不是completed + if (current >= endDate && stage.status !== "completed") { + // 检查是否有前置里程碑要求 + if (stage.prerequisiteMilestone) { + const milestone = milestones.find( + (m) => m.id === stage.prerequisiteMilestone + ); + if (milestone && milestone.status !== "completed") { + return { + isBlocked: true, + blockingMilestone: milestone, + stalledStage: stage, + message: `需要完成"${milestone.name}"才能进入下一阶段`, + }; + } + } + } + } + + return { isBlocked: false }; +}; + +// 动态更新学习阶段状态 - 修正版本,保持固定进度设置 +export const updateStageStatuses = (learningPlan = new Date()) => { + const { learningStages, milestones } = learningPlan; + + // 直接使用mockData中预设的状态和进度,不进行自动计算 + // 这样确保能力跃升阶段保持60%,后续阶段保持locked状态0% + const updatedStages = learningStages.map((stage) => { + // 对于教务原型,我们使用固定的状态和进度,不依赖时间计算 + let newStatus = stage.status; + let newProgressPercentage = stage.progressPercentage; + + // 如果有里程碑依赖且里程碑未完成,则保持locked状态 + if (stage.prerequisiteMilestone) { + const milestone = milestones.find( + (m) => m.id === stage.prerequisiteMilestone + ); + if (milestone && milestone.status !== "completed") { + newStatus = "locked"; + newProgressPercentage = 0; + } + } + + return { + ...stage, + status: newStatus, + progressPercentage: newProgressPercentage, + }; + }); + + return updatedStages; +}; + +// 获取整体学习进度(用于原有的进度条显示) +export const getOverallProgress = (stages) => { + const totalDuration = stages.reduce((sum, stage) => sum + stage.duration, 0); + let completedDuration = 0; + + for (const stage of stages) { + if (stage.status === "completed") { + completedDuration += stage.duration; + } else if (stage.status === "in_progress") { + completedDuration += (stage.duration * stage.progressPercentage) / 100; + break; // 当前阶段之后的不计算 + } else { + break; // 未开始的阶段不计算 + } + } + + return (completedDuration / totalDuration) * 100; +}; + +// 面试直播间数据 +mockData.interviewLiveRoom = { + videoUrl: "/videos/interview-demo.mp4", + position: "物联网实施工程师", + company: "苏州信息科技有限公司", + interviewTime: "2025-07-16 14:00", + round: "第一轮技术面试", + duration: "45分钟", + interviewer: { + name: "张建华", + title: "技术总监", + company: "苏州信息科技有限公司", + avatar: "/images/experts/expert1.jpg", + }, + tips: [ + "准备好简历和项目经历介绍", + "了解公司业务和岗位要求", + "准备技术相关问题的回答", + "保持良好的沟通状态", + ], + interviewNotes: { + title: "面试笔记", + keyPoints: [ + { + id: 1, + time: "02:15", + type: "question", + title: "自我介绍", + content: + "请简单介绍一下你的教育背景和项目经历,重点说明物联网相关的项目经验。", + }, + { + id: 2, + time: "08:30", + type: "answer", + title: "项目经验回答", + content: + "介绍了智慧农业物联网系统项目,包括传感器部署、数据采集、云平台搭建等关键技术点。", + }, + { + id: 3, + time: "15:45", + type: "question", + title: "MQTT协议理解", + content: + "请详细说明MQTT协议的特点,以及在物联网项目中如何选择合适的QoS级别?", + }, + { + id: 4, + time: "22:10", + type: "suggestion", + title: "技术深度建议", + content: + "建议深入学习边缘计算相关技术,了解EdgeX Foundry等开源框架,这对物联网实施工程师很重要。", + }, + { + id: 5, + time: "28:30", + type: "keypoint", + title: "岗位核心要求", + content: + "强调了现场实施能力的重要性,需要具备良好的客户沟通能力和问题解决能力。", + }, + { + id: 6, + time: "35:20", + type: "question", + title: "技术选型问题", + content: + "在物联网项目中,如何选择合适的通信协议?请比较LoRa、NB-IoT、4G等技术的应用场景。", + }, + { + id: 7, + time: "42:00", + type: "keypoint", + title: "面试总结", + content: + "整体表现良好,技术基础扎实,建议加强实际项目经验积累,特别是大型项目的实施经验。", + }, + ], + }, +}; + +// 生成Dashboard课程数据的函数(需要在courseLiveList定义后调用) +const generateDashboardCourses = (courseLiveList) => { + const today = new Date(); + today.setHours(0, 0, 0, 0); + + // 获取所有课程 + const allCourses = []; + courseLiveList.forEach(unit => { + unit.courses.forEach(course => { + allCourses.push({ + ...course, + unitName: unit.unitName + }); + }); + }); + + // 根据日期排序 + allCourses.sort((a, b) => new Date(a.date) - new Date(b.date)); + + // 查找今天的课程 + const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; + const todaysCourses = allCourses.filter(course => course.date === todayStr); + + // 查找下一节课(今天之后的第一节课) + const nextCourse = allCourses.find(course => new Date(course.date) > today); + + // 查找最近的课程(最近7天内已完成的课程) + const sevenDaysAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000); + const recentCourses = allCourses + .filter(course => { + const courseDate = new Date(course.date); + return courseDate < today && courseDate >= sevenDaysAgo; + }) + .slice(-3) // 取最近3个 + .reverse(); // 按时间倒序 + + // 统计数据 + const completedCourses = allCourses.filter(course => course.completed).length; + const totalCourses = allCourses.length; + const overallProgress = Math.round((completedCourses / totalCourses) * 100); + + return { + todaysCourses: todaysCourses.map(course => ({ + id: course.courseId, + courseName: course.courseName, + teacher: course.teacherName, + time: "20:00-21:00", // 固定时间 + location: "线上直播", + status: course.current ? "直播中" : "待开始", + unit: course.unitName + })), + nextCourse: nextCourse ? { + id: nextCourse.courseId, + courseName: nextCourse.courseName, + teacher: nextCourse.teacherName, + date: nextCourse.date, + time: "20:00", + location: "线上直播", + unit: nextCourse.unitName + } : null, + recentCourses: recentCourses.map(course => ({ + id: course.courseId, + courseName: course.courseName, + date: course.date, + teacher: course.teacherName, + unit: course.unitName + })) + }; +}; + +// 添加Dashboard主页数据(先定义结构,稍后填充数据) +mockData.dashboardStatistics = { + // 概览数据(临时数据,稍后更新) + overview: { + totalCourses: 100, + completedCourses: 80, + ongoingCourses: 2, + overallProgress: 80, + totalCredits: 99, + currentRank: 1, + }, + + // 课程数据(临时数据,稍后更新) + courses: { + todaysCourses: [], + nextCourse: null, + recentCourses: [] + }, + + // 任务数据(临时数据,稍后更新) + tasks: { + todayTasks: [], + weekTasks: [], + allTasks: [] }, // 排名数据 @@ -6133,105 +12027,1708 @@ mockData.profileOverview = { // 课程直播间的课程列表数据(从CSV生成) mockData.courseLiveList = [ { - unitId: "unit1", - unitName: "岗位体系认知", - courses: [ - { courseId: "c1-1", courseName: "教育体系认知", teacherName: "刘杰", date: "2025-03-04", completed: true, current: false }, - { courseId: "c1-2", courseName: "现代文旅类企业的管理体系", teacherName: "刘杰", date: "2025-03-05", completed: true, current: false }, - { courseId: "c1-3", courseName: "专科生的职业规划", teacherName: "刘杰", date: "2025-03-06", completed: true, current: false } + "unitId": "unit1", + "unitName": "岗位体系认知", + "courses": [ + { + "courseId": "c1-1", + "courseName": "教育体系认知", + "teacherName": "刘杰", + "date": "2025-03-04", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c1-2", + "courseName": "现代文旅类企业的管理体系", + "teacherName": "刘杰", + "date": "2025-03-05", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c1-3", + "courseName": "专科生的职业规划", + "teacherName": "刘杰", + "date": "2025-03-06", + "completed": true, + "current": false, + "upcoming": false + } ] }, { - unitId: "unit2", - unitName: "产业认知课", - courses: [ - { courseId: "c2-1", courseName: "文旅产业认知课", teacherName: "刘杰", date: "2025-03-11", completed: true, current: false }, - { courseId: "c2-2", courseName: "行业详解:旅游行业", teacherName: "刘杰", date: "2025-03-12", completed: true, current: false }, - { courseId: "c2-3", courseName: "行业详解:酒店与民宿行业", teacherName: "刘杰", date: "2025-03-13", completed: true, current: false }, - { courseId: "c2-4", courseName: "行业详解:活动与会展行业", teacherName: "刘杰", date: "2025-03-18", completed: true, current: false }, - { courseId: "c2-5", courseName: "行业详解:文化服务行业", teacherName: "刘杰", date: "2025-03-19", completed: true, current: false } + "unitId": "unit2", + "unitName": "产业认知课", + "courses": [ + { + "courseId": "c2-1", + "courseName": "文旅产业认知课", + "teacherName": "刘杰", + "date": "2025-03-11", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c2-2", + "courseName": "行业详解:旅游行业", + "teacherName": "刘杰", + "date": "2025-03-12", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c2-3", + "courseName": "行业详解:酒店与民宿行业", + "teacherName": "刘杰", + "date": "2025-03-13", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c2-4", + "courseName": "行业详解:活动与会展行业", + "teacherName": "刘杰", + "date": "2025-03-18", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c2-5", + "courseName": "行业详解:文化服务行业", + "teacherName": "刘杰", + "date": "2025-03-19", + "completed": true, + "current": false, + "upcoming": false + } ] }, { - unitId: "unit3", - unitName: "旅游产业全景与文旅基础知识", - courses: [ - { courseId: "c3-1", courseName: "现代文旅产业生态图谱", teacherName: "刘杰", date: "2025-03-20", completed: true, current: false }, - { courseId: "c3-2", courseName: "文旅政策法规与风险管理", teacherName: "刘杰", date: "2025-03-25", completed: true, current: false }, - { courseId: "c3-3", courseName: "旅游产品与旅游资源", teacherName: "刘杰", date: "2025-03-26", completed: true, current: false }, - { courseId: "c3-4", courseName: "游客行为心理学基础", teacherName: "刘杰", date: "2025-03-27", completed: true, current: false }, - { courseId: "c3-5", courseName: "可持续旅游发展", teacherName: "刘杰", date: "2025-04-01", completed: true, current: false }, - { courseId: "c3-6", courseName: "单元小结", teacherName: "刘杰", date: "2025-04-02", completed: true, current: false } + "unitId": "unit3", + "unitName": "旅游产业全景与文旅基础知识", + "courses": [ + { + "courseId": "c3-1", + "courseName": "现代文旅产业生态图谱", + "teacherName": "刘杰", + "date": "2025-03-20", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c3-2", + "courseName": "文旅政策法规与风险管理", + "teacherName": "刘杰", + "date": "2025-03-25", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c3-3", + "courseName": "旅游产品与旅游资源", + "teacherName": "刘杰", + "date": "2025-03-26", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c3-4", + "courseName": "游客行为心理学基础", + "teacherName": "刘杰", + "date": "2025-03-27", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c3-5", + "courseName": "可持续旅游发展", + "teacherName": "刘杰", + "date": "2025-04-01", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c3-6", + "courseName": "单元小结", + "teacherName": "刘杰", + "date": "2025-04-02", + "completed": true, + "current": false, + "upcoming": false + } ] }, { - unitId: "unit4", - unitName: "文旅服务:形象、沟通与体验的融合艺术", - courses: [ - { courseId: "c4-1", courseName: "文旅场景职业形象IP塑造", teacherName: "郭建辉", date: "2025-04-03", completed: true, current: false }, - { courseId: "c4-2", courseName: "情境化服务体验设计", teacherName: "郭建辉", date: "2025-04-08", completed: true, current: false }, - { courseId: "c4-3", courseName: "政务商务接待专项礼仪", teacherName: "郭建辉", date: "2025-04-09", completed: true, current: false }, - { courseId: "c4-4", courseName: "文旅服务中的非语言表达", teacherName: "郭建辉", date: "2025-04-10", completed: true, current: false }, - { courseId: "c4-5", courseName: "服务沟通技巧与表达训练", teacherName: "郭建辉", date: "2025-04-15", completed: true, current: false }, - { courseId: "c4-6", courseName: "多元文化下的服务表达差异", teacherName: "郭建辉", date: "2025-04-16", completed: true, current: false }, - { courseId: "c4-7", courseName: "单元小结", teacherName: "郭建辉", date: "2025-04-17", completed: true, current: false } + "unitId": "unit4", + "unitName": "文旅服务:形象、沟通与体验的融合艺术", + "courses": [ + { + "courseId": "c4-1", + "courseName": "文旅场景职业形象IP塑造", + "teacherName": "郭建辉", + "date": "2025-04-03", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c4-2", + "courseName": "情境化服务体验设计", + "teacherName": "郭建辉", + "date": "2025-04-08", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c4-3", + "courseName": "政务商务接待专项礼仪", + "teacherName": "郭建辉", + "date": "2025-04-09", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c4-4", + "courseName": "文旅服务中的非语言表达", + "teacherName": "郭建辉", + "date": "2025-04-10", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c4-5", + "courseName": "服务沟通技巧与表达训练", + "teacherName": "郭建辉", + "date": "2025-04-15", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c4-6", + "courseName": "多元文化下的服务表达差异", + "teacherName": "郭建辉", + "date": "2025-04-16", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c4-7", + "courseName": "单元小结", + "teacherName": "郭建辉", + "date": "2025-04-17", + "completed": true, + "current": false, + "upcoming": false + } ] }, { - unitId: "unit7", - unitName: "AIGC人工智能生成内容", - courses: [ - { courseId: "c7-1", courseName: "单元小结", teacherName: "赵志强", date: "2025-06-17", completed: true, current: false }, - { courseId: "c7-2", courseName: "AIGC发展简史与基本逻辑", teacherName: "赵志强", date: "2025-09-02", completed: false, current: true }, - { courseId: "c7-3", courseName: "AIGC的基本概念与各领域的应用", teacherName: "赵志强", date: "2025-09-03", completed: false, current: false }, - { courseId: "c7-4", courseName: "AIGC语言模型:chatgpt的灵活应...", teacherName: "赵志强", date: "2025-09-04", completed: false, current: false }, - { courseId: "c7-5", courseName: "AIGC生成内容的版权问题与合规使用", teacherName: "刘杰", date: "2025-09-09", completed: false, current: false }, - { courseId: "c7-6", courseName: "AIGC图像生成模型:Stable Di...", teacherName: "刘杰", date: "2025-09-10", completed: false, current: false }, - { courseId: "c7-7", courseName: "AIGC图像生成模型:Stable Di...", teacherName: "刘杰", date: "2025-09-11", completed: false, current: false }, - { courseId: "c7-8", courseName: "AIGC图像生成模型:Stable Di...", teacherName: "刘杰", date: "2025-09-16", completed: false, current: false }, - { courseId: "c7-9", courseName: "AIGC图像生成模型:Stable Di...", teacherName: "刘杰", date: "2025-09-17", completed: false, current: false }, - { courseId: "c7-10", courseName: "AIGC视频应用:音视频生成与AI自动剪...", teacherName: "赵志强", date: "2025-09-18", completed: false, current: false }, - { courseId: "c7-11", courseName: "AIGC视频应用:音视频生成与AI自动剪...", teacherName: "赵志强", date: "2025-09-23", completed: false, current: false }, - { courseId: "c7-12", courseName: "AI词曲创作:suno", teacherName: "赵志强", date: "2025-09-24", completed: false, current: false }, - { courseId: "c7-13", courseName: "AI词曲创作:suno", teacherName: "赵志强", date: "2025-09-25", completed: false, current: false }, - { courseId: "c7-14", courseName: "单元小结", teacherName: "赵志强", date: "2025-09-30", completed: false, current: false } + "unitId": "unit5", + "unitName": "文旅与供应链基础", + "courses": [ + { + "courseId": "c5-1", + "courseName": "供应链管理的内容", + "teacherName": "赵志强", + "date": "2025-04-22", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-2", + "courseName": "文旅资源调度", + "teacherName": "赵志强", + "date": "2025-04-23", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-3", + "courseName": "文旅产品全生命周期管理", + "teacherName": "赵志强", + "date": "2025-04-24", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-4", + "courseName": "文旅商品供应链", + "teacherName": "赵志强", + "date": "2025-04-29", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-5", + "courseName": "住宿业资源协同", + "teacherName": "赵志强", + "date": "2025-04-30", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-6", + "courseName": "小型文旅项目的供应链角色模拟", + "teacherName": "赵志强", + "date": "2025-05-01", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-7", + "courseName": "文旅项目供应链特征", + "teacherName": "赵志强", + "date": "2025-05-06", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-8", + "courseName": "文旅供应链中的B2B与B2C模式", + "teacherName": "赵志强", + "date": "2025-05-07", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c5-9", + "courseName": "单元小结", + "teacherName": "赵志强", + "date": "2025-05-08", + "completed": true, + "current": false, + "upcoming": false + } ] }, { - unitId: "unit9", - unitName: "活动策划基础", - courses: [ - { courseId: "c9-1", courseName: "活动类型与功能认知", teacherName: "郭建辉", date: "2025-11-18", completed: false, current: false }, - { courseId: "c9-2", courseName: "受众定位与主题创意方法", teacherName: "郭建辉", date: "2025-11-19", completed: false, current: false }, - { courseId: "c9-3", courseName: "活动宣传渠道与推广方式", teacherName: "郭建辉", date: "2025-11-20", completed: false, current: false }, - { courseId: "c9-4", courseName: "活动宣传渠道与推广方式", teacherName: "郭建辉", date: "2025-11-25", completed: false, current: false }, - { courseId: "c9-5", courseName: "活动文案写作与表达技巧", teacherName: "郭建辉", date: "2025-11-26", completed: false, current: false }, - { courseId: "c9-6", courseName: "活动文案写作与表达技巧", teacherName: "郭建辉", date: "2025-11-27", completed: false, current: false }, - { courseId: "c9-7", courseName: "活动流程设计与时间节点把控", teacherName: "郭建辉", date: "2025-12-02", completed: false, current: false }, - { courseId: "c9-8", courseName: "活动流程设计与时间节点把控", teacherName: "郭建辉", date: "2025-12-03", completed: false, current: false }, - { courseId: "c9-9", courseName: "活动场地选择与布置基础", teacherName: "郭建辉", date: "2025-12-04", completed: false, current: false }, - { courseId: "c9-10", courseName: "活动预算与资源统筹", teacherName: "赵志强", date: "2025-12-09", completed: false, current: false }, - { courseId: "c9-11", courseName: "应急预案与活动风险管理", teacherName: "赵志强", date: "2025-12-10", completed: false, current: false }, - { courseId: "c9-12", courseName: "活动复盘报告撰写与数据分析方法", teacherName: "赵志强", date: "2025-12-11", completed: false, current: false }, - { courseId: "c9-13", courseName: "活动复盘报告撰写与数据分析方法", teacherName: "赵志强", date: "2025-12-16", completed: false, current: false }, - { courseId: "c9-14", courseName: "单元小结", teacherName: "赵志强", date: "2025-12-17", completed: false, current: false } + "unitId": "unit6", + "unitName": "商业设计基础", + "courses": [ + { + "courseId": "c6-1", + "courseName": "现代设计行业的发展现状", + "teacherName": "赵志强", + "date": "2025-05-13", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-2", + "courseName": "设计基础", + "teacherName": "赵志强", + "date": "2025-05-14", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-3", + "courseName": "字体设计与中文字体情绪表达", + "teacherName": "赵志强", + "date": "2025-05-15", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-4", + "courseName": "商业平面色彩搭配", + "teacherName": "赵志强", + "date": "2025-05-20", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-5", + "courseName": "平面设计构图", + "teacherName": "赵志强", + "date": "2025-05-21", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-6", + "courseName": "图像编辑工具:Photoshop", + "teacherName": "赵志强", + "date": "2025-05-22", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-7", + "courseName": "图像编辑工具:Photoshop", + "teacherName": "赵志强", + "date": "2025-05-27", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-8", + "courseName": "矢量与标志设计:Illustrator", + "teacherName": "赵志强", + "date": "2025-05-28", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-9", + "courseName": "矢量与标志设计:Illustrator", + "teacherName": "赵志强", + "date": "2025-05-29", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-10", + "courseName": "快速设计工具使用:Canva", + "teacherName": "赵志强", + "date": "2025-06-03", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-11", + "courseName": "快速设计工具使用:Canva", + "teacherName": "赵志强", + "date": "2025-06-04", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-12", + "courseName": "移动端视觉原型设计:Figma", + "teacherName": "赵志强", + "date": "2025-06-05", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-13", + "courseName": "移动端视觉原型设计:Figma", + "teacherName": "赵志强", + "date": "2025-06-10", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-14", + "courseName": "视频剪辑入门:剪映", + "teacherName": "赵志强", + "date": "2025-06-11", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-15", + "courseName": "视频剪辑入门:剪映", + "teacherName": "赵志强", + "date": "2025-06-12", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c6-16", + "courseName": "单元小结", + "teacherName": "赵志强", + "date": "2025-06-17", + "completed": true, + "current": false, + "upcoming": false + } ] }, { - unitId: "unit10", - unitName: "智慧文旅应用", - courses: [ - { courseId: "c10-1", courseName: "智慧文旅概论", teacherName: "赵志强", date: "2025-12-18", completed: false, current: false }, - { courseId: "c10-2", courseName: "OTA平台运营", teacherName: "赵志强", date: "2025-12-23", completed: false, current: false }, - { courseId: "c10-3", courseName: "票务分销平台", teacherName: "刘杰", date: "2025-12-24", completed: false, current: false }, - { courseId: "c10-4", courseName: "景区智能导览系统", teacherName: "赵志强", date: "2025-12-25", completed: false, current: false }, - { courseId: "c10-5", courseName: "智能导览设备运用", teacherName: "刘杰", date: "2025-12-30", completed: false, current: false }, - { courseId: "c10-6", courseName: "智慧酒店/智慧景区体验场景模拟", teacherName: "刘杰", date: "2025-12-31", completed: false, current: false }, - { courseId: "c10-7", courseName: "单元小结", teacherName: "刘杰", date: "2026-01-01", completed: false, current: false } + "unitId": "unit7", + "unitName": "AIGC人工智能生成内容", + "courses": [ + { + "courseId": "c7-1", + "courseName": "AIGC发展简史与基本逻辑", + "teacherName": "赵志强", + "date": "2025-09-02", + "completed": true, + "current": false, + "upcoming": false + }, + { + "courseId": "c7-2", + "courseName": "AIGC的基本概念与各领域的应用", + "teacherName": "赵志强", + "date": "2025-09-03", + "completed": false, + "current": true, + "upcoming": false + }, + { + "courseId": "c7-3", + "courseName": "AIGC语言模型:chatgpt的灵活应...", + "teacherName": "赵志强", + "date": "2025-09-04", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-4", + "courseName": "AIGC生成内容的版权问题与合规使用", + "teacherName": "刘杰", + "date": "2025-09-09", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-5", + "courseName": "AIGC图像生成模型:Stable Di...", + "teacherName": "刘杰", + "date": "2025-09-10", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-6", + "courseName": "AIGC图像生成模型:Stable Di...", + "teacherName": "刘杰", + "date": "2025-09-11", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-7", + "courseName": "AIGC图像生成模型:Stable Di...", + "teacherName": "刘杰", + "date": "2025-09-16", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-8", + "courseName": "AIGC图像生成模型:Stable Di...", + "teacherName": "刘杰", + "date": "2025-09-17", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-9", + "courseName": "AIGC视频应用:音视频生成与AI自动剪...", + "teacherName": "赵志强", + "date": "2025-09-18", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-10", + "courseName": "AIGC视频应用:音视频生成与AI自动剪...", + "teacherName": "赵志强", + "date": "2025-09-23", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-11", + "courseName": "AI词曲创作:suno", + "teacherName": "赵志强", + "date": "2025-09-24", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-12", + "courseName": "AI词曲创作:suno", + "teacherName": "赵志强", + "date": "2025-09-25", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c7-13", + "courseName": "单元小结", + "teacherName": "赵志强", + "date": "2025-09-30", + "completed": false, + "current": false, + "upcoming": true + } + ] + }, + { + "unitId": "unit8", + "unitName": " 全栈新媒体运营赋能文旅营销", + "courses": [ + { + "courseId": "c8-1", + "courseName": "新媒体应用传播学", + "teacherName": "赵志强", + "date": "2025-10-01", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-2", + "courseName": "新媒体故事结构入门", + "teacherName": "赵志强", + "date": "2025-10-02", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-3", + "courseName": "新媒体产品策划", + "teacherName": "赵志强", + "date": "2025-10-07", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-4", + "courseName": "平台账号经营与内容赛道", + "teacherName": "赵志强", + "date": "2025-10-08", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-5", + "courseName": "各平台变现方式与具体方法", + "teacherName": "赵志强", + "date": "2025-10-09", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-6", + "courseName": "内容运营:短视频的制作工具", + "teacherName": "赵志强", + "date": "2025-10-14", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-7", + "courseName": "内容运营:短视频的制作工具", + "teacherName": "赵志强", + "date": "2025-10-15", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-8", + "courseName": "内容运营:短视频的制作工具", + "teacherName": "赵志强", + "date": "2025-10-16", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-9", + "courseName": "内容运营:短视频的制作工具", + "teacherName": "赵志强", + "date": "2025-10-21", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-10", + "courseName": "内容运营:短视频制作内容对标", + "teacherName": "刘杰", + "date": "2025-10-22", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-11", + "courseName": "内容运营:短视频制作内容对标", + "teacherName": "刘杰", + "date": "2025-10-23", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-12", + "courseName": "直播运营:直播间的搭建", + "teacherName": "刘杰", + "date": "2025-10-28", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-13", + "courseName": "直播运营:直播间的搭建", + "teacherName": "刘杰", + "date": "2025-10-29", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-14", + "courseName": "品牌运营:当地文化IP数字化传播", + "teacherName": "刘杰", + "date": "2025-10-30", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-15", + "courseName": "品牌运营:当地文化IP数字化传播", + "teacherName": "刘杰", + "date": "2025-11-04", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-16", + "courseName": "品牌运营:跨界营销创新", + "teacherName": "赵志强", + "date": "2025-11-05", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-17", + "courseName": "品牌运营:跨界营销创新", + "teacherName": "赵志强", + "date": "2025-11-06", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-18", + "courseName": "私域运营:私域流量池的运营", + "teacherName": "赵志强", + "date": "2025-11-11", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-19", + "courseName": "私域运营:私域流量池的运营", + "teacherName": "赵志强", + "date": "2025-11-12", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c8-20", + "courseName": "单元小结", + "teacherName": "赵志强", + "date": "2025-11-13", + "completed": false, + "current": false, + "upcoming": true + } + ] + }, + { + "unitId": "unit9", + "unitName": "活动策划基础", + "courses": [ + { + "courseId": "c9-1", + "courseName": "活动类型与功能认知", + "teacherName": "郭建辉", + "date": "2025-11-18", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-2", + "courseName": "受众定位与主题创意方法", + "teacherName": "郭建辉", + "date": "2025-11-19", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-3", + "courseName": "活动宣传渠道与推广方式", + "teacherName": "郭建辉", + "date": "2025-11-20", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-4", + "courseName": "活动宣传渠道与推广方式", + "teacherName": "郭建辉", + "date": "2025-11-25", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-5", + "courseName": "活动文案写作与表达技巧", + "teacherName": "郭建辉", + "date": "2025-11-26", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-6", + "courseName": "活动文案写作与表达技巧", + "teacherName": "郭建辉", + "date": "2025-11-27", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-7", + "courseName": "活动流程设计与时间节点把控", + "teacherName": "郭建辉", + "date": "2025-12-02", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-8", + "courseName": "活动流程设计与时间节点把控", + "teacherName": "郭建辉", + "date": "2025-12-03", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-9", + "courseName": "活动场地选择与布置基础", + "teacherName": "郭建辉", + "date": "2025-12-04", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-10", + "courseName": "活动预算与资源统筹", + "teacherName": "赵志强", + "date": "2025-12-09", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-11", + "courseName": "应急预案与活动风险管理", + "teacherName": "赵志强", + "date": "2025-12-10", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-12", + "courseName": "活动复盘报告撰写与数据分析方法", + "teacherName": "赵志强", + "date": "2025-12-11", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-13", + "courseName": "活动复盘报告撰写与数据分析方法", + "teacherName": "赵志强", + "date": "2025-12-16", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c9-14", + "courseName": "单元小结", + "teacherName": "赵志强", + "date": "2025-12-17", + "completed": false, + "current": false, + "upcoming": true + } + ] + }, + { + "unitId": "unit10", + "unitName": "智慧文旅应用", + "courses": [ + { + "courseId": "c10-1", + "courseName": "智慧文旅概论", + "teacherName": "赵志强", + "date": "2025-12-18", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c10-2", + "courseName": "OTA平台运营", + "teacherName": "赵志强", + "date": "2025-12-23", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c10-3", + "courseName": "票务分销平台", + "teacherName": "刘杰", + "date": "2025-12-24", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c10-4", + "courseName": "景区智能导览系统", + "teacherName": "赵志强", + "date": "2025-12-25", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c10-5", + "courseName": "智能导览设备运用", + "teacherName": "刘杰", + "date": "2025-12-30", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c10-6", + "courseName": "智慧酒店/智慧景区体验场景模拟", + "teacherName": "刘杰", + "date": "2025-12-31", + "completed": false, + "current": false, + "upcoming": true + }, + { + "courseId": "c10-7", + "courseName": "单元小结", + "teacherName": "刘杰", + "date": "2026-01-01", + "completed": false, + "current": false, + "upcoming": true + } ] } ]; +// 在courseLiveList定义后,更新dashboardStatistics的课程和任务数据 +const dashboardCourseData = generateDashboardCourses(mockData.courseLiveList); + +// 更新课程数据 +mockData.dashboardStatistics.courses = { + todaysCourses: dashboardCourseData.todaysCourses, + nextCourse: dashboardCourseData.nextCourse, + recentCourses: dashboardCourseData.recentCourses +}; + +// 更新任务数据 +(() => { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`; + + // 获取今天的课程作为今日任务 + const todayTasks = dashboardCourseData.todaysCourses.map((course, index) => ({ + id: index + 1, + title: `完成${course.courseName}课程学习`, + courseName: course.courseName, + deadline: "今天 21:00", + priority: index === 0 ? "high" : index === 1 ? "medium" : "low", + status: course.status === "直播中" ? "IN_PROGRESS" : "PENDING", + teacher: course.teacher, + unit: course.unit + })); + + // 获取未来7天的课程作为周任务 + const futureDate = new Date(today.getTime() + 7 * 24 * 60 * 60 * 1000); + const weekTasks = []; + mockData.courseLiveList.forEach(unit => { + unit.courses.forEach(course => { + const courseDate = new Date(course.date); + if (courseDate > today && courseDate <= futureDate) { + weekTasks.push({ + id: weekTasks.length + 1, + title: `预习${course.courseName}`, + date: course.date, + status: "PENDING", + courseName: course.courseName, + teacher: course.teacherName, + unit: unit.unitName + }); + } + }); + }); + + // 生成allTasks - 基于所有课程数据 + const allTasks = []; + let taskId = 1; + + mockData.courseLiveList.forEach(unit => { + unit.courses.forEach(course => { + const courseDate = new Date(course.date); + const status = course.completed ? 'COMPLETED' : + course.current ? 'IN_PROGRESS' : + courseDate > today ? 'PENDING' : 'COMPLETED'; + + allTasks.push({ + id: taskId++, + title: `完成${course.courseName}课程学习`, + date: course.date, + time: '20:00', + type: 'HOMEWORK', + courseName: course.courseName, + status: status, + teacherName: course.teacherName, + teacherAvatar: 'https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp', + duration: '1小时', + unit: unit.unitName + }); + }); + }); + + mockData.dashboardStatistics.tasks = { + todayTasks: [ + { + "id": 48, + "title": "完成AIGC的基本概念与各领域的应用课程学习", + "courseName": "AIGC的基本概念与各领域的应用", + "date": "2025-09-03", + "deadline": "2025-09-03 21:00", + "priority": "high", + "status": "IN_PROGRESS", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + } + ], + weekTasks: [ + { + "id": 47, + "title": "完成AIGC发展简史与基本逻辑课程学习", + "courseName": "AIGC发展简史与基本逻辑", + "date": "2025-09-02", + "deadline": "2025-09-02 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 48, + "title": "完成AIGC的基本概念与各领域的应用课程学习", + "courseName": "AIGC的基本概念与各领域的应用", + "date": "2025-09-03", + "deadline": "2025-09-03 21:00", + "priority": "high", + "status": "IN_PROGRESS", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 49, + "title": "完成AIGC语言模型:chatgpt的灵活应...课程学习", + "courseName": "AIGC语言模型:chatgpt的灵活应...", + "date": "2025-09-04", + "deadline": "2025-09-04 21:00", + "priority": "medium", + "status": "PENDING", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + } + ], + allTasks: [ + { + "id": 1, + "title": "完成教育体系认知课程学习", + "courseName": "教育体系认知", + "date": "2025-03-04", + "deadline": "2025-03-04 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "岗位体系认知", + "type": "course" + }, + { + "id": 2, + "title": "完成现代文旅类企业的管理体系课程学习", + "courseName": "现代文旅类企业的管理体系", + "date": "2025-03-05", + "deadline": "2025-03-05 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "岗位体系认知", + "type": "course" + }, + { + "id": 3, + "title": "完成专科生的职业规划课程学习", + "courseName": "专科生的职业规划", + "date": "2025-03-06", + "deadline": "2025-03-06 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "岗位体系认知", + "type": "course" + }, + { + "id": 4, + "title": "完成文旅产业认知课课程学习", + "courseName": "文旅产业认知课", + "date": "2025-03-11", + "deadline": "2025-03-11 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 5, + "title": "完成行业详解:旅游行业课程学习", + "courseName": "行业详解:旅游行业", + "date": "2025-03-12", + "deadline": "2025-03-12 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 6, + "title": "完成行业详解:酒店与民宿行业课程学习", + "courseName": "行业详解:酒店与民宿行业", + "date": "2025-03-13", + "deadline": "2025-03-13 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 7, + "title": "完成行业详解:活动与会展行业课程学习", + "courseName": "行业详解:活动与会展行业", + "date": "2025-03-18", + "deadline": "2025-03-18 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 8, + "title": "完成行业详解:文化服务行业课程学习", + "courseName": "行业详解:文化服务行业", + "date": "2025-03-19", + "deadline": "2025-03-19 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "产业认知课", + "type": "course" + }, + { + "id": 9, + "title": "完成现代文旅产业生态图谱课程学习", + "courseName": "现代文旅产业生态图谱", + "date": "2025-03-20", + "deadline": "2025-03-20 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 10, + "title": "完成文旅政策法规与风险管理课程学习", + "courseName": "文旅政策法规与风险管理", + "date": "2025-03-25", + "deadline": "2025-03-25 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 11, + "title": "完成旅游产品与旅游资源课程学习", + "courseName": "旅游产品与旅游资源", + "date": "2025-03-26", + "deadline": "2025-03-26 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 12, + "title": "完成游客行为心理学基础课程学习", + "courseName": "游客行为心理学基础", + "date": "2025-03-27", + "deadline": "2025-03-27 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 13, + "title": "完成可持续旅游发展课程学习", + "courseName": "可持续旅游发展", + "date": "2025-04-01", + "deadline": "2025-04-01 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 14, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-04-02", + "deadline": "2025-04-02 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "刘杰", + "unit": "旅游产业全景与文旅基础知识", + "type": "course" + }, + { + "id": 15, + "title": "完成文旅场景职业形象IP塑造课程学习", + "courseName": "文旅场景职业形象IP塑造", + "date": "2025-04-03", + "deadline": "2025-04-03 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 16, + "title": "完成情境化服务体验设计课程学习", + "courseName": "情境化服务体验设计", + "date": "2025-04-08", + "deadline": "2025-04-08 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 17, + "title": "完成政务商务接待专项礼仪课程学习", + "courseName": "政务商务接待专项礼仪", + "date": "2025-04-09", + "deadline": "2025-04-09 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 18, + "title": "完成文旅服务中的非语言表达课程学习", + "courseName": "文旅服务中的非语言表达", + "date": "2025-04-10", + "deadline": "2025-04-10 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 19, + "title": "完成服务沟通技巧与表达训练课程学习", + "courseName": "服务沟通技巧与表达训练", + "date": "2025-04-15", + "deadline": "2025-04-15 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 20, + "title": "完成多元文化下的服务表达差异课程学习", + "courseName": "多元文化下的服务表达差异", + "date": "2025-04-16", + "deadline": "2025-04-16 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 21, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-04-17", + "deadline": "2025-04-17 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "郭建辉", + "unit": "文旅服务:形象、沟通与体验的融合艺术", + "type": "course" + }, + { + "id": 22, + "title": "完成供应链管理的内容课程学习", + "courseName": "供应链管理的内容", + "date": "2025-04-22", + "deadline": "2025-04-22 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 23, + "title": "完成文旅资源调度课程学习", + "courseName": "文旅资源调度", + "date": "2025-04-23", + "deadline": "2025-04-23 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 24, + "title": "完成文旅产品全生命周期管理课程学习", + "courseName": "文旅产品全生命周期管理", + "date": "2025-04-24", + "deadline": "2025-04-24 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 25, + "title": "完成文旅商品供应链课程学习", + "courseName": "文旅商品供应链", + "date": "2025-04-29", + "deadline": "2025-04-29 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 26, + "title": "完成住宿业资源协同课程学习", + "courseName": "住宿业资源协同", + "date": "2025-04-30", + "deadline": "2025-04-30 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 27, + "title": "完成小型文旅项目的供应链角色模拟课程学习", + "courseName": "小型文旅项目的供应链角色模拟", + "date": "2025-05-01", + "deadline": "2025-05-01 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 28, + "title": "完成文旅项目供应链特征课程学习", + "courseName": "文旅项目供应链特征", + "date": "2025-05-06", + "deadline": "2025-05-06 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 29, + "title": "完成文旅供应链中的B2B与B2C模式课程学习", + "courseName": "文旅供应链中的B2B与B2C模式", + "date": "2025-05-07", + "deadline": "2025-05-07 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 30, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-05-08", + "deadline": "2025-05-08 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "文旅与供应链基础", + "type": "course" + }, + { + "id": 31, + "title": "完成现代设计行业的发展现状课程学习", + "courseName": "现代设计行业的发展现状", + "date": "2025-05-13", + "deadline": "2025-05-13 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 32, + "title": "完成设计基础课程学习", + "courseName": "设计基础", + "date": "2025-05-14", + "deadline": "2025-05-14 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 33, + "title": "完成字体设计与中文字体情绪表达课程学习", + "courseName": "字体设计与中文字体情绪表达", + "date": "2025-05-15", + "deadline": "2025-05-15 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 34, + "title": "完成商业平面色彩搭配课程学习", + "courseName": "商业平面色彩搭配", + "date": "2025-05-20", + "deadline": "2025-05-20 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 35, + "title": "完成平面设计构图课程学习", + "courseName": "平面设计构图", + "date": "2025-05-21", + "deadline": "2025-05-21 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 36, + "title": "完成图像编辑工具:Photoshop课程学习", + "courseName": "图像编辑工具:Photoshop", + "date": "2025-05-22", + "deadline": "2025-05-22 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 37, + "title": "完成图像编辑工具:Photoshop课程学习", + "courseName": "图像编辑工具:Photoshop", + "date": "2025-05-27", + "deadline": "2025-05-27 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 38, + "title": "完成矢量与标志设计:Illustrator课程学习", + "courseName": "矢量与标志设计:Illustrator", + "date": "2025-05-28", + "deadline": "2025-05-28 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 39, + "title": "完成矢量与标志设计:Illustrator课程学习", + "courseName": "矢量与标志设计:Illustrator", + "date": "2025-05-29", + "deadline": "2025-05-29 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 40, + "title": "完成快速设计工具使用:Canva课程学习", + "courseName": "快速设计工具使用:Canva", + "date": "2025-06-03", + "deadline": "2025-06-03 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 41, + "title": "完成快速设计工具使用:Canva课程学习", + "courseName": "快速设计工具使用:Canva", + "date": "2025-06-04", + "deadline": "2025-06-04 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 42, + "title": "完成移动端视觉原型设计:Figma课程学习", + "courseName": "移动端视觉原型设计:Figma", + "date": "2025-06-05", + "deadline": "2025-06-05 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 43, + "title": "完成移动端视觉原型设计:Figma课程学习", + "courseName": "移动端视觉原型设计:Figma", + "date": "2025-06-10", + "deadline": "2025-06-10 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 44, + "title": "完成视频剪辑入门:剪映课程学习", + "courseName": "视频剪辑入门:剪映", + "date": "2025-06-11", + "deadline": "2025-06-11 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 45, + "title": "完成视频剪辑入门:剪映课程学习", + "courseName": "视频剪辑入门:剪映", + "date": "2025-06-12", + "deadline": "2025-06-12 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 46, + "title": "完成单元小结课程学习", + "courseName": "单元小结", + "date": "2025-06-17", + "deadline": "2025-06-17 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "商业设计基础", + "type": "course" + }, + { + "id": 47, + "title": "完成AIGC发展简史与基本逻辑课程学习", + "courseName": "AIGC发展简史与基本逻辑", + "date": "2025-09-02", + "deadline": "2025-09-02 21:00", + "priority": "low", + "status": "COMPLETED", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 48, + "title": "完成AIGC的基本概念与各领域的应用课程学习", + "courseName": "AIGC的基本概念与各领域的应用", + "date": "2025-09-03", + "deadline": "2025-09-03 21:00", + "priority": "high", + "status": "IN_PROGRESS", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 49, + "title": "完成AIGC语言模型:chatgpt的灵活应...课程学习", + "courseName": "AIGC语言模型:chatgpt的灵活应...", + "date": "2025-09-04", + "deadline": "2025-09-04 21:00", + "priority": "medium", + "status": "PENDING", + "teacher": "赵志强", + "unit": "AIGC人工智能生成内容", + "type": "course" + }, + { + "id": 50, + "title": "完成AIGC生成内容的版权问题与合规使用课程学习", + "courseName": "AIGC生成内容的版权问题与合规使用", + "date": "2025-09-09", + "deadline": "2025-09-09 21:00", + "priority": "medium", + "status": "PENDING", + "teacher": "刘杰", + "unit": "AIGC人工智能生成内容", + "type": "course" + } + ] + }; +})(); + +// 更新概览数据 +mockData.dashboardStatistics.overview.completedCourses = mockData.courseLiveList.reduce((acc, unit) => + acc + unit.courses.filter(c => c.completed).length, 0); +mockData.dashboardStatistics.overview.ongoingCourses = dashboardCourseData.todaysCourses.filter(c => c.status === "直播中").length; +mockData.dashboardStatistics.overview.overallProgress = Math.round( + (mockData.dashboardStatistics.overview.completedCourses / mockData.dashboardStatistics.overview.totalCourses) * 100 +); + // 添加日历事件到dashboardStatistics mockData.dashboardStatistics.calendarEvents = mockData.calendarEvents; diff --git a/src/pages/CalendarPage/index.css b/src/pages/CalendarPage/index.css index 0151011..b28426d 100644 --- a/src/pages/CalendarPage/index.css +++ b/src/pages/CalendarPage/index.css @@ -1,781 +1,782 @@ -/* CSS变量定义 */ -:root { - --primary-color: #3b82f6; - --border-color: #e5e6eb; - --text-color: #1d2129; - --text-muted: #86909c; - --bg-hover: #f2f3f5; -} - -/* 日历页面样式 */ -.calendar-page { - width: 100%; - height: 100%; - padding: 20px; - - .calendar-page-wrapper { - width: 1120px; - height: 862px; - display: flex; - padding: 20px; - background-color: #fff; - flex-direction: column; - } -} - -/* 日历头部控制栏 */ -.calendar-header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 16px 0; - margin-bottom: 24px; - border-bottom: 1px solid var(--border-color); -} - -.calendar-nav { - display: flex; - align-items: center; - gap: 16px; -} - -.nav-button { - width: 32px; - height: 32px; - border: 1px solid var(--border-color); - background: white; - border-radius: 4px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: all 0.15s ease; - color: var(--text-secondary); -} - -.nav-button:hover { - background: #f3f4f6; - border-color: var(--primary-color); - color: var(--primary-color); -} - -.nav-button:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.calendar-title { - font-size: 20px; - font-weight: 600; - color: var(--text-primary); - margin: 0 8px; -} - -.view-switcher { - display: flex; - background: #f3f4f6; - border-radius: 6px; - padding: 2px; -} - -.view-button { - padding: 6px 16px; - border: none; - background: none; - border-radius: 4px; - font-size: 14px; - font-weight: 500; - cursor: pointer; - transition: all 0.15s ease; - color: var(--text-secondary); -} - -.view-button.active { - background: var(--text-primary); - color: white; -} - -.view-button:hover:not(.active) { - background: #e5e7eb; -} - -/* 日历主体容器 */ -.calendar-container { - flex: 1; - background: white; - border-radius: 8px; - box-shadow: var(--shadow); - border: 1px solid var(--border-color); - overflow: hidden; -} - -/* 月视图样式 */ -.month-view { - height: 100%; - display: flex; - flex-direction: column; -} - -.month-header { - display: grid; - grid-template-columns: repeat(7, 1fr); - background: #f8fafc; - border-bottom: 1px solid var(--border-color); -} - -.weekday-header { - padding: 12px 8px; - text-align: center; - font-size: 13px; - font-weight: 600; - color: var(--text-secondary); - border-right: 1px solid #e5e7eb; -} - -.weekday-header:last-child { - border-right: none; -} - -.month-grid { - flex: 1; - display: grid; - grid-template-columns: repeat(7, 1fr); - grid-template-rows: repeat(6, 1fr); - gap: 1px; - background: #e5e7eb; - padding: 1px; -} - -.day-cell { - background: white; - padding: 10px; - display: flex; - flex-direction: column; - cursor: pointer; - transition: all 0.3s ease; - min-height: 90px; - position: relative; - border-radius: 10px; - border: 1px solid #e8e8f0; - margin: 3px; -} - -.day-cell:hover { - background: linear-gradient(135deg, #fafbff 0%, #f5f7ff 100%); - box-shadow: 0 4px 12px rgba(102, 126, 234, 0.08); - transform: translateY(-2px); - border-color: #d4deff; -} - -.day-cell.other-month { - background: #fafbfc; - color: #b8bcc8; - opacity: 0.5; -} - -.day-cell.today { - background: linear-gradient(135deg, #e8f4ff 0%, #f0f9ff 100%) !important; - border: 2px solid #3b82f6; - box-shadow: 0 6px 16px rgba(59, 130, 246, 0.12); -} - -.day-cell.selected { - background: linear-gradient(135deg, #dbeafe 0%, #e6f2ff 100%) !important; - border: 2px solid #2563eb; - box-shadow: 0 4px 12px rgba(37, 99, 235, 0.15); -} - -.day-number { - font-size: 14px; - font-weight: 500; - margin-bottom: 4px; - align-self: flex-start; -} - -.day-cell.today .day-number { - background: #3b82f6; - color: white; - width: 24px; - height: 24px; - border-radius: 50%; - display: flex; - align-items: center; - justify-content: center; - font-size: 12px; -} - -.event-list { - flex: 1; - display: flex; - flex-direction: column; - gap: 2px; - overflow: hidden; -} - -.event-item { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; - font-size: 11px; - padding: 4px 8px; - border-radius: 6px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - cursor: pointer; - transition: all 0.3s ease; - margin: 2px 0; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - font-weight: 500; -} - -.event-item:hover { - transform: translateX(2px); - box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15); -} - -.event-item.class { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); -} - -.event-item.meeting { - background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); -} - -.event-item.lab { - background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); -} - -.event-item.exam { - background: linear-gradient(135deg, #ff6b6b 0%, #ff8e53 100%); -} - -.event-more { - font-size: 9px; - color: var(--text-muted); - margin-top: 2px; -} - -/* 周视图样式 */ -.week-view { - height: 100%; - display: flex; - flex-direction: column; -} - -.week-header { - display: grid; - grid-template-columns: 60px repeat(7, 1fr); - background: #f8fafc; - border-bottom: 1px solid var(--border-color); - position: sticky; - top: 0; - z-index: var(--z-header); /* 使用全局header层级,确保不干扰弹窗 */ -} - -.time-header { - padding: 12px 8px; - font-size: 12px; - font-weight: 600; - color: var(--text-secondary); - border-right: 1px solid #e5e7eb; - display: flex; - align-items: center; - justify-content: center; -} - -.day-header { - padding: 12px 8px; - text-align: center; - border-right: 1px solid #e5e7eb; - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; -} - -.day-header:last-child { - border-right: none; -} - -.day-name { - font-size: 12px; - font-weight: 500; - color: var(--text-secondary); -} - -.day-date { - font-size: 16px; - font-weight: 600; - color: var(--text-primary); - width: 32px; - height: 32px; - display: flex; - align-items: center; - justify-content: center; - border-radius: 50%; -} - -.day-header.today .day-date { - background: var(--primary-color); - color: white; -} - -.week-grid { - flex: 1; - display: grid; - grid-template-columns: 60px repeat(7, 1fr); - overflow-y: auto; - position: relative; -} - -.time-column { - border-right: 1px solid #e5e7eb; - background: #fafbfc; - display: flex; - flex-direction: column; -} - -.time-slot { - height: 60px; - border-bottom: 1px solid #f3f4f6; - display: flex; - align-items: flex-start; - padding: 4px 8px; - font-size: 11px; - color: var(--text-muted); - position: relative; -} - -.time-slot:nth-child(odd) { - background: #fbfcfd; -} - -.day-column { - border-right: 1px solid #f3f4f6; - position: relative; - display: flex; - flex-direction: column; -} - -.day-column:last-child { - border-right: none; -} - -.hour-slot { - height: 60px; - border-bottom: 1px solid #f3f4f6; - position: relative; -} - -.hour-slot:nth-child(odd) { - background: #fbfcfd; -} - -.event-block { - position: absolute; - left: 4px; - right: 4px; - background: var(--primary-color); - color: white; - border-radius: 4px; - padding: 4px 6px; - font-size: 11px; - z-index: 5; - cursor: pointer; - transition: all 0.15s ease; - overflow: hidden; - display: flex; - flex-direction: column; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.event-block:hover { - transform: translateY(-1px); - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); -} - -.event-block.class { - background: #3b82f6; -} - -.event-block.meeting { - background: #10b981; -} - -.event-block.lab { - background: #f59e0b; -} - -.event-block.exam { - background: #ef4444; -} - -.event-title { - font-weight: 600; - margin-bottom: 2px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.event-time { - font-size: 10px; - opacity: 0.9; -} - -/* 当前时间线 - 使用合理的层级 */ -.current-time-line { - position: absolute; - left: 60px; - right: 0; - height: 2px; - background: #ef4444; - z-index: var(--z-content); /* 使用内容层级,不需要很高 */ - pointer-events: none; -} - -.current-time-line::before { - content: ""; - position: absolute; - left: -6px; - top: -4px; - width: 10px; - height: 10px; - background: #ef4444; - border-radius: 50%; -} - -/* 空状态 */ -.empty-state { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 200px; - color: var(--text-muted); -} - -.empty-state-icon { - font-size: 48px; - margin-bottom: 16px; - opacity: 0.5; -} - -.empty-state-text { - font-size: 16px; - margin-bottom: 8px; -} - -.empty-state-description { - font-size: 14px; - opacity: 0.7; -} - -/* 事件详情提示 - 使用全局z-index系统 */ -.event-tooltip { - position: absolute; - background: var(--text-primary); - color: white; - padding: 8px 12px; - border-radius: 6px; - font-size: 12px; - z-index: var(--z-tooltip); /* 使用全局tooltip层级 */ - max-width: 200px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - pointer-events: none; -} - -.event-tooltip::after { - content: ""; - position: absolute; - bottom: -6px; - left: 50%; - transform: translateX(-50%); - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid var(--text-primary); -} - -/* 事件详情模态框样式 - 遵循跨国企业级后台系统设计哲学v2.0 */ - -/* 模态框遮罩层 */ -.event-detail-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.5); - z-index: var(--z-modal); - display: flex; - align-items: center; - justify-content: center; - animation: overlayFadeIn 200ms ease-out; -} - -@keyframes overlayFadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -/* 模态框主体 - 零线原则,依赖留白分隔 */ -.event-detail-modal { - background: #ffffff; - border-radius: 8px; - box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15), 0 4px 6px rgba(0, 0, 0, 0.1); - width: 480px; - max-width: 90vw; - max-height: 80vh; - overflow: auto; - animation: modalSlideIn 250ms ease-out; -} - -@keyframes modalSlideIn { - from { - opacity: 0; - transform: scale(0.95) translateY(-10px); - } - to { - opacity: 1; - transform: scale(1) translateY(0); - } -} - -/* 模态框头部 - 呼吸感间距 */ -.event-detail-header { - padding: 24px 24px 16px 24px; - border-bottom: 1px solid #f3f4f6; - display: flex; - justify-content: space-between; - align-items: center; -} - -/* 标题 - 意图驱动的信息层级 L1 */ -.event-detail-title { - font-size: 18px; - font-weight: 600; - color: #111827; - margin: 0; -} - -/* 关闭按钮 - 上下文感知交互 */ -.event-detail-close { - width: 32px; - height: 32px; - border: none; - background: #f9fafb; - border-radius: 6px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - color: #6b7280; - font-size: 18px; - transition: all 150ms ease; -} - -.event-detail-close:hover { - background: #f3f4f6; - color: #374151; -} - -.event-detail-close:focus { - outline: 2px solid #3b82f6; - outline-offset: 2px; -} - -/* 模态框内容区域 - 慷慨的留白 */ -.event-detail-content { - padding: 24px; -} - -/* 字段容器 - 基于8px栅格的间距 */ -.event-detail-field { - margin-bottom: 24px; -} - -.event-detail-field:last-child { - margin-bottom: 0; -} - -/* 字段标签 - 信息层级 L3 */ -.event-detail-label { - font-size: 12px; - font-weight: 600; - color: #6b7280; - text-transform: uppercase; - letter-spacing: 0.05em; - margin-bottom: 8px; -} - -/* 字段值 - 信息层级 L2 */ -.event-detail-value { - font-size: 15px; - color: #111827; - line-height: 1.5; -} - -/* 事件类型徽章 - 语义化状态色板 */ -.event-type-badge { - display: inline-block; - padding: 6px 12px; - border-radius: 12px; - font-size: 11px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; -} - -/* 克制的色彩语言 - 柔和且低饱和度 */ -.event-type-class { - background: #dbeafe; - color: #1e40af; -} - -.event-type-meeting { - background: #d1fae5; - color: #065f46; -} - -.event-type-lab { - background: #fef3c7; - color: #92400e; -} - -.event-type-exam { - background: #fee2e2; - color: #991b1b; -} - -/* 时间范围显示 - 等宽字体增强可读性 */ -.event-time-range { - font-family: "SF Mono", "Monaco", "Cascadia Code", "Consolas", monospace; - font-size: 14px; - color: #374151; - background: #f9fafb; - padding: 12px 16px; - border-radius: 6px; - border-left: 3px solid #3b82f6; - font-weight: 500; -} - -/* 响应式设计 */ -@media (max-width: 1024px) { - .calendar-header { - flex-direction: column; - gap: 16px; - align-items: stretch; - } - - .calendar-nav { - justify-content: center; - } - - .view-switcher { - align-self: center; - } - - .day-cell { - min-height: 60px; - padding: 4px; - } - - .event-item { - font-size: 9px; - padding: 1px 2px; - } -} - -@media (max-width: 768px) { - .calendar-title { - font-size: 18px; - } - - .nav-button { - width: 28px; - height: 28px; - } - - .view-button { - padding: 4px 12px; - font-size: 13px; - } - - .week-grid { - grid-template-columns: 50px repeat(7, 1fr); - } - - .time-header, - .time-column { - width: 50px; - } - - .time-slot { - padding: 2px 4px; - font-size: 10px; - } - - .day-cell { - min-height: 50px; - padding: 2px; - } - - .day-number { - font-size: 12px; - } - - .event-item { - font-size: 8px; - padding: 1px; - } -} - -/* 加载状态 */ -.calendar-loading { - display: flex; - align-items: center; - justify-content: center; - height: 200px; - color: var(--text-muted); -} - -.loading-spinner { - width: 32px; - height: 32px; - border: 3px solid #f3f4f6; - border-top: 3px solid var(--primary-color); - border-radius: 50%; - animation: spin 1s linear infinite; -} - -@keyframes spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -/* 响应式设计 */ -@media (max-width: 640px) { - .event-detail-modal { - width: 95vw; - margin: 16px; - } - - .event-detail-header, - .event-detail-content { - padding: 16px; - } - - .event-detail-field { - margin-bottom: 16px; - } -} +/* CSS变量定义 */ +:root { + --primary-color: #3b82f6; + --border-color: #e5e6eb; + --text-color: #1d2129; + --text-muted: #86909c; + --bg-hover: #f2f3f5; +} + +/* 日历页面样式 */ +.calendar-page { + width: 100%; + height: 100%; + padding: 20px; + + .calendar-page-wrapper { + width: 1120px; + height: 862px; + display: flex; + padding: 20px; + background-color: #fff; + flex-direction: column; + } +} + +/* 日历头部控制栏 */ +.calendar-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 0; + margin-bottom: 24px; + border-bottom: 1px solid var(--border-color); +} + +.calendar-nav { + display: flex; + align-items: center; + gap: 16px; +} + +.nav-button { + width: 32px; + height: 32px; + border: 1px solid var(--border-color); + background: white; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.15s ease; + color: var(--text-secondary); +} + +.nav-button:hover { + background: #f3f4f6; + border-color: var(--primary-color); + color: var(--primary-color); +} + +.nav-button:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.calendar-title { + font-size: 20px; + font-weight: 600; + color: var(--text-primary); + margin: 0 8px; +} + +.view-switcher { + display: flex; + background: #f3f4f6; + border-radius: 6px; + padding: 2px; +} + +.view-button { + padding: 6px 16px; + border: none; + background: none; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.15s ease; + color: var(--text-secondary); +} + +.view-button.active { + background: var(--text-primary); + color: white; +} + +.view-button:hover:not(.active) { + background: #e5e7eb; +} + +/* 日历主体容器 */ +.calendar-container { + flex: 1; + background: white; + border-radius: 8px; + box-shadow: var(--shadow); + border: 1px solid var(--border-color); + overflow: hidden; +} + +/* 月视图样式 */ +.month-view { + height: 100%; + display: flex; + flex-direction: column; +} + +.month-header { + display: grid; + grid-template-columns: repeat(7, 1fr); + background: #f8fafc; + border-bottom: 1px solid var(--border-color); +} + +.weekday-header { + padding: 12px 8px; + text-align: center; + font-size: 13px; + font-weight: 600; + color: var(--text-secondary); + border-right: 1px solid #e5e7eb; +} + +.weekday-header:last-child { + border-right: none; +} + +.month-grid { + flex: 1; + display: grid; + grid-template-columns: repeat(7, 1fr); + grid-template-rows: repeat(6, 1fr); + gap: 1px; + background: #e5e7eb; + padding: 1px; +} + +.day-cell { + background: white; + padding: 10px; + display: flex; + flex-direction: column; + cursor: pointer; + transition: all 0.3s ease; + min-height: 90px; + position: relative; + border-radius: 10px; + border: 1px solid #e8e8f0; + margin: 3px; +} + +.day-cell:hover { + background: linear-gradient(135deg, #fafbff 0%, #f5f7ff 100%); + box-shadow: 0 4px 12px rgba(102, 126, 234, 0.08); + transform: translateY(-2px); + border-color: #d4deff; +} + +.day-cell.other-month { + background: #fafbfc; + color: #b8bcc8; + opacity: 0.5; +} + +.day-cell.today { + background: linear-gradient(135deg, #e8f4ff 0%, #f0f9ff 100%) !important; + border: 2px solid #3b82f6; + box-shadow: 0 6px 16px rgba(59, 130, 246, 0.12); +} + +.day-cell.selected { + background: linear-gradient(135deg, #dbeafe 0%, #e6f2ff 100%) !important; + border: 2px solid #2563eb; + box-shadow: 0 4px 12px rgba(37, 99, 235, 0.15); +} + +.day-number { + font-size: 14px; + font-weight: 500; + margin-bottom: 4px; + align-self: flex-start; +} + +.day-cell.today .day-number { + background: #3b82f6; + color: white; + width: 24px; + height: 24px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; +} + +.event-list { + flex: 1; + display: flex; + flex-direction: column; + gap: 2px; + overflow: hidden; +} + +.event-item { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + font-size: 11px; + padding: 4px 8px; + border-radius: 6px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; + transition: all 0.3s ease; + margin: 2px 0; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + font-weight: 500; +} + +.event-item:hover { + transform: translateX(2px); + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15); +} + +.event-item.class { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); +} + +.event-item.meeting { + background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); +} + +.event-item.lab { + background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); +} + +.event-item.exam { + background: linear-gradient(135deg, #ff6b6b 0%, #ff8e53 100%); +} + +.event-more { + font-size: 9px; + color: var(--text-muted); + margin-top: 2px; +} + +/* 周视图样式 */ +.week-view { + height: 100%; + display: flex; + flex-direction: column; +} + +.week-header { + display: grid; + grid-template-columns: 60px repeat(7, 1fr); + background: #f8fafc; + border-bottom: 1px solid var(--border-color); + position: sticky; + top: 0; + z-index: var(--z-header); /* 使用全局header层级,确保不干扰弹窗 */ +} + +.time-header { + padding: 12px 8px; + font-size: 12px; + font-weight: 600; + color: var(--text-secondary); + border-right: 1px solid #e5e7eb; + display: flex; + align-items: center; + justify-content: center; +} + +.day-header { + padding: 12px 8px; + text-align: center; + border-right: 1px solid #e5e7eb; + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; +} + +.day-header:last-child { + border-right: none; +} + +.day-name { + font-size: 12px; + font-weight: 500; + color: var(--text-secondary); +} + +.day-date { + font-size: 16px; + font-weight: 600; + color: var(--text-primary); + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; +} + +.day-header.today .day-date { + background: var(--primary-color); + color: white; +} + +.week-grid { + flex: 1; + display: grid; + grid-template-columns: 60px repeat(7, 1fr); + overflow-y: auto; + position: relative; +} + +.time-column { + border-right: 1px solid #e5e7eb; + background: #fafbfc; + display: flex; + flex-direction: column; +} + +.time-slot { + height: 60px; + border-bottom: 1px solid #f3f4f6; + display: flex; + align-items: flex-start; + padding: 4px 8px; + font-size: 11px; + color: var(--text-muted); + position: relative; +} + +.time-slot:nth-child(odd) { + background: #fbfcfd; +} + +.day-column { + border-right: 1px solid #f3f4f6; + position: relative; + display: flex; + flex-direction: column; +} + +.day-column:last-child { + border-right: none; +} + +.hour-slot { + height: 60px; + border-bottom: 1px solid #f3f4f6; + position: relative; +} + +.hour-slot:nth-child(odd) { + background: #fbfcfd; +} + +.event-block { + position: absolute; + left: 4px; + right: 4px; + background: var(--primary-color); + color: white; + border-radius: 4px; + padding: 4px 6px; + font-size: 11px; + z-index: 5; + cursor: pointer; + transition: all 0.15s ease; + overflow: hidden; + display: flex; + flex-direction: column; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.event-block:hover { + transform: translateY(-1px); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); +} + +.event-block.class { + background: #3b82f6; +} + +.event-block.meeting { + background: #10b981; +} + +.event-block.lab { + background: #f59e0b; +} + +.event-block.exam { + background: #ef4444; +} + +.event-title { + font-weight: 600; + margin-bottom: 2px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.event-time { + font-size: 10px; + opacity: 0.9; +} + +/* 当前时间线 - 使用合理的层级 */ +.current-time-line { + position: absolute; + left: 60px; + right: 0; + height: 2px; + background: #ef4444; + z-index: var(--z-content); /* 使用内容层级,不需要很高 */ + pointer-events: none; +} + +.current-time-line::before { + content: ""; + position: absolute; + left: -6px; + top: -4px; + width: 10px; + height: 10px; + background: #ef4444; + border-radius: 50%; +} + +/* 空状态 */ +.empty-state { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 200px; + color: var(--text-muted); +} + +.empty-state-icon { + font-size: 48px; + margin-bottom: 16px; + opacity: 0.5; +} + +.empty-state-text { + font-size: 16px; + margin-bottom: 8px; +} + +.empty-state-description { + font-size: 14px; + opacity: 0.7; +} + +/* 事件详情提示 - 使用全局z-index系统 */ +.event-tooltip { + position: absolute; + background: var(--text-primary); + color: white; + padding: 8px 12px; + border-radius: 6px; + font-size: 12px; + z-index: var(--z-tooltip); /* 使用全局tooltip层级 */ + max-width: 200px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + pointer-events: none; +} + +.event-tooltip::after { + content: ""; + position: absolute; + bottom: -6px; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid var(--text-primary); +} + + +/* 事件详情模态框样式 - 遵循跨国企业级后台系统设计哲学v2.0 */ + +/* 模态框遮罩层 */ +.event-detail-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + z-index: var(--z-modal); + display: flex; + align-items: center; + justify-content: center; + animation: overlayFadeIn 200ms ease-out; +} + +@keyframes overlayFadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +/* 模态框主体 - 零线原则,依赖留白分隔 */ +.event-detail-modal { + background: #ffffff; + border-radius: 8px; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15), 0 4px 6px rgba(0, 0, 0, 0.1); + width: 480px; + max-width: 90vw; + max-height: 80vh; + overflow: auto; + animation: modalSlideIn 250ms ease-out; +} + +@keyframes modalSlideIn { + from { + opacity: 0; + transform: scale(0.95) translateY(-10px); + } + to { + opacity: 1; + transform: scale(1) translateY(0); + } +} + +/* 模态框头部 - 呼吸感间距 */ +.event-detail-header { + padding: 24px 24px 16px 24px; + border-bottom: 1px solid #f3f4f6; + display: flex; + justify-content: space-between; + align-items: center; +} + +/* 标题 - 意图驱动的信息层级 L1 */ +.event-detail-title { + font-size: 18px; + font-weight: 600; + color: #111827; + margin: 0; +} + +/* 关闭按钮 - 上下文感知交互 */ +.event-detail-close { + width: 32px; + height: 32px; + border: none; + background: #f9fafb; + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + color: #6b7280; + font-size: 18px; + transition: all 150ms ease; +} + +.event-detail-close:hover { + background: #f3f4f6; + color: #374151; +} + +.event-detail-close:focus { + outline: 2px solid #3b82f6; + outline-offset: 2px; +} + +/* 模态框内容区域 - 慷慨的留白 */ +.event-detail-content { + padding: 24px; +} + +/* 字段容器 - 基于8px栅格的间距 */ +.event-detail-field { + margin-bottom: 24px; +} + +.event-detail-field:last-child { + margin-bottom: 0; +} + +/* 字段标签 - 信息层级 L3 */ +.event-detail-label { + font-size: 12px; + font-weight: 600; + color: #6b7280; + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: 8px; +} + +/* 字段值 - 信息层级 L2 */ +.event-detail-value { + font-size: 15px; + color: #111827; + line-height: 1.5; +} + +/* 事件类型徽章 - 语义化状态色板 */ +.event-type-badge { + display: inline-block; + padding: 6px 12px; + border-radius: 12px; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +/* 克制的色彩语言 - 柔和且低饱和度 */ +.event-type-class { + background: #dbeafe; + color: #1e40af; +} + +.event-type-meeting { + background: #d1fae5; + color: #065f46; +} + +.event-type-lab { + background: #fef3c7; + color: #92400e; +} + +.event-type-exam { + background: #fee2e2; + color: #991b1b; +} + +/* 时间范围显示 - 等宽字体增强可读性 */ +.event-time-range { + font-family: "SF Mono", "Monaco", "Cascadia Code", "Consolas", monospace; + font-size: 14px; + color: #374151; + background: #f9fafb; + padding: 12px 16px; + border-radius: 6px; + border-left: 3px solid #3b82f6; + font-weight: 500; +} + +/* 响应式设计 */ +@media (max-width: 1024px) { + .calendar-header { + flex-direction: column; + gap: 16px; + align-items: stretch; + } + + .calendar-nav { + justify-content: center; + } + + .view-switcher { + align-self: center; + } + + .day-cell { + min-height: 60px; + padding: 4px; + } + + .event-item { + font-size: 9px; + padding: 1px 2px; + } +} + +@media (max-width: 768px) { + .calendar-title { + font-size: 18px; + } + + .nav-button { + width: 28px; + height: 28px; + } + + .view-button { + padding: 4px 12px; + font-size: 13px; + } + + .week-grid { + grid-template-columns: 50px repeat(7, 1fr); + } + + .time-header, + .time-column { + width: 50px; + } + + .time-slot { + padding: 2px 4px; + font-size: 10px; + } + + .day-cell { + min-height: 50px; + padding: 2px; + } + + .day-number { + font-size: 12px; + } + + .event-item { + font-size: 8px; + padding: 1px; + } +} + +/* 加载状态 */ +.calendar-loading { + display: flex; + align-items: center; + justify-content: center; + height: 200px; + color: var(--text-muted); +} + +.loading-spinner { + width: 32px; + height: 32px; + border: 3px solid #f3f4f6; + border-top: 3px solid var(--primary-color); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +/* 响应式设计 */ +@media (max-width: 640px) { + .event-detail-modal { + width: 95vw; + margin: 16px; + } + + .event-detail-header, + .event-detail-content { + padding: 16px; + } + + .event-detail-field { + margin-bottom: 16px; + } +} diff --git a/src/pages/CalendarPage/index.jsx b/src/pages/CalendarPage/index.jsx index fca2999..8cc0388 100644 --- a/src/pages/CalendarPage/index.jsx +++ b/src/pages/CalendarPage/index.jsx @@ -1,93 +1,95 @@ -import React, { useState } from "react"; -import { mockData } from "@/data/mockData"; -import CalendarHeader from "./components/CalendarHeader"; -import MonthView from "./components/MonthView"; -import WeekView from "./components/WeekView"; -import EventDetailModal from "./components/EventDetailModal"; -import "./index.css"; - -const CalendarPage = () => { - const [currentDate, setCurrentDate] = useState(new Date()); - const [currentView, setCurrentView] = useState("month"); - const [selectedDate, setSelectedDate] = useState(null); - const [selectedEvent, setSelectedEvent] = useState(null); - const [showEventDetail, setShowEventDetail] = useState(false); - - const { calendarEvents } = mockData; - - const handleViewChange = (view) => { - setCurrentView(view); - }; - - const handleNavigate = (newDate) => { - setCurrentDate(newDate); - }; - - const handleDateClick = (date) => { - setSelectedDate(date); - - // 如果在月视图中点击日期,可以切换到周视图 - if (currentView === "month") { - setCurrentDate(date); - // 可选:自动切换到周视图 - // setCurrentView('week'); - } - }; - - const handleEventClick = (event) => { - setSelectedEvent(event); - setShowEventDetail(true); - }; - - const handleCloseEventDetail = () => { - setShowEventDetail(false); - setSelectedEvent(null); - }; - - const renderCalendarView = () => { - if (currentView === "month") { - return ( - - ); - } else { - return ( - - ); - } - }; - - return ( -
-
- {/* 日历头部控制栏 */} - - {/* 日历主体 */} -
{renderCalendarView()}
- {/* 事件详情模态框 */} - -
-
- ); -}; - -export default CalendarPage; +import React, { useState } from "react"; +import { mockData } from "@/data/mockData"; +import CalendarHeader from "./components/CalendarHeader"; +import MonthView from "./components/MonthView"; +import WeekView from "./components/WeekView"; +import EventDetailModal from "./components/EventDetailModal"; +import "./index.css"; + +const CalendarPage = () => { + const [currentDate, setCurrentDate] = useState(new Date()); + const [currentView, setCurrentView] = useState("month"); + const [selectedDate, setSelectedDate] = useState(null); + const [selectedEvent, setSelectedEvent] = useState(null); + const [showEventDetail, setShowEventDetail] = useState(false); + + const { calendarEvents } = mockData; + + const handleViewChange = (view) => { + setCurrentView(view); + }; + + const handleNavigate = (newDate) => { + setCurrentDate(newDate); + }; + + const handleDateClick = (date) => { + setSelectedDate(date); + + // 如果在月视图中点击日期,可以切换到周视图 + if (currentView === "month") { + setCurrentDate(date); + // 可选:自动切换到周视图 + // setCurrentView('week'); + } + }; + + const handleEventClick = (event) => { + setSelectedEvent(event); + setShowEventDetail(true); + }; + + const handleCloseEventDetail = () => { + setShowEventDetail(false); + setSelectedEvent(null); + }; + + const renderCalendarView = () => { + if (currentView === "month") { + return ( + + ); + } else { + return ( + + ); + } + }; + + + + return ( +
+
+ {/* 日历头部控制栏 */} + + {/* 日历主体 */} +
{renderCalendarView()}
+ {/* 事件详情模态框 */} + +
+
+ ); +}; + +export default CalendarPage; diff --git a/src/pages/CompanyJobsPage/index.jsx b/src/pages/CompanyJobsPage/index.jsx index ad9cce3..af95664 100644 --- a/src/pages/CompanyJobsPage/index.jsx +++ b/src/pages/CompanyJobsPage/index.jsx @@ -1,286 +1,286 @@ -import { useState, useEffect } from "react"; -import { useSelector } from "react-redux"; -import { useNavigate } from "react-router-dom"; -import { Spin, Empty } from "@arco-design/web-react"; -// import { mapJobList, mapInterviewList } from "@/utils/dataMapper"; // 不再需要映射器,mock数据已经是前端格式 -import InfiniteScroll from "@/components/InfiniteScroll"; -import toast from "@/components/Toast"; -import JobList from "./components/JobList"; -import { - getCompanyJobsPageData, - getJobsList, - getInterviewsList, -} from "@/services"; - -import "./index.css"; -const PAGE_SIZE = 10; - -const CompanyJobsPage = () => { - const studentInfo = useSelector((state) => state.student.studentInfo); - const [isExpand, setIsExpand] = useState(false); // 是否展开 - const [jobs, setJobs] = useState([]); - const [jobsListPage, setJobsListPage] = useState(1); - const [jobsListHasMore, setJobsListHasMore] = useState(true); - const [interviews, setInterviews] = useState([]); - const [interviewsPage, setInterviewsPage] = useState(1); - const [interviewsHasMore, setInterviewsHasMore] = useState(true); - const [initialDataLoaded, setInitialDataLoaded] = useState(false); - const [loading, setLoading] = useState(true); - const navigate = useNavigate(); - - // 初始化页面数据 - 使用聚合接口 - useEffect(() => { - const fetchInitialData = async () => { - try { - setLoading(true); - const res = await getCompanyJobsPageData({ - studentId: studentInfo?.id, - }); - - if (res?.success) { - // 设置岗位数据 - if (res.data?.jobs) { - // Mock数据已经是前端格式,直接使用不需要映射 - const jobs = res.data.jobs.list || []; - setJobs(jobs); - setJobsListHasMore(res.data.jobs.hasMore); - if (jobs.length > 0) { - setJobsListPage(2); // 下次从第2页开始 - } - } - - // 设置面试数据 - if (res.data?.interviews && studentInfo?.id) { - // Mock数据已经是前端格式,直接使用不需要映射 - const interviews = res.data.interviews.list || []; - setInterviews(interviews); - setInterviewsHasMore(res.data.interviews.hasMore); - if (interviews.length > 0) { - setInterviewsPage(2); // 下次从第2页开始 - } - } - - setInitialDataLoaded(true); - } - } catch (error) { - console.error("Failed to fetch initial page data:", error); - // 如果聚合接口失败,回退到原来的方式 - setInitialDataLoaded(true); - // 显示错误信息给用户 - if (toast && toast.error) { - toast.error("加载数据失败,请刷新重试"); - } - } finally { - setLoading(false); - } - }; - - fetchInitialData(); - }, [studentInfo?.id]); - - // 获取面试信息 - 用于分页加载更多 - const fetchInterviewsData = async () => { - // 如果初始数据还没加载完成,或者是第一页且已有初始数据,则跳过 - if (!initialDataLoaded || (interviewsPage === 1 && interviews.length > 0)) { - return; - } - - if (studentInfo?.id) { - const res = await getInterviewsList({ - page: interviewsPage, - pageSize: PAGE_SIZE, - studentId: studentInfo?.id, - status: "SCHEDULED", - }); - if (res.success) { - // Mock数据已经是前端格式,直接使用 - const interviews = res.data || []; - setInterviews((prevList) => { - // 去重处理:过滤掉已存在的数据 - const existingIds = new Set( - prevList.map((interview) => interview.id) - ); - const newInterviews = interviews.filter( - (interview) => !existingIds.has(interview.id) - ); - - const newList = [...prevList, ...newInterviews]; - if (res.total <= newList?.length) { - setInterviewsHasMore(false); - } else { - setInterviewsPage((prevPage) => prevPage + 1); - } - return newList; - }); - } else { - if (interviewsPage === 1) { - setInterviews([]); - } - toast.error(res.message); - } - } - }; - - // 获取企业内推岗位 - 用于分页加载更多 - const fetchJobsList = async () => { - // 如果初始数据还没加载完成,或者是第一页且已有初始数据,则跳过 - if (!initialDataLoaded || (jobsListPage === 1 && jobs.length > 0)) { - return; - } - - // 防止重复请求 - if (jobsListPage === 1 && jobs.length === 0) { - return; // 初始数据应该通过聚合接口加载 - } - - try { - const res = await getJobsList({ - page: jobsListPage, - pageSize: PAGE_SIZE, - isActive: true, - }); - - if (res?.success) { - // Mock数据已经是前端格式,直接使用 - const jobs = res.data; - setJobs((prevList) => { - // 去重处理:过滤掉已存在的数据 - const existingIds = new Set(prevList.map((job) => job.id)); - const newJobs = jobs.filter((job) => !existingIds.has(job.id)); - - const newList = [...prevList, ...newJobs]; - if (res.total <= newList?.length) { - setJobsListHasMore(false); - } else { - setJobsListPage((prevPage) => prevPage + 1); - } - return newList; - }); - } - } catch (error) { - console.error("Failed to fetch data:", error); - if (jobsListPage === 1) { - setJobs([]); - } - } - }; - - const handleJobWrapperClick = () => { - navigate("/company-jobs-list"); - }; - - return ( -
-
- {loading ? ( - - ) : ( - <> -
-

企业内推岗位库

- - - -
-
-
-

内推岗位面试

- - {interviews.map((item) => ( -
  • -
    -

    - {item.position} -

    - {item.job?.tags?.length > 0 ? ( -
      - {item.job.tags.map((tag) => ( -
    • - {tag} -
    • - ))} -
    - ) : null} - - {item.job?.salary || "面议"} - -
    -
    - {item.interviewTime} -
    - {item.statusText} -
    -
    -
  • - ))} -
    -
    -
    -
    setIsExpand(!isExpand)} - className={ - isExpand - ? "company-jobs-page-process-wrapper-expand" - : "company-jobs-page-process-wrapper-close" - } - > -
    - 岗位陪跑流程 -
    -
    -
    -

    内推岗位简历投递

    -
    -
    -
    -

    岗位简历接收

    -
    -
    -

    面试时间地点确定

    -
    -
    -

    参与企业面试

    -
    -
    -
    -

    企业offer发送

    -
    -
    -
    - - )} -
    -
    - ); -}; - -export default CompanyJobsPage; +import { useState, useEffect } from "react"; +import { useSelector } from "react-redux"; +import { useNavigate } from "react-router-dom"; +import { Spin, Empty } from "@arco-design/web-react"; +// import { mapJobList, mapInterviewList } from "@/utils/dataMapper"; // 不再需要映射器,mock数据已经是前端格式 +import InfiniteScroll from "@/components/InfiniteScroll"; +import toast from "@/components/Toast"; +import JobList from "./components/JobList"; +import { + getCompanyJobsPageData, + getJobsList, + getInterviewsList, +} from "@/services"; + +import "./index.css"; +const PAGE_SIZE = 10; + +const CompanyJobsPage = () => { + const studentInfo = useSelector((state) => state.student.studentInfo); + const [isExpand, setIsExpand] = useState(false); // 是否展开 + const [jobs, setJobs] = useState([]); + const [jobsListPage, setJobsListPage] = useState(1); + const [jobsListHasMore, setJobsListHasMore] = useState(true); + const [interviews, setInterviews] = useState([]); + const [interviewsPage, setInterviewsPage] = useState(1); + const [interviewsHasMore, setInterviewsHasMore] = useState(true); + const [initialDataLoaded, setInitialDataLoaded] = useState(false); + const [loading, setLoading] = useState(true); + const navigate = useNavigate(); + + // 初始化页面数据 - 使用聚合接口 + useEffect(() => { + const fetchInitialData = async () => { + try { + setLoading(true); + const res = await getCompanyJobsPageData({ + studentId: studentInfo?.id, + }); + + if (res?.success) { + // 设置岗位数据 + if (res.data?.jobs) { + // Mock数据已经是前端格式,直接使用不需要映射 + const jobs = res.data.jobs.list || []; + setJobs(jobs); + setJobsListHasMore(res.data.jobs.hasMore); + if (jobs.length > 0) { + setJobsListPage(2); // 下次从第2页开始 + } + } + + // 设置面试数据 + if (res.data?.interviews) { + // Mock数据已经是前端格式,直接使用不需要映射 + const interviews = res.data.interviews.list || []; + setInterviews(interviews); + setInterviewsHasMore(res.data.interviews.hasMore); + if (interviews.length > 0) { + setInterviewsPage(2); // 下次从第2页开始 + } + } + + setInitialDataLoaded(true); + } + } catch (error) { + console.error("Failed to fetch initial page data:", error); + // 如果聚合接口失败,回退到原来的方式 + setInitialDataLoaded(true); + // 显示错误信息给用户 + if (toast && toast.error) { + toast.error("加载数据失败,请刷新重试"); + } + } finally { + setLoading(false); + } + }; + + fetchInitialData(); + }, [studentInfo?.id]); + + // 获取面试信息 - 用于分页加载更多 + const fetchInterviewsData = async () => { + // 如果初始数据还没加载完成,或者是第一页且已有初始数据,则跳过 + if (!initialDataLoaded || (interviewsPage === 1 && interviews.length > 0)) { + return; + } + + if (studentInfo?.id) { + const res = await getInterviewsList({ + page: interviewsPage, + pageSize: PAGE_SIZE, + studentId: studentInfo?.id, + status: "SCHEDULED", + }); + if (res.success) { + // Mock数据已经是前端格式,直接使用 + const interviews = res.data || []; + setInterviews((prevList) => { + // 去重处理:过滤掉已存在的数据 + const existingIds = new Set( + prevList.map((interview) => interview.id) + ); + const newInterviews = interviews.filter( + (interview) => !existingIds.has(interview.id) + ); + + const newList = [...prevList, ...newInterviews]; + if (res.total <= newList?.length) { + setInterviewsHasMore(false); + } else { + setInterviewsPage((prevPage) => prevPage + 1); + } + return newList; + }); + } else { + if (interviewsPage === 1) { + setInterviews([]); + } + toast.error(res.message); + } + } + }; + + // 获取企业内推岗位 - 用于分页加载更多 + const fetchJobsList = async () => { + // 如果初始数据还没加载完成,或者是第一页且已有初始数据,则跳过 + if (!initialDataLoaded || (jobsListPage === 1 && jobs.length > 0)) { + return; + } + + // 防止重复请求 + if (jobsListPage === 1 && jobs.length === 0) { + return; // 初始数据应该通过聚合接口加载 + } + + try { + const res = await getJobsList({ + page: jobsListPage, + pageSize: PAGE_SIZE, + isActive: true, + }); + + if (res?.success) { + // Mock数据已经是前端格式,直接使用 + const jobs = res.data; + setJobs((prevList) => { + // 去重处理:过滤掉已存在的数据 + const existingIds = new Set(prevList.map((job) => job.id)); + const newJobs = jobs.filter((job) => !existingIds.has(job.id)); + + const newList = [...prevList, ...newJobs]; + if (res.total <= newList?.length) { + setJobsListHasMore(false); + } else { + setJobsListPage((prevPage) => prevPage + 1); + } + return newList; + }); + } + } catch (error) { + console.error("Failed to fetch data:", error); + if (jobsListPage === 1) { + setJobs([]); + } + } + }; + + const handleJobWrapperClick = () => { + navigate("/company-jobs-list"); + }; + + return ( +
    +
    + {loading ? ( + + ) : ( + <> +
    +

    企业内推岗位库

    + + + +
    +
    +
    +

    内推岗位面试

    + + {interviews.map((item) => ( +
  • +
    +

    + {item.position} +

    + {item.job?.tags?.length > 0 ? ( +
      + {item.job.tags.map((tag) => ( +
    • + {tag} +
    • + ))} +
    + ) : null} + + {item.job?.salary || "面议"} + +
    +
    + {item.interviewTime} +
    + {item.statusText} +
    +
    +
  • + ))} +
    +
    +
    +
    setIsExpand(!isExpand)} + className={ + isExpand + ? "company-jobs-page-process-wrapper-expand" + : "company-jobs-page-process-wrapper-close" + } + > +
    + 岗位陪跑流程 +
    +
    +
    +

    内推岗位简历投递

    +
    +
    +
    +

    岗位简历接收

    +
    +
    +

    面试时间地点确定

    +
    +
    +

    参与企业面试

    +
    +
    +
    +

    企业offer发送

    +
    +
    +
    + + )} +
    +
    + ); +}; + +export default CompanyJobsPage; diff --git a/src/pages/Dashboard/components/TaskList/index.jsx b/src/pages/Dashboard/components/TaskList/index.jsx index 237ef07..241806e 100644 --- a/src/pages/Dashboard/components/TaskList/index.jsx +++ b/src/pages/Dashboard/components/TaskList/index.jsx @@ -1,87 +1,88 @@ -import { Avatar, Skeleton, Empty } from "@arco-design/web-react"; -import IconFont from "@/components/IconFont"; -import "./index.css"; - -const TaskList = ({ tasks = [], loading }) => { - if (loading) { - return ( -
    -

    事项

    - -
    - ); - } - - const getTaskTypeText = (type) => { - const typeMap = { - HOMEWORK: "作业", - PROJECT: "项目", - REPORT: "报告", - INTERVIEW: "面试", - OTHER: "其他", - }; - return typeMap[type] || type; - }; - - return ( -
    -

    - - 当日事项 -

    - {tasks.length === 0 ? ( -
    - -
    - ) : ( -
      - {tasks.map((item, index) => ( -
    • -
      - - {item?.teacherAvatar ? ( - avatar - ) : ( - item?.teacherName?.charAt(0) || "T" - )} - - - {item?.teacherName || "未知教师"} - -
      -
      -
      -

      - - {getTaskTypeText(item.type)}: - - {item?.title} -

      -
      - 课程名称:{item?.courseName} - - {item?.duration} - - {/* - {item.status === 'PENDING' ? '待完成' : - item.status === 'IN_PROGRESS' ? '进行中' : - item.status === 'COMPLETED' ? '已完成' : '未知'} - */} -
      -
      -
      -
    • - ))} -
    - )} -
    - ); -}; - -export default TaskList; +import { Avatar, Skeleton, Empty } from "@arco-design/web-react"; +import IconFont from "@/components/IconFont"; +import "./index.css"; + +const TaskList = ({ tasks = [], loading }) => { + if (loading) { + return ( +
    +

    事项

    + +
    + ); + } + + const getTaskTypeText = (type) => { + const typeMap = { + HOMEWORK: "作业", + PROJECT: "项目", + REPORT: "报告", + INTERVIEW: "面试", + OTHER: "其他", + course: "课程", + exam: "考试" + }; + return typeMap[type] || type; + }; + + return ( +
    +

    + + 当日事项 +

    + {tasks.length === 0 ? ( +
    + +
    + ) : ( +
      + {tasks.map((item, index) => ( +
    • +
      + + {item?.teacherAvatar ? ( + avatar + ) : ( + item?.teacherName?.charAt(0) || "T" + )} + + + {item?.teacherName || "未知教师"} + +
      +
      +
      +

      + + {getTaskTypeText(item.type)}: + + {item?.title} +

      +
      + + {item?.duration} + + {/* + {item.status === 'PENDING' ? '待完成' : + item.status === 'IN_PROGRESS' ? '进行中' : + item.status === 'COMPLETED' ? '已完成' : '未知'} + */} +
      +
      +
      +
    • + ))} +
    + )} +
    + ); +}; + +export default TaskList; diff --git a/src/pages/Dashboard/index.jsx b/src/pages/Dashboard/index.jsx index e1cd1cd..2dca0a4 100644 --- a/src/pages/Dashboard/index.jsx +++ b/src/pages/Dashboard/index.jsx @@ -39,13 +39,22 @@ const Dashboard = () => { // 根据选中日期筛选任务 const getTasksForDate = (date) => { if (!dashboardData?.tasks?.allTasks) return []; - // Check if date is valid before calling toISOString + // Check if date is valid before calling getTime if (!date || isNaN(date.getTime())) { console.warn("Invalid date provided to getTasksForDate:", date); return []; } - const dateStr = date.toISOString().split("T")[0]; - return dashboardData.tasks.allTasks.filter((task) => task.date === dateStr); + // 使用本地日期格式,避免时区问题 + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const dateStr = `${year}-${month}-${day}`; + + console.log("Looking for tasks on date:", dateStr); + const tasks = dashboardData.tasks.allTasks.filter((task) => task.date === dateStr); + console.log("Found tasks:", tasks); + + return tasks; }; return ( diff --git a/src/pages/PersonalProfile/components/StudyStudes/index.css b/src/pages/PersonalProfile/components/StudyStudes/index.css index df3f099..1789b35 100644 --- a/src/pages/PersonalProfile/components/StudyStudes/index.css +++ b/src/pages/PersonalProfile/components/StudyStudes/index.css @@ -120,7 +120,7 @@ text-align: center; font-size: 14px; font-weight: 700; - color: #fff; + color: #1d2129; background-size: 100% 100%; } diff --git a/src/pages/PublicCourses/index.jsx b/src/pages/PublicCourses/index.jsx index 9a5e763..c6340a4 100644 --- a/src/pages/PublicCourses/index.jsx +++ b/src/pages/PublicCourses/index.jsx @@ -1,11 +1,12 @@ import CoursesVideoPlayer from "@/components/CoursesVideoPlayer"; import LiveSummary from "@/components/LiveSummary"; +import { mockData } from "@/data/mockData"; import "./index.css"; const PublicCourses = () => { return (
    - +
    ); diff --git a/updateCourseLiveList.js b/updateCourseLiveList.js new file mode 100644 index 0000000..44872f9 --- /dev/null +++ b/updateCourseLiveList.js @@ -0,0 +1,77 @@ +import fs from 'fs'; + +// 读取生成的课程数据 +const courseLiveListData = JSON.parse(fs.readFileSync('courseLiveListData.json', 'utf-8')); + +// 读取mockData.js文件 +let mockDataContent = fs.readFileSync('src/data/mockData.js', 'utf-8'); + +// 找到courseLiveList的开始和结束位置 +const startPattern = /mockData\.courseLiveList = \[/; +const startMatch = mockDataContent.match(startPattern); + +if (startMatch) { + const startIndex = mockDataContent.indexOf(startMatch[0]); + + // 找到对应的结束位置(找到配对的 ]; ) + let braceCount = 0; + let endIndex = startIndex + startMatch[0].length; + let inString = false; + let stringChar = ''; + + for (let i = endIndex; i < mockDataContent.length; i++) { + const char = mockDataContent[i]; + const prevChar = i > 0 ? mockDataContent[i - 1] : ''; + + // 处理字符串 + if (!inString && (char === '"' || char === "'") && prevChar !== '\\') { + inString = true; + stringChar = char; + } else if (inString && char === stringChar && prevChar !== '\\') { + inString = false; + } + + if (!inString) { + if (char === '[') braceCount++; + if (char === ']') { + if (braceCount === 0) { + // 找到了结束位置 + endIndex = i + 1; + // 检查是否有分号 + if (mockDataContent[i + 1] === ';') { + endIndex = i + 2; + } + break; + } + braceCount--; + } + } + } + + // 替换courseLiveList部分 + const newCourseLiveList = `mockData.courseLiveList = ${JSON.stringify(courseLiveListData.courseLiveList, null, 2)};`; + + mockDataContent = + mockDataContent.substring(0, startIndex) + + newCourseLiveList + + mockDataContent.substring(endIndex); + + // 写回文件 + fs.writeFileSync('src/data/mockData.js', mockDataContent); + console.log('✅ mockData.js中的courseLiveList已更新'); + + // 验证9月3日的课程状态 + const sept3Course = courseLiveListData.courseLiveList + .find(unit => unit.unitId === 'unit7') + ?.courses.find(c => c.date === '2025-09-03'); + + if (sept3Course) { + console.log('\n9月3日课程状态:'); + console.log(` 课程:${sept3Course.courseName}`); + console.log(` completed: ${sept3Course.completed}`); + console.log(` current: ${sept3Course.current}`); + console.log(` upcoming: ${sept3Course.upcoming}`); + } +} else { + console.error('❌ 无法找到mockData.courseLiveList的位置'); +} \ No newline at end of file diff --git a/updateDashboardTasks.js b/updateDashboardTasks.js new file mode 100644 index 0000000..ba746cc --- /dev/null +++ b/updateDashboardTasks.js @@ -0,0 +1,58 @@ +import fs from 'fs'; + +// 读取生成的任务数据 +const tasksData = JSON.parse(fs.readFileSync('dashboardTasksData.json', 'utf-8')); + +// 读取mockData.js +let mockDataContent = fs.readFileSync('src/data/mockData.js', 'utf-8'); + +// 找到任务数据更新的位置 +// 查找 mockData.dashboardStatistics.tasks = { 的位置 +const tasksPattern = /mockData\.dashboardStatistics\.tasks = \{[\s\S]*?\};/; +const tasksMatch = mockDataContent.match(tasksPattern); + +if (tasksMatch) { + // 生成weekTasks(本周任务) + const weekStart = new Date(); + weekStart.setDate(weekStart.getDate() - weekStart.getDay()); + weekStart.setHours(0, 0, 0, 0); + + const weekEnd = new Date(weekStart); + weekEnd.setDate(weekEnd.getDate() + 6); + + const weekTasks = tasksData.allTasks.filter(task => { + const taskDate = new Date(task.date); + return taskDate >= weekStart && taskDate <= weekEnd; + }); + + // 构建新的tasks对象 + const newTasks = `mockData.dashboardStatistics.tasks = { + todayTasks: ${JSON.stringify(tasksData.todayTasks, null, 4).split('\n').map((line, i) => i === 0 ? line : ' ' + line).join('\n')}, + weekTasks: ${JSON.stringify(weekTasks.slice(0, 5), null, 4).split('\n').map((line, i) => i === 0 ? line : ' ' + line).join('\n')}, + allTasks: ${JSON.stringify(tasksData.allTasks, null, 4).split('\n').map((line, i) => i === 0 ? line : ' ' + line).join('\n')} + };`; + + // 替换原有的tasks数据 + mockDataContent = mockDataContent.replace(tasksPattern, newTasks); + + // 写回文件 + fs.writeFileSync('src/data/mockData.js', mockDataContent); + + console.log('✅ mockData.js中的tasks数据已更新'); + console.log(`📝 今日任务: ${tasksData.todayTasks.length} 个`); + console.log(`📅 本周任务: ${weekTasks.length} 个`); + console.log(`📋 总任务: ${tasksData.allTasks.length} 个`); + + // 验证今日任务 + if (tasksData.todayTasks.length > 0) { + console.log('\n今日任务详情:'); + tasksData.todayTasks.forEach(task => { + console.log(` - ${task.title}`); + console.log(` 课程:${task.courseName}`); + console.log(` 讲师:${task.teacher}`); + console.log(` 状态:${task.status}`); + }); + } +} else { + console.error('❌ 无法找到tasks数据的位置'); +} \ No newline at end of file