@ -12,6 +12,10 @@ import InputText from "../../../_components/Auth/InputText";
import { DEFAULT _SETTING _CRITERIA } from "../../../_constants/common" ;
import { DEFAULT _SETTING _CRITERIA } from "../../../_constants/common" ;
import { alertActions } from "../../../_actions" ;
import { alertActions } from "../../../_actions" ;
const textTilte = 'Mức độ hoàn thành tiêu chí'
const textContent = 'Mức độ hoàn thành tiêu chí được tính bằng tiêu chí có mức hoàn thành thấp nhất trong 2 tiêu chí số lần giao bài trong tháng và tỷ lệ học sinh làm bài được giao trong tháng'
export default function CriteriaSetting ( ) {
export default function CriteriaSetting ( ) {
const search = history ? . location ? . search ;
const search = history ? . location ? . search ;
const params = new URLSearchParams ( search ) ;
const params = new URLSearchParams ( search ) ;
@ -20,11 +24,42 @@ export default function CriteriaSetting() {
const dispatch = useDispatch ( )
const dispatch = useDispatch ( )
const [ criteriaTarget , setCriteriaTarget ] = useState ( DEFAULT _SETTING _CRITERIA ) ;
const [ criteriaTarget , setCriteriaTarget ] = useState ( DEFAULT _SETTING _CRITERIA ) ;
const [ showAlert , setShowAlert ] = useState ( false ) ;
const [ alertMessage , setAlertMessage ] = useState ( "" ) ;
const schoolList = isJsonString ( decodeURIComponent ( _schoolList ) )
const schoolList = isJsonString ( decodeURIComponent ( _schoolList ) )
? JSON . parse ( decodeURIComponent ( _schoolList ) )
? JSON . parse ( decodeURIComponent ( _schoolList ) )
: decodeURIComponent ( _schoolList ) ;
: decodeURIComponent ( _schoolList ) ;
function AlertSuccess ( { message , onComplete , notShowComplete } ) {
function close ( ) {
onComplete ( ) ;
dispatch ( alertActions . clear ( ) ) ;
history . goBack ( ) ;
}
if ( notShowComplete ) {
return null ;
} else {
return (
< div
id = "modal-center"
className = "uk-flex-top uk-modal uk-flex uk-open"
uk - modal = ""
>
< div className = "uk-modal-dialog uk-modal-body uk-margin-auto-vertical root-alert" >
< p className = "text-center" > { message } < / p >
< div className = "form-sunE-button root-alert-button" >
< button className = "btn-line-blue" onClick = { close } >
Đóng
< / b u t t o n >
< / d i v >
< / d i v >
< / d i v >
) ;
}
}
const saveCriteriaSetting = async ( ) => {
const saveCriteriaSetting = async ( ) => {
try {
try {
const dataSave = {
const dataSave = {
@ -35,16 +70,15 @@ export default function CriteriaSetting() {
student _done _active : criteriaTarget . studentDone . enable ? 1 : 0 ,
student _done _active : criteriaTarget . studentDone . enable ? 1 : 0 ,
student _done _target _1 : criteriaTarget . studentDone . target1 ,
student _done _target _1 : criteriaTarget . studentDone . target1 ,
student _done _target _2 : criteriaTarget . studentDone . target2 ,
student _done _target _2 : criteriaTarget . studentDone . target2 ,
}
}
const res = await apiCaller (
const res = await apiCaller (
"/report/api_report/assignCriteriaToOrganization" ,
"/report/api_report/assignCriteriaToOrganization" ,
"PUT" ,
"PUT" ,
dataSave ,
dataSave ,
) ;
) ;
if ( res ? . status ) {
if ( res ? . status ) {
dispatch ( alertActions . success ( {
setAlertMessage ( res ? . msg ) ;
message : res ? . msg
setShowAlert ( true ) ;
} ) )
}
}
} catch ( err ) {
} catch ( err ) {
console . log ( "err: " , err ) ;
console . log ( "err: " , err ) ;
@ -97,6 +131,14 @@ export default function CriteriaSetting() {
) ;
) ;
} ;
} ;
const isSaveDisabled = ( ) => {
return (
( criteriaTarget . assign . enable &&
( ! criteriaTarget . assign . target1 || ! criteriaTarget . assign . target2 ) ) ||
( criteriaTarget . studentDone . enable &&
( ! criteriaTarget . studentDone . target1 || ! criteriaTarget . studentDone . target2 ) )
) ;
} ;
const renderRightItem = ( { title , desc , valueName , unit , key , maxLengthInput } ) => {
const renderRightItem = ( { title , desc , valueName , unit , key , maxLengthInput } ) => {
return (
return (
< div
< div
@ -128,18 +170,22 @@ export default function CriteriaSetting() {
< span > Hoàn thành mức 1 : < / s p a n >
< span > Hoàn thành mức 1 : < / s p a n >
< / d i v >
< / d i v >
< div className = "criteria-setting-item-detail-value" >
< div className = "criteria-setting-item-detail-value" >
{ ` ${ valueName } < ` }
{ ` ${ valueName } ít hơn ` }
< input
< input
value = { criteriaTarget [ key ] . target1 }
value = { criteriaTarget [ key ] . target1 }
onChange = { ( e ) => {
onChange = { ( e ) => {
if ( ! ! maxLengthInput && e . target . value . length > maxLengthInput ) {
const value = e . target . value ;
if ( ! /^[1-9]\d*$/ . test ( value ) && value !== "" ) {
return ;
}
if ( ! ! maxLengthInput && value . length > maxLengthInput ) {
return ;
return ;
}
}
setCriteriaTarget ( {
setCriteriaTarget ( {
... criteriaTarget ,
... criteriaTarget ,
[ key ] : {
[ key ] : {
... criteriaTarget [ key ] ,
... criteriaTarget [ key ] ,
target1 : e . target . value ,
target1 : value ,
} ,
} ,
} ) ;
} ) ;
} }
} }
@ -154,14 +200,18 @@ export default function CriteriaSetting() {
< span > Hoàn thành mức 2 : < / s p a n >
< span > Hoàn thành mức 2 : < / s p a n >
< / d i v >
< / d i v >
< div className = "criteria-setting-item-detail-value" >
< div className = "criteria-setting-item-detail-value" >
{ ` ${ valueName } từ ` }
< span >
< span >
{ criteriaTarget [ key ] . target1 }
{ criteriaTarget [ key ] . target1 }
{ unit }
{ unit }
< / s p a n >
< / s p a n >
{ ` < ${ valueName } < ` }
{ ' đến ít hơn ' }
< input
< input
value = { criteriaTarget [ key ] . target2 }
value = { criteriaTarget [ key ] . target2 }
onChange = { ( e ) => {
onChange = { ( e ) => {
if ( ! /^[1-9]\d*$/ . test ( e . target . value ) && e . target . value !== "" ) {
return ;
}
if ( ! ! maxLengthInput && e . target . value . length > maxLengthInput ) {
if ( ! ! maxLengthInput && e . target . value . length > maxLengthInput ) {
return ;
return ;
}
}
@ -184,7 +234,7 @@ export default function CriteriaSetting() {
< span > Hoàn thành mức 3 : < / s p a n >
< span > Hoàn thành mức 3 : < / s p a n >
< / d i v >
< / d i v >
< div className = "criteria-setting-item-detail-value" >
< div className = "criteria-setting-item-detail-value" >
{ ` ${ valueName } > ` }
{ ` ${ valueName } lớn hơn hoặc bằng ` }
< span >
< span >
{ criteriaTarget [ key ] . target2 }
{ criteriaTarget [ key ] . target2 }
{ unit }
{ unit }
@ -207,12 +257,10 @@ export default function CriteriaSetting() {
< div className = "criteria-setting-container bg-sub-main-img" >
< div className = "criteria-setting-container bg-sub-main-img" >
< div className = "criteria-setting-left-side" >
< div className = "criteria-setting-left-side" >
< p className = "criteria-setting-left-title" >
< p className = "criteria-setting-left-title" >
MỨC ĐỘ CĐS SUNDAY ENGLISH
{ textTilte . toLocaleUpperCase ( ) }
< / p >
< / p >
< p className = "criteria-setting-left-desc" >
< p className = "criteria-setting-left-desc" >
Mức độ CĐS Sunday English được tính bằng tiêu chí có mức hoàn
{ textContent }
thành thấp nhất trong 2 tiêu chí số lần giao bài trong tháng và tỷ
lệ học sinh làm bài được giao trong tháng .
< / p >
< / p >
< div className = "criteria-setting-left-img" >
< div className = "criteria-setting-left-img" >
< img src = "/assets/imgs/book_criteria_setting.png" / >
< img src = "/assets/imgs/book_criteria_setting.png" / >
@ -222,13 +270,13 @@ export default function CriteriaSetting() {
< div className = "criteria-setting-right-content" >
< div className = "criteria-setting-right-content" >
{ renderRightItem ( {
{ renderRightItem ( {
title : "Số lần giao bài trong tháng" ,
title : "Số lần giao bài trong tháng" ,
desc : "(Bao g ồm các lần giao bài có thời gian kết thúc trong tháng đó) " ,
desc : "G ồm các lần giao bài có thời gian kết thúc trong tháng đó" ,
valueName : "Số lần giao" ,
valueName : "Số lần giao " ,
key : "assign" ,
key : "assign" ,
} ) }
} ) }
{ renderRightItem ( {
{ renderRightItem ( {
title : "Tỷ lệ học sinh làm bài được giao trong tháng" ,
title : "Tỷ lệ học sinh làm bài được giao trong tháng" ,
desc : "( Tỷ lệ học sinh làm bài được tính bằng số học sinh đã hoàn thành tất cả các bài tập được giao trong tháng (trừ những bài chưa đến hạn) trên tổng số học sinh của lớp. Học sinh để quá hạn bài tập trong tháng nhưng làm bài trước khi hết tháng thì vẫn được tính là hoàn thành bài tập) ." ,
desc : "Tỷ lệ học sinh làm bài được tính bằng số học sinh đã hoàn thành tất cả các bài tập được giao trong tháng (trừ những bài chưa đến hạn) trên tổng số học sinh của lớp. Học sinh để quá hạn bài tập trong tháng nhưng làm bài trước khi hết tháng thì vẫn được tính là hoàn thành bài tập." ,
valueName : "Tỉ lệ làm bài" ,
valueName : "Tỉ lệ làm bài" ,
unit : "%" ,
unit : "%" ,
key : "studentDone" ,
key : "studentDone" ,
@ -245,12 +293,18 @@ export default function CriteriaSetting() {
Quay lại
Quay lại
< / P r i m a r y B u t t o n >
< / P r i m a r y B u t t o n >
{ authentication ? . user ? . role === USER _ROLE . ADMIN && (
{ authentication ? . user ? . role === USER _ROLE . ADMIN && (
< PrimaryButton onClick = { saveCriteriaSetting } > Lưu < / P r i m a r y B u t t o n >
< PrimaryButton onClick = { saveCriteriaSetting } isDisabled = { isSaveDisabled ( ) } > Lưu < / P r i m a r y B u t t o n >
) }
) }
< / d i v >
< / d i v >
< / d i v >
< / d i v >
< / d i v >
< / d i v >
< / d i v >
< / d i v >
{ showAlert && (
< AlertSuccess
message = { alertMessage }
onComplete = { ( ) => setShowAlert ( false ) }
/ >
) }
< / d i v >
< / d i v >
) ;
) ;
}
}