|
|
@ -15,7 +15,7 @@ import { |
|
|
|
listAlphabet, |
|
|
|
listAlphabet, |
|
|
|
PRIMARY_COLOR, |
|
|
|
PRIMARY_COLOR, |
|
|
|
} from "../../../_constants/common"; |
|
|
|
} from "../../../_constants/common"; |
|
|
|
import { useEffect, useState } from "react"; |
|
|
|
import { useEffect, useState,useRef } from "react"; |
|
|
|
import { apiCaller, history } from "../../../_helpers"; |
|
|
|
import { apiCaller, history } from "../../../_helpers"; |
|
|
|
import { configConstants } from "../../../_constants"; |
|
|
|
import { configConstants } from "../../../_constants"; |
|
|
|
import { exportExcel } from "../../../_helpers/utils"; |
|
|
|
import { exportExcel } from "../../../_helpers/utils"; |
|
|
@ -39,12 +39,23 @@ export default function TeacherHome() { |
|
|
|
const [limitOnline] = useState(10); |
|
|
|
const [limitOnline] = useState(10); |
|
|
|
const [offsetOnline, setOffsetOnline] = useState(0); |
|
|
|
const [offsetOnline, setOffsetOnline] = useState(0); |
|
|
|
const [isEndOnlineClasses, setIsEndOnlineClasses] = useState(false); |
|
|
|
const [isEndOnlineClasses, setIsEndOnlineClasses] = useState(false); |
|
|
|
|
|
|
|
const [totalClass, setTotalClass] = useState(0) |
|
|
|
|
|
|
|
const [totalAssign, settotalAssign] = useState(0) |
|
|
|
|
|
|
|
const listRef = useRef(null) |
|
|
|
|
|
|
|
|
|
|
|
const teacherName = !!teacherId |
|
|
|
const teacherName = !!teacherId |
|
|
|
? !!teacher_name ? decodeURIComponent(teacher_name) : '' |
|
|
|
? !!teacher_name ? decodeURIComponent(teacher_name) : '' |
|
|
|
: authentication?.user?.fullname; |
|
|
|
: authentication?.user?.fullname; |
|
|
|
const id = !!teacherId ? teacherId : authentication?.user?.id; |
|
|
|
const id = !!teacherId ? teacherId : authentication?.user?.id; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const scrollToTop = () => { |
|
|
|
|
|
|
|
if (listRef.current) { |
|
|
|
|
|
|
|
listRef.current.scrollTo({ |
|
|
|
|
|
|
|
top: 0, |
|
|
|
|
|
|
|
behavior: 'smooth',
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
const getData = async () => { |
|
|
|
const getData = async () => { |
|
|
|
try { |
|
|
|
try { |
|
|
|
setIsLoading(true); |
|
|
|
setIsLoading(true); |
|
|
@ -60,6 +71,8 @@ export default function TeacherHome() { |
|
|
|
|
|
|
|
|
|
|
|
const res = await apiCaller(endPoint, "GET"); |
|
|
|
const res = await apiCaller(endPoint, "GET"); |
|
|
|
if (res?.status) { |
|
|
|
if (res?.status) { |
|
|
|
|
|
|
|
setTotalClass(res?.total_class); |
|
|
|
|
|
|
|
settotalAssign(res?.total_assign); |
|
|
|
setCriteria(res?.criteria_teacher); |
|
|
|
setCriteria(res?.criteria_teacher); |
|
|
|
setListClass(res?.data); |
|
|
|
setListClass(res?.data); |
|
|
|
} |
|
|
|
} |
|
|
@ -84,6 +97,11 @@ export default function TeacherHome() { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const handleFilter = () => { |
|
|
|
const handleFilter = () => { |
|
|
|
|
|
|
|
scrollToTop() |
|
|
|
|
|
|
|
setOffsetOnline(0) |
|
|
|
|
|
|
|
setLoadMoreOnline(true) |
|
|
|
|
|
|
|
setIsEndOnlineClasses(false) |
|
|
|
|
|
|
|
setListClass([]) |
|
|
|
getData(); |
|
|
|
getData(); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -96,9 +114,9 @@ export default function TeacherHome() { |
|
|
|
"Tiêu chí giao bài", |
|
|
|
"Tiêu chí giao bài", |
|
|
|
"Tỷ lệ học sinh làm bài", |
|
|
|
"Tỷ lệ học sinh làm bài", |
|
|
|
"Tiêu chí tỷ lệ học sinh làm bài", |
|
|
|
"Tiêu chí tỷ lệ học sinh làm bài", |
|
|
|
// "Trường",
|
|
|
|
"Trường", |
|
|
|
// "Huyện",
|
|
|
|
"Huyện", |
|
|
|
// "Tỉnh",
|
|
|
|
"Tỉnh", |
|
|
|
"Tháng", |
|
|
|
"Tháng", |
|
|
|
"học kỳ", |
|
|
|
"học kỳ", |
|
|
|
"Niên khóa", |
|
|
|
"Niên khóa", |
|
|
@ -111,9 +129,9 @@ export default function TeacherHome() { |
|
|
|
item?.assign_number_level || 0, |
|
|
|
item?.assign_number_level || 0, |
|
|
|
`${item?.student_done_per || 0}%`, |
|
|
|
`${item?.student_done_per || 0}%`, |
|
|
|
item?.student_done_per_level || 0, |
|
|
|
item?.student_done_per_level || 0, |
|
|
|
// "Trường",
|
|
|
|
item?.organization_name || '', |
|
|
|
// "Huyện",
|
|
|
|
item?.organization_district ||'', |
|
|
|
// "Tỉnh",
|
|
|
|
item?.organization_province ||'', |
|
|
|
!!month?.value |
|
|
|
!!month?.value |
|
|
|
? month.value |
|
|
|
? month.value |
|
|
|
: getListMonthBySemester(semester.value) |
|
|
|
: getListMonthBySemester(semester.value) |
|
|
@ -156,7 +174,6 @@ export default function TeacherHome() { |
|
|
|
try { |
|
|
|
try { |
|
|
|
if (!isEndOnlineClasses) { |
|
|
|
if (!isEndOnlineClasses) { |
|
|
|
let queryParams = [] |
|
|
|
let queryParams = [] |
|
|
|
|
|
|
|
|
|
|
|
if(!!semester?.value){ |
|
|
|
if(!!semester?.value){ |
|
|
|
queryParams.push(`&semester=${semester?.value}`) |
|
|
|
queryParams.push(`&semester=${semester?.value}`) |
|
|
|
} |
|
|
|
} |
|
|
@ -164,10 +181,12 @@ export default function TeacherHome() { |
|
|
|
queryParams.push(`month=${month?.value}`) |
|
|
|
queryParams.push(`month=${month?.value}`) |
|
|
|
} |
|
|
|
} |
|
|
|
const endPoint =
|
|
|
|
const endPoint =
|
|
|
|
`/api_exercise_report/teacher_report_summary?teacher_id=${id}&year=${schoolYear?.value}${queryParams.length ? `${queryParams.join("&")}` : ""} |
|
|
|
`/api_exercise_report/teacher_report_summary?teacher_id=${id}&year=${schoolYear?.value.trim()}&limit=${limitOnline}&offset=${offsetOnlineMore}` + |
|
|
|
&limit=${limitOnline}&offset=${offsetOnlineMore}`;
|
|
|
|
(queryParams.length > 0 ? `&${queryParams.join("&")}` : ""); |
|
|
|
const res = await apiCaller(endPoint, "GET"); |
|
|
|
const res = await apiCaller(endPoint, "GET"); |
|
|
|
if (res?.status) { |
|
|
|
if (!res){ |
|
|
|
|
|
|
|
setIsEndOnlineClasses(true); |
|
|
|
|
|
|
|
} else { |
|
|
|
concatListSide = res?.data; |
|
|
|
concatListSide = res?.data; |
|
|
|
setOffsetOnline(offsetOnline + limitOnline); |
|
|
|
setOffsetOnline(offsetOnline + limitOnline); |
|
|
|
if (res?.data?.length < limitOnline) { |
|
|
|
if (res?.data?.length < limitOnline) { |
|
|
@ -224,13 +243,13 @@ export default function TeacherHome() { |
|
|
|
<div className="teacher-home-info-assign-box"> |
|
|
|
<div className="teacher-home-info-assign-box"> |
|
|
|
<img src="/assets/imgs/icon_group.png" /> |
|
|
|
<img src="/assets/imgs/icon_group.png" /> |
|
|
|
<span style={{fontWeight: 700}}>{"Tổng số lớp: "} |
|
|
|
<span style={{fontWeight: 700}}>{"Tổng số lớp: "} |
|
|
|
<span style={{color: PRIMARY_COLOR}}>{listClass?.length}</span> |
|
|
|
<span style={{color: PRIMARY_COLOR}}>{totalClass}</span> |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div className="teacher-home-info-assign-box"> |
|
|
|
<div className="teacher-home-info-assign-box"> |
|
|
|
<img src="/assets/imgs/icon_assign_class.png" /> |
|
|
|
<img src="/assets/imgs/icon_assign_class.png" /> |
|
|
|
<span style={{fontWeight: 700}}>{"Tổng số lần giao: "} |
|
|
|
<span style={{fontWeight: 700}}>{"Tổng số lần giao: "} |
|
|
|
<span style={{color: PRIMARY_COLOR}}>{countAss(listClass)}</span> |
|
|
|
<span style={{color: PRIMARY_COLOR}}>{totalAssign}</span> |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
@ -264,7 +283,7 @@ export default function TeacherHome() { |
|
|
|
<PrimaryButton onClick={handleExport}>Xuất excel</PrimaryButton> |
|
|
|
<PrimaryButton onClick={handleExport}>Xuất excel</PrimaryButton> |
|
|
|
)} |
|
|
|
)} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div onScroll={handleScroll} className="teacher-home-list-class teacher-home-right-p-h scrollbar-custom"> |
|
|
|
<div ref={listRef} onScroll={handleScroll} className="teacher-home-list-class teacher-home-right-p-h scrollbar-custom"> |
|
|
|
{listClass?.map((item) => { |
|
|
|
{listClass?.map((item) => { |
|
|
|
return ( |
|
|
|
return ( |
|
|
|
<div className="teacher-home-item-class" key={item?.class_id}> |
|
|
|
<div className="teacher-home-item-class" key={item?.class_id}> |
|
|
|