diff --git a/src/api/user.ts b/src/api/user.ts index 27682c9..c1165e1 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -108,3 +108,16 @@ export function learnCourses( ...params, }); } + +export function departmentProgress( + id: number, + page: number, + size: number, + params: object +) { + return client.get(`/backend/v1/department/${id}/users`, { + page, + size, + ...params, + }); +} diff --git a/src/pages/member/departmentUser.module.less b/src/pages/member/departmentUser.module.less new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/member/departmentUser.tsx b/src/pages/member/departmentUser.tsx new file mode 100644 index 0000000..9550f5e --- /dev/null +++ b/src/pages/member/departmentUser.tsx @@ -0,0 +1,254 @@ +import { useState, useEffect, useRef } from "react"; +import styles from "./learn.module.less"; +import { + Typography, + Input, + Modal, + Image, + Button, + Space, + message, + Table, +} 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; + +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 [name, setName] = useState(""); + const [email, setEmail] = useState(""); + const [id_card, setIdCard] = useState(""); + const [did, setDid] = useState(Number(result.get("id"))); + + useEffect(() => { + getData(); + }, [refresh, page, size, name, email, id_card]); + + const getData = () => { + if (loading) { + return; + } + setLoading(true); + member + .departmentProgress(did, page, size, { + sort_field: "", + sort_algo: "", + name: name, + email: email, + id_card: id_card, + }) + .then((res: any) => { + setList(res.data.data); + setTotal(res.data.total); + let data = res.data.courses; + let arr = []; + for (let key in data) { + arr.push(data[key]); + } + setCourses(arr); + setRecords(res.data.user_course_records); + setLoading(false); + }); + }; + + const resetData = () => { + setName(""); + setEmail(""); + setIdCard(""); + 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; + } + }; + + return ( +
+
+ +
+
+
+
+ 姓名: + { + setName(e.target.value); + }} + style={{ width: 160 }} + placeholder="请输入姓名关键字" + /> +
+
+ 邮箱: + { + setEmail(e.target.value); + }} + style={{ width: 160 }} + placeholder="请输入邮箱" + /> +
+
+ 身份证号: + { + setIdCard(e.target.value); + }} + style={{ width: 160 }} + placeholder="请输入身份证号" + /> +
+
+ + +
+
+
+
+ record.id} + > + ( + <> + + {record.name} + + )} + /> + {courses.map((item: any) => ( + + ( + <> + {records[record.id] && records[record.id][item.id] ? ( + {records[record.id][item.id].finished_count} + ) : ( + 0 + )} + + )} + /> + ( + <> + {item.class_hour} + + )} + /> + + ))} + + ( + <>{getFinishedHours(records[record.id])} + )} + /> + ( + <>{getTotalHours(records[record.id])} + )} + /> + +
+
+
+ ); +}; +export default MemberDepartmentProgressPage; diff --git a/src/pages/member/index.tsx b/src/pages/member/index.tsx index be3b66e..7623792 100644 --- a/src/pages/member/index.tsx +++ b/src/pages/member/index.tsx @@ -250,6 +250,22 @@ const MemberPage = () => { disabled={null} /> + {dep_ids.length > 0 && ( + + null} + disabled={null} + /> + + )}
diff --git a/src/pages/member/learn.tsx b/src/pages/member/learn.tsx index 3b36d49..cac04e0 100644 --- a/src/pages/member/learn.tsx +++ b/src/pages/member/learn.tsx @@ -1,7 +1,7 @@ import { useState, useEffect, useRef } from "react"; import styles from "./learn.module.less"; -import { Row, Col, Image, message, Table } from "antd"; -import { useNavigate, useLocation } from "react-router-dom"; +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"; diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 620cbe6..2f1ee5d 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -17,6 +17,7 @@ import CourseUserPage from "../pages/course/user"; import MemberPage from "../pages/member"; import MemberImportPage from "../pages/member/import"; import MemberLearnPage from "../pages/member/learn"; +import MemberDepartmentProgressPage from "../pages/member/departmentUser"; import SystemConfigPage from "../pages/system/config"; import SystemAdministratorPage from "../pages/system/administrator"; import SystemAdminrolesPage from "../pages/system/adminroles"; @@ -103,6 +104,10 @@ const routes: RouteObject[] = [ path: "/member/learn", element: , }, + { + path: "/member/departmentUser", + element: , + }, { path: "/system/config/index", element: ,