|
|
@@ -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,POST_CAPTCHA} from "utils/ApiPathConst"; |
|
|
|
import {POST_PUBLIC_USER_REGISTER,POST_CAPTCHA, GET_USERNAME} from "utils/ApiPathConst"; |
|
|
|
// import * as HttpUtils from 'utils/HttpUtils'; |
|
|
|
import * as ComboData from "utils/ComboData"; |
|
|
|
|
|
|
@@ -62,6 +62,7 @@ const CustomFormWizard = (props) => { |
|
|
|
const [checkUpload, setCheckUpload] = useState(false); |
|
|
|
const [isLoading, setLoding] = useState(true); |
|
|
|
const [updateRows, setUpdateRows] = useState([]); |
|
|
|
const [userNameList, setUserNameList] = useState(); |
|
|
|
|
|
|
|
const [captcha, setCaptcha] = useState([]); |
|
|
|
const [captchaImg, setCaptchaImage] = useState([]); |
|
|
@@ -109,6 +110,17 @@ const CustomFormWizard = (props) => { |
|
|
|
useEffect(() => { |
|
|
|
changePassword(''); |
|
|
|
onCaptchaChange(); |
|
|
|
axios.get(`${GET_USERNAME}`) |
|
|
|
.then((response) => { |
|
|
|
if (response.status === 200) { |
|
|
|
setUserNameList(response.data); |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
.catch(error => { |
|
|
|
console.log(error); |
|
|
|
return false; |
|
|
|
}); |
|
|
|
}, []); |
|
|
|
|
|
|
|
const onCaptchaChange = ()=>{ |
|
|
@@ -364,21 +376,66 @@ const CustomFormWizard = (props) => { |
|
|
|
} |
|
|
|
|
|
|
|
function handleIdNo(idNo,selectedIdDocType,checkDigit) { |
|
|
|
var pattern = /^[A-Z][0-9]*$/; |
|
|
|
var space = /\s/; |
|
|
|
if (!idNo.match(pattern)) { |
|
|
|
return false; |
|
|
|
}else if |
|
|
|
(selectedIdDocType=="HKID"&&checkDigit==""){ |
|
|
|
return false; |
|
|
|
} |
|
|
|
else if (idNo.match(space)) { |
|
|
|
return false; |
|
|
|
}else if (idNo.length < 7) { |
|
|
|
return false; |
|
|
|
} else { |
|
|
|
// console.log("IdNo true") |
|
|
|
return true; |
|
|
|
// var pattern = /^[A-Z][0-9]*$/; |
|
|
|
var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/; |
|
|
|
var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/; |
|
|
|
var pattern_passport = /^[A-Z]{1}[0-9]{8}$/; |
|
|
|
var pattern_CHID = /^[0-9]{6}(20|19)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9X]{1}/; |
|
|
|
var pattern_otherCert = /^[A-Z]{1}[0-9]{5,}/; |
|
|
|
// var space = /\s/; |
|
|
|
// if (!idNo.match(pattern)) { |
|
|
|
// return false; |
|
|
|
// } else if (selectedIdDocType=="HKID"&&checkDigit==""){ |
|
|
|
// return false; |
|
|
|
// } else if (idNo.match(space)) { |
|
|
|
// return false; |
|
|
|
// } else if (idNo.length < 6) { |
|
|
|
// return false; |
|
|
|
// } else { |
|
|
|
// // console.log("IdNo true") |
|
|
|
// return true; |
|
|
|
// } |
|
|
|
switch (selectedIdDocType) { |
|
|
|
case "HKID": |
|
|
|
if (checkDigit === "") return false |
|
|
|
if (idNo.match(pattern_HKIDv1)) { |
|
|
|
return true |
|
|
|
} else if (idNo.match(pattern_HKIDv2)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "passport": |
|
|
|
if (idNo.match(pattern_passport)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "CNID": |
|
|
|
if (idNo.match(pattern_CHID)) { |
|
|
|
const subStr_year = idNo.substring(6, 10) |
|
|
|
const subStr_month = idNo.substring(10, 12) |
|
|
|
const subStr_date = idNo.substring(12, 14) |
|
|
|
|
|
|
|
const today = new Date() |
|
|
|
const inputDate = new Date(`${subStr_year}-${subStr_month}-${subStr_date}`) |
|
|
|
|
|
|
|
if (inputDate > today || inputDate === "Invalid Date" || inputDate.getFullYear().toString() !== subStr_year || (inputDate.getMonth() + 1).toString().padStart(2, "0") !== subStr_month || inputDate.getDate().toString().padStart(2, "0") !== subStr_date) { |
|
|
|
return false |
|
|
|
} else { |
|
|
|
return true |
|
|
|
} |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "otherCert": |
|
|
|
if (idNo.match(pattern_otherCert)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -441,7 +498,17 @@ const CustomFormWizard = (props) => { |
|
|
|
captchaField:'' |
|
|
|
}), |
|
|
|
validationSchema:yup.object().shape({ |
|
|
|
username: yup.string().min(6,'用戶名稱最少6位').required('請輸入用戶名稱') |
|
|
|
username: yup.string().min(6,'用戶名稱最少6位').required('請輸入用戶名稱').test( |
|
|
|
"checkUserNameUsed", |
|
|
|
"此用戶登入名稱已被注冊,請使用其他用戶登入名稱", |
|
|
|
function(value) { |
|
|
|
if (userNameList.some(item => item.username === value)) { |
|
|
|
return false |
|
|
|
} else { |
|
|
|
return true |
|
|
|
} |
|
|
|
} |
|
|
|
) |
|
|
|
.matches(/^[aA-zZ0-9\s]+$/, "用戶名稱不包含特殊字符") |
|
|
|
.matches(/^\S*$/, '用戶名稱不包含空格'), |
|
|
|
password: yup.string().min(8,'請輸入最少8位密碼').required('請輸入密碼') |
|
|
@@ -458,17 +525,57 @@ const CustomFormWizard = (props) => { |
|
|
|
address3: yup.string().max(255).required('請輸入第三行地址'), |
|
|
|
email: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵'), |
|
|
|
emailConfirm: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵').oneOf([yup.ref('email'), null], '請輸入相同電郵'), |
|
|
|
idNo: yup.string().required('請輸入證件號碼') |
|
|
|
.matches(/^[aA-zZ0-9\s]+$/, "證件號碼不包含特殊字符") |
|
|
|
.matches(/^\S*$/, '證件號碼不包含空格') |
|
|
|
.test('checkIDCardFormat', '請輸入香港身份證號碼', function(value) { |
|
|
|
idNo: yup.string().required(`請輸入${selectedIdDocInputType}號碼`) |
|
|
|
.matches(/^[aA-zZ0-9\s]+$/, `${selectedIdDocInputType}號碼不包含特殊字符`) |
|
|
|
.matches(/^\S*$/, `${selectedIdDocInputType}號碼不包含空格`) |
|
|
|
.test('checkIDCardFormat', `請輸入有效的${selectedIdDocInputType}號碼`, function(value) { |
|
|
|
const idDocType = selectedIdDocType.type; |
|
|
|
var pattern = /^[A-Z][0-9]*$/; |
|
|
|
var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/; |
|
|
|
var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/; |
|
|
|
var pattern_passport = /^[A-Z]{1}[0-9]{8}$/; |
|
|
|
var pattern_CHID = /^[0-9]{6}(20|19)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9X]{1}/; |
|
|
|
var pattern_otherCert = /^[A-Z]{1}[0-9]{5,}/; |
|
|
|
if(value!==undefined){ |
|
|
|
if (!value.match(pattern)&&idDocType=="HKID"&&value.length<7) { |
|
|
|
return false |
|
|
|
} else { |
|
|
|
return true |
|
|
|
switch (idDocType) { |
|
|
|
case "HKID": |
|
|
|
if (value.match(pattern_HKIDv1)) { |
|
|
|
return true |
|
|
|
} else if (value.match(pattern_HKIDv2)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "passport": |
|
|
|
if (value.match(pattern_passport)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "CNID": |
|
|
|
if (value.match(pattern_CHID)) { |
|
|
|
const subStr_year = value.substring(6, 10) |
|
|
|
const subStr_month = value.substring(10, 12) |
|
|
|
const subStr_date = value.substring(12, 14) |
|
|
|
|
|
|
|
const today = new Date() |
|
|
|
const inputDate = new Date(`${subStr_year}-${subStr_month}-${subStr_date}`) |
|
|
|
|
|
|
|
if (inputDate > today || inputDate === "Invalid Date" || inputDate.getFullYear().toString() !== subStr_year || (inputDate.getMonth() + 1).toString().padStart(2, "0") !== subStr_month || inputDate.getDate().toString().padStart(2, "0") !== subStr_date) { |
|
|
|
return false |
|
|
|
} else { |
|
|
|
return true |
|
|
|
} |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "otherCert": |
|
|
|
if (value.match(pattern_otherCert)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}), |
|
|
@@ -732,17 +839,31 @@ const CustomFormWizard = (props) => { |
|
|
|
<OutlinedInput |
|
|
|
id="idNo-login" |
|
|
|
type="text" |
|
|
|
value={formik.values.idNo.toUpperCase().trim()} |
|
|
|
name="idNo" |
|
|
|
onChange={formik.handleChange} |
|
|
|
value={formik.values.idNo} |
|
|
|
onChange={async (e)=>{ |
|
|
|
const ele = document.getElementById('idNo-login') |
|
|
|
const startPos = ele.selectionStart |
|
|
|
if (e.type === "change") { |
|
|
|
if (!(e.target.value.match(/\s/g))) { |
|
|
|
const newValue = await e.target.value.toUpperCase() |
|
|
|
await formik.setFieldValue("idNo", newValue) |
|
|
|
ele.setSelectionRange(startPos, startPos) |
|
|
|
} else { |
|
|
|
await formik.setFieldValue("idNo", formik.values.idNo) |
|
|
|
ele.setSelectionRange(startPos-1, startPos-1) |
|
|
|
} |
|
|
|
} |
|
|
|
}} |
|
|
|
placeholder="證件號碼" |
|
|
|
fullWidth |
|
|
|
sx={{mr:1}} |
|
|
|
error={Boolean(formik.touched.idNo && formik.errors.idNo)} |
|
|
|
onBlur={formik.handleBlur} |
|
|
|
inputProps={{ |
|
|
|
maxLength: selectedIdDocType.type =='HKID'?7:18, |
|
|
|
maxLength: selectedIdDocType.type =='HKID'?8:18, |
|
|
|
onKeyDown: (e) => { |
|
|
|
console.log(e) |
|
|
|
if (e.key === 'Enter') { |
|
|
|
e.preventDefault(); |
|
|
|
} |
|
|
@@ -791,9 +912,22 @@ const CustomFormWizard = (props) => { |
|
|
|
<OutlinedInput |
|
|
|
id="idNo-login" |
|
|
|
type="text" |
|
|
|
value={formik.values.idNo.trim()} |
|
|
|
value={formik.values.idNo} |
|
|
|
name="idNo" |
|
|
|
onChange={formik.handleChange} |
|
|
|
onChange={async (e)=>{ |
|
|
|
const ele = document.getElementById('idNo-login') |
|
|
|
const startPos = ele.selectionStart |
|
|
|
if (e.type === "change") { |
|
|
|
if (!(e.target.value.match(/\s/g))) { |
|
|
|
const newValue = await e.target.value.toUpperCase() |
|
|
|
await formik.setFieldValue("idNo", newValue) |
|
|
|
ele.setSelectionRange(startPos, startPos) |
|
|
|
} else { |
|
|
|
await formik.setFieldValue("idNo", formik.values.idNo) |
|
|
|
ele.setSelectionRange(startPos-1, startPos-1) |
|
|
|
} |
|
|
|
} |
|
|
|
}} |
|
|
|
placeholder="證件號碼" |
|
|
|
fullWidth |
|
|
|
sx={{mr:1}} |
|
|
|