From 4c329ae25e050d8eeb59f1f0d86426894def61ab Mon Sep 17 00:00:00 2001 From: Quy_FE Date: Fri, 18 Apr 2025 15:11:53 +0700 Subject: [PATCH] =?UTF-8?q?Feat=20:=20reset=20scroll=20v=C3=A0=20check=20l?= =?UTF-8?q?ogin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/_reducers/authentication/index.js | 5 --- .../criteria/criteria-manage/index.js | 16 ++++++- .../criteriaSetting.style.scss | 5 ++- .../criteria/criteria-setting/index.js | 42 +++++++++++++------ src/_screens/home/admin/adminHome.style.scss | 2 +- src/_screens/home/admin/index.js | 16 ++++++- src/_screens/home/detail-grade/index.js | 2 + src/_screens/home/headmaster/index.js | 16 ++++++- src/_screens/home/teacher/index.js | 15 ++++++- src/_screens/login/index.js | 10 ++++- 10 files changed, 100 insertions(+), 29 deletions(-) diff --git a/src/_reducers/authentication/index.js b/src/_reducers/authentication/index.js index c99ffed..f66ef61 100644 --- a/src/_reducers/authentication/index.js +++ b/src/_reducers/authentication/index.js @@ -6,7 +6,6 @@ const initialState = { }; const authentication = (state = initialState, action) => { - if(action.payload?.user?.role !=="student"||action.payload?.user?.role !=="parent"){ switch (action.type) { case TYPE_DISPATCH.LOGIN: return { @@ -19,10 +18,6 @@ const authentication = (state = initialState, action) => { default: return state; } - }else{ - alert('Bạn không có quyền truy cập'); - return initialState; - } }; export { authentication }; diff --git a/src/_screens/criteria/criteria-manage/index.js b/src/_screens/criteria/criteria-manage/index.js index c87b870..50594fc 100644 --- a/src/_screens/criteria/criteria-manage/index.js +++ b/src/_screens/criteria/criteria-manage/index.js @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import Header from "../../../_components/Header"; import { renderIconSearchInput, @@ -40,6 +40,7 @@ export default function CriteriaManage() { const [limitOnline] = useState(10); const [offsetOnline, setOffsetOnline] = useState(0); const [isEndOnlineClasses, setIsEndOnlineClasses] = useState(false); + const listRef = useRef(null); const dispatch = useDispatch(); const changeProvince = (item) => { setProvinceSelect(item); @@ -55,6 +56,15 @@ export default function CriteriaManage() { setDistrictSelect(item); }; + const scrollToTop = () => { + if (listRef.current) { + listRef.current.scrollTo({ + top: 0, + behavior: 'smooth', + }); + } + }; + const handleSelectAll = () => { if (listData?.every((item) => listIdSelected?.includes(item?.school_id))) { setListIdSelected((prev) => @@ -141,6 +151,8 @@ export default function CriteriaManage() { ) { return; } + scrollToTop() + setOffsetOnline(0) setLoadMoreOnline(true) setIsEndOnlineClasses(false) setIsFiltered(true); @@ -427,7 +439,7 @@ export default function CriteriaManage() { onClick={handleSelectAll} placement="right" /> -
+
{listData?.map((item, index) => { return (
diff --git a/src/_screens/criteria/criteria-setting/criteriaSetting.style.scss b/src/_screens/criteria/criteria-setting/criteriaSetting.style.scss index 71a5f57..cc5cb9f 100644 --- a/src/_screens/criteria/criteria-setting/criteriaSetting.style.scss +++ b/src/_screens/criteria/criteria-setting/criteriaSetting.style.scss @@ -94,6 +94,7 @@ display: flex; align-items: center; gap: 32px; + width: max-content; .criteria-setting-item-detail-label { display: flex; @@ -120,8 +121,8 @@ border-radius: 4px; padding: 0; margin-right: 1px; - height: 2.8rem; - width: 60px; + height: 2.4rem; + width: 40px; font-size: 1.8rem; text-align: center; color: var(--primary-color); diff --git a/src/_screens/criteria/criteria-setting/index.js b/src/_screens/criteria/criteria-setting/index.js index ba85337..f063b49 100644 --- a/src/_screens/criteria/criteria-setting/index.js +++ b/src/_screens/criteria/criteria-setting/index.js @@ -160,13 +160,33 @@ export default function CriteriaSetting() { return !isRead } - const isSaveDisabled = () => { - return ( - (criteriaTarget.assign.enable && - (!criteriaTarget.assign.target1 || !criteriaTarget.assign.target2)) || - (criteriaTarget.studentDone.enable && - (!criteriaTarget.studentDone.target1 || !criteriaTarget.studentDone.target2)) - ); + const isValid = () => { + if (criteriaTarget.assign.enable) { + if (!criteriaTarget.studentDone.enable) { + return ( + !(criteriaTarget.assign.target1 && + criteriaTarget.assign.target2 && + criteriaTarget.assign.target1 < criteriaTarget.assign.target2) + ); + } else { + return ( + !(criteriaTarget.assign.target1 && + criteriaTarget.assign.target2 && + criteriaTarget.assign.target1 < criteriaTarget.assign.target2 && + criteriaTarget.studentDone.target1 != null && + criteriaTarget.studentDone.target2 != null && + criteriaTarget.studentDone.target1 < criteriaTarget.studentDone.target2) + ); + } + } else if (criteriaTarget.studentDone.enable) { + return ( + !(criteriaTarget.studentDone.target1 != null && + criteriaTarget.studentDone.target2 != null && + criteriaTarget.studentDone.target1 < criteriaTarget.studentDone.target2) + ); + } else { + return true; + } }; const renderRightItem = ({ title, desc, valueName, unit, key, maxLengthInput }) => { return ( @@ -206,8 +226,7 @@ export default function CriteriaSetting() { const value = e.target.value; if (!/^[1-9]\d*$/.test(value) && value !== "") { return; - } - if (!!maxLengthInput && value.length > maxLengthInput) { + }else if (!!maxLengthInput && e.target.value.length > maxLengthInput) { return; } setCriteriaTarget({ @@ -240,8 +259,7 @@ export default function CriteriaSetting() { onChange={(e) => { if (!/^[1-9]\d*$/.test(e.target.value) && e.target.value !== "") { return; - } - if (!!maxLengthInput && e.target.value.length > maxLengthInput) { + }else if (!!maxLengthInput && e.target.value.length > maxLengthInput) { return; } setCriteriaTarget({ @@ -322,7 +340,7 @@ export default function CriteriaSetting() { Quay lại {authentication?.user?.role === USER_ROLE.ADMIN && ( - Lưu + Lưu )}
diff --git a/src/_screens/home/admin/adminHome.style.scss b/src/_screens/home/admin/adminHome.style.scss index 218abf9..5d62491 100644 --- a/src/_screens/home/admin/adminHome.style.scss +++ b/src/_screens/home/admin/adminHome.style.scss @@ -7,7 +7,7 @@ overflow: auto; .admin-home-left-side { - width: 30%; + min-width: 340px; border-right: 1px solid #4d4d4d; .admin-home-form-select { diff --git a/src/_screens/home/admin/index.js b/src/_screens/home/admin/index.js index b36fb5a..2d3f71d 100644 --- a/src/_screens/home/admin/index.js +++ b/src/_screens/home/admin/index.js @@ -9,7 +9,7 @@ import PrimaryButton from "../../../_components/Button/PrimaryButton"; import RateStar from "../../../_components/RateStar"; import RootRadioGroup from "../../../_components/RootRadioGroup"; import { LIST_TYPE_FILTER_ADMIN_HOME } from "../../../_constants/common"; -import { useEffect, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import InputText from "../../../_components/Auth/InputText"; import { apiCaller, history } from "../../../_helpers"; import { configConstants, PATH } from "../../../_constants"; @@ -42,6 +42,7 @@ export default function AdminHome() { const [limitOnline] = useState(10); const [offsetOnline, setOffsetOnline] = useState(0); const [isEndOnlineClasses, setIsEndOnlineClasses] = useState(false); + const listRef = useRef(null); const dispatch = useDispatch(); const isFilterSchool = typeFilter === LIST_TYPE_FILTER_ADMIN_HOME[0]?.value; @@ -77,6 +78,15 @@ export default function AdminHome() { } }; + const scrollToTop = () => { + if (listRef.current) { + listRef.current.scrollTo({ + top: 0, + behavior: 'smooth', + }); + } + }; + const getDataTeacher = async () => { try { setIsLoading(true); @@ -186,6 +196,8 @@ export default function AdminHome() { const handleSubmit = () => { if (isFilterSchool) { + scrollToTop() + setOffsetOnline(0) setLoadMoreOnline(true) setIsEndOnlineClasses(false) setIsSearched(true); @@ -366,7 +378,7 @@ export default function AdminHome() { )}
-
+
{listSchool.map((item, index) => { return (
{ + if (listRef.current) { + listRef.current.scrollTo({ + top: 0, + behavior: 'smooth', + }); + } + }; + const changeSemester = (item) => { + scrollToTop() + setOffsetOnline(0) setSemester(item); setMonth(getListMonthBySemester(item?.value)?.[0]); }; @@ -338,7 +350,7 @@ export default function HeadmasterHome() {
) : ( -
+
{!isLoading && !listTeacher?.length && (

Không có giáo viên nào diff --git a/src/_screens/home/teacher/index.js b/src/_screens/home/teacher/index.js index 3163aa5..8853394 100644 --- a/src/_screens/home/teacher/index.js +++ b/src/_screens/home/teacher/index.js @@ -15,7 +15,7 @@ import { listAlphabet, PRIMARY_COLOR, } from "../../../_constants/common"; -import { useEffect, useState } from "react"; +import { useEffect, useState,useRef } from "react"; import { apiCaller, history } from "../../../_helpers"; import { configConstants } from "../../../_constants"; import { exportExcel } from "../../../_helpers/utils"; @@ -41,12 +41,21 @@ export default function TeacherHome() { const [isEndOnlineClasses, setIsEndOnlineClasses] = useState(false); const [totalClass, setTotalClass] = useState(0) const [totalAssign, settotalAssign] = useState(0) + const listRef = useRef(null) const teacherName = !!teacherId ? !!teacher_name ? decodeURIComponent(teacher_name) : '' : authentication?.user?.fullname; const id = !!teacherId ? teacherId : authentication?.user?.id; + const scrollToTop = () => { + if (listRef.current) { + listRef.current.scrollTo({ + top: 0, + behavior: 'smooth', + }); + } + }; const getData = async () => { try { setIsLoading(true); @@ -88,6 +97,8 @@ export default function TeacherHome() { }; const handleFilter = () => { + scrollToTop() + setOffsetOnline(0) setLoadMoreOnline(true) setIsEndOnlineClasses(false) setListClass([]) @@ -270,7 +281,7 @@ export default function TeacherHome() { Xuất excel )}

-
+
{listClass?.map((item) => { return (
diff --git a/src/_screens/login/index.js b/src/_screens/login/index.js index d1ba479..ddb214a 100644 --- a/src/_screens/login/index.js +++ b/src/_screens/login/index.js @@ -75,12 +75,20 @@ export default function Login() { dataSubmit, ); if (res?.status) { + if(res.data_user.role === "student"||res.data_user.role === "parent"){ + dispatch({ + type: TYPE_DISPATCH.RESET_AUTHENTICATION, + }); + persistor.purge(); + window.location.href = PATH.login; + return false + } handleLoginSuccess(res); } } catch (err) { dispatch( alertActions.error({ - message: err?.toString(), + message: 'Bạn không có quyền truy cập', }), ); }