2025-09-11 15:51:09 +08:00
|
|
|
|
import { useState, useEffect, useRef } from "react";
|
2025-09-11 14:14:45 +08:00
|
|
|
|
import { useSearchParams } from "react-router-dom";
|
2025-09-03 13:26:13 +08:00
|
|
|
|
import CoursesVideoPlayer from "@/components/CoursesVideoPlayer";
|
2025-09-06 16:43:50 +08:00
|
|
|
|
import PublicCourseList from "@/components/PublicCourseList";
|
2025-09-03 13:26:13 +08:00
|
|
|
|
import { mockData } from "@/data/mockData";
|
|
|
|
|
|
import "./index.css";
|
|
|
|
|
|
|
|
|
|
|
|
const PublicCourses = () => {
|
2025-09-07 23:09:48 +08:00
|
|
|
|
// 默认不选中任何课程,显示黑屏状态
|
2025-09-06 16:43:50 +08:00
|
|
|
|
const [selectedCourse, setSelectedCourse] = useState(null);
|
2025-09-11 14:14:45 +08:00
|
|
|
|
const [searchParams] = useSearchParams();
|
2025-09-11 15:51:09 +08:00
|
|
|
|
const publicCourseListRef = useRef(null);
|
2025-09-11 14:14:45 +08:00
|
|
|
|
|
|
|
|
|
|
// 检查URL参数,如果有courseId则自动打开对应课程
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
const courseId = searchParams.get('courseId');
|
|
|
|
|
|
const courseTitle = searchParams.get('courseTitle');
|
|
|
|
|
|
|
2025-09-11 15:51:09 +08:00
|
|
|
|
console.log('PublicCourses - URL params:', { courseId, courseTitle });
|
|
|
|
|
|
|
2025-09-11 14:14:45 +08:00
|
|
|
|
if (courseId || courseTitle) {
|
2025-09-11 15:51:09 +08:00
|
|
|
|
// 需要给组件时间加载数据
|
|
|
|
|
|
const timer = setTimeout(() => {
|
|
|
|
|
|
if (publicCourseListRef.current) {
|
|
|
|
|
|
console.log('PublicCourses - Calling selectCourse via ref');
|
|
|
|
|
|
publicCourseListRef.current.selectCourse(courseId, courseTitle);
|
|
|
|
|
|
}
|
|
|
|
|
|
}, 500); // 等待数据加载
|
2025-09-11 14:14:45 +08:00
|
|
|
|
|
2025-09-11 15:51:09 +08:00
|
|
|
|
return () => clearTimeout(timer);
|
2025-09-11 14:14:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
}, [searchParams]);
|
2025-09-06 16:43:50 +08:00
|
|
|
|
|
|
|
|
|
|
const handleCourseClick = (course) => {
|
|
|
|
|
|
setSelectedCourse(course);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-09-03 13:26:13 +08:00
|
|
|
|
return (
|
|
|
|
|
|
<div className="public-courses-page">
|
2025-09-06 16:43:50 +08:00
|
|
|
|
<div className="public-courses-content">
|
|
|
|
|
|
<CoursesVideoPlayer
|
|
|
|
|
|
selectedCourse={selectedCourse}
|
|
|
|
|
|
teacherData={mockData.teacherData}
|
2025-09-08 03:53:49 +08:00
|
|
|
|
unitPosters={mockData.publicCourseBackgrounds}
|
|
|
|
|
|
isPublicCourse={true}
|
2025-09-06 16:43:50 +08:00
|
|
|
|
/>
|
2025-09-11 15:51:09 +08:00
|
|
|
|
<PublicCourseList
|
|
|
|
|
|
ref={publicCourseListRef}
|
|
|
|
|
|
onCourseClick={handleCourseClick}
|
|
|
|
|
|
/>
|
2025-09-06 16:43:50 +08:00
|
|
|
|
</div>
|
2025-09-03 13:26:13 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default PublicCourses;
|