线上课学员、学员学习学习进度展示优化

This commit is contained in:
禺狨 2023-05-08 13:56:26 +08:00
parent fc98702deb
commit a34a2ccae8
2 changed files with 77 additions and 29 deletions

View File

@ -10,7 +10,7 @@ import {
message, message,
Image, Image,
} from "antd"; } from "antd";
import { course } from "../../api"; import { course as Course } from "../../api";
import { useParams, useLocation } from "react-router-dom"; import { useParams, useLocation } from "react-router-dom";
import type { ColumnsType } from "antd/es/table"; import type { ColumnsType } from "antd/es/table";
import { BackBartment } from "../../compenents"; import { BackBartment } from "../../compenents";
@ -33,7 +33,9 @@ const CourseUserPage = () => {
const params = useParams(); const params = useParams();
const result = new URLSearchParams(useLocation().search); const result = new URLSearchParams(useLocation().search);
const [list, setList] = useState<any>([]); const [list, setList] = useState<any>([]);
const [users, setUsers] = useState<any>([]); const [course, setCourse] = useState<any>({});
const [records, setRecords] = useState<any>({});
const [hourCount, setHourCount] = useState<any>({});
const [refresh, setRefresh] = useState(false); const [refresh, setRefresh] = useState(false);
const [page, setPage] = useState(1); const [page, setPage] = useState(1);
const [size, setSize] = useState(10); const [size, setSize] = useState(10);
@ -55,11 +57,9 @@ const CourseUserPage = () => {
preview={false} preview={false}
width={40} width={40}
height={40} height={40}
src={users.find((i: any) => i.id === record.user_id).avatar} src={record.avatar}
></Image> ></Image>
<span className="ml-8"> <span className="ml-8">{record.name}</span>
{users.find((i: any) => i.id === record.user_id).name}
</span>
</div> </div>
), ),
}, },
@ -68,27 +68,70 @@ const CourseUserPage = () => {
dataIndex: "progress", dataIndex: "progress",
render: (_, record: any) => ( render: (_, record: any) => (
<span> <span>
{record.finished_count} / {record.hour_count}
{(records[record.id] && records[record.id].finished_count) ||
0} /{" "}
{(records[record.id] && records[record.id].hour_count) ||
course.class_hour}
</span> </span>
), ),
}, },
{ {
title: "第一次学习时间", title: "第一次学习时间",
dataIndex: "created_at", dataIndex: "created_at",
render: (text: string) => <span>{dateFormat(text)}</span>, render: (_, record: any) => (
<>
{records[record.id] ? (
<span>{dateFormat(records[record.id].created_at)}</span>
) : (
<span>-</span>
)}
</>
),
}, },
{ {
title: "学习完成时间", title: "学习完成时间",
dataIndex: "finished_at", dataIndex: "finished_at",
render: (text: string) => <span>{dateFormat(text)}</span>, render: (_, record: any) => (
<>
{records[record.id] ? (
<span>{dateFormat(records[record.id].finished_at)}</span>
) : (
<span>-</span>
)}
</>
),
}, },
{ {
title: "学习进度", title: "学习进度",
dataIndex: "progress", dataIndex: "progress",
render: (progress: number) => ( render: (_, record: any) => (
<span className={progress >= 10000 ? "c-green" : "c-red"}> <>
{Math.floor(progress / 100)}% {records[record.id] ? (
</span> <span
className={
Math.floor(
(records[record.id].finished_count /
records[record.id].hour_count) *
100
) >= 100
? "c-green"
: "c-red"
}
>
{Math.floor(
(records[record.id].finished_count /
records[record.id].hour_count) *
100
)}
%
</span>
) : hourCount[record.id] && hourCount[record.id] > 0 ? (
<span className="c-red">1%</span>
) : (
<span className="c-red">0%</span>
)}
</>
), ),
}, },
]; ];
@ -99,21 +142,22 @@ const CourseUserPage = () => {
const getList = () => { const getList = () => {
setLoading(true); setLoading(true);
course Course.courseUser(
.courseUser( Number(params.courseId),
Number(params.courseId), page,
page, size,
size, "",
"", "",
"", name,
name, email,
email, idCard
idCard )
)
.then((res: any) => { .then((res: any) => {
setTotal(res.data.total); setTotal(res.data.total);
setList(res.data.data); setList(res.data.data);
setUsers(res.data.users); setHourCount(res.data.user_course_hour_user_count);
setRecords(res.data.user_course_records);
setCourse(res.data.course);
setLoading(false); setLoading(false);
}) })
.catch((err: any) => { .catch((err: any) => {
@ -160,12 +204,12 @@ const CourseUserPage = () => {
okText: "确认", okText: "确认",
cancelText: "取消", cancelText: "取消",
onOk() { onOk() {
course Course.destroyCourseUser(Number(params.courseId), selectedRowKeys).then(
.destroyCourseUser(Number(params.courseId), selectedRowKeys) () => {
.then(() => {
message.success("清除成功"); message.success("清除成功");
resetList(); resetList();
}); }
);
}, },
onCancel() { onCancel() {
console.log("Cancel"); console.log("Cancel");

View File

@ -31,6 +31,7 @@ const MemberLearnPage = () => {
const [currentCourses, setCurrentCourses] = useState<any>([]); const [currentCourses, setCurrentCourses] = useState<any>([]);
const [openCourses, setOpenCourses] = useState<any>([]); const [openCourses, setOpenCourses] = useState<any>([]);
const [records, setRecords] = useState<any>({}); const [records, setRecords] = useState<any>({});
const [hourCount, setHourCount] = useState<any>({});
const [total2, setTotal2] = useState(0); const [total2, setTotal2] = useState(0);
const [refresh2, setRefresh2] = useState(false); const [refresh2, setRefresh2] = useState(false);
const [uid, setUid] = useState(Number(result.get("id"))); const [uid, setUid] = useState(Number(result.get("id")));
@ -153,6 +154,7 @@ const MemberLearnPage = () => {
setList2(res.data.departments); setList2(res.data.departments);
setCourses(res.data.dep_courses); setCourses(res.data.dep_courses);
setOpenCourses(res.data.open_courses); setOpenCourses(res.data.open_courses);
setHourCount(res.data.user_course_hour_count);
setRecords(res.data.user_course_records); setRecords(res.data.user_course_records);
if (res.data.departments.length > 0) { if (res.data.departments.length > 0) {
let box: any = []; let box: any = [];
@ -252,6 +254,8 @@ const MemberLearnPage = () => {
)} )}
% %
</span> </span>
) : hourCount[record.id] && hourCount[record.id] > 0 ? (
<span className="c-red">1%</span>
) : ( ) : (
<span className="c-red">0%</span> <span className="c-red">0%</span>
)} )}