From 27ec0e6c4adedf4a49c0fe74f5823e11574dc579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=BA=E7=8B=A8?= <18119604035@163.com> Date: Sun, 23 Apr 2023 15:43:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E9=97=A8=E5=AD=A6=E5=91=98=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0=E8=BF=9B=E5=BA=A6=E5=88=97=E8=A1=A8=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/member/departmentUser.tsx | 100 ++++++++++++++++++++++++---- 1 file changed, 88 insertions(+), 12 deletions(-) diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx index 96f916c..2db7ba7 100644 --- a/src/pages/member/departmentUser.tsx +++ b/src/pages/member/departmentUser.tsx @@ -9,12 +9,14 @@ import { 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; @@ -40,8 +42,14 @@ const MemberDepartmentProgressPage = () => { 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"))); @@ -64,6 +72,7 @@ const MemberDepartmentProgressPage = () => { name: name, email: email, id_card: id_card, + show_mode: showMode, }) .then((res: any) => { setList(res.data.data); @@ -86,6 +95,7 @@ const MemberDepartmentProgressPage = () => { setName(""); setEmail(""); setIdCard(""); + setShowMode("all"); setPage(1); setSize(10); setList([]); @@ -130,14 +140,80 @@ const MemberDepartmentProgressPage = () => { } }; + 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 (
-
- (以下表格内数字对应的是表头课程的“已学完课时数/总课时数”) +
+ +
+ (以下表格内数字对应的是表头课程的“已学完课时数/总课时数”) +
@@ -162,17 +238,17 @@ const MemberDepartmentProgressPage = () => { placeholder="请输入邮箱" />
- {/*
- 身份证号: - { - setIdCard(e.target.value); - }} +
+ 模式: +