import {ScrollView, Text, View} from "@tarojs/components"; import {FC, useEffect, useState} from "react"; import HVideo from "@/components/video/video"; import {curriculum, HourPlayData} from "@/api"; import {Profile} from '@/store' import Taro from "@tarojs/taro"; import Judge from "@/components/topic/judge"; import unique_ident from "@/hooks/unique_ident"; import MyButton from "@/components/button/MyButton"; import {formatMinute} from "@/utils/time"; import CustomPageContainer from "@/components/custom-page-container/custom-page-container"; interface Props { id: number, courseId: number preview: boolean curEnd: (test?: boolean) => void } let seek: (time: number) => void const Course: FC = ({id, courseId, preview, curEnd}) => { const [breakpoint, setBreakpoint] = useState([]) // 断点 const [show, setShow] = useState(false) // 题 const [data, setData] = useState(null) const [examAll, setExamAll] = useState>([]) // 题库 const [time, setTime] = useState(0) // 进入断点的时间 const [validate, setValidate] = useState(false) // 开启验证 const [record, setRecord] = useState([]) // 考题记录 const [testId, setTestId] = useState(null) const {user} = Profile.useContainer() async function onEnded() { const startRecording = unique_ident.get() startRecording && await curriculum.curEnd(courseId, id, {...startRecording, duration: data?.duration!}) // 结束 unique_ident.remove() if (testId) { if (preview) { // 预览 Taro.showModal({ title: "是否前往考试", success({confirm}) { if (confirm) { curEnd(true) Taro.navigateTo({url: `/pages/business/test/test?testId=${testId}`}) } else { curEnd() } } }) return } Taro.navigateTo({url: `/pages/business/test/test?testId=${testId}`}) curEnd(true) } else { curEnd() } } /** 进入断点 */ function onBreakpoint(breakpoint: number) { setTime(breakpoint) setShow(true) } async function getData() { unique_ident.put(id, Date.now()) const res = await curriculum.hourPlay(courseId, id) if (res) { setData(res) setBreakpoint(res.timeList) setExamAll(res.hourExamQuestions || []) setTestId(res?.hour_test?.id || null) } } useEffect(() => { init() getData() }, [id]) function init(show = true) { show && setShow(false) setValidate(false) setRecord([]) setTime(0) } useEffect(() => { if (!record.length) return; const pass = record.every(d => d) /** 考题正确 */ const {id: question_id, question_type} = examAll?.[time]?.[0] curriculum.answerRecord(id, { is_pass: pass, user_id: user?.id!, time: time, question_type, question_id }).then() /** 删除断点 */ const old: number[] = JSON.parse(JSON.stringify(breakpoint)) const index = old.indexOf(time) old.splice(index, 1) setBreakpoint(old) if (pass) { seek(time) init() } }, [record]) function videoSeek(fn: (time: number) => void) { seek = fn } return ( <> {formatMinute(time)}考题 { examAll?.[time]?.slice(0, 1)?.map((d) => {d.question_type === 2 && setRecord([isAnswer])} />} ) } { record.length > 0 ? { init(); seek(time) }}>关闭 : setValidate(true)}>交卷 } ) } export default Course