diff --git a/src/pages/authentication/auth-forms/CustomFormWizard.js b/src/pages/authentication/auth-forms/CustomFormWizard.js index 7287f83..53d8486 100644 --- a/src/pages/authentication/auth-forms/CustomFormWizard.js +++ b/src/pages/authentication/auth-forms/CustomFormWizard.js @@ -29,7 +29,7 @@ import * as yup from 'yup'; import { strengthColorChi, strengthIndicator } from 'utils/password-strength'; // import {apiPath} from "auth/utils"; import axios from "axios"; -import {POST_PUBLIC_USER_REGISTER} from "utils/ApiPathConst"; +import {POST_PUBLIC_USER_REGISTER,POST_CAPTCHA} from "utils/ApiPathConst"; // import * as HttpUtils from 'utils/HttpUtils'; import * as ComboData from "../../../utils/ComboData"; @@ -47,7 +47,8 @@ import { EyeInvisibleOutlined, EyeOutlined } from '@ant-design/icons'; import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; import CancelOutlinedIcon from '@mui/icons-material/CancelOutlined'; import { Link } from 'react-router-dom'; - +import * as HttpUtils from "../../../utils/HttpUtils"; +import LoopIcon from '@mui/icons-material/Loop'; // ============================|| FIREBASE - REGISTER ||============================ // @@ -62,6 +63,10 @@ const CustomFormWizard = (props) => { const [isLoading, setLoding] = useState(true); const [updateRows, setUpdateRows] = useState([]); + const [captcha, setCaptcha] = useState([]); + const [captchaImg, setCaptchaImage] = useState([]); + + const handleClickShowPassword = () => { setShowPassword(!showPassword); }; @@ -103,8 +108,23 @@ const CustomFormWizard = (props) => { useEffect(() => { changePassword(''); + onCaptchaChange(); }, []); + const onCaptchaChange = ()=>{ + HttpUtils.post({ + url: POST_CAPTCHA, + params:{width: 130, height: 40}, + onSuccess:(responseData)=>{ + localStorage.setItem("checkCode",responseData.checkCode); + localStorage.setItem("base64Url",responseData.base64Url); + setCaptcha(localStorage.getItem('checkCode')); + setCaptchaImage(localStorage.getItem('base64Url')); + } + }); + } + + const checkDataField = (data)=> { if (data.username !==""&& data.password !==""&& @@ -120,11 +140,13 @@ const CustomFormWizard = (props) => { data.phoneCountryCode !==""&& termsAndConAccept == true&& fileList.length!==0&& + data.captchaField&& handlePassword(data.password)&& handleEmail(data.email)&& handleIdNo(data.idNo,selectedIdDocType.type)&& handlePhone(data.phone)&& - handleUsername(data.username) + handleUsername(data.username)&& + handleCaptcha(data.captchaField) ) { setisValid(true) @@ -328,6 +350,10 @@ const CustomFormWizard = (props) => { } } + function handleCaptcha(captchaField) { + return captchaField == captcha; + } + function handleIdNo(idNo,selectedIdDocType) { var upperCase = /[A-Z]/g; if (!idNo.match(upperCase)&&selectedIdDocType=="HKID") { @@ -418,6 +444,7 @@ const CustomFormWizard = (props) => { // faxCountryCode: yup.string().min(3,'請輸入3位數字'), phone: yup.string().min(8,'請輸入最少8位數字').required('請輸入聯絡電話'), // fax: yup.string().min(8,'請輸入8位數字'), + captchaField: yup.string().required('請輸入驗證').oneOf([captcha], '請輸入有效驗證'), }), }); @@ -1198,6 +1225,47 @@ const CustomFormWizard = (props) => { + + + + + 驗證 + * + + + + + + + {onCaptchaChange()}}> + + + + + { + const value = event.target.value; + formik.setFieldValue("captchaField",value); + }} + sx={{width:'75%'}} + /> + + + {formik.touched.captchaField && formik.errors.captchaField && ( + + {formik.errors.captchaField} + + )} + + +