| @@ -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> | ||||
| : | : | ||||