import React, { useEffect, useRef, useState } from 'react'; import { Button, Empty, Image, Input, Space } from 'antd'; import { ReactComponent as SvgLogo } from '@/icons/logo.svg'; import './styles/side-menu.less'; import { SearchOutlined } from '@ant-design/icons'; import ProList from '@ant-design/pro-list'; import { history } from '@@/core/history'; import { useLocation } from '@@/exports'; import { getTeachers } from '@/services/side/SideController'; import { getTeacherCourses } from '@/services/record/RecordController'; import CourseImage from '@/assets/img/course_image.png'; interface SideMenuProps { onCollaped: (isExpanded: boolean)=> void, initWidth: number } function SideMenu ({ initWidth = 200, }: SideMenuProps) { const location = useLocation(); const [isLessionPage, setIsLessionPage] = useState(false); const [activeKey, setActiveKey] = useState(''); const [activeCourseKey, setActiveCourseKey] = useState(''); const [courseTitle, setCourseTitle] = useState(''); const [teacherName, setTeacherName] = useState(''); const [teacherData, setTeacherData] = useState([]); const [courseData, setCourseData] = useState<[]>([]); const containerRef = useRef(null); const [loading, setLoading] = useState(false); const [hasMore, setHasMore] = useState(true); const [page, setPage] = useState(1); async function getTeacherCourseList(current: number) { const searchParams = new URLSearchParams(location.search); setActiveCourseKey(searchParams.get('courseId') as string) setLoading(true); try { const data = await getTeacherCourses({ teacherId: searchParams.get('teacherId') as string, courseTitle: courseTitle, current: current, size: 10, }) if (data.code === 200) { if (data.data.records.length < 10) { setHasMore(false); } else { setHasMore(true); } if (current === 1) { setCourseData(data.data.records); } else { setCourseData(prev => [...prev, ...data.data.records] as []); } setPage(current + 1); } } finally { setLoading(false); } } useEffect(() => { if(location.pathname) { if(location.pathname.includes('play')) { setIsLessionPage(true); const onData = async () => { await getTeacherCourseList(1); } onData() } else { setIsLessionPage(false); } } }, [location.pathname]); async function getTeacherList() { const data: API.SideRes = await getTeachers({ teacherName: teacherName, }) if (data.code === 200) { setTeacherData(data.data) if (data.data.length > 0) { const searchParams = new URLSearchParams(location.search); if (searchParams.get('teacherId')) { setActiveKey(searchParams.get('teacherId') as string); } else { setActiveKey(data.data[0].teacherId as string) localStorage.setItem('teacherName', data.data[0].teacherName as string) localStorage.setItem('schoolName', data.data[0].schoolName as string) history.push('/record?teacherId=' + data.data[0].teacherId); } } } } useEffect(() => { const container = containerRef.current; if (!container) return; const handleScroll = () => { const { scrollTop, scrollHeight, clientHeight } = container; // 距离底部50px触发加载 if (!loading && hasMore && scrollHeight - (scrollTop + clientHeight) < 50) { getTeacherCourseList(page); } }; container.addEventListener('scroll', handleScroll); return () => container?.removeEventListener('scroll', handleScroll); }, [loading, hasMore, page]); useEffect(() => { const onData = async () => { await getTeacherList() } onData() }, []); return (

评审管理系统

{ isLessionPage ? (
{localStorage.getItem('teacherName')}
{localStorage.getItem('schoolName')}
setCourseTitle(e.target.value)} placeholder="输入课程主题搜索" allowClear />
) : (
参评教师
setTeacherName(e.target.value)} placeholder="输入教师姓名搜索" allowClear />
) }
{ isLessionPage ? ( className={'course-list'} pagination={false} showActions="hover" tableExtraRender={(_: any, list: any) => (
{list.map((item: any) => (
{ history.push(`/play?teacherId=${item.teacherId}&courseId=${item.id}`); setActiveCourseKey(item.id); }} className={item.id === activeCourseKey ? 'course-active' : ''} >
{item.courseTitle}
{item.subjectName}
所属年级:{item.periodName}
授课时间:{item.courseDate}
))} {loading &&
加载中...
} {!hasMore && }
)} metas={{ actions: {}, }} dataSource={courseData} /> ) : ( className={'list-box'} pagination={false} showActions="hover" onItem={(record) => { return { onClick: () => { setActiveKey(record.teacherId); localStorage.setItem('teacherName', record.teacherName) localStorage.setItem('schoolName', record.schoolName) history.push('/record?teacherId=' + record.teacherId); }, }; }} rowClassName={(record: { teacherId: string }) => record.teacherId === activeKey ? 'active' : '' } metas={{ title: { dataIndex: 'teacherName', }, description: { dataIndex: 'schoolName', render: (text) =>
{text}
, }, }} dataSource={teacherData} /> ) }
); } export default SideMenu;