import { useState, useEffect, useRef } from "react"; import styles from "./learn.module.less"; import { Row, Image, Table } from "antd"; import { useLocation } from "react-router-dom"; import { BackBartment, DurationText } from "../../compenents"; import { dateFormat } from "../../utils/index"; import { user as member } from "../../api/index"; import * as echarts from "echarts"; import type { ColumnsType } from "antd/es/table"; interface DataType { id: React.Key; title: string; type: string; created_at: string; total_duration: number; finished_duration: number; is_finished: boolean; } const MemberLearnPage = () => { let chartRef = useRef(null); const result = new URLSearchParams(useLocation().search); const [loading, setLoading] = useState(false); const [page, setPage] = useState(1); const [size, setSize] = useState(10); const [list, setList] = useState([]); const [hours, setHours] = useState({}); const [total, setTotal] = useState(0); const [refresh, setRefresh] = useState(false); const [loading2, setLoading2] = useState(false); const [page2, setPage2] = useState(1); const [size2, setSize2] = useState(10); const [list2, setList2] = useState([]); const [courses, setCourses] = useState({}); const [total2, setTotal2] = useState(0); const [refresh2, setRefresh2] = useState(false); const [uid, setUid] = useState(Number(result.get("id"))); useEffect(() => { getZxtData(); return () => { window.onresize = null; }; }, [uid]); useEffect(() => { getLearnHours(); }, [refresh, page, size]); useEffect(() => { getLearnCourses(); }, [refresh2, page2, size2]); const getZxtData = () => { member.learnStats(uid).then((res: any) => { renderView(res.data); }); }; const renderView = (params: any) => { const timeData: any = []; const valueData: any = []; params.map((item: any) => { timeData.push(item.key); valueData.push(item.value / 1000); }); let dom: any = chartRef.current; let myChart = echarts.init(dom); myChart.setOption({ tooltip: { trigger: "axis", }, legend: { data: ["每日学习时长"], x: "right", }, grid: { left: "3%", right: "4%", bottom: "3%", containLabel: true, }, xAxis: { type: "category", boundaryGap: false, data: timeData, }, yAxis: { type: "value", }, series: [ { name: "每日学习时长(秒)", type: "line", data: valueData, }, ], }); window.onresize = () => { myChart.resize(); }; }; const getLearnHours = () => { if (loading) { return; } setLoading(true); member .learnHours(uid, page, size, { sort_field: "", sort_algo: "", is_finished: "", }) .then((res: any) => { setList(res.data.data); setHours(res.data.hours); setTotal(res.data.total); setLoading(false); }); }; const getLearnCourses = () => { if (loading2) { return; } setLoading2(true); member .learnCourses(uid, page2, size2, { sort_field: "", sort_algo: "", is_finished: "", }) .then((res: any) => { setList2(res.data.data); setCourses(res.data.courses); setTotal2(res.data.total); setLoading2(false); }); }; const paginationProps = { current: page, //当前页码 pageSize: size, total: total, // 总条数 onChange: (page: number, pageSize: number) => handlePageChange(page, pageSize), //改变页码的函数 showSizeChanger: true, }; const handlePageChange = (page: number, pageSize: number) => { setPage(page); setSize(pageSize); }; const paginationProps2 = { current: page2, //当前页码 pageSize: size2, total: total2, // 总条数 onChange: (page: number, pageSize: number) => handlePageChange2(page, pageSize), //改变页码的函数 showSizeChanger: true, }; const handlePageChange2 = (page: number, pageSize: number) => { setPage2(page); setSize2(pageSize); }; const columns: ColumnsType = [ { title: "课时标题", dataIndex: "title", render: (_, record: any) => ( <> {hours[record.hour_id].title} ), }, { title: "课时类型", dataIndex: "type", render: (_, record: any) => ( <> {hours[record.hour_id].type} ), }, { title: "总时长", dataIndex: "total_duration", render: (_, record: any) => ( <> ), }, { title: "已学习时长", dataIndex: "finished_duration", render: (_, record: any) => ( <> ), }, { title: "状态", dataIndex: "is_finished", render: (_, record: any) => ( <> {record.is_finished === 1 ? 已学完 : 未学完} ), }, { title: "时间", dataIndex: "created_at", render: (text: string) => {dateFormat(text)}, }, ]; const column2: ColumnsType = [ { title: "课程", dataIndex: "title", render: (_, record: any) => (
{courses[record.course_id].title}
), }, { title: "总课时", dataIndex: "total_duration", render: (_, record: any) => ( <> {record.hour_count} ), }, { title: "已学习课时", dataIndex: "finished_duration", render: (_, record: any) => ( <> {record.finished_count} ), }, { title: "状态", dataIndex: "is_finished", render: (_, record: any) => ( <> {record.is_finished === 1 ? 已学完 : 未学完} ), }, { title: "时间", dataIndex: "created_at", render: (text: string) => {dateFormat(text)}, }, ]; return ( <>
学习时长统计
课时学习记录
record.id} />
线上课学习记录
record.id} /> ); }; export default MemberLearnPage;