@@ -35,22 +35,34 @@ const OrganizationCard = ({ userData, loadDataFun, id }) => { | |||||
} | } | ||||
}, [currentUserData]); | }, [currentUserData]); | ||||
function displayErrorMsg(errorMsg) { | |||||
return <Typography variant="errorMessage1">{errorMsg}</Typography> | |||||
} | |||||
const formik = useFormik({ | const formik = useFormik({ | ||||
enableReinitialize: true, | enableReinitialize: true, | ||||
initialValues: currentUserData, | initialValues: currentUserData, | ||||
validationSchema: yup.object().shape({ | validationSchema: yup.object().shape({ | ||||
enCompanyName: yup.string().max(255).required('請輸入英文名稱'), | |||||
chCompanyName: yup.string().max(255, '請輸入中文名稱').nullable(), | |||||
addressLine1: yup.string().max(255).required('請輸入第一行地址'), | |||||
addressLine2: yup.string().max(255, "length must <= 255"), | |||||
addressLine3: yup.string().max(255, "length must <= 255"), | |||||
fax_countryCode: yup.string().min(3, '請輸入國際區號').nullable(), | |||||
tel_countryCode: yup.string().min(3, '請輸入國際區號'), | |||||
phoneNumber: yup.string().min(8, '請輸入有效聯絡電話').required('請輸入聯絡電話'), | |||||
faxNumber: yup.string().min(8, '請輸入8位數字').nullable(), | |||||
brExpiryDate: yup.string().min(8).required('請輸入商業登記證有效日期'), | |||||
brNo: yup.string().min(8, '請輸入有效商業登記證號碼').max(8, '請輸入有效商業登記證號碼').required('請輸入商業登記證號碼'), | |||||
enCompanyName: yup.string().max(255).required(displayErrorMsg('請輸入英文名稱')), | |||||
chCompanyName: yup.string().max(255, displayErrorMsg('請輸入中文名稱')).nullable(), | |||||
addressLine1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||||
addressLine2: yup.string().max(255, displayErrorMsg("length must <= 255")), | |||||
addressLine3: yup.string().max(255, displayErrorMsg("length must <= 255")), | |||||
fax_countryCode: yup.string().min(3, displayErrorMsg('請輸入國際區號')).nullable(), | |||||
tel_countryCode: yup.string().min(3, displayErrorMsg('請輸入國際區號')), | |||||
phoneNumber: yup.string().min(8, displayErrorMsg('請輸入有效聯絡電話')).required(displayErrorMsg('請輸入聯絡電話')), | |||||
faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(), | |||||
brExpiryDate: yup.string().min(8).required(displayErrorMsg('請輸入商業登記證有效日期')), | |||||
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(`請輸入有效商業登記證號碼`)), function (value) { | |||||
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/ | |||||
if (value !== undefined) { | |||||
if (value.match(brNo_pattern)) { | |||||
return true | |||||
} else { | |||||
return false | |||||
} | |||||
} | |||||
}), | |||||
}), | }), | ||||
onSubmit: vaule => { | onSubmit: vaule => { | ||||
console.log(vaule) | console.log(vaule) | ||||
@@ -1,6 +1,6 @@ | |||||
// material-ui | // material-ui | ||||
import { | import { | ||||
Grid, Button | |||||
Grid, Button, Typography | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import MainCard from "../../components/MainCard"; | import MainCard from "../../components/MainCard"; | ||||
import * as React from "react"; | import * as React from "react"; | ||||
@@ -34,21 +34,34 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||||
} | } | ||||
}, [currentUserData]); | }, [currentUserData]); | ||||
function displayErrorMsg(errorMsg) { | |||||
return <Typography variant="errorMessage1">{errorMsg}</Typography> | |||||
} | |||||
const formik = useFormik({ | const formik = useFormik({ | ||||
enableReinitialize: true, | enableReinitialize: true, | ||||
initialValues: currentUserData, | initialValues: currentUserData, | ||||
validationSchema: yup.object().shape({ | validationSchema: yup.object().shape({ | ||||
enCompanyName: yup.string().max(255, "請輸入英文名稱").required('請輸入英文名稱'), | |||||
chCompanyName: yup.string().max(255, '請輸入中文名稱').nullable(), | |||||
addressLine1: yup.string().max(255).required('請輸入第一行地址'), | |||||
enCompanyName: yup.string().max(255, displayErrorMsg("請輸入英文名稱")).required(displayErrorMsg('請輸入英文名稱')), | |||||
chCompanyName: yup.string().max(255, displayErrorMsg('請輸入中文名稱')).nullable(), | |||||
addressLine1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||||
addressLine2: yup.string().max(255).nullable(), | addressLine2: yup.string().max(255).nullable(), | ||||
addressLine3: yup.string().max(255).nullable(), | addressLine3: yup.string().max(255).nullable(), | ||||
fax_countryCode: yup.string().min(3, "請輸入國際區號").nullable(), | |||||
tel_countryCode: yup.string().min(3, "請輸入國際區號"), | |||||
phoneNumber: yup.string().min(8, '請輸入有效聯絡電話').required('請輸入聯絡電話'), | |||||
fax_countryCode: yup.string().min(3, displayErrorMsg("請輸入國際區號")).nullable(), | |||||
tel_countryCode: yup.string().min(3, displayErrorMsg("請輸入國際區號")), | |||||
phoneNumber: yup.string().min(8, displayErrorMsg('請輸入有效聯絡電話')).required(displayErrorMsg('請輸入聯絡電話')), | |||||
faxNumber: yup.string().min(8).nullable(), | faxNumber: yup.string().min(8).nullable(), | ||||
brExpiryDate: yup.string().min(8).required('請輸入商業登記證有效日期'), | |||||
brNo: yup.string().min(8, '請輸入有效商業登記證號碼').max(8, '請輸入有效商業登記證號碼').required('請輸入商業登記證號碼'), | |||||
brExpiryDate: yup.string().min(8).required(displayErrorMsg('請輸入商業登記證有效日期')), | |||||
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(`請輸入有效商業登記證號碼`)), function (value) { | |||||
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/ | |||||
if (value !== undefined) { | |||||
if (value.match(brNo_pattern)) { | |||||
return true | |||||
} else { | |||||
return false | |||||
} | |||||
} | |||||
}), | |||||
}), | }), | ||||
onSubmit: values => { | onSubmit: values => { | ||||
HttpUtils.post({ | HttpUtils.post({ | ||||
@@ -76,12 +76,12 @@ const Index = () => { | |||||
<center> | <center> | ||||
<Grid item xs={12} md={8} > | <Grid item xs={12} md={8} > | ||||
<Typography variant="h2" sx={{ textAlign: "left", ml: 4, mr: 4, mt: 4, borderBottom: "1px solid black" }}> | <Typography variant="h2" sx={{ textAlign: "left", ml: 4, mr: 4, mt: 4, borderBottom: "1px solid black" }}> | ||||
公共啟事:交對完成 | |||||
公共啟事:校對完成 | |||||
</Typography> | </Typography> | ||||
<Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | ||||
我們已收到你已確定申請編號: {record?.appNo} 的稿件交對確定及可付印的指示,並將安排刊登於憲報 | |||||
我們已收到你已確定申請編號: {record?.appNo} 的稿件校對確定及可付印的指示,並將安排刊登於憲報 | |||||
期數 {record?.appNo} 年 {record?.issueVolume} 卷 第 {record?.issueNo} 期內。 | 期數 {record?.appNo} 年 {record?.issueVolume} 卷 第 {record?.issueNo} 期內。 | ||||
<br/><br/> | <br/><br/> | ||||
此公共啟事申請的費用將於下期發出的繳費發票時收取,請依時繳費。 | 此公共啟事申請的費用將於下期發出的繳費發票時收取,請依時繳費。 | ||||
@@ -1,7 +1,7 @@ | |||||
// material-ui | // material-ui | ||||
import { | import { | ||||
Grid, Typography, Button, | Grid, Typography, Button, | ||||
Dialog, DialogTitle, DialogContent, DialogActions | |||||
Dialog, DialogTitle, DialogContent, DialogActions, | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import MainCard from "../../../components/MainCard"; | import MainCard from "../../../components/MainCard"; | ||||
import * as React from "react"; | import * as React from "react"; | ||||
@@ -39,23 +39,36 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||||
} | } | ||||
}, [currentUserData]); | }, [currentUserData]); | ||||
function displayErrorMsg(errorMsg) { | |||||
return <Typography variant="errorMessage1">{errorMsg}</Typography> | |||||
} | |||||
const formik = useFormik({ | const formik = useFormik({ | ||||
enableReinitialize: true, | enableReinitialize: true, | ||||
initialValues: currentUserData, | initialValues: currentUserData, | ||||
validationSchema: yup.object().shape({ | validationSchema: yup.object().shape({ | ||||
contactPerson: yup.string().max(255).required('請輸入姓名'), | |||||
enCompanyName: yup.string().max(255).required('請輸入英文名稱'), | |||||
contactPerson: yup.string().max(255).required(displayErrorMsg('請輸入姓名')), | |||||
enCompanyName: yup.string().max(255).required(displayErrorMsg('請輸入英文名稱')), | |||||
chCompanyName: yup.string().max(255).nullable(), | chCompanyName: yup.string().max(255).nullable(), | ||||
addressLine1: yup.string().max(255).required('請輸入第一行地址'), | |||||
addressLine1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||||
addressLine2: yup.string().max(255).nullable(), | addressLine2: yup.string().max(255).nullable(), | ||||
addressLine3: yup.string().max(255).nullable(), | addressLine3: yup.string().max(255).nullable(), | ||||
emailBus: yup.string().max(255).required('請輸入電郵'), | |||||
tel_countryCode: yup.string().min(3, '請輸入3位數字').required('請輸入國際區號'), | |||||
fax_countryCode: yup.string().min(3, '請輸入3位數字').nullable(), | |||||
phoneNumber: yup.string().min(8, '請輸入8位數字').required('請輸入聯絡電話'), | |||||
faxNumber: yup.string().min(8, '請輸入8位數字').nullable(), | |||||
brExpiryDate: yup.string().min(8, '請輸入商業登記證有效日期'), | |||||
brNo: yup.string().min(8, '請輸入有效商業登記證號碼').max(8, '請輸入有效商業登記證號碼').required('請輸入商業登記證號碼'), | |||||
emailBus: yup.string().max(255).required(displayErrorMsg('請輸入電郵')), | |||||
tel_countryCode: yup.string().min(3, displayErrorMsg('請輸入3位數字')).required(displayErrorMsg('請輸入國際區號')), | |||||
fax_countryCode: yup.string().min(3, displayErrorMsg('請輸入3位數字')).nullable(), | |||||
phoneNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).required(displayErrorMsg('請輸入聯絡電話')), | |||||
faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(), | |||||
brExpiryDate: yup.string().min(8, displayErrorMsg('請輸入商業登記證有效日期')), | |||||
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(`請輸入有效商業登記證號碼`), function (value) { | |||||
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/ | |||||
if (value !== undefined) { | |||||
if (value.match(brNo_pattern)) { | |||||
return true | |||||
} else { | |||||
return false | |||||
} | |||||
} | |||||
}), | |||||
}), | }), | ||||
onSubmit: (values) => { | onSubmit: (values) => { | ||||
HttpUtils.post({ | HttpUtils.post({ | ||||
@@ -118,16 +118,16 @@ const BusCustomFormWizard = (props) => { | |||||
onCaptchaChange(); | onCaptchaChange(); | ||||
// } | // } | ||||
axios.get(`${GET_USERNAME}`) | axios.get(`${GET_USERNAME}`) | ||||
.then((response) => { | |||||
if (response.status === 200) { | |||||
setUserNameList(response.data); | |||||
} | |||||
.then((response) => { | |||||
if (response.status === 200) { | |||||
setUserNameList(response.data); | |||||
} | |||||
}) | |||||
.catch(error => { | |||||
console.log(error); | |||||
return false; | |||||
}); | |||||
}) | |||||
.catch(error => { | |||||
console.log(error); | |||||
return false; | |||||
}); | |||||
}, []); | }, []); | ||||
const handleCheckUsername = async () => { | const handleCheckUsername = async () => { | ||||
@@ -181,6 +181,7 @@ const BusCustomFormWizard = (props) => { | |||||
handlePhone(data.phone) && | handlePhone(data.phone) && | ||||
handleUserName(data.username) && | handleUserName(data.username) && | ||||
handleCaptcha(data.captchaField) && | handleCaptcha(data.captchaField) && | ||||
handleBrNo(data.brNo) && | |||||
!checkUsername | !checkUsername | ||||
) { | ) { | ||||
setisValid(true) | setisValid(true) | ||||
@@ -223,6 +224,17 @@ const BusCustomFormWizard = (props) => { | |||||
}, [updateRows]); | }, [updateRows]); | ||||
const handleBrNo = (brNo) => { | |||||
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/ | |||||
if (brNo !== undefined) { | |||||
if (brNo.match(brNo_pattern)) { | |||||
return true | |||||
} else { | |||||
return false | |||||
} | |||||
} | |||||
} | |||||
const handleFileUpload = (event) => { | const handleFileUpload = (event) => { | ||||
let updateList = new DataTransfer(); | let updateList = new DataTransfer(); | ||||
let currentFileList = fileListData; | let currentFileList = fileListData; | ||||
@@ -465,21 +477,21 @@ const BusCustomFormWizard = (props) => { | |||||
} | } | ||||
} | } | ||||
) | ) | ||||
.matches(/^[aA-zZ0-9\s]+$/, {message: displayErrorMsg("用戶名稱不包含特殊字符")}) | |||||
.matches(/^\S*$/, {message: displayErrorMsg('用戶名稱不包含空格')}), | |||||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg("用戶名稱不包含特殊字符") }) | |||||
.matches(/^\S*$/, { message: displayErrorMsg('用戶名稱不包含空格') }), | |||||
password: yup.string().min(8, displayErrorMsg('請輸入最少8位密碼')).required(displayErrorMsg('請輸入密碼')) | password: yup.string().min(8, displayErrorMsg('請輸入最少8位密碼')).required(displayErrorMsg('請輸入密碼')) | ||||
.matches(/^\S*$/, {message: displayErrorMsg('密碼不包含空格')}) | |||||
.matches(/^(?=.*[a-z])/, {message: displayErrorMsg('請包括最少1個小寫字母')}) | |||||
.matches(/^(?=.*[A-Z])/, {message: displayErrorMsg('請包括最少1個大寫字母')}) | |||||
.matches(/^(?=.*[0-9])/, {message: displayErrorMsg('請包括最少1個數字')}) | |||||
.matches(/^(?=.*[!@#%&])/, {message: displayErrorMsg('請包括最少1個特殊字符')}), | |||||
.matches(/^\S*$/, { message: displayErrorMsg('密碼不包含空格') }) | |||||
.matches(/^(?=.*[a-z])/, { message: displayErrorMsg('請包括最少1個小寫字母') }) | |||||
.matches(/^(?=.*[A-Z])/, { message: displayErrorMsg('請包括最少1個大寫字母') }) | |||||
.matches(/^(?=.*[0-9])/, { message: displayErrorMsg('請包括最少1個數字') }) | |||||
.matches(/^(?=.*[!@#%&])/, { message: displayErrorMsg('請包括最少1個特殊字符') }), | |||||
confirmPassword: yup.string().min(8, displayErrorMsg('請最少輸入8位密碼')).required(displayErrorMsg('請確認密碼')).oneOf([yup.ref('password'), null], displayErrorMsg('請輸入相同密碼')), | confirmPassword: yup.string().min(8, displayErrorMsg('請最少輸入8位密碼')).required(displayErrorMsg('請確認密碼')).oneOf([yup.ref('password'), null], displayErrorMsg('請輸入相同密碼')), | ||||
enName: yup.string().max(255).required(displayErrorMsg('請輸入英文姓名')), | enName: yup.string().max(255).required(displayErrorMsg('請輸入英文姓名')), | ||||
enCompanyName: yup.string().matches(/^[^$^*()]+$/, {message: displayErrorMsg('No special characters $/^/*/(/)')}).when('chCompanyName', { | |||||
enCompanyName: yup.string().matches(/^[^$^*()]+$/, { message: displayErrorMsg('No special characters $/^/*/(/)') }).when('chCompanyName', { | |||||
is: (chCompanyName) => !chCompanyName || chCompanyName.length === 0, | is: (chCompanyName) => !chCompanyName || chCompanyName.length === 0, | ||||
then: yup.string().required(displayErrorMsg('Please enter either English or Chinese name')), | then: yup.string().required(displayErrorMsg('Please enter either English or Chinese name')), | ||||
}), | }), | ||||
chCompanyName: yup.string().matches(/^[^$^*()]+$/, {message: displayErrorMsg('不包含特殊字符 $/^/*/(/)')}).when('enCompanyName', { | |||||
chCompanyName: yup.string().matches(/^[^$^*()]+$/, { message: displayErrorMsg('不包含特殊字符 $/^/*/(/)') }).when('enCompanyName', { | |||||
is: (enCompanyName) => !enCompanyName || enCompanyName.length === 0, | is: (enCompanyName) => !enCompanyName || enCompanyName.length === 0, | ||||
then: yup.string().required(displayErrorMsg('請輸入英文或中文名稱')), | then: yup.string().required(displayErrorMsg('請輸入英文或中文名稱')), | ||||
}), | }), | ||||
@@ -494,7 +506,16 @@ const BusCustomFormWizard = (props) => { | |||||
phone: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')).required(displayErrorMsg('請輸入聯絡電話')), | phone: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')).required(displayErrorMsg('請輸入聯絡電話')), | ||||
fax: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')), | fax: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')), | ||||
brExpiryDate: yup.date().min(new Date().toISOString().split("T")[0], displayErrorMsg('請輸入商業登記證有效日期')).max("2099-12-31", displayErrorMsg('請輸入商業登記證有效日期')).required(displayErrorMsg('請輸入商業登記證有效日期')), | brExpiryDate: yup.date().min(new Date().toISOString().split("T")[0], displayErrorMsg('請輸入商業登記證有效日期')).max("2099-12-31", displayErrorMsg('請輸入商業登記證有效日期')).required(displayErrorMsg('請輸入商業登記證有效日期')), | ||||
brNo: yup.string().min(8, displayErrorMsg('請輸入商業登記證號碼')).required(displayErrorMsg('請輸入商業登記證號碼')), | |||||
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(`請輸入有效商業登記證號碼`), function (value) { | |||||
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/ | |||||
if (value !== undefined) { | |||||
if (value.match(brNo_pattern)) { | |||||
return true | |||||
} else { | |||||
return false | |||||
} | |||||
} | |||||
}), | |||||
captchaField: yup.string().required(displayErrorMsg('請輸入驗證')).oneOf([captcha], displayErrorMsg('請輸入有效驗證')), | captchaField: yup.string().required(displayErrorMsg('請輸入驗證')).oneOf([captcha], displayErrorMsg('請輸入有效驗證')), | ||||
}, ['enCompanyName', 'chCompanyName']), | }, ['enCompanyName', 'chCompanyName']), | ||||
@@ -1547,7 +1568,7 @@ const BusCustomFormWizard = (props) => { | |||||
<Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}> | <Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}> | ||||
<CheckCircleOutlineIcon color="success" sx={{ width: "200px", height: "200px" }} /> | <CheckCircleOutlineIcon color="success" sx={{ width: "200px", height: "200px" }} /> | ||||
<Typography display="inline" variant="h4">帳戶申請已成功提交。</Typography> | <Typography display="inline" variant="h4">帳戶申請已成功提交。</Typography> | ||||
<Typography display="inline" variant="h4">驗證電郵將發送到你的電郵地址,請要指示完成驗證及登入系統。</Typography> | |||||
<Typography display="inline" variant="h4">驗證電郵將發送到你的電郵地址,請依指示完成驗證及登入系統。</Typography> | |||||
<Button variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="h5">返回登入頁面</Typography></Button> | <Button variant="outlined" component={Link} to="/login" sx={{ fontSize: 20, height: '60px' }}><Typography variant="h5">返回登入頁面</Typography></Button> | ||||
</Stack> | </Stack> | ||||
: | : | ||||