From d9bbcd2850a288ff3e717ef471f170b7dd6f19b0 Mon Sep 17 00:00:00 2001 From: Quy_FE Date: Mon, 14 Apr 2025 16:46:38 +0700 Subject: [PATCH] =?UTF-8?q?Feat=20:=20fix=20l=E1=BB=97i=20quy=E1=BB=81n=20?= =?UTF-8?q?truy=20c=E1=BA=ADp,mh=20admin,=20L=E1=BB=8Dc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/_reducers/authentication/index.js | 25 ++++--- .../criteria/criteria-manage/index.js | 71 ++++++++++++------- src/_screens/home/admin/adminHome.style.scss | 1 + src/_screens/home/admin/index.js | 34 +++++---- 4 files changed, 83 insertions(+), 48 deletions(-) diff --git a/src/_reducers/authentication/index.js b/src/_reducers/authentication/index.js index 274e915..1b09377 100644 --- a/src/_reducers/authentication/index.js +++ b/src/_reducers/authentication/index.js @@ -6,17 +6,22 @@ const initialState = { }; const authentication = (state = initialState, action) => { - switch (action.type) { - case TYPE_DISPATCH.LOGIN: - return { - ...state, - user: action.payload.user, - jwt_token: action.payload.jwt_token, - }; - case TYPE_DISPATCH.RESET_AUTHENTICATION: + if(action.payload?.user?.role !=="student"){ + switch (action.type) { + case TYPE_DISPATCH.LOGIN: + return { + ...state, + user: action.payload.user, + jwt_token: action.payload.jwt_token, + }; + case TYPE_DISPATCH.RESET_AUTHENTICATION: + return initialState; + default: + return state; + } + }else{ + alert('Bạn không có quyền truy cập'); return initialState; - default: - return state; } }; diff --git a/src/_screens/criteria/criteria-manage/index.js b/src/_screens/criteria/criteria-manage/index.js index b2a8691..2f38fd4 100644 --- a/src/_screens/criteria/criteria-manage/index.js +++ b/src/_screens/criteria/criteria-manage/index.js @@ -13,13 +13,13 @@ import { history } from "../../../_helpers/history"; import { PATH } from "../../../_constants/path"; import { apiCaller } from "../../../_helpers"; import { configConstants } from "../../../_constants"; -import { listStatusCriteria } from "../../../_constants/common"; +import { listStatusCriteria, TYPE_DISPATCH } from "../../../_constants/common"; import moment from "moment"; -import { useDispatch } from "react-redux"; +import { useDispatch, useSelector } from "react-redux"; import { alertActions } from "../../../_actions"; export default function CriteriaManage() { - const [searchText, setSearchText] = useState(); + const [searchText, setSearchText] = useState(''); const [listIdSelected, setListIdSelected] = useState([]); const [listData, setListData] = useState([]); const [listProvince, setListProvince] = useState([ @@ -32,13 +32,10 @@ export default function CriteriaManage() { ]); const [districtSelect, setDistrictSelect] = useState(listDistrict[0]); const [isLoadingDistrict, setIsLoadingDistrict] = useState(false); - const [statusCriteriaSelected, setStatusCriteriaSelected] = useState( - listStatusCriteria[0], - ); + const [statusCriteriaSelected, setStatusCriteriaSelected] = useState(listStatusCriteria[0]); const [isLoading, setIsLoading] = useState(false); const [isFiltered, setIsFiltered] = useState(false); const dispatch = useDispatch(); - const changeProvince = (item) => { setProvinceSelect(item); setDistrictSelect({ value: "", label: "Lọc theo huyện" }); @@ -117,9 +114,9 @@ export default function CriteriaManage() { }), ); setListIdSelected([]); - await setSearchText(""); - await changeProvince(listProvince[0]); - await setStatusCriteriaSelected(listStatusCriteria[0]); + // await setSearchText(""); + // await changeProvince(listProvince[0]); + // await setStatusCriteriaSelected(listStatusCriteria[0]); getDataCriteria(); } } catch (err) { @@ -147,20 +144,38 @@ export default function CriteriaManage() { const getDataCriteria = async (isFilter = false) => { try { setIsLoading(true); - const endPoint = - `/report/api_report/getOrganizationAndCriteria` + - (isFilter - ? `?province_id=${ - !!provinceSelect?.value ? provinceSelect?.value : "" - } - ${!!districtSelect?.value ? `&district_id=${districtSelect?.value}` : ""} - ${ - !!statusCriteriaSelected?.value - ? `&status=${statusCriteriaSelected?.value}` - : "" + const queryParams = []; + + const addParam = (key, value) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.push(`${key}=${value}`); + } + }; + + addParam('province_id', provinceSelect?.value); + addParam('district_id', districtSelect?.value); + if (statusCriteriaSelected?.value !== undefined && statusCriteriaSelected?.value !== null) { + const statusValue = statusCriteriaSelected.value === '0' + ? JSON.stringify(statusCriteriaSelected.value) + : statusCriteriaSelected.value; + addParam('status', statusValue); } - ${!!searchText ? `&school_name=${searchText}` : ""}` - : ""); + addParam('school_name', searchText); + + const obj = queryParams.reduce((acc, curr) => { + const [key, value] = curr.split('='); + acc[key] = value; + return acc; + }, {}); + + dispatch({ + type: TYPE_DISPATCH.SET_FILTER_CRITERIA, + payload: obj, + }); + + const endPoint = `/report/api_report/getOrganizationAndCriteria${ + isFilter && queryParams.length ? `?${queryParams.join("&")}` : "" + }`; const res = await apiCaller(endPoint, "GET"); if (res?.status) { setListData(res?.data); @@ -235,6 +250,14 @@ export default function CriteriaManage() { // getDataCriteria(); }, []); + const isDisabled = () => + !( + searchText || + provinceSelect.value || + districtSelect.value || + statusCriteriaSelected.value + ); + return (
- Áp dụng + Áp dụng
diff --git a/src/_screens/home/admin/adminHome.style.scss b/src/_screens/home/admin/adminHome.style.scss index 228c07e..218abf9 100644 --- a/src/_screens/home/admin/adminHome.style.scss +++ b/src/_screens/home/admin/adminHome.style.scss @@ -25,6 +25,7 @@ .admin-home-search-input { border-radius: 40px; height: 46px; + min-width: 340px; @include screen_pc_sm { height: 34px; diff --git a/src/_screens/home/admin/index.js b/src/_screens/home/admin/index.js index 8cf1df5..6c9619c 100644 --- a/src/_screens/home/admin/index.js +++ b/src/_screens/home/admin/index.js @@ -40,15 +40,26 @@ export default function AdminHome() { const dispatch = useDispatch(); const isFilterSchool = typeFilter === LIST_TYPE_FILTER_ADMIN_HOME[0]?.value; + const getSearchText = () => (isFilterSchool ? searchTextSchool : searchTextTeacher); + const setSearchText = isFilterSchool ? setSearchTextSchool : setSearchTextTeacher; const getData = async () => { try { setIsLoading(true); - const endPoint = `/api_organization/get_organization?province_id=${ - provinceSelect?.value - }${ - !!districtSelect?.value ? `&district_id=${districtSelect?.value}` : "" - }${!!searchTextSchool ? `&name_school_find=${searchTextSchool}` : ""}`; + let queryParams = [] + + if(provinceSelect?.value){ + queryParams.push(`province_id=${provinceSelect?.value}`) + } + if(districtSelect?.value){ + queryParams.push(`district_id=${districtSelect?.value}`) + } + if(!!searchTextSchool){ + queryParams.push(`name_school_find=${searchTextSchool}`) + } + const endPoint = `/api_organization/get_organization${ + queryParams.length ? `?${queryParams.join("&")}` : "" + }`; const res = await apiCaller(endPoint, "GET"); setIsLoading(false); if (res?.status) { @@ -185,12 +196,9 @@ export default function AdminHome() { ]); exportExcel(listHeader, listData, `Danh sách tổ chức.xlsx`); }; - + const validateParam = () => { - if (isFilterSchool) { - return !!provinceSelect.value || !!searchTextSchool; - } - return true; + return !!provinceSelect.value || !!getSearchText(); }; useEffect(() => { @@ -217,10 +225,8 @@ export default function AdminHome() {