@@ -10,6 +10,7 @@ import * as DateUtils from "../utils/DateUtils" | |||||
import { FiDataGrid } from './FiDataGrid'; | import { FiDataGrid } from './FiDataGrid'; | ||||
import {useTheme} from "@emotion/react"; | import {useTheme} from "@emotion/react"; | ||||
import {useMediaQuery} from "@mui/material"; | import {useMediaQuery} from "@mui/material"; | ||||
import {useIntl} from "react-intl"; | |||||
// ==============================|| EVENT TABLE ||============================== // | // ==============================|| EVENT TABLE ||============================== // | ||||
export default function FileList({ refType, refId, allowDelete, sx, dateHideable,lang, ...props }) { | 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 [rowModesModel] = React.useState({}); | ||||
const theme = useTheme(); | const theme = useTheme(); | ||||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | ||||
const intl = useIntl(); | |||||
React.useEffect(() => { | React.useEffect(() => { | ||||
loadData(); | loadData(); | ||||
@@ -95,14 +97,14 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||||
{ | { | ||||
id: 'filename', | id: 'filename', | ||||
field: 'filename', | field: 'filename', | ||||
headerName: lang=="ch"?"檔案名稱":'File Name', | |||||
headerName: intl.formatMessage({id: 'fileName'}), | |||||
width: isMdOrLg ? 'auto' : 400, | width: isMdOrLg ? 'auto' : 400, | ||||
flex: isMdOrLg ? 3 : undefined, | flex: isMdOrLg ? 3 : undefined, | ||||
}, | }, | ||||
{ | { | ||||
id: 'filesize', | id: 'filesize', | ||||
field: 'filesize', | field: 'filesize', | ||||
headerName: lang=="ch"?"檔案大小":'File Size', | |||||
headerName: intl.formatMessage({id: 'fileName'}), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
@@ -143,14 +145,14 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||||
{ | { | ||||
id: 'filename', | id: 'filename', | ||||
field: 'filename', | field: 'filename', | ||||
headerName: lang=="ch"?"檔案名稱":'File Name', | |||||
headerName: intl.formatMessage({id: 'fileName'}), | |||||
width: isMdOrLg ? 'auto' : 400, | width: isMdOrLg ? 'auto' : 400, | ||||
flex: isMdOrLg ? 3 : undefined, | flex: isMdOrLg ? 3 : undefined, | ||||
}, | }, | ||||
{ | { | ||||
id: 'filesize', | id: 'filesize', | ||||
field: 'filesize', | field: 'filesize', | ||||
headerName: lang=="ch"?"檔案大小":'File Size', | |||||
headerName: intl.formatMessage({id: 'fileSize'}), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
@@ -327,7 +327,12 @@ function Header(props) { | |||||
<Grid item> | <Grid item> | ||||
<Grid container direction="row" > | <Grid container direction="row" > | ||||
<LocaleSelector /> | |||||
{ | |||||
isGLDLoggedIn()? | |||||
<Grid item/> | |||||
: | |||||
<LocaleSelector /> | |||||
} | |||||
<Profile /> | <Profile /> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -49,7 +49,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
validationSchema: yup.object().shape({ | validationSchema: yup.object().shape({ | ||||
enCompanyName: yup.string().max(255).required(displayErrorMsg('請輸入英文名稱')), | enCompanyName: yup.string().max(255).required(displayErrorMsg('請輸入英文名稱')), | ||||
chCompanyName: yup.string().max(255, displayErrorMsg('請輸入中文名稱')).nullable(), | 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")), | addressLine2: yup.string().max(255, displayErrorMsg("length must <= 255")), | ||||
addressLine3: 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(), | 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({ | validationSchema: yup.object().shape({ | ||||
enCompanyName: yup.string().max(255, displayErrorMsg("請輸入英文名稱")).required(displayErrorMsg('請輸入英文名稱')), | enCompanyName: yup.string().max(255, displayErrorMsg("請輸入英文名稱")).required(displayErrorMsg('請輸入英文名稱')), | ||||
chCompanyName: yup.string().max(255, displayErrorMsg('請輸入中文名稱')).nullable(), | 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(), | addressLine2: yup.string().max(255).nullable(), | ||||
addressLine3: yup.string().max(255).nullable(), | addressLine3: yup.string().max(255).nullable(), | ||||
fax_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))).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', | id: 'name', | ||||
field: 'name', | field: 'name', | ||||
headerName: '檔案名稱', | |||||
headerName: intl.formatMessage({id: 'fileName'}), | |||||
flex: 1, | flex: 1, | ||||
}, | }, | ||||
{ | { | ||||
id: 'size', | id: 'size', | ||||
field: 'size', | field: 'size', | ||||
headerName: '檔案大小', | |||||
headerName: intl.formatMessage({id: 'fileSize'}), | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
// console.log(params) | // console.log(params) | ||||
return Math.ceil(params.value/1024)+" KB"; | return Math.ceil(params.value/1024)+" KB"; | ||||
@@ -113,7 +113,7 @@ const FormPanel = ({ formData }) => { | |||||
return; | return; | ||||
} | } | ||||
if (file.size >= (10 * 1024 * 1034)) { | if (file.size >= (10 * 1024 * 1034)) { | ||||
setWarningText("上傳檔案大小應<10MB"); | |||||
setWarningText(intl.formatMessage({id: 'fileSizeWarning'})); | |||||
setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
return; | return; | ||||
} | } | ||||
@@ -83,7 +83,7 @@ export default function UploadFileTable({recordList, setRecordList,}) { | |||||
{ | { | ||||
id: 'size', | id: 'size', | ||||
field: 'size', | field: 'size', | ||||
headerName: '檔案大小', | |||||
headerName: intl.formatMessage({id: 'fileSize'}), | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
// console.log(params) | // console.log(params) | ||||
return Math.ceil(params.value/1024)+" KB"; | return Math.ceil(params.value/1024)+" KB"; | ||||
@@ -23,6 +23,7 @@ import { useNavigate } from "react-router-dom"; | |||||
import { notifyActionSuccess } from 'utils/CommonFunction'; | import { notifyActionSuccess } from 'utils/CommonFunction'; | ||||
import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; | import {PNSPS_LONG_BUTTON_THEME} from "../../../themes/buttonConst"; | ||||
import {ThemeProvider} from "@emotion/react"; | import {ThemeProvider} from "@emotion/react"; | ||||
import {useIntl} from "react-intl"; | |||||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
@@ -30,6 +31,7 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||||
const [isWarningPopUp, setIsWarningPopUp] = React.useState(false); | const [isWarningPopUp, setIsWarningPopUp] = React.useState(false); | ||||
const [warningText, setWarningText] = React.useState(""); | const [warningText, setWarningText] = React.useState(""); | ||||
const [attachment, setAttachment] = React.useState({}); | const [attachment, setAttachment] = React.useState({}); | ||||
const intl = useIntl(); | |||||
const [issueId, setIssueId] = React.useState(loadedData.issueId); | const [issueId, setIssueId] = React.useState(loadedData.issueId); | ||||
const navigate = useNavigate(); | const navigate = useNavigate(); | ||||
@@ -74,7 +76,7 @@ const PublicNoticeApplyForm = ({ loadedData, selections }) => { | |||||
setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
return; | return; | ||||
} else if (attachment.size >= (10 * 1024 * 1034)) { | } else if (attachment.size >= (10 * 1024 * 1034)) { | ||||
setWarningText("上傳檔案大小應<10MB"); | |||||
setWarningText(intl.formatMessage({id: 'fileSizeWarning'})); | |||||
setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
return; | return; | ||||
} | } | ||||
@@ -40,7 +40,7 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||||
validationSchema: yup.object().shape({ | validationSchema: yup.object().shape({ | ||||
enName: yup.string().max(255).required(intl.formatMessage({id: 'userRequireEnglishName'})), | enName: yup.string().max(255).required(intl.formatMessage({id: 'userRequireEnglishName'})), | ||||
chName: yup.string().max(255).required(intl.formatMessage({id: 'userRequireChineseName'})), | 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(), | addressLine2: yup.string().max(255).nullable(), | ||||
addressLine3: 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'})), | 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'}))), | contactPerson: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireName'}))), | ||||
enCompanyName: 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(displayErrorMsg('請輸入第一行地址')), | |||||
addressLine1: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||||
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(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), | emailBus: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), | ||||
@@ -112,12 +112,12 @@ const AuthLoginCustom = () => { | |||||
}), | }), | ||||
validationSchema: yup.object().shape({ | validationSchema: yup.object().shape({ | ||||
// username: yup.string().min(6,'用戶名稱最少6位').required('請輸入用戶名稱'), | // 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> | ||||
<Grid item xs={12}> | <Grid item xs={12}> | ||||
<Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}> | <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> | </Stack> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12}> | <Grid item xs={12}> | ||||
@@ -496,29 +496,29 @@ const BusCustomFormWizard = (props) => { | |||||
}), | }), | ||||
validationSchema: yup.object().shape({ | 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'}))), | enName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))), | ||||
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(intl.formatMessage({id: 'notContainSpecialChar'})) }).when('enCompanyName', { | |||||
is: (enCompanyName) => !enCompanyName || enCompanyName.length === 0, | 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'}))), | 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'}))), | 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'}))), | 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'}))), | 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 container> | ||||
<Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
<Stack spacing={1} direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | <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> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </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> */} | {/* <Typography display="inline" variant="h6" sx={{ fontSize: 12,color: 'primary.primary'}}>如: 香港身份證; 護照; 中國內地身份證等</Typography> */} | ||||
<Stack mt={1} direction="row" justifyContent="flex-start" alignItems="center" spacing={2}> | <Stack mt={1} direction="row" justifyContent="flex-start" alignItems="center" spacing={2}> | ||||
<ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | <ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | ||||
<Button variant="contained" component="label" sx={{ height: '40px' }}> | <Button variant="contained" component="label" sx={{ height: '40px' }}> | ||||
上傳商業登記證及其他文件 | |||||
<FormattedMessage id="uploadFile"/> | |||||
<input | <input | ||||
accept="image/png, .jpg, .bmp, .pdf" | accept="image/png, .jpg, .bmp, .pdf" | ||||
//className={classes.input} | //className={classes.input} | ||||
@@ -1325,7 +1328,7 @@ const BusCustomFormWizard = (props) => { | |||||
<Grid container> | <Grid container> | ||||
<Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | ||||
條款和條件 | |||||
<FormattedMessage id="termsAndCondition"/> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
@@ -1349,11 +1352,13 @@ const BusCustomFormWizard = (props) => { | |||||
color="primary" | color="primary" | ||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="pnspsFormHeader">我接受</Typography> | |||||
<Typography variant="pnspsFormHeader"> | |||||
<FormattedMessage id="acceptTerms"/> | |||||
</Typography> | |||||
</Grid> | </Grid> | ||||
</Grid> | </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 container> | ||||
<Grid item sx={{ display: 'flex', alignItems: 'center' }}> | <Grid item sx={{ display: 'flex', alignItems: 'center' }}> | ||||
<Checkbox | <Checkbox | ||||
@@ -1363,7 +1368,9 @@ const BusCustomFormWizard = (props) => { | |||||
color="primary" | color="primary" | ||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="pnspsFormHeader">我不接受</Typography> | |||||
<Typography variant="pnspsFormHeader"> | |||||
<FormattedMessage id="rejectTerms"/> | |||||
</Typography> | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -1376,7 +1383,7 @@ const BusCustomFormWizard = (props) => { | |||||
<Grid container> | <Grid container> | ||||
<Stack direction="column"> | <Stack direction="column"> | ||||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | ||||
驗證 | |||||
<FormattedMessage id="verify"/> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
@@ -554,21 +554,21 @@ const CustomFormWizard = (props) => { | |||||
captchaField: '' | captchaField: '' | ||||
}), | }), | ||||
validationSchema: yup.object().shape({ | 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'}))), | enName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))), | ||||
chName: yup.string().max(6).required(displayErrorMsg(intl.formatMessage({id: 'userRequireChineseName'}))), | 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'}))), | 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'}))), | 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}號碼`)) | idNo: yup.string().required(displayErrorMsg(`請輸入${selectedIdDocInputType}號碼`)) | ||||
@@ -1496,7 +1496,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid container> | <Grid container> | ||||
<Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | ||||
條款和條件 | |||||
<FormattedMessage id="termsAndCondition"/> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
@@ -1520,11 +1520,13 @@ const CustomFormWizard = (props) => { | |||||
color="primary" | color="primary" | ||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="pnspsFormHeader">我接受</Typography> | |||||
<Typography variant="pnspsFormHeader"> | |||||
<FormattedMessage id="acceptTerms"/> | |||||
</Typography> | |||||
</Grid> | </Grid> | ||||
</Grid> | </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 container> | ||||
<Grid item sx={{ display: 'flex', alignItems: 'center' }}> | <Grid item sx={{ display: 'flex', alignItems: 'center' }}> | ||||
<Checkbox | <Checkbox | ||||
@@ -1534,7 +1536,9 @@ const CustomFormWizard = (props) => { | |||||
color="primary" | color="primary" | ||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="pnspsFormHeader">我不接受</Typography> | |||||
<Typography variant="pnspsFormHeader"> | |||||
<FormattedMessage id="rejectTerms"/> | |||||
</Typography> | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -1547,7 +1551,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid container> | <Grid container> | ||||
<Stack direction="column"> | <Stack direction="column"> | ||||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | ||||
驗證 | |||||
<FormattedMessage id="verify"/> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
@@ -363,9 +363,9 @@ const CustomFormWizard = (props) => { | |||||
captchaField: '' | captchaField: '' | ||||
}), | }), | ||||
validationSchema: yup.object().shape({ | 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'}))), | 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'}))), | 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'}))), | 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 container> | ||||
<Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | ||||
條款和條件 | |||||
<FormattedMessage id="termsAndCondition"/> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
@@ -813,11 +813,13 @@ const CustomFormWizard = (props) => { | |||||
color="primary" | color="primary" | ||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="h5">我接受</Typography> | |||||
<Typography variant="h5"> | |||||
<FormattedMessage id="acceptTerms"/> | |||||
</Typography> | |||||
</Grid> | </Grid> | ||||
</Grid> | </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 container> | ||||
<Grid item sx={{ display: 'flex', alignItems: 'center' }}> | <Grid item sx={{ display: 'flex', alignItems: 'center' }}> | ||||
<Checkbox | <Checkbox | ||||
@@ -827,7 +829,9 @@ const CustomFormWizard = (props) => { | |||||
color="primary" | color="primary" | ||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="h5">我不接受</Typography> | |||||
<Typography variant="h5"> | |||||
<FormattedMessage id="rejectTerms"/> | |||||
</Typography> | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -840,7 +844,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid container> | <Grid container> | ||||
<Stack direction="column"> | <Stack direction="column"> | ||||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | ||||
驗證 | |||||
<FormattedMessage id="verify"/> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
@@ -14,6 +14,7 @@ import { | |||||
Stack, | Stack, | ||||
Typography | Typography | ||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import {FormattedMessage} from "react-intl"; | |||||
// ==============================|| EVENT TABLE ||============================== // | // ==============================|| EVENT TABLE ||============================== // | ||||
export default function PreviewUploadFileTable({ recordList, }) { | export default function PreviewUploadFileTable({ recordList, }) { | ||||
@@ -32,7 +33,7 @@ export default function PreviewUploadFileTable({ recordList, }) { | |||||
return ( | return ( | ||||
<Stack height="100%" alignItems="center" justifyContent="center"> | <Stack height="100%" alignItems="center" justifyContent="center"> | ||||
<Typography variant="h6"> | <Typography variant="h6"> | ||||
沒有上傳檔案 | |||||
<FormattedMessage id="noFile"/> | |||||
</Typography> | </Typography> | ||||
{/* <pre>(rows={[]})</pre> */} | {/* <pre>(rows={[]})</pre> */} | ||||
</Stack> | </Stack> | ||||
@@ -74,13 +75,17 @@ export default function PreviewUploadFileTable({ recordList, }) { | |||||
{ | { | ||||
id: 'name', | id: 'name', | ||||
field: 'name', | field: 'name', | ||||
headerName: <Typography variant="h6">檔案名稱</Typography>, | |||||
headerName: <Typography variant="h6"> | |||||
<FormattedMessage id="fileName"/> | |||||
</Typography>, | |||||
flex: 1, | flex: 1, | ||||
}, | }, | ||||
{ | { | ||||
id: 'size', | id: 'size', | ||||
field: 'size', | field: 'size', | ||||
headerName: <Typography variant="h6">檔案大小</Typography>, | |||||
headerName: <Typography variant="h6"> | |||||
<FormattedMessage id="fileSize"/> | |||||
</Typography>, | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
// console.log(params) | // console.log(params) | ||||
return Math.ceil(params.value / 1024) + " KB"; | return Math.ceil(params.value / 1024) + " KB"; | ||||
@@ -14,6 +14,7 @@ import { | |||||
Stack, | Stack, | ||||
Typography | Typography | ||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import {FormattedMessage} from "react-intl"; | |||||
// ==============================|| EVENT TABLE ||============================== // | // ==============================|| EVENT TABLE ||============================== // | ||||
export default function UploadFileTable({ recordList, setUpdateRows, }) { | export default function UploadFileTable({ recordList, setUpdateRows, }) { | ||||
@@ -33,7 +34,7 @@ export default function UploadFileTable({ recordList, setUpdateRows, }) { | |||||
return ( | return ( | ||||
<Stack height="100%" alignItems="center" justifyContent="center"> | <Stack height="100%" alignItems="center" justifyContent="center"> | ||||
<Typography variant="h6"> | <Typography variant="h6"> | ||||
沒有上傳檔案 | |||||
<FormattedMessage id="noFile"/> | |||||
</Typography> | </Typography> | ||||
{/* <pre>(rows={[]})</pre> */} | {/* <pre>(rows={[]})</pre> */} | ||||
</Stack> | </Stack> | ||||
@@ -76,13 +77,17 @@ export default function UploadFileTable({ recordList, setUpdateRows, }) { | |||||
{ | { | ||||
id: 'name', | id: 'name', | ||||
field: 'name', | field: 'name', | ||||
headerName: <Typography variant="h6">檔案名稱</Typography>, | |||||
headerName: <Typography variant="h6"> | |||||
<FormattedMessage id="fileName"/> | |||||
</Typography>, | |||||
flex: 4, | flex: 4, | ||||
}, | }, | ||||
{ | { | ||||
id: 'size', | id: 'size', | ||||
field: 'size', | field: 'size', | ||||
headerName: <Typography variant="h6">檔案大小</Typography>, | |||||
headerName: <Typography variant="h6"> | |||||
<FormattedMessage id="fileSize"/> | |||||
</Typography>, | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
// console.log(params) | // console.log(params) | ||||
return Math.ceil(params.value / 1024) + " KB"; | return Math.ceil(params.value / 1024) + " KB"; | ||||
@@ -21,7 +21,7 @@ | |||||
"companyOrUserRecord": "Company/Institutional User Records", | "companyOrUserRecord": "Company/Institutional User Records", | ||||
"login": "Login", | "login": "Login", | ||||
"iAmSmartLogin": "iAmSmart Login", | |||||
"iAmSmartLogin": "iAmSmart login", | |||||
"continueWithIAmSmart": "Continue with iAmSmart", | "continueWithIAmSmart": "Continue with iAmSmart", | ||||
"authorizeIAmSmartForInfo": "Authorize iAmSmart to provide personal information", | "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:", | "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", | "pleaseEnterOrgOrCompName": "Please enter the English/Chinese name of the organisation/company", | ||||
"sameAsBusinessRegistrationCert": "Same as Business Registration Certificate", | "sameAsBusinessRegistrationCert": "Same as Business Registration Certificate", | ||||
"businessRegCertNumber": "Business Reg Cert Number", | "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", | "pleaseFillInBusinessRegCertNumber": "Please fill in Business Registration Certificate Number", | ||||
"pleaseFillInValidBusinessRegCertNumber": "Please fill in valid Business Registration Certificate Number", | "pleaseFillInValidBusinessRegCertNumber": "Please fill in valid Business Registration Certificate Number", | ||||
"businessRegCertValidityDate": "Business Reg Cert validity date", | "businessRegCertValidityDate": "Business Reg Cert validity date", | ||||
@@ -93,6 +106,23 @@ | |||||
"addressLine1": "First line", | "addressLine1": "First line", | ||||
"addressLine2": "Second line", | "addressLine2": "Second line", | ||||
"addressLine3": "Third 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)", | "region": "Region (only applicable to Hong Kong)", | ||||
"regionOrCountry": "Country/Region", | "regionOrCountry": "Country/Region", | ||||
"hongKong": "Hong Kong", | "hongKong": "Hong Kong", | ||||
@@ -85,6 +85,19 @@ | |||||
"pleaseEnterOrgOrCompName": "请输入机构/公司英文名称或中文名称", | "pleaseEnterOrgOrCompName": "请输入机构/公司英文名称或中文名称", | ||||
"sameAsBusinessRegistrationCert": "与商业登记证相同", | "sameAsBusinessRegistrationCert": "与商业登记证相同", | ||||
"businessRegCertNumber": "商业登记证号码", | "businessRegCertNumber": "商业登记证号码", | ||||
"businessRegCertAndDoc":"商业登记证及其他文件", | |||||
"pleaseUploadDoc": "请上传你的 有效商业登记证及其他文件 的数码档案,以验证你的身份。", | |||||
"uploadFile": "上传商业登记证及其他文件", | |||||
"fileName": "档案名称", | |||||
"fileSize": "档案大小", | |||||
"fileSizeWarning": "上传档案大小应<10MB", | |||||
"noFile": "没有上传档案", | |||||
"termsAndCondition": "条款和条件", | |||||
"acceptTerms": "我接受", | |||||
"rejectTerms": "我不接受", | |||||
"verify": "验证", | |||||
"validVerify": "请输入有效验证", | |||||
"autoLogout": "登入验证已过期,请重新登入。", | |||||
"pleaseFillInBusinessRegCertNumber": "请输入商业登记证号码", | "pleaseFillInBusinessRegCertNumber": "请输入商业登记证号码", | ||||
"pleaseFillInValidBusinessRegCertNumber": "请输入有效商业登记证号码", | "pleaseFillInValidBusinessRegCertNumber": "请输入有效商业登记证号码", | ||||
"businessRegCertValidityDate": "商业登记证有效日期", | "businessRegCertValidityDate": "商业登记证有效日期", | ||||
@@ -93,6 +106,23 @@ | |||||
"addressLine1": "第一行", | "addressLine1": "第一行", | ||||
"addressLine2": "第二行", | "addressLine2": "第二行", | ||||
"addressLine3": "第三行", | "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": "区域 (只适用于香港)", | ||||
"region Or Country": "国家/地区", | "region Or Country": "国家/地区", | ||||
"hong Kong": "香港", | "hong Kong": "香港", | ||||
@@ -85,6 +85,19 @@ | |||||
"pleaseEnterOrgOrCompName": "請輸入機構/公司英文名稱或中文名稱", | "pleaseEnterOrgOrCompName": "請輸入機構/公司英文名稱或中文名稱", | ||||
"sameAsBusinessRegistrationCert": "與商業登記證相同", | "sameAsBusinessRegistrationCert": "與商業登記證相同", | ||||
"businessRegCertNumber": "商業登記證號碼", | "businessRegCertNumber": "商業登記證號碼", | ||||
"businessRegCertAndDoc":"商業登記證及其他文件", | |||||
"pleaseUploadDoc": "請上傳你的 有效商業登記證及其他文件 的數碼檔案,以驗證你的身份。", | |||||
"uploadFile": "上傳商業登記證及其他文件", | |||||
"fileName": "檔案名稱", | |||||
"fileSize": "檔案大小", | |||||
"fileSizeWarning": "上傳檔案大小應<10MB", | |||||
"noFile": "沒有上傳檔案", | |||||
"termsAndCondition": "條款和條件", | |||||
"acceptTerms": "我接受", | |||||
"rejectTerms": "我不接受", | |||||
"verify": "驗證", | |||||
"validVerify": "請輸入有效驗證", | |||||
"autoLogout": "登入驗證已過期,請重新登入。", | |||||
"pleaseFillInBusinessRegCertNumber": "請輸入商業登記證號碼", | "pleaseFillInBusinessRegCertNumber": "請輸入商業登記證號碼", | ||||
"pleaseFillInValidBusinessRegCertNumber": "請輸入有效商業登記證號碼", | "pleaseFillInValidBusinessRegCertNumber": "請輸入有效商業登記證號碼", | ||||
"businessRegCertValidityDate": "商業登記證有效日期", | "businessRegCertValidityDate": "商業登記證有效日期", | ||||
@@ -93,6 +106,23 @@ | |||||
"addressLine1": "第一行", | "addressLine1": "第一行", | ||||
"addressLine2": "第二行", | "addressLine2": "第二行", | ||||
"addressLine3": "第三行", | "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": "區域 (只適用於香港)", | ||||
"regionOrCountry": "國家/地區", | "regionOrCountry": "國家/地區", | ||||
"hongKong": "香港", | "hongKong": "香港", | ||||