feat: 优化课程列表功能和班级排名样式

- 修复课程列表单元展开/收起功能
- 优化日历页面跳转到课程列表的延迟时间
- 恢复复合技能课和垂直技能课的分割线及收缩功能
- 添加班级排名第一二三名的特殊样式图标
- 修复Collapse组件onChange事件处理
- 优化课程自动选中和滚动定位功能

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-09-11 15:51:09 +08:00
parent 561d5c286d
commit c969677ef6
18 changed files with 599 additions and 47 deletions

View File

@@ -1,4 +1,4 @@
import { useState, useEffect } from "react";
import { useState, useEffect, useRef } from "react";
import { useSearchParams } from "react-router-dom";
import CoursesVideoPlayer from "@/components/CoursesVideoPlayer";
import PublicCourseList from "@/components/PublicCourseList";
@@ -9,22 +9,25 @@ const PublicCourses = () => {
// 默认不选中任何课程,显示黑屏状态
const [selectedCourse, setSelectedCourse] = useState(null);
const [searchParams] = useSearchParams();
const publicCourseListRef = useRef(null);
// 检查URL参数如果有courseId则自动打开对应课程
useEffect(() => {
const courseId = searchParams.get('courseId');
const courseTitle = searchParams.get('courseTitle');
console.log('PublicCourses - URL params:', { courseId, courseTitle });
if (courseId || courseTitle) {
// 查找对应的课程
const publicCourses = mockData.publicCourses || [];
const targetCourse = publicCourses.find(course =>
course.id === courseId || course.title === courseTitle
);
// 需要给组件时间加载数据
const timer = setTimeout(() => {
if (publicCourseListRef.current) {
console.log('PublicCourses - Calling selectCourse via ref');
publicCourseListRef.current.selectCourse(courseId, courseTitle);
}
}, 500); // 等待数据加载
if (targetCourse) {
setSelectedCourse(targetCourse);
}
return () => clearTimeout(timer);
}
}, [searchParams]);
@@ -41,7 +44,10 @@ const PublicCourses = () => {
unitPosters={mockData.publicCourseBackgrounds}
isPublicCourse={true}
/>
<PublicCourseList onCourseClick={handleCourseClick} />
<PublicCourseList
ref={publicCourseListRef}
onCourseClick={handleCourseClick}
/>
</div>
</div>
);