| @@ -141,5 +141,5 @@ export const getPaymentMethod = (paymentMethod) => { | |||||
| if(paymentMethod == "online") return 'payOnlineMethod'; | if(paymentMethod == "online") return 'payOnlineMethod'; | ||||
| if(paymentMethod == "demandNote") return 'payDnMethod'; | if(paymentMethod == "demandNote") return 'payDnMethod'; | ||||
| if(paymentMethod == "office") return 'payNPGOMethod'; | if(paymentMethod == "office") return 'payNPGOMethod'; | ||||
| // return null; | |||||
| return "other"; | |||||
| } | } | ||||
| @@ -0,0 +1,32 @@ | |||||
| // material-ui | |||||
| import {useState, useEffect} from 'react'; | |||||
| import iAmSmartICon from 'assets/images/icons/icon_iAmSmart.png'; | |||||
| import { | |||||
| Button, | |||||
| Typography | |||||
| }from '@mui/material'; | |||||
| // ==============================|| EVENT TABLE ||============================== // | |||||
| export function IAmSmartButton({ label, onClickFun, fullWidth }) { | |||||
| const [_label, set_label] = useState(""); | |||||
| useEffect(()=>{ | |||||
| set_label(label); | |||||
| } | |||||
| ,[label]); | |||||
| const doOnClick=()=>{ | |||||
| onClickFun(); | |||||
| } | |||||
| return ( | |||||
| <Button onClick={()=>doOnClick()} sx={{textTransform: 'none'}} color="iAmSmart" fullWidth={fullWidth} size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}> | |||||
| <Typography variant="h5"> | |||||
| {_label} | |||||
| </Typography> | |||||
| </Button> | |||||
| ); | |||||
| } | |||||
| @@ -67,7 +67,7 @@ const Index = ({ record }) => { | |||||
| id: 'proofPaymentBody_demandNote2' | id: 'proofPaymentBody_demandNote2' | ||||
| }, | }, | ||||
| { | { | ||||
| beforeClosingDate: "{beforeClosingDate}", | |||||
| closingDateOff: "{closingDateOff}", | |||||
| email: record?.mail, | email: record?.mail, | ||||
| } | } | ||||
| ) | ) | ||||
| @@ -82,6 +82,10 @@ const FormPanel = ({ formData }) => { | |||||
| setWarningText(intl.formatMessage({ id: 'MSG.overReviseDeadline' })); | setWarningText(intl.formatMessage({ id: 'MSG.overReviseDeadline' })); | ||||
| setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
| return; | return; | ||||
| }else if ( formData.creditor==false && paymentMethod=="") { | |||||
| setWarningText(intl.formatMessage({ id: 'MSG.plzSelectPaymentMethod' })); | |||||
| setIsWarningPopUp(true); | |||||
| return; | |||||
| } | } | ||||
| if (!actionValue) { | if (!actionValue) { | ||||
| @@ -103,7 +107,7 @@ const FormPanel = ({ formData }) => { | |||||
| files: attachments ? attachments : [], | files: attachments ? attachments : [], | ||||
| onSuccess: function (responseData) { | onSuccess: function (responseData) { | ||||
| if (responseData.msg) { | if (responseData.msg) { | ||||
| setWarningText(intl.formatMessage({ id: 'MSG.proofOutOfTime' })); | |||||
| setWarningText(intl.formatMessage({ id: responseData.msg})); | |||||
| setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
| return; | return; | ||||
| } | } | ||||
| @@ -171,7 +175,7 @@ const FormPanel = ({ formData }) => { | |||||
| } | } | ||||
| const isOverDnReviseDeadline = () => { | const isOverDnReviseDeadline = () => { | ||||
| let reviseDeadline = DateUtils.convertToDate(formData.beforeClosingDate); | |||||
| let reviseDeadline = DateUtils.convertToDate(formData.closingDateOff); | |||||
| reviseDeadline?.setTime(reviseDeadline?.getTime() + (17 * 60 * 60 * 1000));// 17:00 | reviseDeadline?.setTime(reviseDeadline?.getTime() + (17 * 60 * 60 * 1000));// 17:00 | ||||
| if (!reviseDeadline) return true; | if (!reviseDeadline) return true; | ||||
| let current = new Date(); | let current = new Date(); | ||||
| @@ -321,7 +325,7 @@ const FormPanel = ({ formData }) => { | |||||
| <li><FormattedMessage id="post" /></li> | <li><FormattedMessage id="post" /></li> | ||||
| </ul> | </ul> | ||||
| </td> | </td> | ||||
| <td style={tabelStyle}>{DateUtils.dateFormat(formData.beforeClosingDate, intl.formatMessage({ id: "dateStrFormat" }))} 5:00 p.m.</td> | |||||
| <td style={tabelStyle}>{DateUtils.dateFormat(formData.closingDateOff, intl.formatMessage({ id: "dateStrFormat" }))} 5:00 p.m.</td> | |||||
| <td style={tabelStyle}> | <td style={tabelStyle}> | ||||
| <FormattedMessage id="payDnRemark" values={{ | <FormattedMessage id="payDnRemark" values={{ | ||||
| date: DateUtils.dateFormat(formData.closingDate, intl.formatMessage({ id: "dateStrFormat" })) + " 12:30 p.m." | date: DateUtils.dateFormat(formData.closingDate, intl.formatMessage({ id: "dateStrFormat" })) + " 12:30 p.m." | ||||
| @@ -408,7 +412,7 @@ const FormPanel = ({ formData }) => { | |||||
| <li><FormattedMessage id="post" /></li> | <li><FormattedMessage id="post" /></li> | ||||
| </ul> | </ul> | ||||
| </td> | </td> | ||||
| <td style={tabelStyle}>{DateUtils.dateFormat(formData.beforeClosingDate, intl.formatMessage({ id: "dateStrFormat" }))} 5:00 p.m.</td> | |||||
| <td style={tabelStyle}>{DateUtils.dateFormat(formData.closingDateOff, intl.formatMessage({ id: "dateStrFormat" }))} 5:00 p.m.</td> | |||||
| <td style={tabelStyle}> | <td style={tabelStyle}> | ||||
| <FormattedMessage id="payDnRemark" values={{ | <FormattedMessage id="payDnRemark" values={{ | ||||
| date: DateUtils.dateFormat(formData.closingDate, intl.formatMessage({ id: "dateStrFormat" })) + " 12:30 p.m." | date: DateUtils.dateFormat(formData.closingDate, intl.formatMessage({ id: "dateStrFormat" })) + " 12:30 p.m." | ||||
| @@ -48,7 +48,7 @@ const PublicNoticeApplyForm = ({ loadedData, _selections , gazetteIssueList}) => | |||||
| const [issueId, setIssueId] = useState(loadedData.issueId); | const [issueId, setIssueId] = useState(loadedData.issueId); | ||||
| const [closeDate, setCloseDate] = useState(null); | const [closeDate, setCloseDate] = useState(null); | ||||
| const [beforeClosingDate, setBeforeClosingDate] = useState(null); | |||||
| const [closingDateOff, setClosingDateOff] = useState(null); | |||||
| const navigate = useNavigate(); | const navigate = useNavigate(); | ||||
| const BackgroundHead = { | const BackgroundHead = { | ||||
| @@ -80,7 +80,7 @@ const PublicNoticeApplyForm = ({ loadedData, _selections , gazetteIssueList}) => | |||||
| let data = gazetteIssueList[i]; | let data = gazetteIssueList[i]; | ||||
| if(data.id == issueId){ | if(data.id == issueId){ | ||||
| setCloseDate(data.closingDate) | setCloseDate(data.closingDate) | ||||
| setBeforeClosingDate(data.beforeClosingDate) | |||||
| setClosingDateOff(data.closingDateOff) | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -166,12 +166,12 @@ const PublicNoticeApplyForm = ({ loadedData, _selections , gazetteIssueList}) => | |||||
| const apply = (values) => { | const apply = (values) => { | ||||
| setSubmitting(true) | setSubmitting(true) | ||||
| let careOf = values.careOf ? values.careOf : "" | |||||
| let remarks = values.remarks ? values.remarks : "" | |||||
| if (isDummyLoggedIn){ | |||||
| let careOf = values.careOf ?? ""; | |||||
| let remarks = values.remarks ??""; | |||||
| if (isDummyLoggedIn()){ | |||||
| careOf = values.careOfDum | careOf = values.careOfDum | ||||
| } | } | ||||
| if (isDummyLoggedIn){ | |||||
| if (isDummyLoggedIn()){ | |||||
| remarks = values.emailAddress | remarks = values.emailAddress | ||||
| } | } | ||||
| HttpUtils.postWithFiles({ | HttpUtils.postWithFiles({ | ||||
| @@ -332,7 +332,7 @@ const PublicNoticeApplyForm = ({ loadedData, _selections , gazetteIssueList}) => | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td style={tabelStyle}><FormattedMessage id="payDn" /></td> | <td style={tabelStyle}><FormattedMessage id="payDn" /></td> | ||||
| <td style={tabelStyle}>{DateUtils.dateFormat(beforeClosingDate, dft)} 5:00 p.m.</td> | |||||
| <td style={tabelStyle}>{DateUtils.dateFormat(closingDateOff, dft)} 5:00 p.m.</td> | |||||
| <td style={tabelStyle}>{DateUtils.dateFormat(closeDate, dft)} 12:30 p.m.</td> | <td style={tabelStyle}>{DateUtils.dateFormat(closeDate, dft)} 12:30 p.m.</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| @@ -6,13 +6,13 @@ import { | |||||
| Link, Button, Card, Box, Grid | Link, Button, Card, Box, Grid | ||||
| } from '@mui/material'; | } from '@mui/material'; | ||||
| import Typography from '@mui/material/Typography'; | import Typography from '@mui/material/Typography'; | ||||
| import iAmSmartICon from 'assets/images/icons/icon_iAmSmart.png'; | |||||
| import banner from 'assets/images/bg_ml.jpg'; | import banner from 'assets/images/bg_ml.jpg'; | ||||
| import { Stack } from '../../../node_modules/@mui/material/index'; | import { Stack } from '../../../node_modules/@mui/material/index'; | ||||
| import { iAmSmartPath, clientId, getBowserType, isAppBowser, iAmSmartCallbackPath} from 'auth/utils' | |||||
| import { iAmSmartPath, clientId, getBowserType, isAppBowser, iAmSmartCallbackPath } from 'auth/utils' | |||||
| import { IAmSmartButton } from "components/iAmSmartButton"; | |||||
| import * as React from 'react'; | import * as React from 'react'; | ||||
| import {FormattedMessage, useIntl} from "react-intl"; | |||||
| import { FormattedMessage, useIntl } from "react-intl"; | |||||
| // ================================|| LOGIN ||================================ // | // ================================|| LOGIN ||================================ // | ||||
| @@ -33,31 +33,31 @@ const RegisterCustom = () => { | |||||
| } | } | ||||
| } | } | ||||
| const openQR =()=>{ | |||||
| let callbackUrl = "https://"+iAmSmartCallbackPath()+"/iamsmart/registrycallback"; | |||||
| const openQR = () => { | |||||
| let callbackUrl = "https://" + iAmSmartCallbackPath() + "/iamsmart/registrycallback"; | |||||
| let url = iAmSmartPath + "/api/v1/auth/getQR" | let url = iAmSmartPath + "/api/v1/auth/getQR" | ||||
| + "?clientID=" + clientId | + "?clientID=" + clientId | ||||
| + "&responseType=code" | + "&responseType=code" | ||||
| +"&source=" + getBowserType() | |||||
| +"&redirectURI="+encodeURIComponent(callbackUrl) | |||||
| +"&scope="+encodeURIComponent("eidapi_auth eidapi_profiles") | |||||
| +"&lang="+(locale === 'en' ?"en-US":locale === 'zh-HK' ?"zh-HK":"zh-CN") | |||||
| + "&source=" + getBowserType() | |||||
| + "&redirectURI=" + encodeURIComponent(callbackUrl) | |||||
| + "&scope=" + encodeURIComponent("eidapi_auth eidapi_profiles") | |||||
| + "&lang=" + (locale === 'en' ? "en-US" : locale === 'zh-HK' ? "zh-HK" : "zh-CN") | |||||
| //+"&state=" | //+"&state=" | ||||
| +"&brokerPage=false" | |||||
| + "&brokerPage=false" | |||||
| window.location.assign(url); | window.location.assign(url); | ||||
| } | } | ||||
| const openApp = () => { | const openApp = () => { | ||||
| let callbackUrl = "https://"+iAmSmartCallbackPath()+"/iamsmart/registrycallback"; | |||||
| let callbackUrl = "https://" + iAmSmartCallbackPath() + "/iamsmart/registrycallback"; | |||||
| let url = iAmSmartPath + "/api/v1/auth/getQR" | let url = iAmSmartPath + "/api/v1/auth/getQR" | ||||
| + "?clientID=" + clientId | + "?clientID=" + clientId | ||||
| + "&responseType=code" | + "&responseType=code" | ||||
| +"&source=" + getBowserType() | |||||
| +"&redirectURI="+encodeURIComponent(callbackUrl) | |||||
| +"&scope="+encodeURIComponent("eidapi_auth eidapi_profiles") | |||||
| +"&lang="+(locale === 'en' ?"en-US":locale === 'zh-HK' ?"zh-HK":"zh-CN") | |||||
| + "&source=" + getBowserType() | |||||
| + "&redirectURI=" + encodeURIComponent(callbackUrl) | |||||
| + "&scope=" + encodeURIComponent("eidapi_auth eidapi_profiles") | |||||
| + "&lang=" + (locale === 'en' ? "en-US" : locale === 'zh-HK' ? "zh-HK" : "zh-CN") | |||||
| //+"&state=" | //+"&state=" | ||||
| +"&brokerPage=true" | |||||
| + "&brokerPage=true" | |||||
| window.location.assign(url); | window.location.assign(url); | ||||
| } | } | ||||
| @@ -81,14 +81,14 @@ const RegisterCustom = () => { | |||||
| <Grid container> | <Grid container> | ||||
| <Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
| <Typography mt={4} variant="h3"> | <Typography mt={4} variant="h3"> | ||||
| <FormattedMessage id="registerTitle1"/> | |||||
| <FormattedMessage id="registerTitle1" /> | |||||
| <strong style={{ color: '#FF5733' }}> | <strong style={{ color: '#FF5733' }}> | ||||
| {" " + intl.formatMessage({id: 'registerTitle2'}) + " "} | |||||
| {" " + intl.formatMessage({ id: 'registerTitle2' }) + " "} | |||||
| </strong> | </strong> | ||||
| <FormattedMessage id="registerTitle3"/> | |||||
| <FormattedMessage id="registerTitle3" /> | |||||
| </Typography> | </Typography> | ||||
| <Typography variant="body1"> | <Typography variant="body1"> | ||||
| {intl.formatMessage({id: 'registerSubTitle'})} | |||||
| {intl.formatMessage({ id: 'registerSubTitle' })} | |||||
| </Typography> | </Typography> | ||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| @@ -96,44 +96,42 @@ const RegisterCustom = () => { | |||||
| <Grid container > | <Grid container > | ||||
| <Grid item xs={12} md={6} sx={{ borderRight: 1, borderColor: 'grey.500' }}> | <Grid item xs={12} md={6} sx={{ borderRight: 1, borderColor: 'grey.500' }}> | ||||
| <Typography mb={4} variant="h3"> | <Typography mb={4} variant="h3"> | ||||
| <FormattedMessage id="personalUser"/> | |||||
| <FormattedMessage id="personalUser" /> | |||||
| </Typography> | </Typography> | ||||
| <Button variant="outlined" color="iAmSmart" sx={{textTransform: 'none'}} onClick={registerWithIAmSmart} startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}> | |||||
| <Typography variant="h5"> | |||||
| <FormattedMessage id="continueWithIAmSmart"/> | |||||
| </Typography> | |||||
| </Button> | |||||
| <IAmSmartButton | |||||
| label={intl.formatMessage({ id: 'continueWithIAmSmart' })} | |||||
| onClickFun={registerWithIAmSmart} | |||||
| /> | |||||
| <Box mt={4} ml={2} mr={2} bgcolor="grey.100" p={1.5} > | <Box mt={4} ml={2} mr={2} bgcolor="grey.100" p={1.5} > | ||||
| <Typography textAlign='justify' variant="body1" display="block" gutterBottom> | <Typography textAlign='justify' variant="body1" display="block" gutterBottom> | ||||
| <div dangerouslySetInnerHTML={{ __html: intl.formatMessage({id: 'MSG.registerIAmSmart'}) }} /> | |||||
| <div dangerouslySetInnerHTML={{ __html: intl.formatMessage({ id: 'MSG.registerIAmSmart' }) }} /> | |||||
| </Typography> | </Typography> | ||||
| <Link href={intl.formatMessage({ id: "iamsmartLink" })}> | <Link href={intl.formatMessage({ id: "iamsmartLink" })}> | ||||
| <FormattedMessage id="learnMore"/> | |||||
| <FormattedMessage id="learnMore" /> | |||||
| </Link> | </Link> | ||||
| </Box> | </Box> | ||||
| <Typography m={5}> | <Typography m={5}> | ||||
| <FormattedMessage id="or"/> | |||||
| <FormattedMessage id="or" /> | |||||
| </Typography> | </Typography> | ||||
| <Button href="/registerFrom" variant="contained"><Typography variant="h5"> | <Button href="/registerFrom" variant="contained"><Typography variant="h5"> | ||||
| <FormattedMessage id="registerNewPersonalUser"/> | |||||
| <FormattedMessage id="registerNewPersonalUser" /> | |||||
| </Typography></Button> | </Typography></Button> | ||||
| <Typography ml={4} mr={4} mt={4} variant="body1" display="block" sx={{ fontWeight: 'bold' }} gutterBottom> | <Typography ml={4} mr={4} mt={4} variant="body1" display="block" sx={{ fontWeight: 'bold' }} gutterBottom> | ||||
| <div dangerouslySetInnerHTML={{ __html: intl.formatMessage({id: 'MSG.registerPersonal'}) }} /> | |||||
| <div dangerouslySetInnerHTML={{ __html: intl.formatMessage({ id: 'MSG.registerPersonal' }) }} /> | |||||
| </Typography> | </Typography> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12} md={6} sx={{ borderLeft: 1, borderColor: 'grey.500' }}> | <Grid item xs={12} md={6} sx={{ borderLeft: 1, borderColor: 'grey.500' }}> | ||||
| <Typography mb={4} variant="h3"> | <Typography mb={4} variant="h3"> | ||||
| <FormattedMessage id="businessUser"/> | |||||
| <FormattedMessage id="businessUser" /> | |||||
| </Typography> | </Typography> | ||||
| <Button href="/registerFromOrganization" variant="contained" sx={{ mt: 0.5 }}><Typography variant="h5"> | <Button href="/registerFromOrganization" variant="contained" sx={{ mt: 0.5 }}><Typography variant="h5"> | ||||
| <FormattedMessage id="registerNewBusinessUser"/> | |||||
| <FormattedMessage id="registerNewBusinessUser" /> | |||||
| </Typography></Button> | </Typography></Button> | ||||
| <Typography ml={4} mr={4} mt={4} variant="body1" display="block" sx={{ fontWeight: 'bold' }} gutterBottom> | <Typography ml={4} mr={4} mt={4} variant="body1" display="block" sx={{ fontWeight: 'bold' }} gutterBottom> | ||||
| <div dangerouslySetInnerHTML={{ __html: intl.formatMessage({id: 'MSG.registerOrg'}) }} /> | |||||
| <div dangerouslySetInnerHTML={{ __html: intl.formatMessage({ id: 'MSG.registerOrg' }) }} /> | |||||
| </Typography> | </Typography> | ||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| @@ -142,58 +140,60 @@ const RegisterCustom = () => { | |||||
| </Card > | </Card > | ||||
| </center> | </center> | ||||
| <Dialog | <Dialog | ||||
| open={isPopUp} | |||||
| onClose={() => setIsPopUp(false)} | |||||
| PaperProps={{ | |||||
| sx: { | |||||
| minWidth: '40vw', | |||||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||||
| } | |||||
| }} | |||||
| open={isPopUp} | |||||
| onClose={() => setIsPopUp(false)} | |||||
| PaperProps={{ | |||||
| sx: { | |||||
| minWidth: '40vw', | |||||
| maxWidth: { xs: '90vw', s: '90vw', m: '70vw', lg: '70vw' }, | |||||
| maxHeight: { xs: '90vh', s: '70vh', m: '70vh', lg: '60vh' } | |||||
| } | |||||
| }} | |||||
| > | > | ||||
| <DialogTitle></DialogTitle> | <DialogTitle></DialogTitle> | ||||
| <DialogContent> | <DialogContent> | ||||
| <Typography variant="h3" > | <Typography variant="h3" > | ||||
| <FormattedMessage id="authorizeIAmSmartForInfo"/> | |||||
| <FormattedMessage id="authorizeIAmSmartForInfo" /> | |||||
| </Typography> | </Typography> | ||||
| <Typography variant="h5" style={{ padding: '4px' }}> | <Typography variant="h5" style={{ padding: '4px' }}> | ||||
| <FormattedMessage id="iAmSmartSubTitle"/> | |||||
| <FormattedMessage id="iAmSmartSubTitle" /> | |||||
| </Typography> | </Typography> | ||||
| </DialogContent> | </DialogContent> | ||||
| <DialogContent > | <DialogContent > | ||||
| <Grid container style={{ paddingLeft: '16px' }}> | <Grid container style={{ paddingLeft: '16px' }}> | ||||
| <Grid item xs={6} > | <Grid item xs={6} > | ||||
| <Typography style={{ padding: '4px' }}> | <Typography style={{ padding: '4px' }}> | ||||
| {"- " + intl.formatMessage({id: 'userChineseName'})} | |||||
| {"- " + intl.formatMessage({ id: 'userChineseName' })} | |||||
| </Typography> | </Typography> | ||||
| <Typography style={{ padding: '4px' }}> | <Typography style={{ padding: '4px' }}> | ||||
| {"- " + intl.formatMessage({id: 'userEnglishName'})} | |||||
| {"- " + intl.formatMessage({ id: 'userEnglishName' })} | |||||
| </Typography> | </Typography> | ||||
| <Typography style={{ padding: '4px' }}> | <Typography style={{ padding: '4px' }}> | ||||
| {"- " + intl.formatMessage({id: 'userIDNo'})} | |||||
| {"- " + intl.formatMessage({ id: 'userIDNo' })} | |||||
| </Typography> | </Typography> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={6} > | <Grid item xs={6} > | ||||
| <Typography style={{ padding: '4px' }}> | <Typography style={{ padding: '4px' }}> | ||||
| {"- " + intl.formatMessage({id: 'userEmailAddress'})} | |||||
| {"- " + intl.formatMessage({ id: 'userEmailAddress' })} | |||||
| </Typography> | </Typography> | ||||
| <Typography style={{ padding: '4px' }}> | <Typography style={{ padding: '4px' }}> | ||||
| {"- " + intl.formatMessage({id: 'userPhoneNumber'})} | |||||
| {"- " + intl.formatMessage({ id: 'userPhoneNumber' })} | |||||
| </Typography> | </Typography> | ||||
| <Typography style={{ padding: '4px' }}> | <Typography style={{ padding: '4px' }}> | ||||
| {"- " + intl.formatMessage({id: 'userAddress'})} | |||||
| {"- " + intl.formatMessage({ id: 'userAddress' })} | |||||
| </Typography> | </Typography> | ||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| </DialogContent> | </DialogContent> | ||||
| <DialogContent align="right"> | <DialogContent align="right"> | ||||
| <Button variant="outlined" onClick={getQRWithIAmSmart} startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}><Typography variant="h5"> | |||||
| <FormattedMessage id="iAmSmartAutoFillIn"/> | |||||
| </Typography></Button> | |||||
| <br/> | |||||
| <IAmSmartButton | |||||
| label={intl.formatMessage({ id: 'iAmSmartAutoFillIn' })} | |||||
| onClickFun={getQRWithIAmSmart} | |||||
| /> | |||||
| <br /> | |||||
| <Link href={intl.formatMessage({ id: "iamsmartLink" })}> | <Link href={intl.formatMessage({ id: "iamsmartLink" })}> | ||||
| <FormattedMessage id="learnMore"/> | |||||
| <FormattedMessage id="learnMore" /> | |||||
| </Link> | </Link> | ||||
| </DialogContent> | </DialogContent> | ||||
| </Dialog> | </Dialog> | ||||
| @@ -1,7 +1,7 @@ | |||||
| import React, { | |||||
| import { | |||||
| useEffect, | useEffect, | ||||
| useState, | useState, | ||||
| lazy, | |||||
| lazy, | |||||
| // useContext | // useContext | ||||
| } from 'react'; | } from 'react'; | ||||
| import { Link as RouterLink } from 'react-router-dom'; | import { Link as RouterLink } from 'react-router-dom'; | ||||
| @@ -36,18 +36,19 @@ import { useFormik, FormikProvider } from 'formik'; | |||||
| import AnimateButton from 'components/@extended/AnimateButton'; | import AnimateButton from 'components/@extended/AnimateButton'; | ||||
| import Loadable from 'components/Loadable'; | import Loadable from 'components/Loadable'; | ||||
| const PasswordAlertDialog = Loadable(lazy(() => import('./PasswordAlertDialog'))); | const PasswordAlertDialog = Loadable(lazy(() => import('./PasswordAlertDialog'))); | ||||
| // assets | // assets | ||||
| import { EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons'; | import { EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons'; | ||||
| // import axios from "axios"; | // import axios from "axios"; | ||||
| import iAmSmartICon from 'assets/images/icons/icon_iAmSmart.png'; | |||||
| import { useDispatch } from "react-redux"; | import { useDispatch } from "react-redux"; | ||||
| import { handleLogin } from "auth/index"; | import { handleLogin } from "auth/index"; | ||||
| import useJwt from "auth/jwt/useJwt"; | import useJwt from "auth/jwt/useJwt"; | ||||
| import { handleLogoutFunction } from 'auth/index'; | import { handleLogoutFunction } from 'auth/index'; | ||||
| import {FormattedMessage, useIntl} from "react-intl"; | |||||
| import { FormattedMessage, useIntl } from "react-intl"; | |||||
| import {IAmSmartButton} from "components/iAmSmartButton"; | |||||
| // import LocaleContext from "components/I18nProvider"; | // import LocaleContext from "components/I18nProvider"; | ||||
| const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||||
| const LoadingComponent = Loadable(lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||||
| // ============================|| FIREBASE - LOGIN ||============================ // | // ============================|| FIREBASE - LOGIN ||============================ // | ||||
| @@ -65,7 +66,7 @@ const AuthLoginCustom = () => { | |||||
| // let [posts, setPosts] = useState([]); | // let [posts, setPosts] = useState([]); | ||||
| const [isValid, setisValid] = useState(false); | const [isValid, setisValid] = useState(false); | ||||
| const [open, setOpen] = React.useState(false); | |||||
| const [open, setOpen] = useState(false); | |||||
| const [isButtonDisabled, setIsButtonDisabled] = useState(true); | const [isButtonDisabled, setIsButtonDisabled] = useState(true); | ||||
| const [errorMassage, setErrorMassage] = useState(''); | const [errorMassage, setErrorMassage] = useState(''); | ||||
| const [onLogin, setOnLogin] = useState(false); | const [onLogin, setOnLogin] = useState(false); | ||||
| @@ -97,21 +98,21 @@ const AuthLoginCustom = () => { | |||||
| const data = { ...userData, accessToken: response.data.accessToken, refreshToken: response.data.refreshToken } | const data = { ...userData, accessToken: response.data.accessToken, refreshToken: response.data.refreshToken } | ||||
| // setSuccess(true) | // setSuccess(true) | ||||
| // console.log(response.data); | // console.log(response.data); | ||||
| if(response.data.type === "GLD"){ | |||||
| if (response.data.type === "GLD") { | |||||
| // setLocale("en"); | // setLocale("en"); | ||||
| localStorage.setItem('locale','en'); | |||||
| }else{ | |||||
| if (response.data.preferLocale ==="zh_HK"){ | |||||
| localStorage.setItem('locale', 'en'); | |||||
| } else { | |||||
| if (response.data.preferLocale === "zh_HK") { | |||||
| // setLocale("zh-HK"); | // setLocale("zh-HK"); | ||||
| localStorage.setItem('locale','zh-HK'); | |||||
| localStorage.setItem('locale', 'zh-HK'); | |||||
| } | } | ||||
| if (response.data.preferLocale ==="zh-CN"){ | |||||
| if (response.data.preferLocale === "zh-CN") { | |||||
| // setLocale("zh-CN"); | // setLocale("zh-CN"); | ||||
| localStorage.setItem('locale','zh-CN'); | |||||
| localStorage.setItem('locale', 'zh-CN'); | |||||
| } | } | ||||
| if (response.data.preferLocale ==="en"){ | |||||
| if (response.data.preferLocale === "en") { | |||||
| // setLocale("zh-CN"); | // setLocale("zh-CN"); | ||||
| localStorage.setItem('locale','en'); | |||||
| localStorage.setItem('locale', 'en'); | |||||
| } | } | ||||
| } | } | ||||
| dispatch(handleLogin(data)) | dispatch(handleLogin(data)) | ||||
| @@ -123,9 +124,9 @@ const AuthLoginCustom = () => { | |||||
| console.log(error) | console.log(error) | ||||
| // setSuccess(false) | // setSuccess(false) | ||||
| setOnLogin(false) | setOnLogin(false) | ||||
| if(error.response!= undefined){ | |||||
| if (error.response != undefined) { | |||||
| setErrorMassage(error.response.data.error) | setErrorMassage(error.response.data.error) | ||||
| }else{ | |||||
| } else { | |||||
| setErrorMassage("CONNECTION_ERROR") | setErrorMassage("CONNECTION_ERROR") | ||||
| } | } | ||||
| setOpen(true) | setOpen(true) | ||||
| @@ -143,12 +144,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(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'})), | |||||
| 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' })), | |||||
| }), | }), | ||||
| }); | }); | ||||
| @@ -201,7 +202,7 @@ const AuthLoginCustom = () => { | |||||
| const { handleSubmit } = useForm({}) | const { handleSubmit } = useForm({}) | ||||
| const getQRWithIAmSmart = () => { | |||||
| function getQRWithIAmSmart(){ | |||||
| if (isAppBowser()) { | if (isAppBowser()) { | ||||
| openApp(); | openApp(); | ||||
| } else { | } else { | ||||
| @@ -217,10 +218,10 @@ const AuthLoginCustom = () => { | |||||
| + "&source=" + getBowserType() | + "&source=" + getBowserType() | ||||
| + "&redirectURI=" + encodeURIComponent(callbackUrl) | + "&redirectURI=" + encodeURIComponent(callbackUrl) | ||||
| + "&scope=" + encodeURIComponent("eidapi_auth eidapi_profiles") | + "&scope=" + encodeURIComponent("eidapi_auth eidapi_profiles") | ||||
| +"&lang="+(locale === 'en' ?"en-US":locale === 'zh-HK' ?"zh-HK":"zh-CN") | |||||
| + "&lang=" + (locale === 'en' ? "en-US" : locale === 'zh-HK' ? "zh-HK" : "zh-CN") | |||||
| //+"&state=" | //+"&state=" | ||||
| + "&brokerPage=false" | + "&brokerPage=false" | ||||
| window.location=url; | |||||
| window.location = url; | |||||
| } | } | ||||
| const openApp = () => { | const openApp = () => { | ||||
| @@ -249,10 +250,10 @@ const AuthLoginCustom = () => { | |||||
| + "&source=" + getBowserType() | + "&source=" + getBowserType() | ||||
| + "&redirectURI=" + encodeURIComponent(callbackUrl) | + "&redirectURI=" + encodeURIComponent(callbackUrl) | ||||
| + "&scope=" + encodeURIComponent("eidapi_auth eidapi_profiles") | + "&scope=" + encodeURIComponent("eidapi_auth eidapi_profiles") | ||||
| +"&lang="+(locale === 'en' ?"en-US":locale === 'zh-HK' ?"zh-HK":"zh-CN") | |||||
| + "&lang=" + (locale === 'en' ? "en-US" : locale === 'zh-HK' ? "zh-HK" : "zh-CN") | |||||
| //+"&state=" | //+"&state=" | ||||
| + "&brokerPage=true" | + "&brokerPage=true" | ||||
| window.location=url; | |||||
| window.location = url; | |||||
| } | } | ||||
| @@ -265,7 +266,7 @@ const AuthLoginCustom = () => { | |||||
| <Stack spacing={1}> | <Stack spacing={1}> | ||||
| <InputLabel htmlFor="email-login"> | <InputLabel htmlFor="email-login"> | ||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| <FormattedMessage id="userLoginName"/> | |||||
| <FormattedMessage id="userLoginName" /> | |||||
| </Typography> | </Typography> | ||||
| </InputLabel> | </InputLabel> | ||||
| <OutlinedInput | <OutlinedInput | ||||
| @@ -297,7 +298,7 @@ const AuthLoginCustom = () => { | |||||
| <Grid item xs={12}> | <Grid item xs={12}> | ||||
| <Stack spacing={1}> | <Stack spacing={1}> | ||||
| <InputLabel htmlFor="password-login"><Typography variant="h5"> | <InputLabel htmlFor="password-login"><Typography variant="h5"> | ||||
| <FormattedMessage id="userPassword"/> | |||||
| <FormattedMessage id="userPassword" /> | |||||
| </Typography></InputLabel> | </Typography></InputLabel> | ||||
| <OutlinedInput | <OutlinedInput | ||||
| fullWidth | fullWidth | ||||
| @@ -335,9 +336,9 @@ const AuthLoginCustom = () => { | |||||
| <Grid container> | <Grid container> | ||||
| <Grid item xs={12}> | <Grid item xs={12}> | ||||
| <AnimateButton> | <AnimateButton> | ||||
| {onLogin? | |||||
| <LoadingComponent disableText={true} alignItems="center"/> | |||||
| : | |||||
| {onLogin ? | |||||
| <LoadingComponent disableText={true} alignItems="center" /> | |||||
| : | |||||
| <Button disableElevation disabled={isButtonDisabled} | <Button disableElevation disabled={isButtonDisabled} | ||||
| fullWidth size="large" type="submit" variant="contained" color="primary" | fullWidth size="large" type="submit" variant="contained" color="primary" | ||||
| sx={{ | sx={{ | ||||
| @@ -349,7 +350,7 @@ const AuthLoginCustom = () => { | |||||
| } | } | ||||
| }}> | }}> | ||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| <FormattedMessage id="login"/> | |||||
| <FormattedMessage id="login" /> | |||||
| </Typography> | </Typography> | ||||
| </Button> | </Button> | ||||
| } | } | ||||
| @@ -357,17 +358,17 @@ const AuthLoginCustom = () => { | |||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12}> | <Grid item xs={12}> | ||||
| <Stack direction="row" justifyContent="flex-start" alignItems="center" spacing={1}> | <Stack direction="row" justifyContent="flex-start" alignItems="center" spacing={1}> | ||||
| <Link component={RouterLink} to="/forgot/password" color="primary" sx={{textDecoration:"none"}}> | |||||
| <Link component={RouterLink} to="/forgot/password" color="primary" sx={{ textDecoration: "none" }}> | |||||
| <Typography align="center" variant="h7"> | <Typography align="center" variant="h7"> | ||||
| <FormattedMessage id="forgotUserPassword"/>? | |||||
| <FormattedMessage id="forgotUserPassword" />? | |||||
| </Typography> | </Typography> | ||||
| </Link> | </Link> | ||||
| <Typography align="center" variant="h7"> | <Typography align="center" variant="h7"> | ||||
| | | | | ||||
| </Typography> | </Typography> | ||||
| <Link component={RouterLink} to="/forgot/username" color="primary" sx={{textDecoration:"none"}}> | |||||
| <Link component={RouterLink} to="/forgot/username" color="primary" sx={{ textDecoration: "none" }}> | |||||
| <Typography align="center" variant="h7"> | <Typography align="center" variant="h7"> | ||||
| <FormattedMessage id="forgotUsername"/>? | |||||
| <FormattedMessage id="forgotUsername" />? | |||||
| </Typography> | </Typography> | ||||
| </Link> | </Link> | ||||
| </Stack> | </Stack> | ||||
| @@ -378,18 +379,18 @@ const AuthLoginCustom = () => { | |||||
| <Grid container> | <Grid container> | ||||
| <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()} sx={{textTransform: 'none'}} color="iAmSmart" fullWidth size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}> | |||||
| <Typography variant="h5"> | |||||
| <FormattedMessage id="iAmSmartLogin"/> | |||||
| </Typography> | |||||
| </Button> | |||||
| <IAmSmartButton | |||||
| label={intl.formatMessage({ id: "iAmSmartLogin" })} | |||||
| onClickFun={getQRWithIAmSmart} | |||||
| fullWidth={true} | |||||
| /> | |||||
| </Stack> | </Stack> | ||||
| </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}> | ||||
| <Link href={intl.formatMessage({ id: "iamsmartLink" })} color="primary" sx={{textDecoration:"none"}}> | |||||
| <Link href={intl.formatMessage({ id: "iamsmartLink" })} color="primary" sx={{ textDecoration: "none" }}> | |||||
| <Typography align="center" variant="h7"> | <Typography align="center" variant="h7"> | ||||
| { intl.formatMessage({id: 'learnMore'})+" >"} | |||||
| {intl.formatMessage({ id: 'learnMore' }) + " >"} | |||||
| </Typography> | </Typography> | ||||
| </Link> | </Link> | ||||
| </Stack> | </Stack> | ||||
| @@ -399,7 +400,7 @@ const AuthLoginCustom = () => { | |||||
| <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 fullWidth size="large" variant="outlined" href="/register" ><Typography variant="h5"> | <Button fullWidth size="large" variant="outlined" href="/register" ><Typography variant="h5"> | ||||
| <FormattedMessage id="createOrReActivate"/> | |||||
| <FormattedMessage id="createOrReActivate" /> | |||||
| </Typography></Button> | </Typography></Button> | ||||
| </Stack> | </Stack> | ||||
| </Grid> | </Grid> | ||||
| @@ -85,7 +85,7 @@ const CustomFormWizard = (props) => { | |||||
| const handleMouseDownId = (event) => { | const handleMouseDownId = (event) => { | ||||
| event.preventDefault(); | event.preventDefault(); | ||||
| }; | }; | ||||
| const handleClickShowComId = () => { | const handleClickShowComId = () => { | ||||
| setshowComId(!showId); | setshowComId(!showId); | ||||
| }; | }; | ||||
| @@ -102,18 +102,18 @@ const CustomFormWizard = (props) => { | |||||
| } | } | ||||
| }, [selectedAddress4, selectedAddress5]) | }, [selectedAddress4, selectedAddress5]) | ||||
| function getRequiredErrStr(fieldname){ | |||||
| return displayErrorMsg(intl.formatMessage({ id: 'require'},{fieldname:fieldname?intl.formatMessage({ id: fieldname}):""})); | |||||
| function getRequiredErrStr(fieldname) { | |||||
| return displayErrorMsg(intl.formatMessage({ id: 'require' }, { fieldname: fieldname ? intl.formatMessage({ id: fieldname }) : "" })); | |||||
| } | } | ||||
| function getMaxErrStr(num, fieldname){ | |||||
| return displayErrorMsg(intl.formatMessage({ id: 'noMoreThenNWords' },{num:num, fieldname:fieldname?intl.formatMessage({ id: fieldname})+": ":""})); | |||||
| function getMaxErrStr(num, fieldname) { | |||||
| return displayErrorMsg(intl.formatMessage({ id: 'noMoreThenNWords' }, { num: num, fieldname: fieldname ? intl.formatMessage({ id: fieldname }) + ": " : "" })); | |||||
| } | } | ||||
| const responseToData = () => { | const responseToData = () => { | ||||
| //let rd = JSON.parse("{\"emailAddress\":\"[email protected]\",\"postalAddress\":{\"EngPremisesAddress\":{\"EngDistrict\":{\"DcDistrict\":\"KC\",\"Sub-district\":\"TSING YI\"},\"EngEstate\":{\"EstateName\":\"Cheung Hang Estate\",\"EngPhase\":{\"PhaseName\":\"N/A\"}},\"BuildingName\":\"Hang Lai House\",\"EngBlock\":{\"BlockDescriptor\":\"Block\",\"BlockNo\":\"2\"},\"Region\":\"NT\",\"EngStreet\":{\"StreetName\":\"Liu To Road\",\"BuildingNoFrom\":\"6\"},\"Eng3dAddress\":{\"EngFloor\":{\"FloorNum\":\"33\"},\"EngUnit\":{\"UnitDescriptor\":\"Room\",\"UnitNo\":\"3301\"}}}},\"mobileNumber\":{\"CountryCode\":\"852\",\"SubscriberNumber\":\"99999999\"},\"residentialAddress\":{\"ChiPremisesAddress\":{\"Chi3dAddress\":{\"ChiUnit\":{\"UnitDescriptor\":\"室\",\"UnitNo\":\"1010\"},\"ChiFloor\":{\"FloorNum\":\"10\"}},\"ChiBlock\":{\"BlockDescriptor\":\"座\",\"BlockNo\":\"2\"},\"BuildingName\":\"亨麗樓(第2座)\",\"ChiDistrict\":{\"DcDistrict\":\"KC\",\"Sub-district\":\"青衣\"},\"Region\":\"新界\",\"ChiEstate\":{\"EstateName\":\"長亨邨\"},\"ChiStreet\":{\"StreetName\":\"寮肚路\",\"BuildingNoFrom\":\"6\"}}},\"enName\":{\"UnstructuredName\":\"Testing Co One\"},\"idNo\":{\"Identification\":\"G561107\",\"CheckDigit\":\"4\"},\"chName\":{\"ChineseName\":\"測試商一\"}}"); | |||||
| let rd = JSON.parse(location.state?.responseData.data); | |||||
| let rd = JSON.parse("{\"emailAddress\":\"[email protected]\",\"postalAddress\":{\"EngPremisesAddress\":{\"EngDistrict\":{\"DcDistrict\":\"KC\",\"Sub-district\":\"TSING YI\"},\"EngEstate\":{\"EstateName\":\"Cheung Hang Estate\",\"EngPhase\":{\"PhaseName\":\"N/A\"}},\"BuildingName\":\"Hang Lai House\",\"EngBlock\":{\"BlockDescriptor\":\"Block\",\"BlockNo\":\"2\"},\"Region\":\"NT\",\"EngStreet\":{\"StreetName\":\"Liu To Road\",\"BuildingNoFrom\":\"6\"},\"Eng3dAddress\":{\"EngFloor\":{\"FloorNum\":\"33\"},\"EngUnit\":{\"UnitDescriptor\":\"Room\",\"UnitNo\":\"3301\"}}}},\"mobileNumber\":{\"CountryCode\":\"852\",\"SubscriberNumber\":\"99999999\"},\"residentialAddress\":{\"ChiPremisesAddress\":{\"Chi3dAddress\":{\"ChiUnit\":{\"UnitDescriptor\":\"室\",\"UnitNo\":\"1010\"},\"ChiFloor\":{\"FloorNum\":\"10\"}},\"ChiBlock\":{\"BlockDescriptor\":\"座\",\"BlockNo\":\"2\"},\"BuildingName\":\"亨麗樓(第2座)\",\"ChiDistrict\":{\"DcDistrict\":\"KC\",\"Sub-district\":\"青衣\"},\"Region\":\"新界\",\"ChiEstate\":{\"EstateName\":\"長亨邨\"},\"ChiStreet\":{\"StreetName\":\"寮肚路\",\"BuildingNoFrom\":\"6\"}}},\"enName\":{\"UnstructuredName\":\"Testing Co One\"},\"idNo\":{\"Identification\":\"G561107\",\"CheckDigit\":\"4\"},\"chName\":{\"ChineseName\":\"測試商一\"}}"); | |||||
| //let rd = JSON.parse(location.state?.responseData.data); | |||||
| let data = { | let data = { | ||||
| "enName": rd?.enName?.UnstructuredName ?? "", | "enName": rd?.enName?.UnstructuredName ?? "", | ||||
| "chName": rd?.chName?.ChineseName ?? "", | "chName": rd?.chName?.ChineseName ?? "", | ||||
| @@ -213,6 +213,7 @@ const CustomFormWizard = (props) => { | |||||
| formik.setFieldValue("idNo", iAmSmartData.idNo ?? ""); | formik.setFieldValue("idNo", iAmSmartData.idNo ?? ""); | ||||
| formik.setFieldValue("checkDigit", iAmSmartData.checkDigit ?? ""); | formik.setFieldValue("checkDigit", iAmSmartData.checkDigit ?? ""); | ||||
| formik.setFieldValue("email", iAmSmartData.email ?? ""); | formik.setFieldValue("email", iAmSmartData.email ?? ""); | ||||
| formik.setFieldValue("emailConfirm", iAmSmartData.email ?? ""); | |||||
| formik.setFieldValue("phone", iAmSmartData.phone ?? ""); | formik.setFieldValue("phone", iAmSmartData.phone ?? ""); | ||||
| formik.setFieldValue("phoneCountryCode", iAmSmartData.phoneCountryCode ?? ""); | formik.setFieldValue("phoneCountryCode", iAmSmartData.phoneCountryCode ?? ""); | ||||
| formik.setFieldValue("address1", iAmSmartData.address1 ?? ""); | formik.setFieldValue("address1", iAmSmartData.address1 ?? ""); | ||||
| @@ -393,11 +394,11 @@ const CustomFormWizard = (props) => { | |||||
| address1: yup.string().max(40, getMaxErrStr(40)).required(displayErrorMsg(intl.formatMessage({ id: 'validateAddressLine1' }))), | address1: yup.string().max(40, getMaxErrStr(40)).required(displayErrorMsg(intl.formatMessage({ id: 'validateAddressLine1' }))), | ||||
| address2: yup.string().max(40), | address2: yup.string().max(40), | ||||
| address3: yup.string().max(40), | address3: yup.string().max(40), | ||||
| email: yup.string().email(displayErrorMsg(intl.formatMessage({ id: 'validEmailFormat' }))).max(128, getMaxErrStr(128)).required(displayErrorMsg(intl.formatMessage({ id: 'requireEmail' }))), | |||||
| emailConfirm: yup.string().email(displayErrorMsg(intl.formatMessage({ id: 'validEmailFormat' }))).max(128, getMaxErrStr(128)).required(displayErrorMsg(intl.formatMessage({ id: 'requireEmail' }))).oneOf([yup.ref('email'), null], displayErrorMsg(intl.formatMessage({ id: 'validSameEmail' }))), | |||||
| email: yup.string().email(displayErrorMsg(intl.formatMessage({ id: 'validEmailFormat' }))).max(128, getMaxErrStr(128)).required(displayErrorMsg(intl.formatMessage({ id: 'requireEmail' }))), | |||||
| emailConfirm: yup.string().email(displayErrorMsg(intl.formatMessage({ id: 'validEmailFormat' }))).max(128, getMaxErrStr(128)).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' }))), | ||||
| phone: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'requireAtLeast8Number' }))).required(displayErrorMsg(intl.formatMessage({ id: 'requireContactNumber' }))), | phone: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'requireAtLeast8Number' }))).required(displayErrorMsg(intl.formatMessage({ id: 'requireContactNumber' }))), | ||||
| captchaField: yup.string().max(5, getMaxErrStr(5)).required(displayErrorMsg(intl.formatMessage({ id: 'requireVerify' }))),//.oneOf([captcha], displayErrorMsg('請輸入有效驗證')), | |||||
| captchaField: yup.string().max(5, getMaxErrStr(5)).required(displayErrorMsg(intl.formatMessage({ id: 'requireVerify' }))),//.oneOf([captcha], displayErrorMsg('請輸入有效驗證')), | |||||
| }), | }), | ||||
| }); | }); | ||||
| @@ -442,17 +443,15 @@ const CustomFormWizard = (props) => { | |||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12} md={12} > | <Grid item xs={12} md={12} > | ||||
| <Grid container sx={{ mb: 1 }}> | <Grid container sx={{ mb: 1 }}> | ||||
| <Stack direction="row"> | |||||
| <InputLabel htmlFor="idDocType-signup"> | |||||
| <Typography variant="h5" sx={{mr:1}}> | |||||
| <FormattedMessage id="HKIDcard" />: | |||||
| {/* {iAmSmartData.idNo + "(" + iAmSmartData.checkDigit + ")"} */} | |||||
| </Typography> | |||||
| <Typography variant="h5"> | |||||
| {iAmSmartData?.idNo?.slice(0, 4)} | |||||
| </Typography> | |||||
| <InputLabel htmlFor="idDocType-signup"> | |||||
| <Typography variant="h5" sx={{ mr: 1 }}> | |||||
| <FormattedMessage id="HKIDcard" />: {iAmSmartData.idNo ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : <></>} | |||||
| {/* {iAmSmartData.idNo + "(" + iAmSmartData.checkDigit + ")"} */} | |||||
| </Typography> | |||||
| <Stack direction="row"> | |||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| {showId ?iAmSmartData?.idNo?.slice(4):"****"}{showId ? '(' + iAmSmartData.checkDigit + ')' :null} | |||||
| {iAmSmartData?.idNo?.slice(0, 4)}{showId ? iAmSmartData?.idNo?.slice(4) : "****"}{showId ? '(' + iAmSmartData.checkDigit + ')' : null} | |||||
| </Typography> | </Typography> | ||||
| <IconButton | <IconButton | ||||
| aria-label="toggle id visibility" | aria-label="toggle id visibility" | ||||
| @@ -462,26 +461,27 @@ const CustomFormWizard = (props) => { | |||||
| size="medium" | size="medium" | ||||
| > | > | ||||
| {showId ? <EyeOutlined /> : <EyeInvisibleOutlined />} | {showId ? <EyeOutlined /> : <EyeInvisibleOutlined />} | ||||
| </IconButton> | |||||
| </InputLabel> | |||||
| </Stack> | |||||
| </IconButton> | |||||
| </Stack> | |||||
| </InputLabel> | |||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
| <Stack spacing={1}> | <Stack spacing={1}> | ||||
| <InputLabel htmlFor="enName-signup"> | <InputLabel htmlFor="enName-signup"> | ||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| <FormattedMessage id="userEnglishName" />: {iAmSmartData.enName} | |||||
| <FormattedMessage id="userEnglishName" />: {iAmSmartData.enName}{iAmSmartData.enName ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : <></>} | |||||
| </Typography> | </Typography> | ||||
| </InputLabel> | |||||
| </InputLabel> | |||||
| </Stack> | </Stack> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
| <Stack spacing={1}> | <Stack spacing={1}> | ||||
| <InputLabel htmlFor="chName-signup"> | <InputLabel htmlFor="chName-signup"> | ||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| {intl.formatMessage({ id: 'userChineseName' })}: {iAmSmartData.chName} | |||||
| {intl.formatMessage({ id: 'userChineseName' })}: {iAmSmartData.chName}{iAmSmartData.chName ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : <></>} | |||||
| </Typography> | </Typography> | ||||
| </InputLabel> | </InputLabel> | ||||
| </Stack> | </Stack> | ||||
| @@ -492,7 +492,7 @@ const CustomFormWizard = (props) => { | |||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| <FormattedMessage id="formAddress" /> | <FormattedMessage id="formAddress" /> | ||||
| <span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
| {iAmSmartData.address1 ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : null} | |||||
| {iAmSmartData.address1 !="" && iAmSmartData.address1 ==formik.values.address1 ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : null} | |||||
| </Typography> | </Typography> | ||||
| </InputLabel> | </InputLabel> | ||||
| <OutlinedInput | <OutlinedInput | ||||
| @@ -553,7 +553,7 @@ const CustomFormWizard = (props) => { | |||||
| value={selectedAddress4} | value={selectedAddress4} | ||||
| options={address4ComboList} | options={address4ComboList} | ||||
| disabled={checkCountry} | disabled={checkCountry} | ||||
| error={Boolean(districtErrStr!="")} | |||||
| error={Boolean(districtErrStr != "")} | |||||
| onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
| getOptionLabel={(option) => option.type ? intl.formatMessage({ id: option.type }) : ""} | getOptionLabel={(option) => option.type ? intl.formatMessage({ id: option.type }) : ""} | ||||
| onChange={(event, newValue) => { | onChange={(event, newValue) => { | ||||
| @@ -625,7 +625,7 @@ const CustomFormWizard = (props) => { | |||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| <FormattedMessage id="userContactEmail" /> | <FormattedMessage id="userContactEmail" /> | ||||
| <span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
| {iAmSmartData.email ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : null} | |||||
| {iAmSmartData.email && iAmSmartData.email ==formik.values.email ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : null} | |||||
| </Typography> | </Typography> | ||||
| </InputLabel> | </InputLabel> | ||||
| <OutlinedInput | <OutlinedInput | ||||
| @@ -671,7 +671,7 @@ const CustomFormWizard = (props) => { | |||||
| error={Boolean(formik.touched.emailConfirm && formik.errors.emailConfirm)} | error={Boolean(formik.touched.emailConfirm && formik.errors.emailConfirm)} | ||||
| id="emailConfirm-login" | id="emailConfirm-login" | ||||
| type="email" | type="email" | ||||
| value={formik.values.emailConfirm.trim()} | |||||
| value={formik.values.emailConfirm} | |||||
| name="emailConfirm" | name="emailConfirm" | ||||
| // onBlur={formik.handleBlur} | // onBlur={formik.handleBlur} | ||||
| onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
| @@ -704,7 +704,7 @@ const CustomFormWizard = (props) => { | |||||
| <Typography variant="h5"> | <Typography variant="h5"> | ||||
| <FormattedMessage id="userContactNumber" /> | <FormattedMessage id="userContactNumber" /> | ||||
| <span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
| {iAmSmartData.phone ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : null} | |||||
| {iAmSmartData.phone && iAmSmartData.phone ==formik.values.phone && iAmSmartData.phoneCountryCode ==formik.values.phoneCountryCode ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : null} | |||||
| </Typography> | </Typography> | ||||
| </InputLabel> | </InputLabel> | ||||
| <Stack direction="row"> | <Stack direction="row"> | ||||
| @@ -852,9 +852,9 @@ const CustomFormWizard = (props) => { | |||||
| <Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
| <Grid container> | <Grid container> | ||||
| <Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
| <Typography variant="h5" height="80%" sx={{ textAlign: "left", overflow: "scroll", borderRadius: "inherit", borderStyle: "solid", borderWidth: "1px", borderColor: "#0C489E" }}> | |||||
| <div style={{padding: 12}} dangerouslySetInnerHTML={{__html: intl.formatMessage({id: "termsAndCon"})}} /> | |||||
| <Typography variant="h5" sx={{ textAlign: "left", borderRadius: "inherit", borderStyle: "solid", borderWidth: "1px", borderColor: "#0C489E" }}> | |||||
| <div style={{ padding: 12 }} dangerouslySetInnerHTML={{ __html: intl.formatMessage({ id: "termsAndCon" }) }} /> | |||||
| </Typography> | </Typography> | ||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| @@ -968,7 +968,7 @@ const CustomFormWizard = (props) => { | |||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12} md={12} > | <Grid item xs={12} md={12} > | ||||
| <Stack direction="row"> | <Stack direction="row"> | ||||
| <Typography variant="h5" color={theme.palette.grey[600]} sx={{mr:1}}> | |||||
| <Typography variant="h5" color={theme.palette.grey[600]} sx={{ mr: 1 }}> | |||||
| <FormattedMessage id="userIdDoc" /> | <FormattedMessage id="userIdDoc" /> | ||||
| </Typography> | </Typography> | ||||
| <Typography variant="h5" name="preview-idDocType-1"> | <Typography variant="h5" name="preview-idDocType-1"> | ||||
| @@ -976,7 +976,7 @@ const CustomFormWizard = (props) => { | |||||
| {/* {formik.values.idNo + "(" + formik.values.checkDigit + ")"} */} | {/* {formik.values.idNo + "(" + formik.values.checkDigit + ")"} */} | ||||
| </Typography> | </Typography> | ||||
| <Typography variant="h5" name="preview-idDocType-2"> | <Typography variant="h5" name="preview-idDocType-2"> | ||||
| {showComId ?formik?.values?.idNo?.slice(4):"****"}{showComId ? '(' + formik.values.checkDigit + ')' : null} | |||||
| {showComId ? formik?.values?.idNo?.slice(4) : "****"}{showComId ? '(' + formik.values.checkDigit + ')' : null} | |||||
| {/* {formik.values.idNo + "(" + formik.values.checkDigit + ")"} */} | {/* {formik.values.idNo + "(" + formik.values.checkDigit + ")"} */} | ||||
| </Typography> | </Typography> | ||||
| <IconButton | <IconButton | ||||
| @@ -987,10 +987,9 @@ const CustomFormWizard = (props) => { | |||||
| size="medium" | size="medium" | ||||
| > | > | ||||
| {showComId ? <EyeOutlined /> : <EyeInvisibleOutlined />} | {showComId ? <EyeOutlined /> : <EyeInvisibleOutlined />} | ||||
| </IconButton> | |||||
| </IconButton> | |||||
| </Stack> | </Stack> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
| <Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
| <Typography variant="h5" color={theme.palette.grey[600]}> | <Typography variant="h5" color={theme.palette.grey[600]}> | ||||
| @@ -999,6 +998,7 @@ const CustomFormWizard = (props) => { | |||||
| <Typography variant="h5" id="preview-enName-signup"> | <Typography variant="h5" id="preview-enName-signup"> | ||||
| {formik.values.enName} | {formik.values.enName} | ||||
| </Typography> | </Typography> | ||||
| {iAmSmartData.enName ? <img src={iAmSmartICon} alt="iAM Smart" width="25" /> : <></>} | |||||
| </Stack> | </Stack> | ||||
| </Grid> | </Grid> | ||||
| <Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
| @@ -73,6 +73,7 @@ | |||||
| "MSG.proofOutOfTime": "Response out of time, please apply again.", | "MSG.proofOutOfTime": "Response out of time, please apply again.", | ||||
| "MSG.overReviseDeadline": "Over Revise Deadline", | "MSG.overReviseDeadline": "Over Revise Deadline", | ||||
| "MSG.plzSelectPaymentMethod": "Please select Payment Method", | |||||
| "MSG.plzSelectApp": "Please select application", | "MSG.plzSelectApp": "Please select application", | ||||
| "MSG.actionFail": "Action failed", | "MSG.actionFail": "Action failed", | ||||
| "MSG.paymentHolded": "Application number {appNo} is currently in the process of payment. If the payment is unsuccessful, please try again after 20 minutes. We apologise for any inconvenience caused.", | "MSG.paymentHolded": "Application number {appNo} is currently in the process of payment. If the payment is unsuccessful, please try again after 20 minutes. We apologise for any inconvenience caused.", | ||||
| @@ -109,7 +110,7 @@ | |||||
| "proofPaymentHeader_demandNote": "Public Notice: Proofreading Completed and Payment Means Selected", | "proofPaymentHeader_demandNote": "Public Notice: Proofreading Completed and Payment Means Selected", | ||||
| "proofPaymentBody_demandNote": "We have received the manuscript proofreading confirmation and printing instructions for application number: {appNo}<br/><br/>You have selected to make payment by General Demand Note.", | "proofPaymentBody_demandNote": "We have received the manuscript proofreading confirmation and printing instructions for application number: {appNo}<br/><br/>You have selected to make payment by General Demand Note.", | ||||
| "proofPaymentBody_demandNote2": "The General Demand Note will be sent to the following email address within one working day, but not later than {beforeClosingDate} 9:00 p.m. : <br/>{email}", | |||||
| "proofPaymentBody_demandNote2": "The General Demand Note will be sent to the following email address within one working day, but not later than {closingDateOff} 9:00 p.m. : <br/>{email}", | |||||
| "proofPaymentBody_demandNote3": "Please make payment and return the payment proof (e.g. ATM receipt, internet banking record) to [email protected] by {paymentDeadline}.", | "proofPaymentBody_demandNote3": "Please make payment and return the payment proof (e.g. ATM receipt, internet banking record) to [email protected] by {paymentDeadline}.", | ||||
| "proofPaymentBody_demandNote4": "We will process the publication after receiving payment confirmation.", | "proofPaymentBody_demandNote4": "We will process the publication after receiving payment confirmation.", | ||||
| @@ -136,11 +137,11 @@ | |||||
| "login": "Login", | "login": "Login", | ||||
| "logout": "Logout", | "logout": "Logout", | ||||
| "iAmSmartLogin": "iAM Smart Login", | |||||
| "iAmSmartLogin": "Login with iAM Smart", | |||||
| "continueWithIAmSmart": "Continue with iAM Smart", | "continueWithIAmSmart": "Continue with iAM Smart", | ||||
| "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:", | ||||
| "iAmSmartAutoFillIn": "Use \"iAmSmart\" to automatically fill in", | |||||
| "iAmSmartAutoFillIn": "Open iAM Smart", | |||||
| "register": "Register", | "register": "Register", | ||||
| "userLoginName": "Username", | "userLoginName": "Username", | ||||
| "userPassword": "Password", | "userPassword": "Password", | ||||
| @@ -515,6 +516,7 @@ | |||||
| "content": "Content", | "content": "Content", | ||||
| "subject": "Subject", | "subject": "Subject", | ||||
| "other":"Other", | |||||
| "Dashboard": "Dashboard", | "Dashboard": "Dashboard", | ||||
| "event": "Event" | "event": "Event" | ||||
| @@ -99,6 +99,7 @@ | |||||
| "MSG.proofOutOfTime": "回复逾时,请重新申请。", | "MSG.proofOutOfTime": "回复逾时,请重新申请。", | ||||
| "MSG.overReviseDeadline": "超过修改期限", | "MSG.overReviseDeadline": "超过修改期限", | ||||
| "MSG.plzSelectPaymentMethod": "请选择付款方式", | |||||
| "MSG.plzSelectApp": "请选择公共启事。", | "MSG.plzSelectApp": "请选择公共启事。", | ||||
| "MSG.actionFail": "行动失败", | "MSG.actionFail": "行动失败", | ||||
| "MSG.paymentHolded": "申请编号 {appNo} 已正在付款的流程中,如相关付款没有成功,请于20分钟后再尝试付款,不便之处,请见谅!", | "MSG.paymentHolded": "申请编号 {appNo} 已正在付款的流程中,如相关付款没有成功,请于20分钟后再尝试付款,不便之处,请见谅!", | ||||
| @@ -135,7 +136,7 @@ | |||||
| "proofPaymentHeader_demandNote": "Public Notice: Proofreading Completed and Payment Means Selected", | "proofPaymentHeader_demandNote": "Public Notice: Proofreading Completed and Payment Means Selected", | ||||
| "proofPaymentBody_demandNote": "We have received the manuscript proofreading confirmation and printing instructions for application number: {appNo}<br/><br/>You have selected to make payment by General Demand Note.", | "proofPaymentBody_demandNote": "We have received the manuscript proofreading confirmation and printing instructions for application number: {appNo}<br/><br/>You have selected to make payment by General Demand Note.", | ||||
| "proofPaymentBody_demandNote2": "The General Demand Note will be sent to the following email address within one working day, but not later than {beforeClosingDate} 9:00 p.m. : <br/>{email}", | |||||
| "proofPaymentBody_demandNote2": "The General Demand Note will be sent to the following email address within one working day, but not later than {closingDateOff} 9:00 p.m. : <br/>{email}", | |||||
| "proofPaymentBody_demandNote3": "Please make payment and return the payment proof (e.g. ATM receipt, internet banking record) to [email protected] by {paymentDeadline}.", | "proofPaymentBody_demandNote3": "Please make payment and return the payment proof (e.g. ATM receipt, internet banking record) to [email protected] by {paymentDeadline}.", | ||||
| "proofPaymentBody_demandNote4": "We will process the publication after receiving payment confirmation.", | "proofPaymentBody_demandNote4": "We will process the publication after receiving payment confirmation.", | ||||
| @@ -164,7 +165,7 @@ | |||||
| "continueWithIAmSmart": "以「智方便」继续", | "continueWithIAmSmart": "以「智方便」继续", | ||||
| "authorizeIAmSmartForInfo": "授权「智方便」提供个人资料", | "authorizeIAmSmartForInfo": "授权「智方便」提供个人资料", | ||||
| "iAmSmartSubTitle": "为完成开户并建立与「智方便」的连接,请授权「智方便」提供以下个人资料:", | "iAmSmartSubTitle": "为完成开户并建立与「智方便」的连接,请授权「智方便」提供以下个人资料:", | ||||
| "iAmSmartAutoFillIn": "使用「智方便」自动填表", | |||||
| "iAmSmartAutoFillIn": "开启智方便", | |||||
| "register": "申请", | "register": "申请", | ||||
| "userLoginName": "用户登入名称", | "userLoginName": "用户登入名称", | ||||
| "userPassword": "密码", | "userPassword": "密码", | ||||
| @@ -505,6 +506,7 @@ | |||||
| "content": "内容", | "content": "内容", | ||||
| "subject": "主题", | "subject": "主题", | ||||
| "other":"其他", | |||||
| "Dashboard": "仪表板", | "Dashboard": "仪表板", | ||||
| "event": "活动" | "event": "活动" | ||||
| @@ -100,6 +100,7 @@ | |||||
| "MSG.proofOutOfTime": "回覆逾時,請重新申請。", | "MSG.proofOutOfTime": "回覆逾時,請重新申請。", | ||||
| "MSG.overReviseDeadline": "超過修改期限", | "MSG.overReviseDeadline": "超過修改期限", | ||||
| "MSG.plzSelectApp": "請選擇公共啟事。", | "MSG.plzSelectApp": "請選擇公共啟事。", | ||||
| "MSG.plzSelectPaymentMethod": "請選擇付款方式", | |||||
| "MSG.actionFail": "行動失敗", | "MSG.actionFail": "行動失敗", | ||||
| "MSG.paymentHolded": "申請編號 {appNo} 已正在付款的流程中,如相關付款沒有成功,請於20分鐘後再嘗試付款,不便之處,請見諒!", | "MSG.paymentHolded": "申請編號 {appNo} 已正在付款的流程中,如相關付款沒有成功,請於20分鐘後再嘗試付款,不便之處,請見諒!", | ||||
| "MSG.pay_credity1": "我們已收到你已確定申請編號: {appNo} 的稿件校對確定及可付印的指示,並將安排刊登於憲報 期數 {year} 年 {issueVolume} 卷 第 {issueNo} 期內。", | "MSG.pay_credity1": "我們已收到你已確定申請編號: {appNo} 的稿件校對確定及可付印的指示,並將安排刊登於憲報 期數 {year} 年 {issueVolume} 卷 第 {issueNo} 期內。", | ||||
| @@ -135,7 +136,7 @@ | |||||
| "proofPaymentHeader_demandNote": "Public Notice: Proofreading Completed and Payment Means Selected", | "proofPaymentHeader_demandNote": "Public Notice: Proofreading Completed and Payment Means Selected", | ||||
| "proofPaymentBody_demandNote": "We have received the manuscript proofreading confirmation and printing instructions for application number: {appNo}<br/><br/>You have selected to make payment by General Demand Note.", | "proofPaymentBody_demandNote": "We have received the manuscript proofreading confirmation and printing instructions for application number: {appNo}<br/><br/>You have selected to make payment by General Demand Note.", | ||||
| "proofPaymentBody_demandNote2": "The General Demand Note will be sent to the following email address within one working day, but not later than {beforeClosingDate} 9:00 p.m. : <br/>{email}", | |||||
| "proofPaymentBody_demandNote2": "The General Demand Note will be sent to the following email address within one working day, but not later than {closingDateOff} 9:00 p.m. : <br/>{email}", | |||||
| "proofPaymentBody_demandNote3": "Please make payment and return the payment proof (e.g. ATM receipt, internet banking record) to [email protected] by {paymentDeadline}.", | "proofPaymentBody_demandNote3": "Please make payment and return the payment proof (e.g. ATM receipt, internet banking record) to [email protected] by {paymentDeadline}.", | ||||
| "proofPaymentBody_demandNote4": "We will process the publication after receiving payment confirmation.", | "proofPaymentBody_demandNote4": "We will process the publication after receiving payment confirmation.", | ||||
| @@ -166,7 +167,7 @@ | |||||
| "continueWithIAmSmart": "以「智方便」繼續", | "continueWithIAmSmart": "以「智方便」繼續", | ||||
| "authorizeIAmSmartForInfo": "授權「智方便」提供個人資料", | "authorizeIAmSmartForInfo": "授權「智方便」提供個人資料", | ||||
| "iAmSmartSubTitle": "為完成開戶並建立與「智方便」的連接,請授權「智方便」提供以下個人資料:", | "iAmSmartSubTitle": "為完成開戶並建立與「智方便」的連接,請授權「智方便」提供以下個人資料:", | ||||
| "iAmSmartAutoFillIn": "使用「智方便」自動填表", | |||||
| "iAmSmartAutoFillIn": "開啟智方便", | |||||
| "register": "申請", | "register": "申請", | ||||
| "userLoginName": "用戶登入名稱", | "userLoginName": "用戶登入名稱", | ||||
| "userPassword": "密碼", | "userPassword": "密碼", | ||||
| @@ -510,6 +511,7 @@ | |||||
| "content": "内容", | "content": "内容", | ||||
| "subject": "主題", | "subject": "主題", | ||||
| "other":"其他", | |||||
| "Dashboard": "儀表板", | "Dashboard": "儀表板", | ||||
| "event": "活動" | "event": "活動" | ||||