import { useEffect, useState } from "react"; import { Image, ProgressCircle, Tabs, Toast } from "antd-mobile"; import styles from "./index.module.scss"; import { useNavigate, useLocation, useParams } from "react-router-dom"; import backIcon from "../../assets/images/commen/icon-back-n.png"; import { course as vod } from "../../api/index"; import { isEmptyObject, isWechat, isIOS } from "../../utils/index"; import { Empty } from "../../components"; import { HourCompenent } from "./compenents/hour"; type LocalUserLearnHourRecordModel = { [key: number]: UserLearnHourRecordModel; }; type LocalCourseHour = { [key: number]: CourseHourModel[]; }; type tabModal = { key: number; label: string; }; type attachModal = { id: number; course_id: number; rid: number; sort: number; title: string; type: string; url?: string; }; const CoursePage = () => { const { courseId } = useParams(); const navigate = useNavigate(); const result = new URLSearchParams(useLocation().search); const [course, setCourse] = useState(null); const [chapters, setChapters] = useState([]); const [hours, setHours] = useState(null); const [learnRecord, setLearnRecord] = useState( null ); const [learnHourRecord, setLearnHourRecord] = useState({}); const [courseTypeText, setCourseTypeText] = useState(""); const [userCourseProgress, setUserCourseProgress] = useState(0); const [tabKey, setTabKey] = useState(Number(result.get("tab") || 1)); const [attachments, setAttachments] = useState([]); const [items, setItems] = useState([]); const [downLoadTemplateURL, setDownLoadTemplateURL] = useState(""); useEffect(() => { getDetail(); }, [courseId]); const getDetail = () => { vod.detail(Number(courseId)).then((res: any) => { let courseItem: CourseModel = res.data.course; document.title = courseItem.title || "课程详情"; setCourse(courseItem); setChapters(res.data.chapters); setHours(res.data.hours); if (res.data.learn_record) { setLearnRecord(res.data.learn_record); } if (res.data.learn_hour_records) { setLearnHourRecord(res.data.learn_hour_records); } let arr = res.data.attachments; let tabs = [ { key: 1, label: `课程目录`, }, ]; if (arr.length > 0) { tabs.push({ key: 2, label: `课程附件`, }); setAttachments(arr); } setItems(tabs); }); }; useEffect(() => { if (course) { setCourseTypeText(course.is_required === 1 ? "必修课" : "选修课"); } }, [course]); useEffect(() => { if (learnRecord?.progress) { setUserCourseProgress(Math.floor(learnRecord.progress / 100)); } else if (learnHourRecord && !isEmptyObject(learnHourRecord)) { setUserCourseProgress(1); } else { setUserCourseProgress(0); } }, [learnRecord, learnHourRecord]); const playVideo = (cid: number, id: number) => { navigate(`/course/${cid}/hour/${id}`); }; const downLoadFile = (cid: number, id: number) => { vod.downloadAttachment(cid, id).then((res: any) => { if (isWechat()) { if (isIOS()) { Toast.show("请点击右上角···浏览器打开下载"); } var input = document.createElement("input"); input.value = res.data.download_url; document.body.appendChild(input); input.select(); document.execCommand("Copy"); document.body.removeChild(input); window.open(res.data.download_url); } else { if (isIOS()) { setDownLoadTemplateURL(res.data.download_url); setTimeout(() => { let $do: any = document.querySelector("#downLoadExcel"); $do.click(); }, 500); } else { window.open(res.data.download_url); } } }); }; return (
navigate(-1)} />
{course?.title + ""}
已学完课时{" "} {learnRecord ? learnRecord.finished_count || 0 : 0} {" "} / {course?.class_hour}
{courseTypeText}
{userCourseProgress}%
{ setTabKey(Number(key)); }} style={{ "--fixed-active-line-width": "20px", "--active-line-height": "3px", "--active-title-color": "rgba(0,0,0,0.88)", "--active-line-border-radius": "2px", "--title-font-size": "16px", "--content-padding": "18px", }} > {items.map((item) => ( ))}
{tabKey === 1 && ( <> {course?.short_desc && ( <>
{course.short_desc}
)}
{chapters.length === 0 && !hours && } {chapters.length === 0 && hours && (
{hours[0].map((item: CourseHourModel) => (
{ playVideo(cid, id); }} >
))}
)} {chapters.length > 0 && hours && (
{chapters.map((item: ChapterModel) => (
{item.name}
{hours[item.id]?.map((it: CourseHourModel) => (
{ playVideo(cid, id); }} >
))}
))}
)}
)} {tabKey === 2 && (
{attachments.map((item: any, index: number) => (
课件
{item.title}.{item.ext}
downLoadFile(item.course_id, item.id)} > 下载
))}
)}
); }; export default CoursePage;