import { useState, useEffect, forwardRef, useImperativeHandle } from "react"; import { Collapse, Timeline, Spin } from "@arco-design/web-react"; import { IconDown, IconRight } from "@arco-design/web-react/icon"; import { getPublicCourseLiveList } from "@/services/courseLive"; import "./index.css"; // 单元海报数据将从服务器返回的数据中获取 const TimelineItem = Timeline.Item; const CollapseItem = Collapse.Item; const PublicCourseList = forwardRef(({ className = "", onCourseClick }, ref) => { const [courseLiveList, setCourseLiveList] = useState([]); const [loading, setLoading] = useState(false); const [selectedCourseId, setSelectedCourseId] = useState(null); const [activeKeys, setActiveKeys] = useState([]); // 控制各分类的展开/收缩状态,默认全部展开 const [categoryExpanded, setCategoryExpanded] = useState({ 'ai': true, // 终生学习系统 'public': true, // 企业高管公开课 'marketing': true // 营销能力课 }); useEffect(() => { fetchCourseList(); }, []); // 暴露方法给父组件调用 useImperativeHandle(ref, () => ({ selectCourse: (courseId, courseName) => { console.log('PublicCourseList - selectCourse called:', courseId, courseName); console.log('PublicCourseList - Current courseLiveList:', courseLiveList); // 查找课程并触发点击 for (let i = 0; i < courseLiveList.length; i++) { const unit = courseLiveList[i]; console.log(`Checking unit ${i}:`, unit.unitName, 'courses:', unit.courses?.length); if (!unit.courses) { console.log(`Unit ${unit.unitName} has no courses`); continue; } const courseIndex = unit.courses.findIndex(c => { const matches = c.courseId === courseId || c.courseName === courseName; if (matches) { console.log('Found matching course:', c); } return matches; }); if (courseIndex !== -1) { const course = unit.courses[courseIndex]; // 展开对应的单元 - 使用正确的索引 const activeKey = String(i + 1); // 如果单元未展开,则添加到 activeKeys 中 setActiveKeys(prevKeys => { if (!prevKeys.includes(activeKey)) { console.log('Adding activeKey:', activeKey, 'to existing keys:', prevKeys); return [...prevKeys, activeKey]; } return prevKeys; }); // 设置选中的课程 console.log('Setting selectedCourseId to:', course.courseId); setSelectedCourseId(course.courseId); // 触发点击事件 if (onCourseClick) { console.log('Triggering onCourseClick with course:', course); onCourseClick({ ...course, unitName: unit.unitName, unitPoster: unit.unitPoster || "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/public_bg/recuW7gMz6sRee.jpg" }); } // 滚动到对应的单元和课程位置 // 需要等待折叠面板展开动画完成 setTimeout(() => { const unitElement = document.querySelector(`.course-list-item:nth-child(${i + 1})`); if (unitElement) { console.log('Scrolling to unit element'); unitElement.scrollIntoView({ behavior: 'smooth', block: 'center' }); } // 查找并滚动到具体课程 const courseElements = document.querySelectorAll('.time-line-item'); courseElements.forEach(element => { const courseText = element.querySelector('p')?.textContent; if (courseText === course.courseName) { console.log('Scrolling to course element'); element.scrollIntoView({ behavior: 'smooth', block: 'center' }); } }); }, 300); // 等待折叠面板展开 console.log('Course found and selected:', course.courseName); return; // 找到后退出 } } console.log('Course not found:', courseId, courseName); } }), [courseLiveList, onCourseClick]); const fetchCourseList = async () => { setLoading(true); try { const res = await getPublicCourseLiveList(); if (res.success) { const courseList = res.data || []; setCourseLiveList(courseList); // 不设置默认选中,保持黑屏状态 } } catch (error) { console.error("Failed to fetch course list:", error); } finally { setLoading(false); } }; const getCourseStatus = (course) => { if (course.completed) return "finish"; if (course.current) return "active"; // 判断未来课程的具体状态 if (course.upcoming) { const courseDate = new Date(course.date); const today = new Date(); // 重置时间部分只比较日期 courseDate.setHours(0, 0, 0, 0); today.setHours(0, 0, 0, 0); const timeDiff = courseDate - today; const daysDiff = Math.floor(timeDiff / (24 * 60 * 60 * 1000)); // 未来7天内的课程显示为"即将开始" if (daysDiff > 0 && daysDiff <= 7) { return "coming"; } // 7天后的课程显示为"未开始" return "not-started"; } // 默认状态 return "pending"; }; // 获取图标类型 const getDotIcon = (course) => { if (course.completed) return
; if (course.current) return ; return ; }; if (loading) { return (公共课程列表
公共课程列表
{course.courseName}