mirror of
https://github.com/PlayEdu/backend
synced 2025-06-08 15:54:09 +08:00
线上课学员、学员学习学习进度展示优化
This commit is contained in:
parent
fc98702deb
commit
a34a2ccae8
@ -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
|
||||||
|
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>
|
</span>
|
||||||
|
) : hourCount[record.id] && hourCount[record.id] > 0 ? (
|
||||||
|
<span className="c-red">1%</span>
|
||||||
|
) : (
|
||||||
|
<span className="c-red">0%</span>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@ -99,8 +142,7 @@ const CourseUserPage = () => {
|
|||||||
|
|
||||||
const getList = () => {
|
const getList = () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
course
|
Course.courseUser(
|
||||||
.courseUser(
|
|
||||||
Number(params.courseId),
|
Number(params.courseId),
|
||||||
page,
|
page,
|
||||||
size,
|
size,
|
||||||
@ -113,7 +155,9 @@ const CourseUserPage = () => {
|
|||||||
.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");
|
||||||
|
@ -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>
|
||||||
)}
|
)}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user