import { useState, useEffect } from "react"; import styles from "./departmentUser.module.less"; import { Typography, Input, Modal, Image, Button, Space, message, Table, Select, } from "antd"; import { useNavigate, useLocation } from "react-router-dom"; import { BackBartment, DurationText } from "../../compenents"; import { dateFormat } from "../../utils/index"; import { user as member } from "../../api/index"; const { Column, ColumnGroup } = Table; import * as XLSX from "xlsx"; interface DataType { id: React.Key; title: string; type: string; created_at: string; total_duration: number; finished_duration: number; is_finished: boolean; } const MemberDepartmentProgressPage = () => { 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 [total, setTotal] = useState(0); const [refresh, setRefresh] = useState(false); const [courses, setCourses] = useState([]); const [records, setRecords] = useState({}); const [totalHour, setTotalHour] = useState(0); const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [id_card, setIdCard] = useState(""); const [showMode, setShowMode] = useState("all"); const [did, setDid] = useState(Number(result.get("id"))); const [title, setTitle] = useState(String(result.get("title"))); const [exportLoading, setExportLoading] = useState(false); const modes = [ { label: "全部", value: "all" }, { label: "不显示公开课", value: "only_dep" }, ]; useEffect(() => { setDid(Number(result.get("id"))); setTitle(String(result.get("title"))); resetData(); }, [result.get("id"), result.get("title")]); useEffect(() => { getData(); }, [refresh, page, size]); const getData = () => { if (loading) { return; } setLoading(true); member .departmentProgress(did, page, size, { sort_field: "", sort_algo: "", name: name, email: email, id_card: id_card, show_mode: showMode, }) .then((res: any) => { setList(res.data.data); setTotal(res.data.total); let data = res.data.courses; let arr = []; let value = 0; for (let key in data) { arr.push(data[key]); value += data[key].class_hour; } setCourses(arr); setTotalHour(value); setRecords(res.data.user_course_records); setLoading(false); }); }; const resetData = () => { setName(""); setEmail(""); setIdCard(""); setShowMode("all"); setPage(1); setSize(10); setList([]); setRefresh(!refresh); }; 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 getTotalHours = (params: any) => { if (params) { let value = 0; for (let key in params) { value += params[key].hour_count; } return value; } else { return 0; } }; const getFinishedHours = (params: any) => { if (params) { let value = 0; for (let key in params) { value += params[key].finished_count; } return value; } else { return 0; } }; const exportExcel = () => { if (exportLoading) { return; } setExportLoading(true); let filter = { sort_field: "", sort_algo: "", name: name, email: email, id_card: id_card, show_mode: showMode, }; member.departmentProgress(did, page, total, filter).then((res: any) => { if (res.data.total === 0) { message.error("数据为空"); setExportLoading(false); return; } let filename = title + "学习进度.xlsx"; let sheetName = "sheet1"; let data = []; let arr = ["学员"]; courses.map((item: any) => { arr.push(item.title); }); arr.push("总计课时"); data.push(arr); res.data.data.forEach((item: any) => { let arr = [item.name]; courses.map((it: any) => { if (records && records[item.id] && records[item.id][it.id]) { if (records && records[item.id][it.id].is_finished === 1) { arr.push("已学完"); } else { arr.push( records && records[item.id][it.id].finished_count + " / " + it.class_hour ); } } else { arr.push(0 + " / " + it.class_hour); } }); arr.push(getFinishedHours(records[item.id]) + " / " + totalHour); data.push(arr); }); const jsonWorkSheet = XLSX.utils.json_to_sheet(data); const workBook: XLSX.WorkBook = { SheetNames: [sheetName], Sheets: { [sheetName]: jsonWorkSheet, }, }; XLSX.writeFile(workBook, filename); setExportLoading(false); }); }; return (
(以下表格内数字对应的是表头课程的“已学完课时数/总课时数”)
姓名: { setName(e.target.value); }} allowClear style={{ width: 160 }} placeholder="请输入姓名关键字" />
{/*
邮箱: { setEmail(e.target.value); }} allowClear style={{ width: 160 }} placeholder="请输入邮箱" />
模式: