@@ -10,6 +10,7 @@ import * as DateUtils from "../utils/DateUtils" | |||
import { FiDataGrid } from './FiDataGrid'; | |||
import {useTheme} from "@emotion/react"; | |||
import {useMediaQuery} from "@mui/material"; | |||
import {useIntl} from "react-intl"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function FileList({ refType, refId, allowDelete, sx, dateHideable,lang, ...props }) { | |||
@@ -17,6 +18,7 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||
const [rowModesModel] = React.useState({}); | |||
const theme = useTheme(); | |||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||
const intl = useIntl(); | |||
React.useEffect(() => { | |||
loadData(); | |||
@@ -95,14 +97,14 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||
{ | |||
id: 'filename', | |||
field: 'filename', | |||
headerName: lang=="ch"?"檔案名稱":'File Name', | |||
headerName: intl.formatMessage({id: 'fileName'}), | |||
width: isMdOrLg ? 'auto' : 400, | |||
flex: isMdOrLg ? 3 : undefined, | |||
}, | |||
{ | |||
id: 'filesize', | |||
field: 'filesize', | |||
headerName: lang=="ch"?"檔案大小":'File Size', | |||
headerName: intl.formatMessage({id: 'fileName'}), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: (params) => { | |||
@@ -143,14 +145,14 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||
{ | |||
id: 'filename', | |||
field: 'filename', | |||
headerName: lang=="ch"?"檔案名稱":'File Name', | |||
headerName: intl.formatMessage({id: 'fileName'}), | |||
width: isMdOrLg ? 'auto' : 400, | |||
flex: isMdOrLg ? 3 : undefined, | |||
}, | |||
{ | |||
id: 'filesize', | |||
field: 'filesize', | |||
headerName: lang=="ch"?"檔案大小":'File Size', | |||
headerName: intl.formatMessage({id: 'fileSize'}), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: (params) => { | |||
@@ -327,7 +327,12 @@ function Header(props) { | |||
<Grid item> | |||
<Grid container direction="row" > | |||
<LocaleSelector /> | |||
{ | |||
isGLDLoggedIn()? | |||
<Grid item/> | |||
: | |||
<LocaleSelector /> | |||
} | |||
<Profile /> | |||
</Grid> | |||
</Grid> | |||
@@ -49,7 +49,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
validationSchema: yup.object().shape({ | |||
enCompanyName: yup.string().max(255).required(displayErrorMsg('請輸入英文名稱')), | |||
chCompanyName: yup.string().max(255, displayErrorMsg('請輸入中文名稱')).nullable(), | |||
addressLine1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||
addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||
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(intl.formatMessage({id: 'requireDialingCode'}))).nullable(), | |||
@@ -47,7 +47,7 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||
validationSchema: yup.object().shape({ | |||
enCompanyName: yup.string().max(255, displayErrorMsg("請輸入英文名稱")).required(displayErrorMsg('請輸入英文名稱')), | |||
chCompanyName: yup.string().max(255, displayErrorMsg('請輸入中文名稱')).nullable(), | |||
addressLine1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||
addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||
addressLine2: yup.string().max(255).nullable(), | |||
addressLine3: yup.string().max(255).nullable(), | |||
fax_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))).nullable(), | |||
@@ -73,13 +73,13 @@ export default function UploadFileTable({recordList, setRecordList,}) { | |||
{ | |||
id: 'name', | |||
field: 'name', | |||
headerName: '檔案名稱', | |||
headerName: intl.formatMessage({id: 'fileName'}), | |||
flex: 1, | |||
}, | |||
{ | |||
id: 'size', | |||
field: 'size', | |||
headerName: '檔案大小', | |||
headerName: intl.formatMessage({id: 'fileSize'}), | |||
valueGetter: (params) => { | |||
// console.log(params) | |||
return Math.ceil(params.value/1024)+" KB"; | |||
@@ -113,7 +113,7 @@ const FormPanel = ({ formData }) => { | |||
return; | |||
} | |||
if (file.size >= (10 * 1024 * 1034)) { | |||
setWarningText("上傳檔案大小應<10MB"); | |||
setWarningText(intl.formatMessage({id: 'fileSizeWarning'})); | |||
setIsWarningPopUp(true); | |||
return; | |||
} | |||
@@ -83,7 +83,7 @@ export default function UploadFileTable({recordList, setRecordList,}) { | |||
{ | |||
id: 'size', | |||
field: 'size', | |||
headerName: '檔案大小', | |||
headerName: intl.formatMessage({id: 'fileSize'}), | |||
valueGetter: (params) => { | |||
// console.log(params) | |||
return Math.ceil(params.value/1024)+" KB"; | |||
@@ -23,6 +23,7 @@ import { useNavigate } from "react-router-dom"; | |||
import { notifyActionSuccess } from 'utils/CommonFunction'; | |||
import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
import {ThemeProvider} from "@emotion/react"; | |||
import {useIntl} from "react-intl"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
@@ -30,6 +31,7 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
const [isWarningPopUp, setIsWarningPopUp] = React.useState(false); | |||
const [warningText, setWarningText] = React.useState(""); | |||
const [attachment, setAttachment] = React.useState({}); | |||
const intl = useIntl(); | |||
const [issueId, setIssueId] = React.useState(loadedData.issueId); | |||
const navigate = useNavigate(); | |||
@@ -74,7 +76,7 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||
setIsWarningPopUp(true); | |||
return; | |||
} else if (attachment.size >= (10 * 1024 * 1034)) { | |||
setWarningText("上傳檔案大小應<10MB"); | |||
setWarningText(intl.formatMessage({id: 'fileSizeWarning'})); | |||
setIsWarningPopUp(true); | |||
return; | |||
} | |||
@@ -40,7 +40,7 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||
validationSchema: yup.object().shape({ | |||
enName: yup.string().max(255).required(intl.formatMessage({id: 'userRequireEnglishName'})), | |||
chName: yup.string().max(255).required(intl.formatMessage({id: 'userRequireChineseName'})), | |||
addressLine1: yup.string().max(255).required('請輸入第一行地址'), | |||
addressLine1: yup.string().max(255).required(intl.formatMessage({id: 'validateAddressLine1'})), | |||
addressLine2: yup.string().max(255).nullable(), | |||
addressLine3: yup.string().max(255).nullable(), | |||
emailAddress: yup.string().email(intl.formatMessage({id: 'validEmailFormat'})).max(255).required(intl.formatMessage({id: 'requireEmail'})), | |||
@@ -50,7 +50,7 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||
contactPerson: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireName'}))), | |||
enCompanyName: yup.string().max(255).required(displayErrorMsg('請輸入英文名稱')), | |||
chCompanyName: yup.string().max(255).nullable(), | |||
addressLine1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||
addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||
addressLine2: yup.string().max(255).nullable(), | |||
addressLine3: yup.string().max(255).nullable(), | |||
emailBus: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), | |||
@@ -112,12 +112,12 @@ const AuthLoginCustom = () => { | |||
}), | |||
validationSchema: yup.object().shape({ | |||
// username: yup.string().min(6,'用戶名稱最少6位').required('請輸入用戶名稱'), | |||
username: yup.string().required('請輸入用戶名稱'), | |||
password: yup.string().min(8, '請輸入最少8位密碼').required('請輸入密碼') | |||
.matches(/^(?=.*[a-z])/, '請包括最少1個小寫字母') | |||
.matches(/^(?=.*[A-Z])/, '請包括最少1個大寫字母') | |||
.matches(/^(?=.*[0-9])/, '請包括最少1個數字') | |||
.matches(/^(?=.*[!@#%&])/, '請包括最少1個特殊字符'), | |||
username: yup.string().required(intl.formatMessage({id: 'requireUsername'})), | |||
password: yup.string().min(8, intl.formatMessage({id: 'atLeast8CharPassword'})).required(intl.formatMessage({id: 'requirePassword'})) | |||
.matches(/^(?=.*[a-z])/, intl.formatMessage({id: 'atLeastOneSmallLetter'})) | |||
.matches(/^(?=.*[A-Z])/, intl.formatMessage({id: 'atLeastOneCapLetter'})) | |||
.matches(/^(?=.*[0-9])/, intl.formatMessage({id: 'atLeast1Number'})) | |||
.matches(/^(?=.*[!@#%&])/, intl.formatMessage({id: 'atLeast1SpecialChar'})), | |||
}), | |||
}); | |||
@@ -312,9 +312,11 @@ const AuthLoginCustom = () => { | |||
</Grid> | |||
<Grid item xs={12}> | |||
<Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}> | |||
<Button onClick={() => getQRWithIAmSmart()} color="iAmSmart" fullWidth size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}><Typography variant="h5"> | |||
<FormattedMessage id="iAmSmartLogin"/> | |||
</Typography></Button> | |||
<Button onClick={() => getQRWithIAmSmart()} color="iAmSmart" fullWidth size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}> | |||
<Typography variant="h5"> | |||
<FormattedMessage id="iAmSmartLogin"/> | |||
</Typography> | |||
</Button> | |||
</Stack> | |||
</Grid> | |||
<Grid item xs={12}> | |||
@@ -496,29 +496,29 @@ const BusCustomFormWizard = (props) => { | |||
}), | |||
validationSchema: yup.object().shape({ | |||
username: yup.string().min(6, displayErrorMsg('用戶名稱最少6位')).required(displayErrorMsg('請輸入用戶名稱')) | |||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg("用戶名稱不包含特殊字符") }) | |||
.matches(/^\S*$/, { message: 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個特殊字符') }), | |||
confirmPassword: yup.string().min(8, displayErrorMsg('請最少輸入8位密碼')).required(displayErrorMsg(intl.formatMessage({id: 'pleaseConfirmPassword'}))).oneOf([yup.ref('password'), null], displayErrorMsg('請輸入相同密碼')), | |||
username: yup.string().min(6, displayErrorMsg(intl.formatMessage({id: 'atLeast6CharAccount'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireUsername'}))) | |||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpecialCharAccount'})) }) | |||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpaceAccount'})) }), | |||
password: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'atLeast8CharPassword'}))).required(displayErrorMsg(intl.formatMessage({id: 'requirePassword'}))) | |||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpacePassword'})) }) | |||
.matches(/^(?=.*[a-z])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeastOneSmallLetter'})) }) | |||
.matches(/^(?=.*[A-Z])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeastOneCapLetter'})) }) | |||
.matches(/^(?=.*[0-9])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeast1Number'})) }) | |||
.matches(/^(?=.*[!@#%&])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeast1SpecialChar'})) }), | |||
confirmPassword: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'atLeast8CharPassword'}))).required(displayErrorMsg(intl.formatMessage({id: 'pleaseConfirmPassword'}))).oneOf([yup.ref('password'), null], displayErrorMsg(intl.formatMessage({id: 'samePassword'}))), | |||
enName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))), | |||
enCompanyName: yup.string().matches(/^[^$^*()]+$/, { message: displayErrorMsg('No special characters $/^/*/(/)') }).when('chCompanyName', { | |||
is: (chCompanyName) => !chCompanyName || chCompanyName.length === 0, | |||
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(intl.formatMessage({id: 'notContainSpecialChar'})) }).when('enCompanyName', { | |||
is: (enCompanyName) => !enCompanyName || enCompanyName.length === 0, | |||
then: yup.string().required(displayErrorMsg('請輸入英文或中文名稱')), | |||
then: yup.string().required(displayErrorMsg(intl.formatMessage({id: 'validateEngOrChiName'}))), | |||
}), | |||
chName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireChineseName'}))), | |||
address1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||
address2: yup.string().max(255).required(displayErrorMsg('請輸入第二行地址')), | |||
address3: yup.string().max(255).required(displayErrorMsg('請輸入第三行地址')), | |||
address1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||
address2: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine2'}))), | |||
address3: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine3'}))), | |||
email: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), | |||
emailConfirm: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))).oneOf([yup.ref('email'), null], displayErrorMsg(intl.formatMessage({id: 'validSameEmail'}))), | |||
phoneCountryCode: yup.string().min(2, displayErrorMsg(intl.formatMessage({id: 'requireAtLeast2Number'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))), | |||
@@ -1288,15 +1288,18 @@ const BusCustomFormWizard = (props) => { | |||
<Grid container> | |||
<Grid item xs={12} md={12}> | |||
<Stack spacing={1} direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}>商業登記證及其他文件 | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="businessRegCertAndDoc"/> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
<Typography display="inline" variant="h6" sx={{ color: 'primary.primary' }}>請上傳你的 有效商業登記證及其他文件 的數碼檔案,以驗證你的身份。</Typography> | |||
<Typography display="inline" variant="h6" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="pleaseUploadDoc"/> | |||
</Typography> | |||
{/* <Typography display="inline" variant="h6" sx={{ fontSize: 12,color: 'primary.primary'}}>如: 香港身份證; 護照; 中國內地身份證等</Typography> */} | |||
<Stack mt={1} direction="row" justifyContent="flex-start" alignItems="center" spacing={2}> | |||
<ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | |||
<Button variant="contained" component="label" sx={{ height: '40px' }}> | |||
上傳商業登記證及其他文件 | |||
<FormattedMessage id="uploadFile"/> | |||
<input | |||
accept="image/png, .jpg, .bmp, .pdf" | |||
//className={classes.input} | |||
@@ -1325,7 +1328,7 @@ const BusCustomFormWizard = (props) => { | |||
<Grid container> | |||
<Grid item xs={12} md={12}> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
條款和條件 | |||
<FormattedMessage id="termsAndCondition"/> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</Grid> | |||
@@ -1349,11 +1352,13 @@ const BusCustomFormWizard = (props) => { | |||
color="primary" | |||
size="small" | |||
/> | |||
<Typography variant="pnspsFormHeader">我接受</Typography> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="acceptTerms"/> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
<Grid item xs={6} s={6} md={2} lg={2}> | |||
<Grid item xs={6} s={6} md={3} lg={3}> | |||
<Grid container> | |||
<Grid item sx={{ display: 'flex', alignItems: 'center' }}> | |||
<Checkbox | |||
@@ -1363,7 +1368,9 @@ const BusCustomFormWizard = (props) => { | |||
color="primary" | |||
size="small" | |||
/> | |||
<Typography variant="pnspsFormHeader">我不接受</Typography> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="rejectTerms"/> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
@@ -1376,7 +1383,7 @@ const BusCustomFormWizard = (props) => { | |||
<Grid container> | |||
<Stack direction="column"> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
驗證 | |||
<FormattedMessage id="verify"/> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
<Stack spacing={1} direction="row"> | |||
@@ -554,21 +554,21 @@ const CustomFormWizard = (props) => { | |||
captchaField: '' | |||
}), | |||
validationSchema: yup.object().shape({ | |||
username: yup.string().min(6, displayErrorMsg('用戶名稱最少6位')).required(displayErrorMsg("請輸入用戶名稱")) | |||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg("用戶名稱不包含特殊字符") }) | |||
.matches(/^\S*$/, { message: 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個特殊字符') }), | |||
confirmPassword: yup.string().min(8, displayErrorMsg('請最少輸入8位密碼')).required(displayErrorMsg(intl.formatMessage({id: 'pleaseConfirmPassword'}))).oneOf([yup.ref('password'), null], displayErrorMsg('請輸入相同密碼')), | |||
username: yup.string().min(6, displayErrorMsg(intl.formatMessage({id: 'atLeast6CharAccount'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireUsername'}))) | |||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpecialCharAccount'})) }) | |||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpaceAccount'})) }), | |||
password: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'atLeast8CharPassword'}))).required(displayErrorMsg(intl.formatMessage({id: 'requirePassword'}))) | |||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpacePassword'})) }) | |||
.matches(/^(?=.*[a-z])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeastOneSmallLetter'})) }) | |||
.matches(/^(?=.*[A-Z])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeastOneCapLetter'})) }) | |||
.matches(/^(?=.*[0-9])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeast1Number'})) }) | |||
.matches(/^(?=.*[!@#%&])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeast1SpecialChar'})) }), | |||
confirmPassword: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'atLeast8CharPassword'}))).required(displayErrorMsg(intl.formatMessage({id: 'pleaseConfirmPassword'}))).oneOf([yup.ref('password'), null], displayErrorMsg(intl.formatMessage({id: 'samePassword'}))), | |||
enName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))), | |||
chName: yup.string().max(6).required(displayErrorMsg(intl.formatMessage({id: 'userRequireChineseName'}))), | |||
address1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||
address2: yup.string().max(255).required(displayErrorMsg('請輸入第二行地址')), | |||
address3: yup.string().max(255).required(displayErrorMsg('請輸入第三行地址')), | |||
address1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||
address2: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine2'}))), | |||
address3: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine3'}))), | |||
email: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), | |||
emailConfirm: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))).oneOf([yup.ref('email'), null], displayErrorMsg(intl.formatMessage({id: 'validSameEmail'}))), | |||
idNo: yup.string().required(displayErrorMsg(`請輸入${selectedIdDocInputType}號碼`)) | |||
@@ -1496,7 +1496,7 @@ const CustomFormWizard = (props) => { | |||
<Grid container> | |||
<Grid item xs={12} md={12}> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
條款和條件 | |||
<FormattedMessage id="termsAndCondition"/> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</Grid> | |||
@@ -1520,11 +1520,13 @@ const CustomFormWizard = (props) => { | |||
color="primary" | |||
size="small" | |||
/> | |||
<Typography variant="pnspsFormHeader">我接受</Typography> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="acceptTerms"/> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
<Grid item xs={6} s={6} md={2} lg={2}> | |||
<Grid item xs={6} s={6} md={3} lg={3}> | |||
<Grid container> | |||
<Grid item sx={{ display: 'flex', alignItems: 'center' }}> | |||
<Checkbox | |||
@@ -1534,7 +1536,9 @@ const CustomFormWizard = (props) => { | |||
color="primary" | |||
size="small" | |||
/> | |||
<Typography variant="pnspsFormHeader">我不接受</Typography> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="rejectTerms"/> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
@@ -1547,7 +1551,7 @@ const CustomFormWizard = (props) => { | |||
<Grid container> | |||
<Stack direction="column"> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
驗證 | |||
<FormattedMessage id="verify"/> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
<Stack spacing={1} direction="row"> | |||
@@ -363,9 +363,9 @@ const CustomFormWizard = (props) => { | |||
captchaField: '' | |||
}), | |||
validationSchema: yup.object().shape({ | |||
address1: yup.string().max(255).required(displayErrorMsg('請輸入第一行地址')), | |||
address2: yup.string().max(255).required(displayErrorMsg('請輸入第二行地址')), | |||
address3: yup.string().max(255).required(displayErrorMsg('請輸入第三行地址')), | |||
address1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||
address2: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine2'}))), | |||
address3: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine3'}))), | |||
email: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), | |||
emailConfirm: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))).oneOf([yup.ref('email'), null], displayErrorMsg(intl.formatMessage({id: 'validSameEmail'}))), | |||
phoneCountryCode: yup.string().min(2, displayErrorMsg(intl.formatMessage({id: 'requireAtLeast2Number'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))), | |||
@@ -789,7 +789,7 @@ const CustomFormWizard = (props) => { | |||
<Grid container> | |||
<Grid item xs={12} md={12}> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
條款和條件 | |||
<FormattedMessage id="termsAndCondition"/> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</Grid> | |||
@@ -813,11 +813,13 @@ const CustomFormWizard = (props) => { | |||
color="primary" | |||
size="small" | |||
/> | |||
<Typography variant="h5">我接受</Typography> | |||
<Typography variant="h5"> | |||
<FormattedMessage id="acceptTerms"/> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
<Grid item xs={6} s={6} md={2} lg={2}> | |||
<Grid item xs={6} s={6} md={3} lg={3}> | |||
<Grid container> | |||
<Grid item sx={{ display: 'flex', alignItems: 'center' }}> | |||
<Checkbox | |||
@@ -827,7 +829,9 @@ const CustomFormWizard = (props) => { | |||
color="primary" | |||
size="small" | |||
/> | |||
<Typography variant="h5">我不接受</Typography> | |||
<Typography variant="h5"> | |||
<FormattedMessage id="rejectTerms"/> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
</Grid> | |||
@@ -840,7 +844,7 @@ const CustomFormWizard = (props) => { | |||
<Grid container> | |||
<Stack direction="column"> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
驗證 | |||
<FormattedMessage id="verify"/> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
<Stack spacing={1} direction="row"> | |||
@@ -14,6 +14,7 @@ import { | |||
Stack, | |||
Typography | |||
} from '@mui/material'; | |||
import {FormattedMessage} from "react-intl"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function PreviewUploadFileTable({ recordList, }) { | |||
@@ -32,7 +33,7 @@ export default function PreviewUploadFileTable({ recordList, }) { | |||
return ( | |||
<Stack height="100%" alignItems="center" justifyContent="center"> | |||
<Typography variant="h6"> | |||
沒有上傳檔案 | |||
<FormattedMessage id="noFile"/> | |||
</Typography> | |||
{/* <pre>(rows={[]})</pre> */} | |||
</Stack> | |||
@@ -74,13 +75,17 @@ export default function PreviewUploadFileTable({ recordList, }) { | |||
{ | |||
id: 'name', | |||
field: 'name', | |||
headerName: <Typography variant="h6">檔案名稱</Typography>, | |||
headerName: <Typography variant="h6"> | |||
<FormattedMessage id="fileName"/> | |||
</Typography>, | |||
flex: 1, | |||
}, | |||
{ | |||
id: 'size', | |||
field: 'size', | |||
headerName: <Typography variant="h6">檔案大小</Typography>, | |||
headerName: <Typography variant="h6"> | |||
<FormattedMessage id="fileSize"/> | |||
</Typography>, | |||
valueGetter: (params) => { | |||
// console.log(params) | |||
return Math.ceil(params.value / 1024) + " KB"; | |||
@@ -14,6 +14,7 @@ import { | |||
Stack, | |||
Typography | |||
} from '@mui/material'; | |||
import {FormattedMessage} from "react-intl"; | |||
// ==============================|| EVENT TABLE ||============================== // | |||
export default function UploadFileTable({ recordList, setUpdateRows, }) { | |||
@@ -33,7 +34,7 @@ export default function UploadFileTable({ recordList, setUpdateRows, }) { | |||
return ( | |||
<Stack height="100%" alignItems="center" justifyContent="center"> | |||
<Typography variant="h6"> | |||
沒有上傳檔案 | |||
<FormattedMessage id="noFile"/> | |||
</Typography> | |||
{/* <pre>(rows={[]})</pre> */} | |||
</Stack> | |||
@@ -76,13 +77,17 @@ export default function UploadFileTable({ recordList, setUpdateRows, }) { | |||
{ | |||
id: 'name', | |||
field: 'name', | |||
headerName: <Typography variant="h6">檔案名稱</Typography>, | |||
headerName: <Typography variant="h6"> | |||
<FormattedMessage id="fileName"/> | |||
</Typography>, | |||
flex: 4, | |||
}, | |||
{ | |||
id: 'size', | |||
field: 'size', | |||
headerName: <Typography variant="h6">檔案大小</Typography>, | |||
headerName: <Typography variant="h6"> | |||
<FormattedMessage id="fileSize"/> | |||
</Typography>, | |||
valueGetter: (params) => { | |||
// console.log(params) | |||
return Math.ceil(params.value / 1024) + " KB"; | |||
@@ -21,7 +21,7 @@ | |||
"companyOrUserRecord": "Company/Institutional User Records", | |||
"login": "Login", | |||
"iAmSmartLogin": "iAmSmart Login", | |||
"iAmSmartLogin": "iAmSmart login", | |||
"continueWithIAmSmart": "Continue with iAmSmart", | |||
"authorizeIAmSmartForInfo": "Authorize iAmSmart to provide personal information", | |||
"iAmSmartSubTitle": "In order to complete the account opening and establish a connection with \"iAmStart\", please authorize \"iAmSmart\" to provide the following personal information:", | |||
@@ -85,6 +85,19 @@ | |||
"pleaseEnterOrgOrCompName": "Please enter the English/Chinese name of the organisation/company", | |||
"sameAsBusinessRegistrationCert": "Same as Business Registration Certificate", | |||
"businessRegCertNumber": "Business Reg Cert Number", | |||
"businessRegCertAndDoc":"Business Registration Certificate and other documents", | |||
"pleaseUploadDoc": "Please upload a digital file of your valid business registration certificate and other documents to verify your identity.", | |||
"uploadFile": "Upload business registration certificate and other documents", | |||
"fileName": "File name", | |||
"fileSize": "File size", | |||
"fileSizeWarning": "Upload file size should be <10MB", | |||
"noFile": "No file uploaded", | |||
"termsAndCondition": "Terms and Conditions", | |||
"acceptTerms": "I accept", | |||
"rejectTerms": "I do not accept", | |||
"verify": "Verify", | |||
"validVerify": "Please enter valid verification", | |||
"autoLogout": "Login verification has expired, please login again.", | |||
"pleaseFillInBusinessRegCertNumber": "Please fill in Business Registration Certificate Number", | |||
"pleaseFillInValidBusinessRegCertNumber": "Please fill in valid Business Registration Certificate Number", | |||
"businessRegCertValidityDate": "Business Reg Cert validity date", | |||
@@ -93,6 +106,23 @@ | |||
"addressLine1": "First line", | |||
"addressLine2": "Second line", | |||
"addressLine3": "Third line", | |||
"validateAddressLine1": "Please enter the first line of address", | |||
"validateAddressLine2": "Please enter the second line of address", | |||
"validateAddressLine3": "Please enter the third line of address", | |||
"validateEngOrChiName": "Please enter the English or Chinese name", | |||
"notContainSpecialChar": "Does not contain special characters $/^/*/(/)", | |||
"samePassword": "Please enter the same password", | |||
"atLeast8CharPassword": "Please enter a password of at least 8 digits", | |||
"atLeast1SpecialChar": "Please include at least 1 special character", | |||
"atLeast1Number": "Please include at least 1 number", | |||
"atLeastOneCapLetter": "Please include at least 1 capital letter", | |||
"atLeastOneSmallLetter": "Please include at least 1 lowercase letter", | |||
"noSpacePassword": "Password does not contain spaces", | |||
"noSpaceAccount": "User name does not contain spaces", | |||
"noSpecialCharAccount": "User name does not contain special characters", | |||
"atLeast6CharAccount": "User name must be at least 6 characters", | |||
"requireUsername": "Please enter user name", | |||
"requirePassword": "Please enter password", | |||
"region": "Region (only applicable to Hong Kong)", | |||
"regionOrCountry": "Country/Region", | |||
"hongKong": "Hong Kong", | |||
@@ -85,6 +85,19 @@ | |||
"pleaseEnterOrgOrCompName": "请输入机构/公司英文名称或中文名称", | |||
"sameAsBusinessRegistrationCert": "与商业登记证相同", | |||
"businessRegCertNumber": "商业登记证号码", | |||
"businessRegCertAndDoc":"商业登记证及其他文件", | |||
"pleaseUploadDoc": "请上传你的 有效商业登记证及其他文件 的数码档案,以验证你的身份。", | |||
"uploadFile": "上传商业登记证及其他文件", | |||
"fileName": "档案名称", | |||
"fileSize": "档案大小", | |||
"fileSizeWarning": "上传档案大小应<10MB", | |||
"noFile": "没有上传档案", | |||
"termsAndCondition": "条款和条件", | |||
"acceptTerms": "我接受", | |||
"rejectTerms": "我不接受", | |||
"verify": "验证", | |||
"validVerify": "请输入有效验证", | |||
"autoLogout": "登入验证已过期,请重新登入。", | |||
"pleaseFillInBusinessRegCertNumber": "请输入商业登记证号码", | |||
"pleaseFillInValidBusinessRegCertNumber": "请输入有效商业登记证号码", | |||
"businessRegCertValidityDate": "商业登记证有效日期", | |||
@@ -93,6 +106,23 @@ | |||
"addressLine1": "第一行", | |||
"addressLine2": "第二行", | |||
"addressLine3": "第三行", | |||
"validateAddressLine1": "请输入第一行地址", | |||
"validateAddressLine2": "请输入第二行地址", | |||
"validateAddressLine3": "请输入第三行地址", | |||
"validateEngOrChiName": "请输入英文或中文名称", | |||
"notContainSpecialChar": "不包含特殊字符 $/^/*/(/)", | |||
"samePassword": "请输入相同密码", | |||
"atLeast8CharPassword": "请输入最少8位密码", | |||
"atLeast1SpecialChar": "请包括最少1个特殊字符", | |||
"atLeast1Number": "请包括最少1个数字", | |||
"atLeastOneCapLetter": "请包括最少1个大写字母", | |||
"atLeastOneSmallLetter": "请包括最少1个小写字母", | |||
"noSpacePassword": "密码不包含空格", | |||
"noSpaceAccount": "用户名称不包含空格", | |||
"noSpecialCharAccount": "用户名称不包含特殊字符", | |||
"atLeast6CharAccount": "用户名称最少6位", | |||
"requireUsername": "请输入用户名称", | |||
"requirePassword": "请输入密码", | |||
"region": "区域 (只适用于香港)", | |||
"region Or Country": "国家/地区", | |||
"hong Kong": "香港", | |||
@@ -85,6 +85,19 @@ | |||
"pleaseEnterOrgOrCompName": "請輸入機構/公司英文名稱或中文名稱", | |||
"sameAsBusinessRegistrationCert": "與商業登記證相同", | |||
"businessRegCertNumber": "商業登記證號碼", | |||
"businessRegCertAndDoc":"商業登記證及其他文件", | |||
"pleaseUploadDoc": "請上傳你的 有效商業登記證及其他文件 的數碼檔案,以驗證你的身份。", | |||
"uploadFile": "上傳商業登記證及其他文件", | |||
"fileName": "檔案名稱", | |||
"fileSize": "檔案大小", | |||
"fileSizeWarning": "上傳檔案大小應<10MB", | |||
"noFile": "沒有上傳檔案", | |||
"termsAndCondition": "條款和條件", | |||
"acceptTerms": "我接受", | |||
"rejectTerms": "我不接受", | |||
"verify": "驗證", | |||
"validVerify": "請輸入有效驗證", | |||
"autoLogout": "登入驗證已過期,請重新登入。", | |||
"pleaseFillInBusinessRegCertNumber": "請輸入商業登記證號碼", | |||
"pleaseFillInValidBusinessRegCertNumber": "請輸入有效商業登記證號碼", | |||
"businessRegCertValidityDate": "商業登記證有效日期", | |||
@@ -93,6 +106,23 @@ | |||
"addressLine1": "第一行", | |||
"addressLine2": "第二行", | |||
"addressLine3": "第三行", | |||
"validateAddressLine1": "請輸入第一行地址", | |||
"validateAddressLine2": "請輸入第二行地址", | |||
"validateAddressLine3": "請輸入第三行地址", | |||
"validateEngOrChiName": "請輸入英文或中文名稱", | |||
"notContainSpecialChar": "不包含特殊字符 $/^/*/(/)", | |||
"samePassword": "請輸入相同密碼", | |||
"atLeast8CharPassword": "請輸入最少8位密碼", | |||
"atLeast1SpecialChar": "請包括最少1個特殊字符", | |||
"atLeast1Number": "請包括最少1個數字", | |||
"atLeastOneCapLetter": "請包括最少1個大寫字母", | |||
"atLeastOneSmallLetter": "請包括最少1個小寫字母", | |||
"noSpacePassword": "密碼不包含空格", | |||
"noSpaceAccount": "用戶名稱不包含空格", | |||
"noSpecialCharAccount": "用戶名稱不包含特殊字符", | |||
"atLeast6CharAccount": "用戶名稱最少6位", | |||
"requireUsername": "請輸入用戶名稱", | |||
"requirePassword": "請輸入密碼", | |||
"region": "區域 (只適用於香港)", | |||
"regionOrCountry": "國家/地區", | |||
"hongKong": "香港", | |||