register form

master
HOANGLAOTA 1 year ago
parent 569ac7ccad
commit c2ea1e84a0
  1. 4
      src/_base/FunctionBase.js
  2. 63
      src/_components/AdvisementForm/AdvisementForm.jsx
  3. 68
      src/_components/AdvisementForm/AdvisementForm.logic.js
  4. 2
      src/_components/Alert/error.js
  5. 20
      src/_components/FooterNews/FooterNews.jsx
  6. 8
      src/_components/Header/HeaderNews/HeaderNews.jsx
  7. 4
      src/_components/Modal/ModalSuccessMsg/ModalSuccessMsg.jsx
  8. 8
      src/_components/ScrollFixed/ScrollFixed.jsx
  9. 106
      src/_screens/BenefitTeacherPage/BenefitTeacher.jsx
  10. 4
      src/_screens/DownloadPage/DownloadPage.jsx
  11. 6
      src/_services/user.js

@ -3,6 +3,8 @@ import { LinkApp } from "../_constants/linkDownloadApp";
import { history } from "../_helpers";
export const handleNavigateCurriculumDownload = (type) => {
const urlParams = new URLSearchParams(window.location.search);
const mds = urlParams.get('mds');
const osMobile = getMobileOperatingSystem();
if (osMobile == "Android") {
window.open(LinkApp[`${type}`].GG_PLAY, "_blank");
@ -21,6 +23,6 @@ export const handleNavigateCurriculumDownload = (type) => {
// // history.push(`/login`);
// }
history.push(`/download_page/${type}`);
history.push(`/download_page/${type}?mds=${mds}`);
}
};

@ -6,6 +6,8 @@ import InputSelectNews from "../Input/InputSelect";
import { userConstants } from "../../_constants";
import ModalSuccessMsg from "../Modal/ModalSuccessMsg/ModalSuccessMsg";
import LazyLoad from "react-lazyload";
import { useSelector } from "react-redux";
import { Alert } from "../Alert";
const AdvisementForm = (props) => {
let {
@ -37,12 +39,22 @@ const AdvisementForm = (props) => {
setGradeError,
isSuccessRegist,
handleCloseModal,
email,
emailError,
changeEmail,
setEmailError,
message,
changeMessage
} = advisementLogic(props);
const alert = useSelector((state) => state.alert);
return (
<div className=" advisement_form pos_rel flex-center-column">
{/* Img Banner */}
{alert?.message &&
alert?.screen === 'form_register' && (
<Alert alert={alert} />
)}
<div className="content_advisement_container pos_rel">
<div
className="content_advisement flex-align-start-column"
@ -58,6 +70,7 @@ const AdvisementForm = (props) => {
src="/assets/images/homeNews/content/teacher/title_advisement_teacher.png"
alt="Titlte Advisement"
className="contain_image title_header_teacher"
style={{width: '90%'}}
/>
) : (
<>
@ -132,24 +145,40 @@ const AdvisementForm = (props) => {
}}
errorAbsolute={true}
/>
{props.type == userConstants.ROLE_TEACHER ? (
<InputText
value={addressTeach}
setValue={changeAddressTeach}
value={email}
setValue={changeEmail}
type="text"
name="address"
placeholder="Nơi công tác"
name="email"
placeholder="Email"
required={true}
// renderLabelIcon={() => renderAuthIcon("phone")}
errorText={addressTeachError}
setErrorText={setAddressTeachError}
onFocus={() => setAddressTeach(addressTeach?.trim())}
errorText={emailError}
setErrorText={setEmailError}
onBlur={() => {
onBlurField("address");
onBlurField("email");
}}
errorAbsolute={true}
/>
{props.type == userConstants.ROLE_TEACHER ? (
// <InputText
// value={addressTeach}
// setValue={changeAddressTeach}
// type="text"
// name="address"
// placeholder="Nơi công tác"
// required={true}
// // renderLabelIcon={() => renderAuthIcon("phone")}
// errorText={addressTeachError}
// setErrorText={setAddressTeachError}
// onFocus={() => setAddressTeach(addressTeach?.trim())}
// onBlur={() => {
// onBlurField("address");
// }}
// errorAbsolute={true}
// />
null
) : (
<InputSelectNews
value={gradeSelected}
@ -170,7 +199,15 @@ const AdvisementForm = (props) => {
/>
)}
<InputSelectNews
<InputText
value={message}
setValue={changeMessage}
type="text"
name="message"
placeholder="Lời nhắn"
/>
{/* <InputSelectNews
value={timeAdvisement}
setValue={changeTimeAdvisement}
type="text"
@ -186,7 +223,7 @@ const AdvisementForm = (props) => {
};
})}
errorAbsolute={true}
/>
/> */}
<div className="flex-center btn_container">
<ButtonNews
width="18rem"

@ -5,8 +5,13 @@ import { validateNumber, validateEmail } from "../../_base/Validate";
import { userConstants } from "../../_constants";
import { sendMsgContact } from "../../_services/user";
import moment from "moment";
import { alertActions } from "../../_actions";
import { useDispatch } from "react-redux";
export const advisementLogic = (props) => {
const urlParams = new URLSearchParams(window.location.search);
const mds = urlParams.get('mds');
const dispatch = useDispatch()
// Time Advisement
const [timeAdvisement, setTimeAdvisement] = useState({});
const [timeAdvisementError, setTimeAdvisementError] = useState();
@ -130,6 +135,14 @@ export const advisementLogic = (props) => {
const [errorAdviseTrial, setErrorAdviseTrial] = useState("");
// message
const [message, setMessage] = useState("");
// Handle Change Address Teach for Teacher
const changeMessage = (newValue) => {
setMessage(newValue);
};
// Variable compulsory advise trial
const [compulError, setCompulError] = useState(false);
@ -198,38 +211,35 @@ export const advisementLogic = (props) => {
phone &&
!nameUserError &&
!phoneWarning &&
timeAdvisement?.value &&
!timeAdvisementError
) {
if (
(!addressTeach && props.type == userConstants.ROLE_TEACHER) ||
(!gradeSelected?.value && props.type != userConstants.ROLE_TEACHER)
!!email?.trim() &&
!emailError
// timeAdvisement?.value &&
// !timeAdvisementError
) {
setAddressTeachError("Vui lòng nhập thông tin.");
setGradeError("Vui lòng nhập thông tin.");
} else {
try {
let [from_time, end_time] = timeAdvisement?.value.split("-");
// let [from_time, end_time] = timeAdvisement?.value.split("-");
const data = {
user_name: nameUser,
agents_code: mds,
guest_name: nameUser,
phone,
from_time,
end_time,
grade_id: gradeSelected?.value,
school: addressTeach,
source: "advise",
role: props.type,
grade: gradeSelected?.title,
email,
message
// from_time,
// end_time,
// school: addressTeach,
// source: "advise",
// role: props.type,
};
const result = await sendMsgContact(data);
if (result.status) {
// setIsSuccess(true);
setIsSuccessRegist(true);
} else {
dispatch(alertActions.error({ 'message': typeof result?.msg === 'string' ? result?.msg : Object.values(result?.msg)?.join('\n'), 'screen': 'form_register', isShowPopup: true }));
}
} catch (e) {
// console.log(e);
}
dispatch(alertActions.error({ 'message': e, 'screen': 'form_register', isShowPopup: true }));
}
} else {
if (!nameUser) {
@ -238,17 +248,8 @@ export const advisementLogic = (props) => {
if (!phone) {
setPhoneWarning("Vui lòng nhập thông tin.");
} else {
if (
(!addressTeach && props.type == userConstants.ROLE_TEACHER) ||
(!gradeSelected?.value && props.type != userConstants.ROLE_TEACHER)
) {
setAddressTeachError("Vui lòng nhập thông tin.");
setGradeError("Vui lòng nhập thông tin.");
} else if (
(!addressTeachError || !gradeError) &&
!timeAdvisement?.value
) {
setTimeAdvisementError("Vui lòng nhập thông tin.");
if(!email) {
setEmailError("Vui lòng nhập thông tin.")
}
}
}
@ -454,5 +455,8 @@ export const advisementLogic = (props) => {
setCompulError,
setIsVisibleTime,
setIsAgreePolicy,
message,
setMessage,
changeMessage
};
};

@ -27,7 +27,7 @@ function AlertError(props) {
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">
<p className="text-center">{props.message}</p>
<p className="text-center" style={{whiteSpace: 'pre-line'}}>{props.message}</p>
<div className="form-sunE-button">
{hasBtnClosePopup && <button className="btn-default mr-20" style={{width: 'unset', padding: '0 24px'}} onClick={handleClosePopup}>{textClose || 'Đóng'}</button>}
<button className="btn-line-blue" onClick={complete}>{textComplete || 'Đóng'}</button>

@ -265,11 +265,11 @@ const FooterNews = (props) => {
</HashLink>
</div>
</div> */}
<div className="font_news_bold font_news_mobile mg-bottom-0-9 mg-bottom-1-mobile color-light-black fz-1-mobile text_title_contact">
{/* <div className="font_news_bold font_news_mobile mg-bottom-0-9 mg-bottom-1-mobile color-light-black fz-1-mobile text_title_contact">
Liên hệ
</div>
</div> */}
<div className="flex-align mg-bottom-1 mg-bottom-0-5-mobile">
<div className="flex-align footer_contact_box">
{/* <div className="flex-align footer_contact_box">
<img
src="/assets/images/homeNews/icon/ico_phone.png"
alt="Icon Phone"
@ -277,9 +277,6 @@ const FooterNews = (props) => {
/>
<div className="flex-column ">
{/* <div className="color-light-black fz-09 fz-08-mobile">
Hotline
</div> */}
<a
href="tel:02462813888"
className="fz-15-mobile text_phone_number one-line font_news_semi_bold color-red"
@ -287,10 +284,10 @@ const FooterNews = (props) => {
0762 007 298
</a>
</div>
</div>
</div> */}
</div>
<div className="flex-align footer_email_social flex-jus-between mg-bottom-15 col-100">
<div className="flex-align mg-bottom-0-7-mobile footer_email_contact footer_contact_box">
{/* <div className="flex-align mg-bottom-0-7-mobile footer_email_contact footer_contact_box">
<img
src="/assets/images/homeNews/icon/ico_mail.png"
alt="Icon Mail"
@ -298,9 +295,6 @@ const FooterNews = (props) => {
/>
<div className="flex-column one-line">
{/* <div className="color-light-black fz-09 fz-08-mobile">
Email
</div> */}
<a
href="mailto:support@sundayenglish.com"
className="text_underline color-light-black one-line font_news_semi_bold fz-08-mobile text_email"
@ -308,7 +302,7 @@ const FooterNews = (props) => {
support@sundayenglish.com
</a>
</div>
</div>
</div> */}
<div className="flex-align icon_social_container hide display_flex_mobile">
<a href="#">
<img
@ -427,7 +421,7 @@ const FooterNews = (props) => {
fontSize: "0.92rem",
}}
>
Copyright @ 2007-2023 GK Corp. All Rights Reserved
{`Copyright @ 2007-${new Date().getFullYear()} GK Corp. All Rights Reserved`}
{/* <div className="version-app">{Mydata.version}</div> */}
</div>
</div>

@ -29,8 +29,8 @@ const HeaderNews = (props) => {
handleNavigateCurriculum,
} = headerNewsLogic(props);
let { type } = props;
const authentication = useSelector((state) => state.authentication);
const dataProfile = useSelector((state) => state.profile.user_info.data);
const urlParams = new URLSearchParams(window.location.search);
const mds = urlParams.get('mds');
const renderFooterItem = (item) => {
return (
@ -77,7 +77,7 @@ const HeaderNews = (props) => {
) ? (
<HashLink
scroll={(ele) => ele.scrollIntoView({ behavior: "instant" })}
to={`/${item?.type}`}
to={`/${item?.type}?mds=${mds}`}
className="link_header_mobile link_header_item pos_rel"
ref={(e) =>
[TypeHeaderNewsItem.FEE, TypeHeaderNewsItem.TARIFF]?.includes(
@ -273,7 +273,7 @@ const HeaderNews = (props) => {
<HashLink
scroll={(ele) => ele.scrollIntoView({ behavior: "instant" })}
className="flex-center logo_header"
to="/"
to={`/?mds=${mds}`}
>
<img
alt="Logo"

@ -38,7 +38,7 @@ const ModalSuccessMsg = (props) => {
cảm ơn!`}
</div>
<div className="color-red fz-1-mobile fz-12-5 text-align-center">
{/* <div className="color-red fz-1-mobile fz-12-5 text-align-center">
Hotline hỗ trợ:{" "}
<a
href="tel: 02462813888"
@ -46,7 +46,7 @@ const ModalSuccessMsg = (props) => {
>
024 6281 3888
</a>
</div>
</div> */}
</div>
</div>
);

@ -4,11 +4,13 @@ import { TypeHeaderNewsItem } from "../../_constants/headerNews";
const ScrollFixed = () => {
let { handleScrollTop, handleNavigate } = scrollFixedLogic();
const urlParams = new URLSearchParams(window.location.search);
const mds = urlParams.get('mds');
return (
<>
<div className="box-right_fixed">
<div className="enable-mobile" onClick={() => handleNavigate('/'+TypeHeaderNewsItem.HOME)}>
<div className="enable-mobile" onClick={() => handleNavigate('/'+TypeHeaderNewsItem.HOME+'?mds='+mds)}>
<img
src="/assets/images/homeNews/icon/icon_text_hs.png"
alt="Icon phu huynh"
@ -25,14 +27,14 @@ const ScrollFixed = () => {
</div>
<div className="enable-mobile">
<div className="box-left_fixed">
<div onClick={() => handleNavigate('/'+TypeHeaderNewsItem.PARENT)}>
<div onClick={() => handleNavigate('/'+TypeHeaderNewsItem.PARENT+'?mds='+mds)}>
<img
src="/assets/images/homeNews/icon/icon_text_ph.png"
alt="Icon phu huynh"
className="icon_scale mg-bottom-0-5 icon_scroll_fixed"
/>
</div>
<div onClick={() => handleNavigate('/'+TypeHeaderNewsItem.TEACHER)}>
<div onClick={() => handleNavigate('/'+TypeHeaderNewsItem.TEACHER+'?mds='+mds)}>
<img
src="/assets/images/homeNews/icon/icon_text_gv.png"
alt="Icon giao vien"

@ -66,8 +66,110 @@ const BenefitTeacher = (props) => {
<div className="pos_rel homepage bg-white commondPage">
<HeaderNews type={TypeHeaderNewsItem.TEACHER} />
<div className="slider slider_teacher">
<LazyLoad
className="slider_bg_teacher flex-jus-between display_none_mobile pos_rel"
style={{
background: `url(
/assets/images/homeNews/slider/slider_bg_teacher.png
) no-repeat top center /cover`,
backgroundAttachment: "scroll",
}}
>
<LazyLoad className="slider_3_container">
<div className="title_container_teacher flex-center-column">
<div className="title_detail_1_teacher font_news_bold">
GIẢI PHÁP ƯU VIỆT
</div>
<div className="text-align-center title_detail_2_teacher font_news_bold fz-24">
giúp thầy giảng dạy Tiếng Anh
</div>
<span className="color-primary-green title_detail_3_teacher font_news_bold fz-24">
HIỆU QUẢ
</span>
</div>
<div className="slider_3 ">
<img
src="/assets/images/homeNews/slider/slider_3.png"
alt="Slider 3"
className="slider_3_img contain_image"
/>
</div>
</LazyLoad>
<LazyLoad className="video_slider_container pos_rel">
<img
src="/assets/images/homeNews/slider/circle_bg_phone.png"
alt="Img Bg Circle"
className="bg_circle_img pos_abs contain_image"
/>
<video
autoPlay
muted
controls={false}
playsInline
loop
poster="/assets/images/homeNews/slider/teacher_poster.jpg"
src="/assets/videos/teacher_video.mp4"
// alt="Video Slider Teacher"
className=" video_slider box-shadow"
/>
</LazyLoad>
</LazyLoad>
{/* MOBILE */}
<LazyLoad className="slider_bg_teacher pos_rel flex-jus-between hide display_flex_mobile">
<img
src="/assets/images/homeNews/slider/slider_bg_teacher_mobile.png"
alt="Img Slider Mobile"
className="contain_image pos_abs col-100 img_slider_mobile"
/>
<div className="slider_3_container">
<div className="title_container_teacher flex-center-column">
<div className="title_detail_1_teacher font_news_extra_bold">
GIẢI PHÁP ƯU VIỆT
</div>
<div className="text-align-center title_detail_2_teacher font_news_bold fz-24">
giúp thầy giảng dạy Tiếng Anh
</div>
<span className="color-primary-green title_detail_3_teacher font_news_bold font_news_extra_bold_mobile fz-24">
HIỆU QUẢ
</span>
</div>
<LazyLoad className="slider_3">
<img
src="/assets/images/homeNews/slider/slider_3_mobile.png"
alt="Slider 3"
className="slider_3_img"
/>
</LazyLoad>
</div>
<LazyLoad className="video_slider_container ">
{/* <img
src="/assets/images/homeNews/slider/video_slider_teacher.png"
alt="Video Slider Teacher"
className="contain_image video_slider"
/> */}
<video
autoPlay
muted
controls={false}
playsInline
loop
src="/assets/videos/teacher_video.mp4"
poster="/assets/images/homeNews/slider/teacher_poster.jpg"
// alt="Video Slider Teacher"
className=" video_slider box-shadow"
/>
</LazyLoad>
</LazyLoad>
</div>
<div className="content flex-center-column" style={{backgroundColor: 'rgba(238, 249, 254, 1)'}}>
<Slogan type="teacher" />
{/* <Slogan type="teacher" /> */}
<div className="pos_rel content_bg_benefit content_bg_benefit_teacher flex-center-column">
<div className="flex-center-column img_benefits_teacher">
<img
@ -224,7 +326,7 @@ const BenefitTeacher = (props) => {
</div>
</div> */}
<AdvisementFormTeacher
<AdvisementForm
placeholder="Họ và tên thầy cô"
type={userConstants.ROLE_TEACHER}
/>

@ -9,6 +9,8 @@ import { history } from "../../_helpers";
const DownloadPage = () => {
const { type } = useParams();
const urlParams = new URLSearchParams(window.location.search);
const mds = urlParams.get('mds');
let { dataTeacher, dataStudent, dataParent, handleLinkApp } = downloadLogic();
@ -59,7 +61,7 @@ const DownloadPage = () => {
src="/assets/images/logo_home.png"
alt="Img Logo"
className="contain_image"
onClick={() => {history.push('/')}}
onClick={() => {history.push((type === 'student' ? '/' : `/${type}`) +'?mds='+mds)}}
/>
</LazyLoad>
<div className="title_download">

@ -1,3 +1,4 @@
import { configConstants } from "../_constants";
import { apiCaller, apiRequest } from "../_helpers";
export async function logoutAuth(deviceId) {
@ -42,10 +43,13 @@ export async function deleteAccount() {
// Send Msg
export function sendMsgContact(data) {
return apiCaller(
`/web_advertise/api_contact/send_contact`,
`/agent/add_customer`,
"POST",
data,
null,
true,
configConstants.API_URL_AGENT,
true,
true
);
}

Loading…
Cancel
Save