fix: 修复多个页面显示和数据问题

- 修复定制求职策略页面图片超出容器问题
- 修复企业内推岗位页面面试数据结构和显示
- 删除日历页面的当日事项侧边栏
- 修复主页Dashboard当日事项数据显示
  - 修正9月份任务数据的teacherName字段
  - 修复日期筛选的时区问题
  - 删除任务列表中的课程名称显示
  - 将英文"course"改为中文"课程"
- 添加9月份完整的任务数据到allTasks数组

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-09-03 13:01:24 +08:00
parent fd6cb830f1
commit efd4dd57ad
21 changed files with 10060 additions and 1589 deletions

View File

@@ -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": []

1
.serena/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/cache

View File

@@ -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
}
]
}

619
dashboardTasksData.json Normal file
View File

@@ -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"
}

View File

@@ -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天内的课程
});
}
}

View File

@@ -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}`);

69
removeDuplicates.js Normal file
View File

@@ -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(`📄 文件已更新`);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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
<span onClick={() => handleClickBtn(2)}>下一集 &gt;</span>
</div>
<div className="courses-video-player-video">
{selectedCourse?.current ? (
{/* 如果没有selectedCourse公共课直播间或者selectedCourse.current为true都播放视频 */}
{!selectedCourse || selectedCourse?.current ? (
<video src="/live.mp4" autoPlay controls></video>
) : (
<img
@@ -99,7 +98,7 @@ export default ({ className = "", isLock = false, selectedCourse, teacherData, u
<div className="courses-video-player-audience-info">
<div className="avatar-wrapper">
<Avatar
className={`teacher-avatar ${needsAdjustment ? 'avatar-adjust' : ''}`}
className={`teacher-avatar ${needsAdjustment ? 'avatar-adjust' : ''} ${currentTeacher.name === '刘杰' ? 'teacher-liujie' : ''}`}
style={{ backgroundColor: getAvatarBackground(currentTeacher.name) }}
>
<img

View File

@@ -14,7 +14,9 @@
width: 320px;
height: 320px;
background-image: url("@/assets/images/Common/lock_bg.png");
background-size: 100% 100%;
background-size: contain;
background-position: center;
background-repeat: no-repeat;
> span {
position: absolute;

File diff suppressed because it is too large Load Diff

View File

@@ -498,6 +498,7 @@
border-top: 6px solid var(--text-primary);
}
/* 事件详情模态框样式 - 遵循跨国企业级后台系统设计哲学v2.0 */
/* 模态框遮罩层 */

View File

@@ -67,6 +67,8 @@ const CalendarPage = () => {
}
};
return (
<div className="calendar-page">
<div className="calendar-page-wrapper">

View File

@@ -50,7 +50,7 @@ const CompanyJobsPage = () => {
}
// 设置面试数据
if (res.data?.interviews && studentInfo?.id) {
if (res.data?.interviews) {
// Mock数据已经是前端格式直接使用不需要映射
const interviews = res.data.interviews.list || [];
setInterviews(interviews);

View File

@@ -19,6 +19,8 @@ const TaskList = ({ tasks = [], loading }) => {
REPORT: "报告",
INTERVIEW: "面试",
OTHER: "其他",
course: "课程",
exam: "考试"
};
return typeMap[type] || type;
};
@@ -64,7 +66,6 @@ const TaskList = ({ tasks = [], loading }) => {
{item?.title}
</p>
<div>
课程名称{item?.courseName}
<span className="module-tasks-item-content-info-duration">
{item?.duration}
</span>

View File

@@ -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 (

View File

@@ -120,7 +120,7 @@
text-align: center;
font-size: 14px;
font-weight: 700;
color: #fff;
color: #1d2129;
background-size: 100% 100%;
}

View File

@@ -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 (
<div className="public-courses-page">
<CoursesVideoPlayer />
<CoursesVideoPlayer teacherData={mockData.teacherData} />
<LiveSummary />
</div>
);

77
updateCourseLiveList.js Normal file
View File

@@ -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的位置');
}

58
updateDashboardTasks.js Normal file
View File

@@ -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数据的位置');
}