# Conflicts: # src/pages/Payment/FPS/AckPage.js # src/pages/Payment/PaymentCallback.jsmaster
@@ -138,7 +138,7 @@ function Header(props) { | |||||
<Link className="setting" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Settings</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /></Link> | <Link className="setting" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Settings</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /></Link> | ||||
<ul className='dropdown'> | <ul className='dropdown'> | ||||
<li> | <li> | ||||
<Link className="userProfileGld" to='/user/profile'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>Users Profile</Typography></Link> | |||||
<Link className="userProfileGld" to='/user/profile'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>My Profile</Typography></Link> | |||||
</li> | </li> | ||||
<li> | <li> | ||||
<Link className="emailTemplate" to='/emailTemplate'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>Email Template</Typography></Link> | <Link className="emailTemplate" to='/emailTemplate'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>Email Template</Typography></Link> | ||||
@@ -248,6 +248,7 @@ function Header(props) { | |||||
<Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }} onClick={(event) => console.log(event)}> | <Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }} onClick={(event) => console.log(event)}> | ||||
<FormattedMessage id="setting" /> | <FormattedMessage id="setting" /> | ||||
</Typography> | </Typography> | ||||
<KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /> | |||||
</Link> | </Link> | ||||
<ul className='dropdown' style={{ width: "max-content" }}> | <ul className='dropdown' style={{ width: "max-content" }}> | ||||
<li> | <li> | ||||
@@ -266,6 +267,7 @@ function Header(props) { | |||||
<Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }} onClick={(event) => console.log(event)}> | <Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }} onClick={(event) => console.log(event)}> | ||||
<FormattedMessage id="setting" /> | <FormattedMessage id="setting" /> | ||||
</Typography> | </Typography> | ||||
<KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /> | |||||
</Link> | </Link> | ||||
<ul className='dropdown' style={{ width: "max-content" }}> | <ul className='dropdown' style={{ width: "max-content" }}> | ||||
<li> | <li> | ||||
@@ -11,7 +11,6 @@ import DownloadIcon from '@mui/icons-material/Download'; | |||||
import * as DateUtils from "utils/DateUtils"; | import * as DateUtils from "utils/DateUtils"; | ||||
import * as FormatUtils from "utils/FormatUtils"; | import * as FormatUtils from "utils/FormatUtils"; | ||||
import * as StatusUtils from "utils/statusUtils/DnStatus"; | import * as StatusUtils from "utils/statusUtils/DnStatus"; | ||||
import * as PublicNoteStatusUtils from "utils/statusUtils/PublicNoteStatusUtils"; | |||||
import { useNavigate } from "react-router-dom"; | import { useNavigate } from "react-router-dom"; | ||||
import { FiDataGrid } from "components/FiDataGrid"; | import { FiDataGrid } from "components/FiDataGrid"; | ||||
import { notifyDownloadSuccess } from 'utils/CommonFunction'; | import { notifyDownloadSuccess } from 'utils/CommonFunction'; | ||||
@@ -200,7 +199,7 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||||
}, | }, | ||||
{ | { | ||||
field: 'cm', | field: 'cm', | ||||
headerName: 'Length(cm)', | |||||
headerName: 'Length', | |||||
width: 100, | width: 100, | ||||
renderCell: (params) => { | renderCell: (params) => { | ||||
return (<> | return (<> | ||||
@@ -213,6 +212,7 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||||
field: 'amount', | field: 'amount', | ||||
headerName: 'Amount($)', | headerName: 'Amount($)', | ||||
width: 100, | width: 100, | ||||
align: 'right', | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
return FormatUtils.currencyFormat(params?.value); | return FormatUtils.currencyFormat(params?.value); | ||||
} | } | ||||
@@ -228,18 +228,13 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||||
{ | { | ||||
id: 'issueDate', | id: 'issueDate', | ||||
field: 'issueDate', | field: 'issueDate', | ||||
headerName: 'DN Issue/Due Date', | |||||
width: 175, | |||||
valueGetter: (params) => { | |||||
return DateUtils.dateStr(params?.value); | |||||
} | |||||
}, | |||||
{ | |||||
field: 'sentDate', | |||||
headerName: 'DN Sent Date', | |||||
width: 175, | |||||
valueGetter: (params) => { | |||||
return params?.value ? DateUtils.datetimeStr(params?.value) + " - " + params.row.sentBy : ""; | |||||
headerName: 'Due Date / Sent Date', | |||||
width: 250, | |||||
renderCell: (params) => { | |||||
return (<> | |||||
{DateUtils.dateStr(params?.value)} | |||||
{params.row.sentDate ? "<br />" + DateUtils.datetimeStr(params.row.sentDate) + " - " + params.row.sentBy : " / To be sent"} | |||||
</>); | |||||
} | } | ||||
}, | }, | ||||
{ | { | ||||
@@ -253,14 +248,6 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||||
return <Button onClick={onDownloadClick(params)}><u>{params.row.filename}</u></Button>; | return <Button onClick={onDownloadClick(params)}><u>{params.row.filename}</u></Button>; | ||||
}, | }, | ||||
}, | }, | ||||
{ | |||||
field: 'appStatus', | |||||
headerName: 'App Status', | |||||
width: 175, | |||||
renderCell: (params) => { | |||||
return [PublicNoteStatusUtils.getStatusByTextEng(params?.value, true)] | |||||
}, | |||||
}, | |||||
{ | { | ||||
field: 'status', | field: 'status', | ||||
headerName: 'Status', | headerName: 'Status', | ||||
@@ -2,6 +2,7 @@ | |||||
import { | import { | ||||
Grid, Button, Checkbox, FormControlLabel, Typography, | Grid, Button, Checkbox, FormControlLabel, Typography, | ||||
Dialog, DialogTitle, DialogContent, DialogActions, | Dialog, DialogTitle, DialogContent, DialogActions, | ||||
FormHelperText | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
// import { FormControlLabel } from '@material-ui/core'; | // import { FormControlLabel } from '@material-ui/core'; | ||||
import MainCard from "components/MainCard"; | import MainCard from "components/MainCard"; | ||||
@@ -33,6 +34,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
const [editMode, setEditMode] = useState(false); | const [editMode, setEditMode] = useState(false); | ||||
const [createMode, setCreateMode] = useState(false); | const [createMode, setCreateMode] = useState(false); | ||||
const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
const [errorMsg, setErrorMsg] = useState(""); | |||||
useEffect(() => { | useEffect(() => { | ||||
//if state data are ready and assign to different field | //if state data are ready and assign to different field | ||||
@@ -71,43 +73,50 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
} | } | ||||
}), | }), | ||||
}), | }), | ||||
onSubmit: vaule => { | |||||
console.log(vaule) | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_ORG_SAVE_PATH, | |||||
params: { | |||||
id: id > 0 ? id : null, | |||||
enCompanyName: vaule.enCompanyName, | |||||
chCompanyName: vaule.chCompanyName, | |||||
brNo: vaule.brNo, | |||||
brExpiryDate: vaule.brExpiryDate, | |||||
enCompanyNameTemp: vaule.enCompanyNameTemp, | |||||
chCompanyNameTemp: vaule.chCompanyNameTemp, | |||||
brExpiryDateTemp: vaule.brExpiryDateTemp, | |||||
contactPerson: vaule.contactPerson, | |||||
contactTel: { | |||||
countryCode: vaule.tel_countryCode, | |||||
phoneNumber: vaule.phoneNumber | |||||
}, | |||||
faxNo: { | |||||
countryCode: vaule.fax_countryCode, | |||||
faxNumber: vaule.faxNumber | |||||
}, | |||||
addressTemp: { | |||||
country: vaule.country.id, | |||||
district: vaule.district.id, | |||||
addressLine1: vaule.addressLine1, | |||||
addressLine2: vaule.addressLine2, | |||||
addressLine3: vaule.addressLine3, | |||||
}, | |||||
//creditor: vaule.creditor, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess() | |||||
loadDataFun(); | |||||
setEditMode(false); | |||||
} | |||||
}); | |||||
onSubmit: values => { | |||||
if (values.country==null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInCountry'})) | |||||
} else { | |||||
if (values.country.key ==1 && values.district == null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInDistrict'})) | |||||
} else { | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_ORG_SAVE_PATH, | |||||
params: { | |||||
id: id > 0 ? id : null, | |||||
enCompanyName: values.enCompanyName, | |||||
chCompanyName: values.chCompanyName, | |||||
brNo: values.brNo, | |||||
brExpiryDate: values.brExpiryDate, | |||||
enCompanyNameTemp: values.enCompanyNameTemp, | |||||
chCompanyNameTemp: values.chCompanyNameTemp, | |||||
brExpiryDateTemp: values.brExpiryDateTemp, | |||||
contactPerson: values.contactPerson, | |||||
contactTel: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
faxNo: { | |||||
countryCode: values.fax_countryCode, | |||||
faxNumber: values.faxNumber | |||||
}, | |||||
addressTemp: { | |||||
country: values.country.id, | |||||
district: values.district?.id, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
}, | |||||
//creditor: values.creditor, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess() | |||||
loadDataFun(); | |||||
setEditMode(false); | |||||
} | |||||
}); | |||||
} | |||||
} | |||||
} | } | ||||
}); | }); | ||||
@@ -263,6 +272,13 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
Organization Details | Organization Details | ||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12}> | |||||
<FormHelperText error id="helper-text-address1-signup"> | |||||
<Typography variant="errorMessage1"> | |||||
{errorMsg} | |||||
</Typography> | |||||
</FormHelperText> | |||||
</Grid> | |||||
<Grid item lg={4} > | <Grid item lg={4} > | ||||
{FieldUtils.getTextField({ | {FieldUtils.getTextField({ | ||||
label: FieldUtils.notNullFieldLabel("BR No.:"), | label: FieldUtils.notNullFieldLabel("BR No.:"), | ||||
@@ -4,6 +4,7 @@ import { | |||||
// Checkbox, FormControlLabel, | // Checkbox, FormControlLabel, | ||||
Typography, | Typography, | ||||
Dialog, DialogTitle, DialogContent, DialogActions, | Dialog, DialogTitle, DialogContent, DialogActions, | ||||
FormHelperText | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
// import { FormControlLabel } from '@material-ui/core'; | // import { FormControlLabel } from '@material-ui/core'; | ||||
import MainCard from "components/MainCard"; | import MainCard from "components/MainCard"; | ||||
@@ -35,6 +36,7 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
const [editMode, setEditMode] = useState(false); | const [editMode, setEditMode] = useState(false); | ||||
const [createMode, setCreateMode] = useState(false); | const [createMode, setCreateMode] = useState(false); | ||||
const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
const [errorMsg, setErrorMsg] = useState(""); | |||||
useEffect(() => { | useEffect(() => { | ||||
//if state data are ready and assign to different field | //if state data are ready and assign to different field | ||||
@@ -58,31 +60,38 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
tel_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))), | tel_countryCode: yup.string().min(3, displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))), | ||||
phoneNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'requiredValidNumber'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireContactNumber'}))), | phoneNumber: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'requiredValidNumber'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireContactNumber'}))), | ||||
}), | }), | ||||
onSubmit: vaule => { | |||||
console.log(vaule) | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_PUB_ORG_SAVE_PATH, | |||||
params: { | |||||
contactPerson: vaule.contactPerson, | |||||
contactTel: { | |||||
countryCode: vaule.tel_countryCode, | |||||
phoneNumber: vaule.phoneNumber | |||||
}, | |||||
addressTemp: { | |||||
country: vaule.country.id, | |||||
district: vaule.district.id, | |||||
addressLine1: vaule.addressLine1, | |||||
addressLine2: vaule.addressLine2, | |||||
addressLine3: vaule.addressLine3, | |||||
}, | |||||
//creditor: vaule.creditor, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess() | |||||
loadDataFun(); | |||||
setEditMode(false); | |||||
onSubmit: values => { | |||||
if (values.country==null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInCountry'})) | |||||
} else { | |||||
if (values.country.key ==1 && values.district == null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInDistrict'})) | |||||
} else { | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_PUB_ORG_SAVE_PATH, | |||||
params: { | |||||
contactPerson: values.contactPerson, | |||||
contactTel: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
addressTemp: { | |||||
country: values.country.id, | |||||
district: values.district?.id, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
}, | |||||
//creditor: values.creditor, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess() | |||||
loadDataFun(); | |||||
setEditMode(false); | |||||
} | |||||
}); | |||||
} | } | ||||
}); | |||||
} | |||||
} | } | ||||
}); | }); | ||||
@@ -193,6 +202,13 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
<FormattedMessage id="organizationDetails" /> | <FormattedMessage id="organizationDetails" /> | ||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12}> | |||||
<FormHelperText error id="helper-text-address1-signup"> | |||||
<Typography variant="errorMessage1"> | |||||
{errorMsg} | |||||
</Typography> | |||||
</FormHelperText> | |||||
</Grid> | |||||
<Grid item lg={4} > | <Grid item lg={4} > | ||||
{FieldUtils.getTextField({ | {FieldUtils.getTextField({ | ||||
label: intl.formatMessage({id: 'brNo'}) + ":", | label: intl.formatMessage({id: 'brNo'}) + ":", | ||||
@@ -2,15 +2,16 @@ | |||||
import { | import { | ||||
Grid, Button, Typography, | Grid, Button, Typography, | ||||
Dialog, DialogTitle, DialogContent, DialogActions, | Dialog, DialogTitle, DialogContent, DialogActions, | ||||
FormHelperText | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import MainCard from "../../../components/MainCard"; | |||||
import MainCard from "components/MainCard"; | |||||
import * as React from "react"; | import * as React from "react"; | ||||
import * as yup from 'yup'; | import * as yup from 'yup'; | ||||
import { useEffect, useState } from "react"; | import { useEffect, useState } from "react"; | ||||
import * as HttpUtils from '../../../utils/HttpUtils'; | |||||
import * as UrlUtils from "../../../utils/ApiPathConst"; | |||||
import * as FieldUtils from "../../../utils/FieldUtils"; | |||||
import * as ComboData from "../../../utils/ComboData"; | |||||
import * as HttpUtils from 'utils/HttpUtils'; | |||||
import * as UrlUtils from "utils/ApiPathConst"; | |||||
import * as FieldUtils from "utils/FieldUtils"; | |||||
import * as ComboData from "utils/ComboData"; | |||||
import { useNavigate } from "react-router-dom"; | import { useNavigate } from "react-router-dom"; | ||||
import { useFormik } from 'formik'; | import { useFormik } from 'formik'; | ||||
const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | ||||
@@ -29,6 +30,7 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||||
const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
const [isFailPopUp, setIsFailPopUp] = useState(false); | const [isFailPopUp, setIsFailPopUp] = useState(false); | ||||
const [failText, setFailText] = useState(""); | const [failText, setFailText] = useState(""); | ||||
const [errorMsg, setErrorMsg] = useState(""); | |||||
useEffect(() => { | useEffect(() => { | ||||
//if state data are ready and assign to different field | //if state data are ready and assign to different field | ||||
@@ -57,7 +59,7 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||||
faxNumber: yup.string().min(8).nullable(), | faxNumber: yup.string().min(8).nullable(), | ||||
brExpiryDate: yup.string().min(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertValidityDate'}))), | brExpiryDate: yup.string().min(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertValidityDate'}))), | ||||
brNo: yup.string().max(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertNumber'}))) | brNo: yup.string().max(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertNumber'}))) | ||||
.test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(`${intl.formatMessage({id: 'pleaseFillInValidBusinessRegCertNumber'})} (e.g. 12341234)`)), function (value) { | |||||
.test('checkBrNoFormat', displayErrorMsg(`${intl.formatMessage({id: 'pleaseFillInValidBusinessRegCertNumber'})} (e.g. 12341234)`), function (value) { | |||||
var brNo_pattern = /[0-9]{8}/ | var brNo_pattern = /[0-9]{8}/ | ||||
if (value !== undefined) { | if (value !== undefined) { | ||||
if (value.match(brNo_pattern)) { | if (value.match(brNo_pattern)) { | ||||
@@ -69,45 +71,53 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||||
}), | }), | ||||
}), | }), | ||||
onSubmit: values => { | onSubmit: values => { | ||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_ORG_SAVE_PATH, | |||||
params: { | |||||
id: null, | |||||
primaryUserId: userId, | |||||
enCompanyName: values.enCompanyName, | |||||
chCompanyName: values.chCompanyName, | |||||
brNo: values.brNo, | |||||
brExpiryDate: values.brExpiryDate, | |||||
enCompanyNameTemp: values.enCompanyNameTemp, | |||||
chCompanyNameTemp: values.chCompanyNameTemp, | |||||
brExpiryDateTemp: values.brExpiryDateTemp, | |||||
contactPerson: values.contactPerson, | |||||
contactTel: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
faxNo: { | |||||
countryCode: values.fax_countryCode, | |||||
faxNumber: values.faxNumber | |||||
}, | |||||
addressTemp: { | |||||
country: values.country.key, | |||||
district: values.district.key, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
} | |||||
}, | |||||
onSuccess: function (responseData) { | |||||
if(responseData.msg){ | |||||
setFailText(responseData.msg); | |||||
setIsFailPopUp(true); | |||||
return; | |||||
} | |||||
navigate('/org/' + responseData.id); | |||||
notifyCreateSuccess() | |||||
if (values.country==null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInCountry'})) | |||||
} else { | |||||
if (values.country.key ==1 && values.district == null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInDistrict'})) | |||||
} else { | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_ORG_SAVE_PATH, | |||||
params: { | |||||
id: null, | |||||
primaryUserId: userId, | |||||
enCompanyName: values.enCompanyName, | |||||
chCompanyName: values.chCompanyName, | |||||
brNo: values.brNo, | |||||
brExpiryDate: values.brExpiryDate, | |||||
enCompanyNameTemp: values.enCompanyNameTemp, | |||||
chCompanyNameTemp: values.chCompanyNameTemp, | |||||
brExpiryDateTemp: values.brExpiryDateTemp, | |||||
contactPerson: values.contactPerson, | |||||
contactTel: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
faxNo: { | |||||
countryCode: values.fax_countryCode, | |||||
faxNumber: values.faxNumber | |||||
}, | |||||
addressTemp: { | |||||
country: values.country.key, | |||||
district: values.district?.key, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
} | |||||
}, | |||||
onSuccess: function (responseData) { | |||||
if(responseData.msg){ | |||||
setFailText(responseData.msg); | |||||
setIsFailPopUp(true); | |||||
return; | |||||
} | |||||
navigate('/org/' + responseData.id); | |||||
notifyCreateSuccess() | |||||
} | |||||
}); | |||||
} | } | ||||
}); | |||||
} | |||||
} | } | ||||
}); | }); | ||||
@@ -140,9 +150,7 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||||
<Grid container spacing={1}> | <Grid container spacing={1}> | ||||
{/*top*/} | {/*top*/} | ||||
<Grid item s={12} md={12} lg={12} sx={{ mb: 3 }} alignItems={"start"} justifyContent="center"> | <Grid item s={12} md={12} lg={12} sx={{ mb: 3 }} alignItems={"start"} justifyContent="center"> | ||||
<Grid item sx={{ ml: 3, mr: 3 }}> | |||||
<Grid item sx={{mr: 3 }}> | |||||
<Button | <Button | ||||
size="large" | size="large" | ||||
variant="contained" | variant="contained" | ||||
@@ -155,10 +163,17 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||||
Create | Create | ||||
</Button> | </Button> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
{/*top*/} | {/*top*/} | ||||
<Grid item xs={12}> | |||||
<FormHelperText error id="helper-text-address1-signup"> | |||||
<Typography variant="errorMessage1"> | |||||
{errorMsg} | |||||
</Typography> | |||||
</FormHelperText> | |||||
</Grid> | |||||
<Grid item lg={4}> | <Grid item lg={4}> | ||||
{FieldUtils.getTextField({ | {FieldUtils.getTextField({ | ||||
label: "BR No.:", | label: "BR No.:", | ||||
@@ -1,18 +1,30 @@ | |||||
// material-ui | // material-ui | ||||
import {Grid, Typography} from '@mui/material'; | |||||
import {Grid, Typography, Stack, Box} from '@mui/material'; | |||||
import {useEffect, useState} from "react"; | import {useEffect, useState} from "react"; | ||||
import * as React from "react"; | import * as React from "react"; | ||||
import * as HttpUtils from "../../../utils/HttpUtils"; | |||||
import * as HttpUtils from "utils/HttpUtils"; | |||||
import {useParams} from "react-router-dom"; | import {useParams} from "react-router-dom"; | ||||
import {useNavigate} from "react-router-dom"; | import {useNavigate} from "react-router-dom"; | ||||
import * as UrlUtils from "../../../utils/ApiPathConst"; | |||||
import * as DateUtils from "../../../utils/DateUtils"; | |||||
import * as UrlUtils from "utils/ApiPathConst"; | |||||
import * as DateUtils from "utils/DateUtils"; | |||||
import {getObjectByValue} from "utils/CommonFunction"; | |||||
import * as ComboData from "utils/ComboData"; | |||||
import Loadable from 'components/Loadable'; | import Loadable from 'components/Loadable'; | ||||
import { lazy } from 'react'; | import { lazy } from 'react'; | ||||
const InfoCard = Loadable(lazy(() => import('./OrganizationCard_loadFromUser'))); | const InfoCard = Loadable(lazy(() => import('./OrganizationCard_loadFromUser'))); | ||||
const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | |||||
const LoadingComponent = Loadable(lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||||
import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||||
const BackgroundHead = { | |||||
backgroundImage: `url(${titleBackgroundImg})`, | |||||
width: '100%', | |||||
height: '100%', | |||||
backgroundSize: 'contain', | |||||
backgroundRepeat: 'no-repeat', | |||||
backgroundColor: '#0C489E', | |||||
backgroundPosition: 'right' | |||||
} | |||||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
@@ -34,8 +46,8 @@ const OrganizationDetailPage_FromUser = () => { | |||||
HttpUtils.get({ | HttpUtils.get({ | ||||
url: UrlUtils.GET_ORG_FROM_USER_PATH+"/"+params.id, | url: UrlUtils.GET_ORG_FROM_USER_PATH+"/"+params.id, | ||||
onSuccess: function(response){ | onSuccess: function(response){ | ||||
response.data["country"] = response.data.addressTemp?.country; | |||||
response.data["district"] = response.data.addressTemp?.district; | |||||
response.data["country"] = getObjectByValue(ComboData.country, "key", response.data.addressTemp?.country); | |||||
response.data["district"] = getObjectByValue(ComboData.district, "key", response.data.addressTemp?.district); | |||||
response.data["addressLine1"] = response.data.addressTemp?.addressLine1; | response.data["addressLine1"] = response.data.addressTemp?.addressLine1; | ||||
response.data["addressLine2"] = response.data.addressTemp?.addressLine2; | response.data["addressLine2"] = response.data.addressTemp?.addressLine2; | ||||
response.data["addressLine3"] = response.data.addressTemp?.addressLine3; | response.data["addressLine3"] = response.data.addressTemp?.addressLine3; | ||||
@@ -62,20 +74,32 @@ const OrganizationDetailPage_FromUser = () => { | |||||
return ( | return ( | ||||
isLoading ? | isLoading ? | ||||
<LoadingComponent/> | |||||
<Grid container sx={{ minHeight: '87vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center"> | |||||
<Grid item> | |||||
<LoadingComponent /> | |||||
</Grid> | |||||
</Grid> | |||||
: | : | ||||
<Grid container rowSpacing={4.5} columnSpacing={2.75}> | |||||
<Grid item xs={12} sx={{mb: -2.25}}> | |||||
<Typography variant="h5">Organisation (Create From User)</Typography> | |||||
<Grid container direction="column" sx={{minHeight: '87vh',backgroundColor:'#ffffff' }}> | |||||
<Grid item xs={12}> | |||||
<div style={BackgroundHead}> | |||||
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||||
<Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||||
Organisation (Create From User) | |||||
</Typography> | |||||
</Stack> | |||||
</div> | |||||
</Grid> | </Grid> | ||||
{/*col 1*/} | {/*col 1*/} | ||||
<Grid item xs={12} > | <Grid item xs={12} > | ||||
<Grid container> | <Grid container> | ||||
<Grid item xs={12} md={12} lg={12}> | <Grid item xs={12} md={12} lg={12}> | ||||
<InfoCard | |||||
userData={formData} | |||||
userId={params.id} | |||||
/> | |||||
<Box xs={12} ml={0} mt={-1} mr={0} sx={{ p: 1, borderRadius: '10px' }}> | |||||
<InfoCard | |||||
userData={formData} | |||||
userId={params.id} | |||||
/> | |||||
</Box> | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -51,7 +51,7 @@ const AckPage = () => { | |||||
// const [transactionTime, setTransactionTime] = React.useState(""); | // const [transactionTime, setTransactionTime] = React.useState(""); | ||||
const [onReady, setOnReady] = React.useState(false); | const [onReady, setOnReady] = React.useState(false); | ||||
const paymentStatusApi = "/api/payment/status/"; | const paymentStatusApi = "/api/payment/status/"; | ||||
const [onDownload, setOnDownload] = React.useState(false); | |||||
React.useEffect(() => { | React.useEffect(() => { | ||||
loadForm(); | loadForm(); | ||||
@@ -142,8 +142,15 @@ const AckPage = () => { | |||||
const doPrint = () => { | const doPrint = () => { | ||||
// window.print(); | // window.print(); | ||||
setOnDownload(true) | |||||
HttpUtils.fileDownload({ | HttpUtils.fileDownload({ | ||||
url: UrlUtils.GEN_PAYMENT_RECEIPT+"/"+localStorage.getItem("paymentId"), | url: UrlUtils.GEN_PAYMENT_RECEIPT+"/"+localStorage.getItem("paymentId"), | ||||
onResponse:()=>{ | |||||
setOnDownload(false) | |||||
}, | |||||
onError:()=>{ | |||||
setOnDownload(false) | |||||
} | |||||
}); | }); | ||||
}; | }; | ||||
@@ -182,6 +189,7 @@ const AckPage = () => { | |||||
<PaymentDetails | <PaymentDetails | ||||
formData={paymentData} | formData={paymentData} | ||||
doPrint={doPrint} | doPrint={doPrint} | ||||
onDownload={onDownload} | |||||
style={{ | style={{ | ||||
display: "flex", | display: "flex", | ||||
height: "100%", | height: "100%", | ||||
@@ -40,6 +40,7 @@ const Index = () => { | |||||
const [paymentData, setPaymentData] = React.useState({}); | const [paymentData, setPaymentData] = React.useState({}); | ||||
const [itemList, setItemList] = React.useState([]); | const [itemList, setItemList] = React.useState([]); | ||||
// const [paymentId, setPaymentId] = React.useState(""); | // const [paymentId, setPaymentId] = React.useState(""); | ||||
const [onDownload, setOnDownload] = React.useState(false); | |||||
const [transactionData, setTransactionData] = React.useState({}); | const [transactionData, setTransactionData] = React.useState({}); | ||||
// const [transactionDate, setTransactionDate] = React.useState(""); | // const [transactionDate, setTransactionDate] = React.useState(""); | ||||
@@ -144,8 +145,15 @@ const Index = () => { | |||||
const doPrint = () => { | const doPrint = () => { | ||||
// window.print(); | // window.print(); | ||||
setOnDownload(true) | |||||
HttpUtils.fileDownload({ | HttpUtils.fileDownload({ | ||||
url: UrlUtils.GEN_PAYMENT_RECEIPT+"/"+localStorage.getItem("paymentId"), | url: UrlUtils.GEN_PAYMENT_RECEIPT+"/"+localStorage.getItem("paymentId"), | ||||
onResponse:()=>{ | |||||
setOnDownload(false) | |||||
}, | |||||
onError:()=>{ | |||||
setOnDownload(false) | |||||
} | |||||
}); | }); | ||||
}; | }; | ||||
@@ -176,7 +184,7 @@ const Index = () => { | |||||
{/*row 1*/} | {/*row 1*/} | ||||
<Grid item xs={12} md={12} spacing={2} sx={{ textAlign: "center" }}> | <Grid item xs={12} md={12} spacing={2} sx={{ textAlign: "center" }}> | ||||
<Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> | <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> | ||||
您的申請和付款已收到 | |||||
<FormattedMessage id="MSG.paymentMsg"/> | |||||
</Typography> | </Typography> | ||||
<Grid container justifyContent="center" direction="column" spacing={2} sx={{ p: 2 }} alignitems="stretch" > | <Grid container justifyContent="center" direction="column" spacing={2} sx={{ p: 2 }} alignitems="stretch" > | ||||
<Grid item className="printOrder" xs={12} md={12} sx={{ pt: 2 }} style={{ height: '100%', order: 1 }}> | <Grid item className="printOrder" xs={12} md={12} sx={{ pt: 2 }} style={{ height: '100%', order: 1 }}> | ||||
@@ -184,6 +192,7 @@ const Index = () => { | |||||
<PaymentDetails | <PaymentDetails | ||||
formData={paymentData} | formData={paymentData} | ||||
doPrint={doPrint} | doPrint={doPrint} | ||||
onDownload={onDownload} | |||||
style={{ | style={{ | ||||
display: "flex", | display: "flex", | ||||
height: "100%", | height: "100%", | ||||
@@ -226,21 +235,21 @@ const Index = () => { | |||||
<center> | <center> | ||||
<Grid item xs={12} md={8} > | <Grid item xs={12} md={8} > | ||||
<Typography variant="h5" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | <Typography variant="h5" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | ||||
付款取消訊息: | |||||
<FormattedMessage id="MSG.paymentCancelMsg1"/> | |||||
<br /><br /> | <br /><br /> | ||||
您的付款已被取消。我們收到了您的付款請求,但由於某些原因,付款無法完成。請注意以下事項: | |||||
<FormattedMessage id="MSG.paymentCancelMsg2"/> | |||||
<br /><br /> | <br /><br /> | ||||
如果您主動取消了支付,請確認並確保取消是您的意願。 | |||||
<FormattedMessage id="MSG.paymentCancelMsg3"/> | |||||
<br /> | <br /> | ||||
如果付款被取消是由於系統問題或其他原因,請您嘗試以下解決方法: | |||||
<FormattedMessage id="MSG.paymentCancelMsg4"/> | |||||
<br /><br /> | <br /><br /> | ||||
檢查您的支付帳戶是否有任何異常或限制。 | |||||
<FormattedMessage id="MSG.paymentCancelMsg5"/> | |||||
<br /> | <br /> | ||||
確保您的付款資訊準確無誤。 | |||||
<FormattedMessage id="MSG.paymentCancelMsg6"/> | |||||
<br /> | <br /> | ||||
檢查您的網路連線是否正常。 | |||||
<FormattedMessage id="MSG.paymentCancelMsg7"/> | |||||
<br /><br /> | <br /><br /> | ||||
如果您需要進一步的協助或有任何疑問,請隨時與我們聯繫,我們將盡快解決您的付款問題。謝謝! | |||||
<FormattedMessage id="MSG.paymentCancelMsg8"/> | |||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
</center> | </center> | ||||
@@ -26,7 +26,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||||
{ | { | ||||
field: 'actions', | field: 'actions', | ||||
headerName: 'Proof No.', | headerName: 'Proof No.', | ||||
width: 150, | |||||
width: 170, | |||||
cellClassName: 'actions', | cellClassName: 'actions', | ||||
renderCell: (params) => { | renderCell: (params) => { | ||||
return <Button onClick={handleEditClick(params)}><u>{params.row.refNo}</u></Button>; | return <Button onClick={handleEditClick(params)}><u>{params.row.refNo}</u></Button>; | ||||
@@ -36,7 +36,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||||
id: 'appId', | id: 'appId', | ||||
field: 'appId', | field: 'appId', | ||||
headerName: 'Application No./ Gazette Code/ Gazette Issue', | headerName: 'Application No./ Gazette Code/ Gazette Issue', | ||||
flex: 1.5, | |||||
width: 400, | |||||
renderCell: (params) => { | renderCell: (params) => { | ||||
let appNo = params.row.appNo; | let appNo = params.row.appNo; | ||||
let code = params.row.groupNo; | let code = params.row.groupNo; | ||||
@@ -76,9 +76,9 @@ const PublicNotice = ({ applicationDetailData, proofList, paymentList }) => { | |||||
<TabContext value={selectedTab}> | <TabContext value={selectedTab}> | ||||
<Box sx={{ borderBottom: 1, borderColor: 'divider', overflowX: 'auto' }}> | <Box sx={{ borderBottom: 1, borderColor: 'divider', overflowX: 'auto' }}> | ||||
<TabList onChange={handleChange} aria-label="lab API tabs example"> | <TabList onChange={handleChange} aria-label="lab API tabs example"> | ||||
<Tab label={"Proof(" + _proofList?.length + ") "} value="1" /> | |||||
<Tab label={"Payment(" + _paymentList.length + ") "} value="2" /> | |||||
<Tab label={"Status History(" + statusHistoryList.length + ") "} value="3" /> | |||||
<Tab label={"Proof (" + _proofList?.length + ") "} value="1" /> | |||||
<Tab label={"Payment (" + _paymentList.length + ") "} value="2" /> | |||||
<Tab label={"Status History (" + statusHistoryList.length + ") "} value="3" /> | |||||
</TabList> | </TabList> | ||||
</Box> | </Box> | ||||
<TabPanel value="1" sx={{p:0}}> | <TabPanel value="1" sx={{p:0}}> | ||||
@@ -59,11 +59,11 @@ const PublicNotice = ({ proofList, paymentList }) => { | |||||
<Tab | <Tab | ||||
aria-label={intl.formatMessage({id: 'proofRecord'})} | aria-label={intl.formatMessage({id: 'proofRecord'})} | ||||
label={ | label={ | ||||
intl.formatMessage({id: 'proofRecord'}) + "(" + _proofList.length + ") "} value="1" | |||||
intl.formatMessage({id: 'proofRecord'}) + " (" + _proofList.length + ") "} value="1" | |||||
/> | /> | ||||
<Tab | <Tab | ||||
aria-label={intl.formatMessage({id: 'paymentHistory'})} | aria-label={intl.formatMessage({id: 'paymentHistory'})} | ||||
label={ intl.formatMessage({id: 'paymentHistory'}) +"(" + _paymentList.length + ") "} value="2" | |||||
label={ intl.formatMessage({id: 'paymentHistory'}) +" (" + _paymentList.length + ") "} value="2" | |||||
/> | /> | ||||
</TabList> | </TabList> | ||||
</Box> | </Box> | ||||
@@ -85,7 +85,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||||
id: 'groupNo', | id: 'groupNo', | ||||
field: 'groupNo', | field: 'groupNo', | ||||
headerName: 'Gazette Group', | headerName: 'Gazette Group', | ||||
flex: 1, | |||||
flex: 0.5, | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
return (params?.value) ? (params?.value) : ""; | return (params?.value) ? (params?.value) : ""; | ||||
} | } | ||||
@@ -94,7 +94,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||||
id: 'issueId', | id: 'issueId', | ||||
field: 'issueId', | field: 'issueId', | ||||
headerName: 'Issue No', | headerName: 'Issue No', | ||||
flex: 1, | |||||
flex: 1.5, | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
return params.row.issueYear | return params.row.issueYear | ||||
+ " Vol. " + FormatUtils.zeroPad(params.row.issueVolume, 3) | + " Vol. " + FormatUtils.zeroPad(params.row.issueVolume, 3) | ||||
@@ -1,23 +1,24 @@ | |||||
// material-ui | // material-ui | ||||
import { | import { | ||||
Grid, Button, Typography | |||||
Grid, Button, Typography, | |||||
FormHelperText | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import MainCard from "../../../components/MainCard"; | |||||
import MainCard from "components/MainCard"; | |||||
import * as React from "react"; | import * as React from "react"; | ||||
import { useEffect, useState } from "react"; | import { useEffect, useState } from "react"; | ||||
import * as yup from 'yup'; | import * as yup from 'yup'; | ||||
import { useFormik } from 'formik'; | import { useFormik } from 'formik'; | ||||
import * as FieldUtils from "../../../utils/FieldUtils"; | |||||
import * as HttpUtils from '../../../utils/HttpUtils'; | |||||
import * as UrlUtils from "../../../utils/ApiPathConst"; | |||||
import * as ComboData from "../../../utils/ComboData"; | |||||
import * as FieldUtils from "utils/FieldUtils"; | |||||
import * as HttpUtils from 'utils/HttpUtils'; | |||||
import * as UrlUtils from "utils/ApiPathConst"; | |||||
import * as ComboData from "utils/ComboData"; | |||||
const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | ||||
import Loadable from 'components/Loadable'; | import Loadable from 'components/Loadable'; | ||||
import { lazy } from 'react'; | import { lazy } from 'react'; | ||||
import { notifyActiveSuccess, notifyLockSuccess, notifySaveSuccess, notifyVerifySuccess } from 'utils/CommonFunction'; | import { notifyActiveSuccess, notifyLockSuccess, notifySaveSuccess, notifyVerifySuccess } from 'utils/CommonFunction'; | ||||
import {useIntl} from "react-intl"; | import {useIntl} from "react-intl"; | ||||
import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||||
import {PNSPS_BUTTON_THEME} from "themes/buttonConst"; | |||||
import {ThemeProvider} from "@emotion/react"; | import {ThemeProvider} from "@emotion/react"; | ||||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
@@ -29,6 +30,7 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||||
const [editMode, setEditMode] = useState(false); | const [editMode, setEditMode] = useState(false); | ||||
const [locked, setLocked] = useState(false); | const [locked, setLocked] = useState(false); | ||||
const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
const [errorMsg, setErrorMsg] = useState(""); | |||||
useEffect(() => { | useEffect(() => { | ||||
//if state data are ready and assign to different field | //if state data are ready and assign to different field | ||||
@@ -57,38 +59,45 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||||
faxNumber: yup.string().min(8, intl.formatMessage({id: 'require8Number'})).nullable(), | faxNumber: yup.string().min(8, intl.formatMessage({id: 'require8Number'})).nullable(), | ||||
}), | }), | ||||
onSubmit: values => { | onSubmit: values => { | ||||
console.log(values); | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_IND_USER + "/" + formData.id, | |||||
params: { | |||||
prefix: values.prefix, | |||||
enName: values.enName, | |||||
chName: values.chName, | |||||
idDocType: values.idDocType, | |||||
mobileNumber: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
identification: values.identification, | |||||
checkDigit: values.checkDigit, | |||||
faxNo: { | |||||
countryCode: values.fax_countryCode, | |||||
faxNumber: values.faxNumber | |||||
}, | |||||
emailAddress: values.emailAddress, | |||||
address: { | |||||
country: values.country.key, | |||||
district: values.district.key, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
}, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess(); | |||||
loadDataFun(); | |||||
if (values.country==null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInCountry'})) | |||||
} else { | |||||
if (values.country.key ==1 && values.district == null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInDistrict'})) | |||||
} else { | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_IND_USER + "/" + formData.id, | |||||
params: { | |||||
prefix: values.prefix, | |||||
enName: values.enName, | |||||
chName: values.chName, | |||||
idDocType: values.idDocType, | |||||
mobileNumber: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
identification: values.identification, | |||||
checkDigit: values.checkDigit, | |||||
faxNo: { | |||||
countryCode: values.fax_countryCode, | |||||
faxNumber: values.faxNumber | |||||
}, | |||||
emailAddress: values.emailAddress, | |||||
address: { | |||||
country: values.country.key, | |||||
district: values.district?.key, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
}, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess(); | |||||
loadDataFun(); | |||||
} | |||||
}); | |||||
} | } | ||||
}); | |||||
} | |||||
} | } | ||||
}); | }); | ||||
@@ -196,6 +205,13 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||||
</Typography> | </Typography> | ||||
<Grid item xs={12} sm={12} md={12} lg={12}> | <Grid item xs={12} sm={12} md={12} lg={12}> | ||||
<Grid container> | <Grid container> | ||||
<Grid item xs={12}> | |||||
<FormHelperText error id="helper-text-address1-signup"> | |||||
<Typography variant="errorMessage1"> | |||||
{errorMsg} | |||||
</Typography> | |||||
</FormHelperText> | |||||
</Grid> | |||||
<Grid item xs={12} sm={12} md={12} lg={4} > | <Grid item xs={12} sm={12} md={12} lg={4} > | ||||
{FieldUtils.getTextField({ | {FieldUtils.getTextField({ | ||||
label: "Username:", | label: "Username:", | ||||
@@ -1,6 +1,7 @@ | |||||
// material-ui | // material-ui | ||||
import { | import { | ||||
Grid, Button, Typography | |||||
Grid, Button, Typography, | |||||
FormHelperText | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import MainCard from "components/MainCard"; | import MainCard from "components/MainCard"; | ||||
import * as React from "react"; | import * as React from "react"; | ||||
@@ -28,6 +29,7 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||||
const [currentUserData, setCurrentUserData] = useState(formData); | const [currentUserData, setCurrentUserData] = useState(formData); | ||||
const [editMode, setEditMode] = useState(false); | const [editMode, setEditMode] = useState(false); | ||||
const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
const [errorMsg, setErrorMsg] = useState(""); | |||||
useEffect(() => { | useEffect(() => { | ||||
//if state data are ready and assign to different field | //if state data are ready and assign to different field | ||||
@@ -53,33 +55,40 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||||
faxNumber: yup.string().min(8, intl.formatMessage({id: 'require8Number'})).nullable(), | faxNumber: yup.string().min(8, intl.formatMessage({id: 'require8Number'})).nullable(), | ||||
}), | }), | ||||
onSubmit: values => { | onSubmit: values => { | ||||
console.log(values); | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_PUB_IND_USER, | |||||
params: { | |||||
enName: values.enName, | |||||
chName: values.chName, | |||||
mobileNumber: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
faxNo: { | |||||
countryCode: values.fax_countryCode, | |||||
faxNumber: values.faxNumber | |||||
}, | |||||
address: { | |||||
country: values.country.key, | |||||
district: values.district.key, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
}, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess(); | |||||
loadDataFun(); | |||||
if (values.country==null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInCountry'})) | |||||
} else { | |||||
if (values.country.key ==1 && values.district == null){ | |||||
setErrorMsg(intl.formatMessage({id: 'pleaseFillInDistrict'})) | |||||
} else { | |||||
HttpUtils.post({ | |||||
url: UrlUtils.POST_PUB_IND_USER, | |||||
params: { | |||||
enName: values.enName, | |||||
chName: values.chName, | |||||
mobileNumber: { | |||||
countryCode: values.tel_countryCode, | |||||
phoneNumber: values.phoneNumber | |||||
}, | |||||
faxNo: { | |||||
countryCode: values.fax_countryCode, | |||||
faxNumber: values.faxNumber | |||||
}, | |||||
address: { | |||||
country: values.country.key, | |||||
district: values.district?.key, | |||||
addressLine1: values.addressLine1, | |||||
addressLine2: values.addressLine2, | |||||
addressLine3: values.addressLine3, | |||||
}, | |||||
}, | |||||
onSuccess: function () { | |||||
notifySaveSuccess(); | |||||
loadDataFun(); | |||||
} | |||||
}); | |||||
} | } | ||||
}); | |||||
} | |||||
} | } | ||||
}); | }); | ||||
@@ -160,6 +169,13 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||||
</Typography> | </Typography> | ||||
<Grid item xs={12} sm={12} md={12} lg={12}> | <Grid item xs={12} sm={12} md={12} lg={12}> | ||||
<Grid container> | <Grid container> | ||||
<Grid item xs={12}> | |||||
<FormHelperText error id="helper-text-address1-signup"> | |||||
<Typography variant="errorMessage1"> | |||||
{errorMsg} | |||||
</Typography> | |||||
</FormHelperText> | |||||
</Grid> | |||||
<Grid item xs={12} sm={12} md={12} lg={4} > | <Grid item xs={12} sm={12} md={12} lg={4} > | ||||
{FieldUtils.getTextField({ | {FieldUtils.getTextField({ | ||||
label: intl.formatMessage({id: 'userLoginName'}) + ":", | label: intl.formatMessage({id: 'userLoginName'}) + ":", | ||||
@@ -87,7 +87,7 @@ const UserMaintainPage = () => { | |||||
<div style={BackgroundHead}> | <div style={BackgroundHead}> | ||||
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | ||||
<Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}> | <Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block', pt:2 }}}> | ||||
User Profile | |||||
My Profile | |||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
</div> | </div> | ||||
@@ -10,8 +10,8 @@ import * as React from "react"; | |||||
import * as HttpUtils from "utils/HttpUtils"; | import * as HttpUtils from "utils/HttpUtils"; | ||||
import * as UrlUtils from "utils/ApiPathConst"; | import * as UrlUtils from "utils/ApiPathConst"; | ||||
import * as DateUtils from "utils/DateUtils"; | import * as DateUtils from "utils/DateUtils"; | ||||
import {FormattedMessage, useIntl} from "react-intl"; | |||||
import {useTheme} from "@emotion/react"; | |||||
import { FormattedMessage, useIntl } from "react-intl"; | |||||
import { useTheme } from "@emotion/react"; | |||||
const BackgroundHead = { | const BackgroundHead = { | ||||
backgroundImage: `url(${titleBackgroundImg})`, | backgroundImage: `url(${titleBackgroundImg})`, | ||||
@@ -87,16 +87,16 @@ const ManageOrgUserPage = () => { | |||||
if (params.row.locked) { | if (params.row.locked) { | ||||
return ( | return ( | ||||
<> | <> | ||||
{getStatusTag({ color: "#525150", text: intl.formatMessage({id: 'locked'}) })} | |||||
{getStatusTag({ color: "#525150", text: intl.formatMessage({ id: 'locked' }) })} | |||||
<Button variant="outlined" onClick={() => onActiveClick(params)}> | <Button variant="outlined" onClick={() => onActiveClick(params)}> | ||||
<FormattedMessage id="unlock" /> | <FormattedMessage id="unlock" /> | ||||
</Button> | </Button> | ||||
</> | </> | ||||
) | ) | ||||
} else if (!params.row.verifiedBy) { | } else if (!params.row.verifiedBy) { | ||||
return getStatusTag({ color: "#fca503", text: intl.formatMessage({id: 'pendingFor'}) }) | |||||
return getStatusTag({ color: "#fca503", text: intl.formatMessage({ id: 'pendingFor' }) }) | |||||
} else if (params.row.status === "active") { | } else if (params.row.status === "active") { | ||||
return getStatusTag({ color: "#73AD21", text: intl.formatMessage({id: 'active'}) }) | |||||
return getStatusTag({ color: "#73AD21", text: intl.formatMessage({ id: 'active' }) }) | |||||
} | } | ||||
return getStatusTag({ text: params.row.status }) | return getStatusTag({ text: params.row.status }) | ||||
} | } | ||||
@@ -126,7 +126,7 @@ const ManageOrgUserPage = () => { | |||||
{ | { | ||||
id: 'username', | id: 'username', | ||||
field: 'username', | field: 'username', | ||||
headerName: getHeader(intl.formatMessage({id: 'loginName'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'loginName' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
@@ -134,7 +134,7 @@ const ManageOrgUserPage = () => { | |||||
{ | { | ||||
id: 'contactPerson', | id: 'contactPerson', | ||||
field: 'contactPerson', | field: 'contactPerson', | ||||
headerName: getHeader(intl.formatMessage({id: 'userName'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'userName' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
@@ -142,7 +142,7 @@ const ManageOrgUserPage = () => { | |||||
{ | { | ||||
id: 'contactTel', | id: 'contactTel', | ||||
field: 'contactTel', | field: 'contactTel', | ||||
headerName: getHeader(intl.formatMessage({id: 'userContactNumber'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'userContactNumber' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
@@ -153,14 +153,14 @@ const ManageOrgUserPage = () => { | |||||
{ | { | ||||
id: 'emailBus', | id: 'emailBus', | ||||
field: 'emailBus', | field: 'emailBus', | ||||
headerName: getHeader(intl.formatMessage({id: 'userContactEmail'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'userContactEmail' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
}, | }, | ||||
{ | { | ||||
id: 'lastLogin', | id: 'lastLogin', | ||||
field: 'lastLogin', | field: 'lastLogin', | ||||
headerName: getHeader(intl.formatMessage({id: 'lastLoginDate'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'lastLoginDate' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
@@ -170,7 +170,7 @@ const ManageOrgUserPage = () => { | |||||
{ | { | ||||
id: 'lastApply', | id: 'lastApply', | ||||
field: 'lastApply', | field: 'lastApply', | ||||
headerName: getHeader(intl.formatMessage({id: 'lastSubmissionDate'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'lastSubmissionDate' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
valueGetter: () => { | valueGetter: () => { | ||||
@@ -180,7 +180,7 @@ const ManageOrgUserPage = () => { | |||||
{ | { | ||||
field: 'actions', | field: 'actions', | ||||
type: 'actions', | type: 'actions', | ||||
headerName: getHeader(intl.formatMessage({id: 'status'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'status' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
cellClassName: 'actions', | cellClassName: 'actions', | ||||
@@ -192,7 +192,7 @@ const ManageOrgUserPage = () => { | |||||
id: 'primaryUser', | id: 'primaryUser', | ||||
field: 'primaryUser', | field: 'primaryUser', | ||||
type: 'bool', | type: 'bool', | ||||
headerName: getHeader(intl.formatMessage({id: 'primary'})), | |||||
headerName: getHeader(intl.formatMessage({ id: 'primary' })), | |||||
width: isMdOrLg ? 'auto' : 160, | width: isMdOrLg ? 'auto' : 160, | ||||
flex: isMdOrLg ? 1 : undefined, | flex: isMdOrLg ? 1 : undefined, | ||||
renderCell: (params) => { | renderCell: (params) => { | ||||
@@ -204,7 +204,16 @@ const ManageOrgUserPage = () => { | |||||
<Checkbox | <Checkbox | ||||
onClick={() => { | onClick={() => { | ||||
setSelectUser(params); | setSelectUser(params); | ||||
let str = params.row.primaryUser ? "Are you sure to mark " + params.row.username + " as un-primary user?" : "Are you sure to mark " + params.row.username + " as primary user?" | |||||
let str = params.row.primaryUser ? | |||||
intl.formatMessage({ id: 'MSG.revokePrimay' }, | |||||
{ | |||||
username: params.row.username | |||||
}) | |||||
: | |||||
intl.formatMessage({ id: 'MSG.setPrimay' }, | |||||
{ | |||||
username: params.row.username | |||||
}); | |||||
setWarningText(str); | setWarningText(str); | ||||
setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
}} | }} | ||||
@@ -222,7 +231,7 @@ const ManageOrgUserPage = () => { | |||||
<Grid item xs={12}> | <Grid item xs={12}> | ||||
<div style={BackgroundHead}> | <div style={BackgroundHead}> | ||||
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | ||||
<Typography ml={15} color='#FFF' variant="h4" sx={{display: { xs: 'none', sm: 'none', md: 'block' }}}> | |||||
<Typography ml={15} color='#FFF' variant="h4" sx={{ display: { xs: 'none', sm: 'none', md: 'block' } }}> | |||||
<FormattedMessage id="companyOrUserRecord" /> | <FormattedMessage id="companyOrUserRecord" /> | ||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
@@ -20,6 +20,7 @@ const RegisterCustom = () => { | |||||
const [isPopUp, setIsPopUp] = React.useState(false); | const [isPopUp, setIsPopUp] = React.useState(false); | ||||
const intl = useIntl(); | const intl = useIntl(); | ||||
const { locale } = intl; | |||||
const registerWithIAmSmart = () => { | const registerWithIAmSmart = () => { | ||||
setIsPopUp(true); | setIsPopUp(true); | ||||
@@ -41,7 +42,7 @@ const RegisterCustom = () => { | |||||
+"&source=" + getBowserType() | +"&source=" + getBowserType() | ||||
+"&redirectURI="+encodeURIComponent(callbackUrl) | +"&redirectURI="+encodeURIComponent(callbackUrl) | ||||
+"&scope="+encodeURIComponent("eidapi_auth eidapi_profiles") | +"&scope="+encodeURIComponent("eidapi_auth eidapi_profiles") | ||||
+"&lang=zh-HK"//en-US, zh-HK, or zh-CN | |||||
+"&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); | ||||
@@ -55,7 +56,7 @@ const RegisterCustom = () => { | |||||
+"&source=" + getBowserType() | +"&source=" + getBowserType() | ||||
+"&redirectURI="+encodeURIComponent(callbackUrl) | +"&redirectURI="+encodeURIComponent(callbackUrl) | ||||
+"&scope="+encodeURIComponent("eidapi_auth eidapi_profiles") | +"&scope="+encodeURIComponent("eidapi_auth eidapi_profiles") | ||||
+"&lang=zh-HK"//en-US, zh-HK, or zh-CN | |||||
+"&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); | ||||
@@ -80,7 +81,7 @@ const RegisterCustom = () => { | |||||
<Box alignItems="center"> | <Box alignItems="center"> | ||||
<Grid container> | <Grid container> | ||||
<Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
<Typography mt={4} variant="h2"> | |||||
<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'}) + " "} | ||||
@@ -98,14 +99,15 @@ const RegisterCustom = () => { | |||||
<Typography mb={4} variant="h3"> | <Typography mb={4} variant="h3"> | ||||
<FormattedMessage id="personalUser"/> | <FormattedMessage id="personalUser"/> | ||||
</Typography> | </Typography> | ||||
<Button variant="outlined" color="iAmSmart" onClick={registerWithIAmSmart} startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}><Typography variant="h5"> | |||||
<FormattedMessage id="continueWithIAmSmart"/> | |||||
</Typography></Button> | |||||
<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> | |||||
<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> | ||||
你可點擊「智方便」按鈕,系統會自動輸入個人資料,或自行輸入個人資料,以即時啟動憲報刊登公告帳戶。 | |||||
<br />如欲使用「智方便」提供個人資料,請先下載「智方便」流動應用程式並登記成為「智方便」用戶。 | |||||
<div dangerouslySetInnerHTML={{ __html: intl.formatMessage({id: 'MSG.registerIAmSmart'}) }} /> | |||||
</Typography> | </Typography> | ||||
<Link href="https://www.iamsmart.gov.hk/tc/"> | <Link href="https://www.iamsmart.gov.hk/tc/"> | ||||
<FormattedMessage id="learnMore"/> | <FormattedMessage id="learnMore"/> | ||||
@@ -121,8 +123,7 @@ const RegisterCustom = () => { | |||||
</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> | ||||
需上載身份證明文件數碼檔案以進行網上申請。 | |||||
<br />如:香港身份證; 護照; 中國內地身份證; 專業執業証書等 | |||||
<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' }}> | ||||
@@ -133,8 +134,7 @@ const RegisterCustom = () => { | |||||
<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> | ||||
需上載以下任何一份證明文件以進行網上申請。 | |||||
<br />如:商業登記證;專業執業證書 | |||||
<div dangerouslySetInnerHTML={{ __html: intl.formatMessage({id: 'MSG.registerOrg'}) }} /> | |||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -205,7 +205,7 @@ 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=zh-HK"//en-US, zh-HK, or 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; | ||||
@@ -237,7 +237,7 @@ 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=zh-HK"//en-US, zh-HK, or 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; | ||||
@@ -361,7 +361,7 @@ 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()} color="iAmSmart" fullWidth size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}> | |||||
<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"> | <Typography variant="h5"> | ||||
<FormattedMessage id="iAmSmartLogin"/> | <FormattedMessage id="iAmSmartLogin"/> | ||||
</Typography> | </Typography> | ||||
@@ -110,7 +110,7 @@ const CustomFormWizard = (props) => { | |||||
useEffect(() => { | useEffect(() => { | ||||
changePassword(''); | changePassword(''); | ||||
if(captchaImg=="") | |||||
if (captchaImg == "") | |||||
onCaptchaChange(); | onCaptchaChange(); | ||||
}, []); | }, []); | ||||
@@ -171,7 +171,7 @@ const CustomFormWizard = (props) => { | |||||
const onCaptchaChange = () => { | const onCaptchaChange = () => { | ||||
HttpUtils.post({ | HttpUtils.post({ | ||||
url: POST_CAPTCHA, | url: POST_CAPTCHA, | ||||
params: { width: 130, height: 40, captcha: captchaImg}, | |||||
params: { width: 130, height: 40, captcha: captchaImg }, | |||||
onSuccess: (responseData) => { | onSuccess: (responseData) => { | ||||
props.setBase64Url(responseData.base64Url) | props.setBase64Url(responseData.base64Url) | ||||
localStorage.setItem("base64Url", responseData.base64Url); | localStorage.setItem("base64Url", responseData.base64Url); | ||||
@@ -300,7 +300,7 @@ const CustomFormWizard = (props) => { | |||||
useEffect(() => { | useEffect(() => { | ||||
props.step == 2 ? _onSubmit() : null; | props.step == 2 ? _onSubmit() : null; | ||||
if(captchaImg=="") | |||||
if (captchaImg == "") | |||||
onCaptchaChange(); | onCaptchaChange(); | ||||
checkDataField(values) | checkDataField(values) | ||||
}, [props.step]) | }, [props.step]) | ||||
@@ -309,7 +309,7 @@ const CustomFormWizard = (props) => { | |||||
const _onSubmit = () => { | const _onSubmit = () => { | ||||
setLoding(true); | setLoding(true); | ||||
values.idDocType = selectedIdDocType.type | values.idDocType = selectedIdDocType.type | ||||
values.address4 = selectedAddress4==null?"":selectedAddress4.key | |||||
values.address4 = selectedAddress4 == null ? "" : selectedAddress4.key | |||||
values.address5 = selectedAddress5.key | values.address5 = selectedAddress5.key | ||||
// console.log(values) | // console.log(values) | ||||
const userAddress = { | const userAddress = { | ||||
@@ -383,7 +383,7 @@ const CustomFormWizard = (props) => { | |||||
}) | }) | ||||
.then(( | .then(( | ||||
// response | // response | ||||
) => { | |||||
) => { | |||||
// console.log(response) | // console.log(response) | ||||
setCheckUpload(true) | setCheckUpload(true) | ||||
setLoding(false); | setLoding(false); | ||||
@@ -551,27 +551,27 @@ const CustomFormWizard = (props) => { | |||||
captchaField: '' | captchaField: '' | ||||
}), | }), | ||||
validationSchema: yup.object().shape({ | validationSchema: yup.object().shape({ | ||||
username: yup.string().min(6, displayErrorMsg(intl.formatMessage({id: 'atLeast6CharAccount'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireUsername'}))) | |||||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpecialCharAccount'})) }) | |||||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpaceAccount'})) }), | |||||
password: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'atLeast8CharPassword'}))).required(displayErrorMsg(intl.formatMessage({id: 'requirePassword'}))) | |||||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({id: 'noSpacePassword'})) }) | |||||
.matches(/^(?=.*[a-z])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeastOneSmallLetter'})) }) | |||||
.matches(/^(?=.*[A-Z])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeastOneCapLetter'})) }) | |||||
.matches(/^(?=.*[0-9])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeast1Number'})) }) | |||||
.matches(/^(?=.*[!@#%&])/, { message: displayErrorMsg(intl.formatMessage({id: 'atLeast1SpecialChar'})) }), | |||||
confirmPassword: yup.string().min(8, displayErrorMsg(intl.formatMessage({id: 'atLeast8CharPassword'}))).required(displayErrorMsg(intl.formatMessage({id: 'pleaseConfirmPassword'}))).oneOf([yup.ref('password'), null], displayErrorMsg(intl.formatMessage({id: 'samePassword'}))), | |||||
enName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'userRequireEnglishName'}))), | |||||
chName: yup.string().max(6).required(displayErrorMsg(intl.formatMessage({id: 'userRequireChineseName'}))), | |||||
address1: yup.string().max(40).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine1'}))), | |||||
address2: yup.string().max(40).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine2'}))), | |||||
address3: yup.string().max(40).required(displayErrorMsg(intl.formatMessage({id: 'validateAddressLine3'}))), | |||||
email: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))), | |||||
emailConfirm: yup.string().email(displayErrorMsg(intl.formatMessage({id: 'validEmailFormat'}))).max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireEmail'}))).oneOf([yup.ref('email'), null], displayErrorMsg(intl.formatMessage({id: 'validSameEmail'}))), | |||||
idNo: yup.string().required(displayErrorMsg(`${intl.formatMessage({id: 'require'})}${selectedIdDocInputType}${intl.formatMessage({id: 'number'})}`)) | |||||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg(`${selectedIdDocInputType}${intl.formatMessage({id: 'noSpecialCharacter'})}`) }) | |||||
.matches(/^\S*$/, { message: displayErrorMsg(`${selectedIdDocInputType}${intl.formatMessage({id: 'noSpace'})}`) }) | |||||
.test('checkIDCardFormat', displayErrorMsg(`${intl.formatMessage({id: 'requiredValid'})}${selectedIdDocInputType}${intl.formatMessage({id: 'number'})}`), function (value) { | |||||
username: yup.string().min(6, displayErrorMsg(intl.formatMessage({ id: 'atLeast6CharAccount' }))).required(displayErrorMsg(intl.formatMessage({ id: 'requireUsername' }))) | |||||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg(intl.formatMessage({ id: 'noSpecialCharAccount' })) }) | |||||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({ id: 'noSpaceAccount' })) }), | |||||
password: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'atLeast8CharPassword' }))).required(displayErrorMsg(intl.formatMessage({ id: 'requirePassword' }))) | |||||
.matches(/^\S*$/, { message: displayErrorMsg(intl.formatMessage({ id: 'noSpacePassword' })) }) | |||||
.matches(/^(?=.*[a-z])/, { message: displayErrorMsg(intl.formatMessage({ id: 'atLeastOneSmallLetter' })) }) | |||||
.matches(/^(?=.*[A-Z])/, { message: displayErrorMsg(intl.formatMessage({ id: 'atLeastOneCapLetter' })) }) | |||||
.matches(/^(?=.*[0-9])/, { message: displayErrorMsg(intl.formatMessage({ id: 'atLeast1Number' })) }) | |||||
.matches(/^(?=.*[!@#%&])/, { message: displayErrorMsg(intl.formatMessage({ id: 'atLeast1SpecialChar' })) }), | |||||
confirmPassword: yup.string().min(8, displayErrorMsg(intl.formatMessage({ id: 'atLeast8CharPassword' }))).required(displayErrorMsg(intl.formatMessage({ id: 'pleaseConfirmPassword' }))).oneOf([yup.ref('password'), null], displayErrorMsg(intl.formatMessage({ id: 'samePassword' }))), | |||||
enName: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({ id: 'userRequireEnglishName' }))), | |||||
chName: yup.string().max(6).required(displayErrorMsg(intl.formatMessage({ id: 'userRequireChineseName' }))), | |||||
address1: yup.string().max(40).required(displayErrorMsg(intl.formatMessage({ id: 'validateAddressLine1' }))), | |||||
address2: yup.string().max(40).required(displayErrorMsg(intl.formatMessage({ id: 'validateAddressLine2' }))), | |||||
address3: yup.string().max(40).required(displayErrorMsg(intl.formatMessage({ id: 'validateAddressLine3' }))), | |||||
email: yup.string().email(displayErrorMsg(intl.formatMessage({ id: 'validEmailFormat' }))).max(255).required(displayErrorMsg(intl.formatMessage({ id: 'requireEmail' }))), | |||||
emailConfirm: yup.string().email(displayErrorMsg(intl.formatMessage({ id: 'validEmailFormat' }))).max(255).required(displayErrorMsg(intl.formatMessage({ id: 'requireEmail' }))).oneOf([yup.ref('email'), null], displayErrorMsg(intl.formatMessage({ id: 'validSameEmail' }))), | |||||
idNo: yup.string().required(displayErrorMsg(`${intl.formatMessage({ id: 'require' })}${selectedIdDocInputType}${intl.formatMessage({ id: 'number' })}`)) | |||||
.matches(/^[aA-zZ0-9\s]+$/, { message: displayErrorMsg(`${selectedIdDocInputType}${intl.formatMessage({ id: 'noSpecialCharacter' })}`) }) | |||||
.matches(/^\S*$/, { message: displayErrorMsg(`${selectedIdDocInputType}${intl.formatMessage({ id: 'noSpace' })}`) }) | |||||
.test('checkIDCardFormat', displayErrorMsg(`${intl.formatMessage({ id: 'requiredValid' })}${selectedIdDocInputType}${intl.formatMessage({ id: 'number' })}`), function (value) { | |||||
const idDocType = selectedIdDocType.type; | const idDocType = selectedIdDocType.type; | ||||
var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/; | var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/; | ||||
var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/; | var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/; | ||||
@@ -622,13 +622,13 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
} | } | ||||
}), | }), | ||||
checkDigit: yup.string().max(1).required(displayErrorMsg(intl.formatMessage({id: 'requiredNumberInQuote'}))), | |||||
idDocType: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({id: 'requireIdDocType'}))), | |||||
phoneCountryCode: yup.string().min(2, displayErrorMsg(intl.formatMessage({id: 'requireAtLeast2Number'}))).required(displayErrorMsg(intl.formatMessage({id: 'requireDialingCode'}))), | |||||
checkDigit: yup.string().max(1).required(displayErrorMsg(intl.formatMessage({ id: 'requiredNumberInQuote' }))), | |||||
idDocType: yup.string().max(255).required(displayErrorMsg(intl.formatMessage({ id: 'requireIdDocType' }))), | |||||
phoneCountryCode: yup.string().min(2, displayErrorMsg(intl.formatMessage({ id: 'requireAtLeast2Number' }))).required(displayErrorMsg(intl.formatMessage({ id: 'requireDialingCode' }))), | |||||
// faxCountryCode: yup.string().min(3,'請輸入3位數字'), | // faxCountryCode: yup.string().min(3,'請輸入3位數字'), | ||||
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' }))), | |||||
// fax: yup.string().min(8,'請輸入8位數字'), | // fax: yup.string().min(8,'請輸入8位數字'), | ||||
captchaField: yup.string().required(displayErrorMsg(intl.formatMessage({id: 'requireVerify'}))),//.oneOf([captcha], displayErrorMsg('請輸入有效驗證')), | |||||
captchaField: yup.string().required(displayErrorMsg(intl.formatMessage({ id: 'requireVerify' }))),//.oneOf([captcha], displayErrorMsg('請輸入有效驗證')), | |||||
}), | }), | ||||
}); | }); | ||||
@@ -661,19 +661,19 @@ const CustomFormWizard = (props) => { | |||||
<Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | <Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | ||||
<Button variant="outlined" type="reset" onClick={handleReset.bind(null, formik.resetForm)} sx={{ height: '40px' }}> | <Button variant="outlined" type="reset" onClick={handleReset.bind(null, formik.resetForm)} sx={{ height: '40px' }}> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="reset"/> | |||||
<FormattedMessage id="reset" /> | |||||
</Typography> | </Typography> | ||||
</Button> | </Button> | ||||
<div style={{ borderBottom: "3px solid #1A4399", width: "100%", margin_right: "15px" }}> | <div style={{ borderBottom: "3px solid #1A4399", width: "100%", margin_right: "15px" }}> | ||||
<Typography display="inline" variant="h3" sx={{ color: '#1A4399' }}> | <Typography display="inline" variant="h3" sx={{ color: '#1A4399' }}> | ||||
<FormattedMessage id="becomeNewPersonalUser"/> | |||||
<FormattedMessage id="becomeNewPersonalUser" /> | |||||
</Typography> | </Typography> | ||||
</div> | </div> | ||||
<Typography mt={0.25} variant="h6" sx={{ color: '#f10000' }}> | <Typography mt={0.25} variant="h6" sx={{ color: '#f10000' }}> | ||||
<FormattedMessage id="requireString"/> | |||||
<FormattedMessage id="requireString" /> | |||||
</Typography> | </Typography> | ||||
<Typography mt={0.25} variant="h4" sx={{ color: 'primary.primary' }}> | <Typography mt={0.25} variant="h4" sx={{ color: 'primary.primary' }}> | ||||
<FormattedMessage id="yourLoginInformation"/> | |||||
<FormattedMessage id="yourLoginInformation" /> | |||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
</Grid> | </Grid> | ||||
@@ -683,7 +683,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<InputLabel htmlFor="username-signup"> | <InputLabel htmlFor="username-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userLoginName"/> | |||||
<FormattedMessage id="userLoginName" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
{/*<Button*/} | {/*<Button*/} | ||||
{/* variant="contained"*/} | {/* variant="contained"*/} | ||||
@@ -703,7 +703,7 @@ const CustomFormWizard = (props) => { | |||||
props.setUsername(e.target.value) | props.setUsername(e.target.value) | ||||
formik.handleChange(e) | formik.handleChange(e) | ||||
}} | }} | ||||
placeholder={intl.formatMessage({id: 'userLoginName'})} | |||||
placeholder={intl.formatMessage({ id: 'userLoginName' })} | |||||
fullWidth | fullWidth | ||||
error={Boolean((formik.touched.username && formik.errors.username) || checkUsername)} | error={Boolean((formik.touched.username && formik.errors.username) || checkUsername)} | ||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
@@ -722,7 +722,7 @@ const CustomFormWizard = (props) => { | |||||
)} | )} | ||||
{checkUsername && ( | {checkUsername && ( | ||||
<FormHelperText error id="helper-text-username-signup"> | <FormHelperText error id="helper-text-username-signup"> | ||||
<FormattedMessage id="usernameTaken"/> | |||||
<FormattedMessage id="usernameTaken" /> | |||||
</FormHelperText> | </FormHelperText> | ||||
)} | )} | ||||
</Stack> | </Stack> | ||||
@@ -734,7 +734,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack direction="row" justifyContent="space-between"> | <Stack direction="row" justifyContent="space-between"> | ||||
<InputLabel htmlFor="password-signup"> | <InputLabel htmlFor="password-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userPassword"/> | |||||
<FormattedMessage id="userPassword" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -763,7 +763,7 @@ const CustomFormWizard = (props) => { | |||||
</IconButton> | </IconButton> | ||||
</InputAdornment> | </InputAdornment> | ||||
} | } | ||||
placeholder={intl.formatMessage({id: 'userPassword'})} | |||||
placeholder={intl.formatMessage({ id: 'userPassword' })} | |||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
inputProps={{ | inputProps={{ | ||||
onKeyDown: (e) => { | onKeyDown: (e) => { | ||||
@@ -786,7 +786,7 @@ const CustomFormWizard = (props) => { | |||||
</Grid> | </Grid> | ||||
<Grid item> | <Grid item> | ||||
<Typography variant="subtitle1"> | <Typography variant="subtitle1"> | ||||
<FormattedMessage id={level ? level?.label : "pwWeak" }/> | |||||
<FormattedMessage id={level ? level?.label : "pwWeak"} /> | |||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -796,7 +796,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<InputLabel htmlFor="confirmPassword-signup"> | <InputLabel htmlFor="confirmPassword-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="confirmPassword"/> | |||||
<FormattedMessage id="confirmPassword" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -830,7 +830,7 @@ const CustomFormWizard = (props) => { | |||||
</IconButton> | </IconButton> | ||||
</InputAdornment> | </InputAdornment> | ||||
} | } | ||||
placeholder={intl.formatMessage({id: 'confirmPassword'})} | |||||
placeholder={intl.formatMessage({ id: 'confirmPassword' })} | |||||
fullWidth | fullWidth | ||||
error={Boolean(formik.touched.confirmPassword && formik.errors.confirmPassword)} | error={Boolean(formik.touched.confirmPassword && formik.errors.confirmPassword)} | ||||
/> | /> | ||||
@@ -841,12 +841,12 @@ const CustomFormWizard = (props) => { | |||||
)} | )} | ||||
</Stack> | </Stack> | ||||
<Grid container spacing={2} alignItems="center"> | <Grid container spacing={2} alignItems="center"> | ||||
<Grid item sx={{mt:1}}> | |||||
<Grid item sx={{ mt: 1 }}> | |||||
<Typography variant="subtitle1"> | <Typography variant="subtitle1"> | ||||
•<FormattedMessage id="pwRemark1"/> <br /> | |||||
•<FormattedMessage id="pwRemark2"/><br /> | |||||
•<FormattedMessage id="pwRemark3"/><br /> | |||||
•<FormattedMessage id="pwRemark4"/> | |||||
•<FormattedMessage id="pwRemark1" /> <br /> | |||||
•<FormattedMessage id="pwRemark2" /><br /> | |||||
•<FormattedMessage id="pwRemark3" /><br /> | |||||
•<FormattedMessage id="pwRemark4" /> | |||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -856,7 +856,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} mt={1} mb={1}> | <Grid item xs={12} mt={1} mb={1}> | ||||
<Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | <Stack 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="yourPersonalInformation"/> | |||||
<FormattedMessage id="yourPersonalInformation" /> | |||||
</Typography> | </Typography> | ||||
{/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | {/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | ||||
Already have an account? | Already have an account? | ||||
@@ -868,7 +868,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<InputLabel htmlFor="idDocType-signup"> | <InputLabel htmlFor="idDocType-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userIdDoc"/> | |||||
<FormattedMessage id="userIdDoc" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -892,9 +892,9 @@ const CustomFormWizard = (props) => { | |||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
filterOptions={(options) => options} | filterOptions={(options) => options} | ||||
inputValue={selectedIdDocInputType} | inputValue={selectedIdDocInputType} | ||||
getOptionLabel={(option) => option.label? intl.formatMessage({ id: option.label }) : ""} | |||||
getOptionLabel={(option) => option.label ? intl.formatMessage({ id: option.label }) : ""} | |||||
onChange={(event, newValue) => { | onChange={(event, newValue) => { | ||||
if (newValue != null ) { | |||||
if (newValue != null) { | |||||
setSelectedIdDocInputType(intl.formatMessage({ id: newValue.label })); | setSelectedIdDocInputType(intl.formatMessage({ id: newValue.label })); | ||||
setSelectedIdDocType(newValue); | setSelectedIdDocType(newValue); | ||||
if (newValue.type !== "HKID") { | if (newValue.type !== "HKID") { | ||||
@@ -907,13 +907,13 @@ const CustomFormWizard = (props) => { | |||||
sx={{ "#address4-combo": { padding: "0px 0px 0px 0px" }, "& .MuiAutocomplete-endAdornment": { top: "auto" }, }} | sx={{ "#address4-combo": { padding: "0px 0px 0px 0px" }, "& .MuiAutocomplete-endAdornment": { top: "auto" }, }} | ||||
renderInput={(params) => <TextField | renderInput={(params) => <TextField | ||||
{...params} | {...params} | ||||
placeholder={intl.formatMessage({id: 'idDocType'})} | |||||
placeholder={intl.formatMessage({ id: 'idDocType' })} | |||||
/>} | />} | ||||
/> | /> | ||||
{formik.touched.idDocType && ( | {formik.touched.idDocType && ( | ||||
selectedIdDocType === null ? | selectedIdDocType === null ? | ||||
<FormHelperText error id="helper-text-idDocType-signup"> | <FormHelperText error id="helper-text-idDocType-signup"> | ||||
<FormattedMessage id="requireIdDocType"/> | |||||
<FormattedMessage id="requireIdDocType" /> | |||||
</FormHelperText> : '' | </FormHelperText> : '' | ||||
)} | )} | ||||
</Stack> | </Stack> | ||||
@@ -941,7 +941,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
} | } | ||||
}} | }} | ||||
placeholder={intl.formatMessage({id: 'idDocNumber'})} | |||||
placeholder={intl.formatMessage({ id: 'idDocNumber' })} | |||||
fullWidth | fullWidth | ||||
sx={{ mr: 1 }} | sx={{ mr: 1 }} | ||||
error={Boolean(formik.touched.idNo && formik.errors.idNo)} | error={Boolean(formik.touched.idNo && formik.errors.idNo)} | ||||
@@ -1021,7 +1021,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
} | } | ||||
}} | }} | ||||
placeholder={intl.formatMessage({id: 'idDocNumber'})} | |||||
placeholder={intl.formatMessage({ id: 'idDocNumber' })} | |||||
fullWidth | fullWidth | ||||
sx={{ mr: 1 }} | sx={{ mr: 1 }} | ||||
error={Boolean(formik.touched.idNo && formik.errors.idNo)} | error={Boolean(formik.touched.idNo && formik.errors.idNo)} | ||||
@@ -1049,7 +1049,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<InputLabel htmlFor="enName-signup"> | <InputLabel htmlFor="enName-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userEnglishName"/> | |||||
<FormattedMessage id="userEnglishName" /> | |||||
{selectedIdDocType.type === "CNID" ? "" : <span style={{ color: '#f10000' }}>*</span>} | {selectedIdDocType.type === "CNID" ? "" : <span style={{ color: '#f10000' }}>*</span>} | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -1059,7 +1059,7 @@ const CustomFormWizard = (props) => { | |||||
value={formik.values.enName} | value={formik.values.enName} | ||||
name="enName" | name="enName" | ||||
onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
placeholder={intl.formatMessage({id: 'sameAsYourIdDoc'})} | |||||
placeholder={intl.formatMessage({ id: 'sameAsYourIdDoc' })} | |||||
fullWidth | fullWidth | ||||
error={Boolean(formik.touched.enName && formik.errors.enName && selectedIdDocType.type !== "CNID")} | error={Boolean(formik.touched.enName && formik.errors.enName && selectedIdDocType.type !== "CNID")} | ||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
@@ -1082,7 +1082,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<InputLabel htmlFor="chName-signup"> | <InputLabel htmlFor="chName-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userChineseName"/> | |||||
<FormattedMessage id="userChineseName" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -1094,7 +1094,7 @@ const CustomFormWizard = (props) => { | |||||
value={formik.values.chName.trim()} | value={formik.values.chName.trim()} | ||||
name="chName" | name="chName" | ||||
onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
placeholder={intl.formatMessage({id: 'sameAsYourIdDoc'})} | |||||
placeholder={intl.formatMessage({ id: 'sameAsYourIdDoc' })} | |||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
inputProps={{ | inputProps={{ | ||||
maxLength: 6, | maxLength: 6, | ||||
@@ -1116,7 +1116,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<InputLabel htmlFor="address1-signup"> | <InputLabel htmlFor="address1-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="formAddress"/> | |||||
<FormattedMessage id="formAddress" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -1127,7 +1127,7 @@ const CustomFormWizard = (props) => { | |||||
value={formik.values.address1} | value={formik.values.address1} | ||||
name="address1" | name="address1" | ||||
onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
placeholder={intl.formatMessage({id: 'addressLine1'})} | |||||
placeholder={intl.formatMessage({ id: 'addressLine1' })} | |||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
inputProps={{ | inputProps={{ | ||||
onKeyDown: (e) => { | onKeyDown: (e) => { | ||||
@@ -1144,7 +1144,7 @@ const CustomFormWizard = (props) => { | |||||
value={formik.values.address2} | value={formik.values.address2} | ||||
name="address2" | name="address2" | ||||
onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
placeholder={intl.formatMessage({id: 'addressLine2'})} | |||||
placeholder={intl.formatMessage({ id: 'addressLine2' })} | |||||
inputProps={{ | inputProps={{ | ||||
onKeyDown: (e) => { | onKeyDown: (e) => { | ||||
if (e.key === 'Enter') { | if (e.key === 'Enter') { | ||||
@@ -1160,7 +1160,7 @@ const CustomFormWizard = (props) => { | |||||
value={formik.values.address3} | value={formik.values.address3} | ||||
name="address3" | name="address3" | ||||
onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
placeholder={intl.formatMessage({id: 'addressLine3'})} | |||||
placeholder={intl.formatMessage({ id: 'addressLine3' })} | |||||
inputProps={{ | inputProps={{ | ||||
onKeyDown: (e) => { | onKeyDown: (e) => { | ||||
if (e.key === 'Enter') { | if (e.key === 'Enter') { | ||||
@@ -1175,14 +1175,16 @@ const CustomFormWizard = (props) => { | |||||
value={selectedAddress4} | value={selectedAddress4} | ||||
options={ComboData.district} | options={ComboData.district} | ||||
disabled={checkCountry} | disabled={checkCountry} | ||||
getOptionLabel={(option) => option.type? intl.formatMessage({ id: option.type }) : ""} | |||||
getOptionLabel={(option) => option.type ? intl.formatMessage({ id: option.type }) : ""} | |||||
onChange={(event, newValue) => { | onChange={(event, newValue) => { | ||||
setSelectedAddress4(newValue); | setSelectedAddress4(newValue); | ||||
}} | }} | ||||
sx={{ "& .MuiInputBase-root": { height: "41px" }, | |||||
sx={{ | |||||
"& .MuiInputBase-root": { height: "41px" }, | |||||
"#address4-combo": { padding: "0px 0px 0px 3px" }, | "#address4-combo": { padding: "0px 0px 0px 3px" }, | ||||
"& .MuiAutocomplete-endAdornment": { top: "auto" }, }} | |||||
renderInput={(params) => <TextField {...params} placeholder={intl.formatMessage({id: 'region'})} | |||||
"& .MuiAutocomplete-endAdornment": { top: "auto" }, | |||||
}} | |||||
renderInput={(params) => <TextField {...params} placeholder={intl.formatMessage({ id: 'region' })} | |||||
/>} | />} | ||||
/> | /> | ||||
<Autocomplete | <Autocomplete | ||||
@@ -1190,7 +1192,7 @@ const CustomFormWizard = (props) => { | |||||
id="address5-combo" | id="address5-combo" | ||||
value={selectedAddress5} | value={selectedAddress5} | ||||
options={ComboData.country} | options={ComboData.country} | ||||
getOptionLabel={(option) => option.type? intl.formatMessage({ id: option.type }) : ""} | |||||
getOptionLabel={(option) => option.type ? intl.formatMessage({ id: option.type }) : ""} | |||||
onChange={(event, newValue) => { | onChange={(event, newValue) => { | ||||
if (newValue !== null) { | if (newValue !== null) { | ||||
setSelectedAddress5(newValue); | setSelectedAddress5(newValue); | ||||
@@ -1207,7 +1209,7 @@ const CustomFormWizard = (props) => { | |||||
}} | }} | ||||
sx={{ "& .MuiInputBase-root": { height: "41px" }, "#address5-combo": { padding: "0px 0px 0px 3px" }, "& .MuiAutocomplete-endAdornment": { top: "auto" }, }} | sx={{ "& .MuiInputBase-root": { height: "41px" }, "#address5-combo": { padding: "0px 0px 0px 3px" }, "& .MuiAutocomplete-endAdornment": { top: "auto" }, }} | ||||
renderInput={(params) => <TextField {...params} placeholder={intl.formatMessage({id: 'regionOrCountry'})} />} | |||||
renderInput={(params) => <TextField {...params} placeholder={intl.formatMessage({ id: 'regionOrCountry' })} />} | |||||
/> | /> | ||||
{formik.touched.address1 && formik.errors.address1 && ( | {formik.touched.address1 && formik.errors.address1 && ( | ||||
<FormHelperText error id="helper-text-address1-signup"> | <FormHelperText error id="helper-text-address1-signup"> | ||||
@@ -1229,7 +1231,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} mt={1} mb={1}> | <Grid item xs={12} mt={1} mb={1}> | ||||
<Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | <Stack 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="yourContact"/> | |||||
<FormattedMessage id="yourContact" /> | |||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
</Grid> | </Grid> | ||||
@@ -1239,7 +1241,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1} sx={{ mr: { md: 1 }, mb: 1 }}> | <Stack spacing={1} sx={{ mr: { md: 1 }, mb: 1 }}> | ||||
<InputLabel htmlFor="email-signup"> | <InputLabel htmlFor="email-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userContactEmail"/> | |||||
<FormattedMessage id="userContactEmail" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -1251,7 +1253,7 @@ const CustomFormWizard = (props) => { | |||||
value={formik.values.email.trim()} | value={formik.values.email.trim()} | ||||
name="email" | name="email" | ||||
onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
placeholder={intl.formatMessage({id: 'userContactEmail'})} | |||||
placeholder={intl.formatMessage({ id: 'userContactEmail' })} | |||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
inputProps={{ | inputProps={{ | ||||
onKeyDown: (e) => { | onKeyDown: (e) => { | ||||
@@ -1268,7 +1270,7 @@ const CustomFormWizard = (props) => { | |||||
)} | )} | ||||
{checkEmail && ( | {checkEmail && ( | ||||
<FormHelperText error id="helper-text-email-signup"> | <FormHelperText error id="helper-text-email-signup"> | ||||
<FormattedMessage id="emailUsed"/> | |||||
<FormattedMessage id="emailUsed" /> | |||||
</FormHelperText> | </FormHelperText> | ||||
)} | )} | ||||
</Stack> | </Stack> | ||||
@@ -1277,7 +1279,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1} > | <Stack spacing={1} > | ||||
<InputLabel htmlFor="emailConfirm-signup"> | <InputLabel htmlFor="emailConfirm-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userContactEmail"/> | |||||
<FormattedMessage id="userContactEmail" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -1290,7 +1292,7 @@ const CustomFormWizard = (props) => { | |||||
name="emailConfirm" | name="emailConfirm" | ||||
// onBlur={formik.handleBlur} | // onBlur={formik.handleBlur} | ||||
onChange={formik.handleChange} | onChange={formik.handleChange} | ||||
placeholder={intl.formatMessage({id: 'confirmEmail'})} | |||||
placeholder={intl.formatMessage({ id: 'confirmEmail' })} | |||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
inputProps={{ | inputProps={{ | ||||
onKeyDown: (e) => { | onKeyDown: (e) => { | ||||
@@ -1317,7 +1319,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack direction="column" spacing={1} sx={{ mr: { md: 1 }, mb: 1 }}> | <Stack direction="column" spacing={1} sx={{ mr: { md: 1 }, mb: 1 }}> | ||||
<InputLabel htmlFor="phone-signup"> | <InputLabel htmlFor="phone-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userContactNumber"/> | |||||
<FormattedMessage id="userContactNumber" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -1336,7 +1338,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
formik.setFieldValue("phoneCountryCode", value); | formik.setFieldValue("phoneCountryCode", value); | ||||
}} | }} | ||||
placeholder={intl.formatMessage({id: 'dialingCode'})} | |||||
placeholder={intl.formatMessage({ id: 'dialingCode' })} | |||||
error={Boolean(formik.touched.phone && formik.errors.phone)} | error={Boolean(formik.touched.phone && formik.errors.phone)} | ||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
endAdornment={<InputAdornment position="end">-</InputAdornment>} | endAdornment={<InputAdornment position="end">-</InputAdornment>} | ||||
@@ -1348,7 +1350,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
}, | }, | ||||
}} | }} | ||||
sx={{ width: '33%', mr:1}} | |||||
sx={{ width: '33%', mr: 1 }} | |||||
/> | /> | ||||
<OutlinedInput | <OutlinedInput | ||||
id="phone-login" | id="phone-login" | ||||
@@ -1364,7 +1366,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
formik.setFieldValue("phone", value); | formik.setFieldValue("phone", value); | ||||
}} | }} | ||||
placeholder={intl.formatMessage({id: 'userContactNumber'})} | |||||
placeholder={intl.formatMessage({ id: 'userContactNumber' })} | |||||
error={Boolean(formik.touched.phone && formik.errors.phone)} | error={Boolean(formik.touched.phone && formik.errors.phone)} | ||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
inputProps={{ | inputProps={{ | ||||
@@ -1393,7 +1395,7 @@ const CustomFormWizard = (props) => { | |||||
<Stack spacing={1} direction="column"> | <Stack spacing={1} direction="column"> | ||||
<InputLabel htmlFor="fax-signup"> | <InputLabel htmlFor="fax-signup"> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="userFaxNumber"/> | |||||
<FormattedMessage id="userFaxNumber" /> | |||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
<Stack direction="row"> | <Stack direction="row"> | ||||
@@ -1411,7 +1413,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
formik.setFieldValue("faxCountryCode", value); | formik.setFieldValue("faxCountryCode", value); | ||||
}} | }} | ||||
placeholder={intl.formatMessage({id: 'dialingCode'})} | |||||
placeholder={intl.formatMessage({ id: 'dialingCode' })} | |||||
onBlur={formik.handleBlur} | onBlur={formik.handleBlur} | ||||
endAdornment={<InputAdornment position="end">-</InputAdornment>} | endAdornment={<InputAdornment position="end">-</InputAdornment>} | ||||
inputProps={{ | inputProps={{ | ||||
@@ -1422,7 +1424,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
}, | }, | ||||
}} | }} | ||||
sx={{ width: '33%' , mr: 1}} | |||||
sx={{ width: '33%', mr: 1 }} | |||||
/> | /> | ||||
<OutlinedInput | <OutlinedInput | ||||
id="fax-login" | id="fax-login" | ||||
@@ -1438,7 +1440,7 @@ const CustomFormWizard = (props) => { | |||||
} | } | ||||
formik.setFieldValue("fax", value); | formik.setFieldValue("fax", value); | ||||
}} | }} | ||||
placeholder={intl.formatMessage({id: 'userFaxNumber'})} | |||||
placeholder={intl.formatMessage({ id: 'userFaxNumber' })} | |||||
inputProps={{ | inputProps={{ | ||||
maxLength: 8, | maxLength: 8, | ||||
onKeyDown: (e) => { | onKeyDown: (e) => { | ||||
@@ -1461,28 +1463,28 @@ const CustomFormWizard = (props) => { | |||||
<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="userIdDoc"/> | |||||
<FormattedMessage id="userIdDoc" /> | |||||
<span style={{ color: '#f10000' }}>*</span></Typography> | <span style={{ color: '#f10000' }}>*</span></Typography> | ||||
<Typography display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}> | ||||
<FormattedMessage id="pleaseUploadIdDoc"/> | |||||
<FormattedMessage id="pleaseUploadIdDoc" /> | |||||
</Typography> | </Typography> | ||||
<Typography display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}> | <Typography display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}> | ||||
<FormattedMessage id="pleaseUploadIdDocSubTitle"/> | |||||
<FormattedMessage id="pleaseUploadIdDocSubTitle" /> | |||||
</Typography> | </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' }}> | |||||
<FormattedMessage id="uploadIdDoc"/> | |||||
<input | |||||
accept="image/png, .jpg, .bmp, .pdf" | |||||
//className={classes.input} | |||||
id="contained-button-file" | |||||
multiple | |||||
type="file" | |||||
onChange={handleFileUpload} | |||||
style={{ display: 'none' }} | |||||
/> | |||||
</Button> | |||||
<Button variant="contained" component="label" sx={{ height: '40px' }}> | |||||
<FormattedMessage id="uploadIdDoc" /> | |||||
<input | |||||
accept="image/png, .jpg, .bmp, .pdf" | |||||
//className={classes.input} | |||||
id="contained-button-file" | |||||
multiple | |||||
type="file" | |||||
onChange={handleFileUpload} | |||||
style={{ display: 'none' }} | |||||
/> | |||||
</Button> | |||||
</ThemeProvider> | </ThemeProvider> | ||||
{/*<Typography xs={12} sm={9} md={3} display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}>如: 香港身份證; 護照; 中國內地身份證等</Typography>*/} | {/*<Typography xs={12} sm={9} md={3} display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}>如: 香港身份證; 護照; 中國內地身份證等</Typography>*/} | ||||
</Stack> | </Stack> | ||||
@@ -1501,7 +1503,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"/> | |||||
<FormattedMessage id="termsAndCondition" /> | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
@@ -1526,7 +1528,7 @@ const CustomFormWizard = (props) => { | |||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="acceptTerms"/> | |||||
<FormattedMessage id="acceptTerms" /> | |||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -1542,7 +1544,7 @@ const CustomFormWizard = (props) => { | |||||
size="small" | size="small" | ||||
/> | /> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="rejectTerms"/> | |||||
<FormattedMessage id="rejectTerms" /> | |||||
</Typography> | </Typography> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -1556,7 +1558,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"/> | |||||
<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"> | ||||
@@ -1604,12 +1606,12 @@ const CustomFormWizard = (props) => { | |||||
<Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | <Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | ||||
<div style={{ borderBottom: "3px solid #1A4399", width: "100%", margin_right: "15px" }}> | <div style={{ borderBottom: "3px solid #1A4399", width: "100%", margin_right: "15px" }}> | ||||
<Typography display="inline" variant="h3" sx={{ color: '#1A4399' }}> | <Typography display="inline" variant="h3" sx={{ color: '#1A4399' }}> | ||||
<FormattedMessage id="becomeNewPersonalUser"/> | |||||
<FormattedMessage id="becomeNewPersonalUser" /> | |||||
</Typography> | </Typography> | ||||
</div> | </div> | ||||
{/* <Typography mt={0.25} variant="h6" sx={{ fontSize: 12,color: '#f10000'}}>註有*的項目必須輸入資料</Typography> */} | {/* <Typography mt={0.25} variant="h6" sx={{ fontSize: 12,color: '#f10000'}}>註有*的項目必須輸入資料</Typography> */} | ||||
<Typography mt={0.25} variant="h4" sx={{ color: 'primary.primary' }}> | <Typography mt={0.25} variant="h4" sx={{ color: 'primary.primary' }}> | ||||
<FormattedMessage id="yourLoginInformation"/> | |||||
<FormattedMessage id="yourLoginInformation" /> | |||||
</Typography> | </Typography> | ||||
{/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | {/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | ||||
Already have an account? | Already have an account? | ||||
@@ -1621,7 +1623,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} > | <Grid item xs={12} > | ||||
<Stack spacing={2} direction="row"> | <Stack spacing={2} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="userLoginName"/>: | |||||
<FormattedMessage id="userLoginName" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" id="preview-username-login"> | <Typography variant="pnspsFormHeader" id="preview-username-login"> | ||||
{formik.values.username} | {formik.values.username} | ||||
@@ -1631,7 +1633,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} mt={1} mb={1}> | <Grid item xs={12} mt={1} mb={1}> | ||||
<Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | <Stack 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="yourPersonalInformation"/> | |||||
<FormattedMessage id="yourPersonalInformation" /> | |||||
</Typography> | </Typography> | ||||
{/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | {/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | ||||
Already have an account? | Already have an account? | ||||
@@ -1641,7 +1643,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} md={12} > | <Grid item xs={12} md={12} > | ||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="userIdDoc"/> | |||||
<FormattedMessage id="userIdDoc" /> | |||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
</Grid> | </Grid> | ||||
@@ -1649,17 +1651,18 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} md={6} > | <Grid item xs={12} md={6} > | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="idDocType"/>: | |||||
<FormattedMessage id="idDocType" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" name="preview-idDocType"> | <Typography variant="pnspsFormHeader" name="preview-idDocType"> | ||||
{selectedIdDocType.label} | |||||
{intl.formatMessage({ id: selectedIdDocType?.label??" " })} | |||||
</Typography> | </Typography> | ||||
</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="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="idDocNumber"/>: | |||||
<FormattedMessage id="idDocNumber" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" id="idNo-login"> | <Typography variant="pnspsFormHeader" id="idNo-login"> | ||||
{formik.values.idNo} {selectedIdDocType.type == "HKID" ? '(' + formik.values.checkDigit + ')' : null} | {formik.values.idNo} {selectedIdDocType.type == "HKID" ? '(' + formik.values.checkDigit + ')' : null} | ||||
@@ -1670,7 +1673,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="userEnglishName"/>: | |||||
<FormattedMessage id="userEnglishName" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" id="preview-enName-signup"> | <Typography variant="pnspsFormHeader" id="preview-enName-signup"> | ||||
{formik.values.enName} | {formik.values.enName} | ||||
@@ -1680,7 +1683,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="userChineseName"/>: | |||||
<FormattedMessage id="userChineseName" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" id="preview-chName-signup"> | <Typography variant="pnspsFormHeader" id="preview-chName-signup"> | ||||
{formik.values.chName} | {formik.values.chName} | ||||
@@ -1690,7 +1693,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12}> | <Grid item xs={12}> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="formAddress"/>: | |||||
<FormattedMessage id="formAddress" />: | |||||
</Typography> | </Typography> | ||||
<Stack spacing={1} direction="column"> | <Stack spacing={1} direction="column"> | ||||
<Typography variant="pnspsFormHeader" id="preview-address1-signup"> | <Typography variant="pnspsFormHeader" id="preview-address1-signup"> | ||||
@@ -1709,19 +1712,19 @@ const CustomFormWizard = (props) => { | |||||
{selectedAddress5.label === "hongKong" ? | {selectedAddress5.label === "hongKong" ? | ||||
<Stack direction="row"> | <Stack direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]} id="preview-address4-signup"> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]} id="preview-address4-signup"> | ||||
<FormattedMessage id="region"/>: | |||||
<FormattedMessage id="region" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
{!selectedAddress4? "" : intl.formatMessage({id: selectedAddress4.type})} | |||||
{!selectedAddress4 ? "" : intl.formatMessage({ id: selectedAddress4.type })} | |||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
: null} | : null} | ||||
<Stack direction="row"> | <Stack direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]} id="preview-address5-signup"> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]} id="preview-address5-signup"> | ||||
<FormattedMessage id="regionOrCountry"/>: | |||||
<FormattedMessage id="regionOrCountry" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
{intl.formatMessage({id: selectedAddress5.type})} | |||||
{intl.formatMessage({ id: selectedAddress5.type })} | |||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
</Stack> | </Stack> | ||||
@@ -1730,14 +1733,14 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} mt={1} mb={1}> | <Grid item xs={12} mt={1} mb={1}> | ||||
<Stack direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | <Stack 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="yourContact"/> | |||||
<FormattedMessage id="yourContact" /> | |||||
</Typography> | </Typography> | ||||
</Stack> | </Stack> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={12}> | <Grid item xs={12} md={12}> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="userContactEmail"/>: | |||||
<FormattedMessage id="userContactEmail" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" id="preview-email-signup"> | <Typography variant="pnspsFormHeader" id="preview-email-signup"> | ||||
{formik.values.email} | {formik.values.email} | ||||
@@ -1747,7 +1750,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="userContactNumber"/>: | |||||
<FormattedMessage id="userContactNumber" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" id="preview-phone-signup"> | <Typography variant="pnspsFormHeader" id="preview-phone-signup"> | ||||
+{formik.values.phoneCountryCode} {formik.values.phone} | +{formik.values.phoneCountryCode} {formik.values.phone} | ||||
@@ -1758,7 +1761,7 @@ const CustomFormWizard = (props) => { | |||||
<Grid item xs={12} md={6}> | <Grid item xs={12} md={6}> | ||||
<Stack spacing={1} direction="row"> | <Stack spacing={1} direction="row"> | ||||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | <Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | ||||
<FormattedMessage id="userFaxNumber"/>: | |||||
<FormattedMessage id="userFaxNumber" />: | |||||
</Typography> | </Typography> | ||||
<Typography variant="pnspsFormHeader" id="preview-fax-signup"> | <Typography variant="pnspsFormHeader" id="preview-fax-signup"> | ||||
+{formik.values.faxCountryCode} {formik.values.fax} | +{formik.values.faxCountryCode} {formik.values.fax} | ||||
@@ -1771,7 +1774,7 @@ const CustomFormWizard = (props) => { | |||||
<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="userIdDoc"/> | |||||
<FormattedMessage id="userIdDoc" /> | |||||
</Typography> | </Typography> | ||||
{fileList != null ? | {fileList != null ? | ||||
<PreviewUploadFileTable key="previewTable" recordList={fileListData} /> : null} | <PreviewUploadFileTable key="previewTable" recordList={fileListData} /> : null} | ||||
@@ -1794,13 +1797,13 @@ const CustomFormWizard = (props) => { | |||||
<Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}> | <Stack mt={1} direction="column" justifyContent="flex-start" alignItems="center" spacing={2}> | ||||
<CheckCircleOutlineIcon color="success" sx={{ width: "200px", height: "200px" }} /> | <CheckCircleOutlineIcon color="success" sx={{ width: "200px", height: "200px" }} /> | ||||
<Typography display="inline" variant="h4"> | <Typography display="inline" variant="h4"> | ||||
<FormattedMessage id="registerSubmitted"/> | |||||
<FormattedMessage id="registerSubmitted" /> | |||||
</Typography> | </Typography> | ||||
<Typography display="inline" variant="h4"> | <Typography display="inline" variant="h4"> | ||||
<FormattedMessage id="emailSent"/> | |||||
<FormattedMessage id="emailSent" /> | |||||
</Typography> | </Typography> | ||||
<Button variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader"> | <Button variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="backToLogin"/> | |||||
<FormattedMessage id="backToLogin" /> | |||||
</Typography></Button> | </Typography></Button> | ||||
</Stack> | </Stack> | ||||
: | : | ||||
@@ -1812,7 +1815,7 @@ const CustomFormWizard = (props) => { | |||||
<FormattedMessage id="registerFail" /> | <FormattedMessage id="registerFail" /> | ||||
</Typography> | </Typography> | ||||
<Button color="error" variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader"> | <Button color="error" variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader"> | ||||
<FormattedMessage id="backToLogin"/> | |||||
<FormattedMessage id="backToLogin" /> | |||||
</Typography></Button> | </Typography></Button> | ||||
</Stack> | </Stack> | ||||
} | } | ||||
@@ -29,6 +29,23 @@ | |||||
"noMoreThen40Words": "Must not exceed 40 characters", | "noMoreThen40Words": "Must not exceed 40 characters", | ||||
"noMoreThen255Words": "Must not exceed 255 characters", | "noMoreThen255Words": "Must not exceed 255 characters", | ||||
"MSG.registerIAmSmart": "You may click the \"iAM Smart\" button to fill the personal information automatically or enter the information manually to activate the PNSPS account now.<br/>If you want to use \"iAM Smart\" to fill the personal information, please download the \"iAM Smart\" mobile app and register as an \"iAM Smart\" user first.", | |||||
"MSG.registerPersonal": "To complete the online application, you need to upload digital copies of identification documents.<br/>e.g. Hong Kong Identity Card, Passport, Mainland China Identity Card, Professional Practicing Certificate, etc.", | |||||
"MSG.registerOrg": "You need to upload the proof documents for the online application.<br/>e.g. Business Registration Certificate, Professional Practicing Certificate, etc.", | |||||
"MSG.paymentMsg": "Your application and payment have been received", | |||||
"MSG.paymentCancelMsg1": "付款取消訊息:", | |||||
"MSG.paymentCancelMsg2": "你的付款已被取消。我們收到了你的付款請求,但由於某些原因,付款無法完成。請注意以下事項:", | |||||
"MSG.paymentCancelMsg3": "如果你主動取消了支付,請確認並確保取消是你的意願。", | |||||
"MSG.paymentCancelMsg4": "如果付款被取消是由於系統問題或其他原因,請你嘗試以下解決方法:", | |||||
"MSG.paymentCancelMsg5": "檢查你的支付帳戶是否有任何異常或限制。", | |||||
"MSG.paymentCancelMsg6": "確保你的付款資訊準確無誤。", | |||||
"MSG.paymentCancelMsg7": "檢查你的網路連線是否正常。", | |||||
"MSG.paymentCancelMsg8": "如果你需要進一步的協助或有任何疑問,請隨時與我們聯繫,我們將盡快解決你的付款問題。謝謝!", | |||||
"registerTitle1": "Become", | "registerTitle1": "Become", | ||||
"registerTitle2": "Gazette Notice", | "registerTitle2": "Gazette Notice", | ||||
"registerTitle3": "Publisher now", | "registerTitle3": "Publisher now", | ||||
@@ -53,7 +70,7 @@ | |||||
"publicNoticePaymentProofDoneAndPaid": "Public Notice: Proofreading Completed and Payment", | "publicNoticePaymentProofDoneAndPaid": "Public Notice: Proofreading Completed and Payment", | ||||
"publicNoticePaymentProofComment": "Public Notice: Proofreading Reply", | "publicNoticePaymentProofComment": "Public Notice: Proofreading Reply", | ||||
"publicNoticePaymentProofInfo": "Public Notice: Proofreading Information", | "publicNoticePaymentProofInfo": "Public Notice: Proofreading Information", | ||||
"proofRecord": "Proof Record", | |||||
"proofRecord": "Proof Records", | |||||
"onlinePaymentHistory": "Online Payment History", | "onlinePaymentHistory": "Online Payment History", | ||||
"setting": "Settings", | "setting": "Settings", | ||||
"companyOrUserRecord": "Company/Institutional User Records", | "companyOrUserRecord": "Company/Institutional User Records", | ||||
@@ -62,7 +79,7 @@ | |||||
"login": "Login", | "login": "Login", | ||||
"logout": "Logout", | "logout": "Logout", | ||||
"iAmSmartLogin": "iAM Smart Login", | "iAmSmartLogin": "iAM Smart Login", | ||||
"continueWithIAmSmart": "Continue with iAmSmart", | |||||
"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": "Use \"iAmSmart\" to automatically fill in", | ||||
@@ -96,20 +113,20 @@ | |||||
"user": "User", | "user": "User", | ||||
"personalUser": "Personal user", | "personalUser": "Personal user", | ||||
"becomeNewPersonalUser": "Become New Personal User", | "becomeNewPersonalUser": "Become New Personal User", | ||||
"registerNewPersonalUser": "Apply for personal user", | |||||
"businessUser": "Organization/Company User", | |||||
"registerNewBusinessUser": "Applying Organization/Company user", | |||||
"becomeNewBusinessUser": "Become New Organization/Company user", | |||||
"registerNewPersonalUser": "Apply as personal user", | |||||
"businessUser": "Organisation/Company User", | |||||
"registerNewBusinessUser": "Apply as organisation/company user", | |||||
"becomeNewBusinessUser": "Become New Organisation/Company user", | |||||
"userName": "Username", | "userName": "Username", | ||||
"userChineseName": "Chinese Name", | "userChineseName": "Chinese Name", | ||||
"userEnglishName": "English Name", | "userEnglishName": "English Name", | ||||
"userContactName": "Name", | "userContactName": "Name", | ||||
"userRequireChineseName": "Please enter your Chinese name", | "userRequireChineseName": "Please enter your Chinese name", | ||||
"userRequireEnglishName": "Please enter your English name", | "userRequireEnglishName": "Please enter your English name", | ||||
"userRequireName": "Please enter your name", | |||||
"userRequireName": "Name is required.", | |||||
"userContactEmail": "Email", | "userContactEmail": "Email", | ||||
"confirmEmail": "Confirm Email", | "confirmEmail": "Confirm Email", | ||||
"requireEmail": "Please enter your email", | |||||
"requireEmail": "Email address is required.", | |||||
"validEmailFormat": "Please enter a valid email", | "validEmailFormat": "Please enter a valid email", | ||||
"validSameEmail": "Please enter same email address", | "validSameEmail": "Please enter same email address", | ||||
"emailUsed": "This email has been registered, please use another email", | "emailUsed": "This email has been registered, please use another email", | ||||
@@ -117,7 +134,7 @@ | |||||
"userContactNumber": "Contact Number", | "userContactNumber": "Contact Number", | ||||
"contactFaxNumber": "Contact Fax", | "contactFaxNumber": "Contact Fax", | ||||
"requiredValidNumber": "Please enter a valid contact number", | "requiredValidNumber": "Please enter a valid contact number", | ||||
"requireContactNumber": "Please enter your contact number", | |||||
"requireContactNumber": "Contact number is required.", | |||||
"require3Number": "Please enter an 3-digit number", | "require3Number": "Please enter an 3-digit number", | ||||
"require8Number": "Please enter an 8-digit number", | "require8Number": "Please enter an 8-digit number", | ||||
"requireAtLeast8Number": "Please enter at least 8 digits", | "requireAtLeast8Number": "Please enter at least 8 digits", | ||||
@@ -135,9 +152,9 @@ | |||||
"personalInformation": "Personal Information", | "personalInformation": "Personal Information", | ||||
"yourPersonalInformation": "Your Personal Information", | "yourPersonalInformation": "Your Personal Information", | ||||
"yourLoginInformation": "Your Login Information", | "yourLoginInformation": "Your Login Information", | ||||
"yourBusinessInformation": "Your Organization/Company Information", | |||||
"businessEngName": "English name of Organization/Company", | |||||
"businessChName": "Chinese name of Organization/Company", | |||||
"yourBusinessInformation": "Your Organisation/Company Information", | |||||
"businessEngName": "English name of Organisation/Company", | |||||
"businessChName": "Chinese name of Organisation/Company", | |||||
"preview": "Preview", | "preview": "Preview", | ||||
"finishSubmission": "Finish Submission", | "finishSubmission": "Finish Submission", | ||||
"reset": "Reset", | "reset": "Reset", | ||||
@@ -199,6 +216,8 @@ | |||||
"requireUsername": "Please enter user name", | "requireUsername": "Please enter user name", | ||||
"requirePassword": "Please enter password", | "requirePassword": "Please enter password", | ||||
"regionOrCountry": "Country/Region", | "regionOrCountry": "Country/Region", | ||||
"pleaseFillInCountry": "Please enter the Country/Region", | |||||
"pleaseFillInDistrict": "Please enter the District", | |||||
"hongKong": "Hong Kong", | "hongKong": "Hong Kong", | ||||
"mainland": "Mainland China", | "mainland": "Mainland China", | ||||
"macau": "Macau", | "macau": "Macau", | ||||
@@ -362,6 +381,8 @@ | |||||
"pendingFor": "Pending approval", | "pendingFor": "Pending approval", | ||||
"active": "Active", | "active": "Active", | ||||
"primary": "Primary", | "primary": "Primary", | ||||
"MSG.setPrimay": "Are you sure to mark user “{username}” as primary user?", | |||||
"MSG.revokePrimay": "Are you sure to revoke the primary user from user “{username}”?", | |||||
"submitApplication": "Submit public notice application", | "submitApplication": "Submit public notice application", | ||||
"applicationSubheading": "Provide your advertisement content with formatting, proofreading and pricing.", | "applicationSubheading": "Provide your advertisement content with formatting, proofreading and pricing.", | ||||
@@ -372,7 +393,7 @@ | |||||
"msgDetails": "Message Details", | "msgDetails": "Message Details", | ||||
"userDetail": "User Details", | "userDetail": "User Details", | ||||
"userProfile": "User Profile", | |||||
"userProfile": "My Profile", | |||||
"primaryUser": "Primary User", | "primaryUser": "Primary User", | ||||
"resetAndBack": "Reset & Back", | "resetAndBack": "Reset & Back", | ||||
"edit": "Edit", | "edit": "Edit", | ||||
@@ -391,8 +412,8 @@ | |||||
"loading": "Loading...", | "loading": "Loading...", | ||||
"ok": "Ok", | "ok": "Ok", | ||||
"organizationProfile": "Organization Profile", | |||||
"organizationDetails": "Organization Details", | |||||
"organizationProfile": "Organisation Profile", | |||||
"organizationDetails": "Organisation Details", | |||||
"brNo": "BR No.", | "brNo": "BR No.", | ||||
"creditorAccount": "Creditor account", | "creditorAccount": "Creditor account", | ||||
"nameEng": "Name (Eng)", | "nameEng": "Name (Eng)", | ||||
@@ -29,6 +29,21 @@ | |||||
"noMoreThen40Words": "不得超过 40 个字符", | "noMoreThen40Words": "不得超过 40 个字符", | ||||
"noMoreThen255Words": "不得超过 255 个字符", | "noMoreThen255Words": "不得超过 255 个字符", | ||||
"MSG.registerIAmSmart": "你可点击「智方便」按钮,系统会自动输入个人资料,或自行输入个人资料,以即时启动 公共启事提交及缴费系统 帐户。<br/>如欲使用「智方便」提供个人资料,请先下载「智方便」流动应用程式并登记成为「智方便」用户。", | |||||
"MSG.registerPersonal": "需上载身份证明文件数码档案以进行网上申请。 <br/>如:香港身份证; 护照; 中国内地身份证; 专业执业证书等", | |||||
"MSG.registerOrg": "需上载以下任何一份证明文件以进行网上申请。 <br/>如:商业登记证;专业执业证书", | |||||
"MSG.paymentMsg": "你的申请和付款已收到", | |||||
"MSG.paymentCancelMsg1": "付款取消讯息:", | |||||
"MSG.paymentCancelMsg2": "你的付款已被取消。我们收到了你的付款请求,但由于某些原因,付款无法完成。请注意以下事项:", | |||||
"MSG.paymentCancelMsg3": "如果你主动取消了支付,请确认并确保取消是你的意愿。", | |||||
"MSG.paymentCancelMsg4": "如果付款被取消是由于系统问题或其他原因,请你尝试以下解决方法:", | |||||
"MSG.paymentCancelMsg5": "检查你的支付帐户是否有任何异常或限制。", | |||||
"MSG.paymentCancelMsg6": "确保你的付款资讯准确无误。", | |||||
"MSG.paymentCancelMsg7": "检查你的网路连线是否正常。", | |||||
"MSG.paymentCancelMsg8": "如果你需要进一步的协助或有任何疑问,请随时与我们联系,我们将尽快解决你的付款问题。谢谢!", | |||||
"registerTitle1": "立即成为", | "registerTitle1": "立即成为", | ||||
"registerTitle2": "宪报刊登公告", | "registerTitle2": "宪报刊登公告", | ||||
"registerTitle3": "用户", | "registerTitle3": "用户", | ||||
@@ -195,6 +210,8 @@ | |||||
"requirePassword": "请输入密码", | "requirePassword": "请输入密码", | ||||
"region": "区域 (只适用于香港)", | "region": "区域 (只适用于香港)", | ||||
"regionOrCountry": "国家/地区", | "regionOrCountry": "国家/地区", | ||||
"pleaseFillInCountry": "请输入国家/地区", | |||||
"pleaseFillInDistrict": "请输入地区", | |||||
"hongKong": "香港", | "hongKong": "香港", | ||||
"mainland": "内地", | "mainland": "内地", | ||||
"macau": "澳门", | "macau": "澳门", | ||||
@@ -357,7 +374,9 @@ | |||||
"unlock": "解锁", | "unlock": "解锁", | ||||
"pendingFor": "待批核", | "pendingFor": "待批核", | ||||
"active": "生效中", | "active": "生效中", | ||||
"primary": "源自", | |||||
"primary": "主要账户", | |||||
"MSG.setPrimay": "是否确定设定 “{username}” 为主要账户吗?", | |||||
"MSG.revokePrimay": "是否确定要撤销 “{username}” 为主要用户吗?", | |||||
"submitApplication": "提交公共启事申请", | "submitApplication": "提交公共启事申请", | ||||
"applicationSubheading": "提供你的启事内容作排版,校对及计价。", | "applicationSubheading": "提供你的启事内容作排版,校对及计价。", | ||||
@@ -368,7 +387,7 @@ | |||||
"msgDetails": "消息详情", | "msgDetails": "消息详情", | ||||
"userDetail": "用户详细信息", | "userDetail": "用户详细信息", | ||||
"userProfile": "用户个人资料", | |||||
"userProfile": "我的个人资料", | |||||
"primaryUser": "主要用户", | "primaryUser": "主要用户", | ||||
"resetAndBack": "重置并返回", | "resetAndBack": "重置并返回", | ||||
"edit": "编辑", | "edit": "编辑", | ||||
@@ -29,6 +29,21 @@ | |||||
"noMoreThen40Words": "不得超過 40 個字符", | "noMoreThen40Words": "不得超過 40 個字符", | ||||
"noMoreThen255Words": "不得超過 255 個字符", | "noMoreThen255Words": "不得超過 255 個字符", | ||||
"MSG.registerIAmSmart": "你可點擊「智方便」按鈕,系統會自動輸入個人資料,或自行輸入個人資料,以即時啟動 公共啟事提交及繳費系統 帳戶。<br/>如欲使用「智方便」提供個人資料,請先下載「智方便」流動應用程式並登記成為「智方便」用戶。", | |||||
"MSG.registerPersonal": "需上載身份證明文件數碼檔案以進行網上申請。<br/>如:香港身份證; 護照; 中國內地身份證; 專業執業証書等", | |||||
"MSG.registerOrg": "需上載以下任何一份證明文件以進行網上申請。<br/>如:商業登記證;專業執業證書", | |||||
"MSG.paymentMsg": "你的申請和付款已收到", | |||||
"MSG.paymentCancelMsg1": "付款取消訊息:", | |||||
"MSG.paymentCancelMsg2": "你的付款已被取消。我們收到了你的付款請求,但由於某些原因,付款無法完成。請注意以下事項:", | |||||
"MSG.paymentCancelMsg3": "如果你主動取消了支付,請確認並確保取消是你的意願。", | |||||
"MSG.paymentCancelMsg4": "如果付款被取消是由於系統問題或其他原因,請你嘗試以下解決方法:", | |||||
"MSG.paymentCancelMsg5": "檢查你的支付帳戶是否有任何異常或限制。", | |||||
"MSG.paymentCancelMsg6": "確保你的付款資訊準確無誤。", | |||||
"MSG.paymentCancelMsg7": "檢查你的網路連線是否正常。", | |||||
"MSG.paymentCancelMsg8": "如果你需要進一步的協助或有任何疑問,請隨時與我們聯繫,我們將盡快解決你的付款問題。謝謝!", | |||||
"registerTitle1": "立即成為", | "registerTitle1": "立即成為", | ||||
"registerTitle2": "憲報刊登公告", | "registerTitle2": "憲報刊登公告", | ||||
"registerTitle3": "用戶", | "registerTitle3": "用戶", | ||||
@@ -200,6 +215,8 @@ | |||||
"requirePassword": "請輸入密碼", | "requirePassword": "請輸入密碼", | ||||
"region": "區域 (只適用於香港)", | "region": "區域 (只適用於香港)", | ||||
"regionOrCountry": "國家/地區", | "regionOrCountry": "國家/地區", | ||||
"pleaseFillInCountry": "請輸入國家/地區", | |||||
"pleaseFillInDistrict": "請輸入地區", | |||||
"hongKong": "香港", | "hongKong": "香港", | ||||
"mainland": "內地", | "mainland": "內地", | ||||
"macau": "澳門", | "macau": "澳門", | ||||
@@ -363,6 +380,8 @@ | |||||
"pendingFor": "待批核", | "pendingFor": "待批核", | ||||
"active": "生效中", | "active": "生效中", | ||||
"primary": "主要帳戶", | "primary": "主要帳戶", | ||||
"MSG.setPrimay": "是否確定設定 “{username}” 為主要帳戶嗎?", | |||||
"MSG.revokePrimay": "是否確定要撤銷 “{username}” 為主要使用者嗎?", | |||||
"submitApplication": "提交公共啟事申請", | "submitApplication": "提交公共啟事申請", | ||||
"applicationSubheading": "提供你的啟事內容作排版,校對及計價。", | "applicationSubheading": "提供你的啟事內容作排版,校對及計價。", | ||||
@@ -373,7 +392,7 @@ | |||||
"msgDetails": "消息詳情", | "msgDetails": "消息詳情", | ||||
"userDetail": "使用者詳細資料", | "userDetail": "使用者詳細資料", | ||||
"userProfile": "使用者個人資料", | |||||
"userProfile": "我的個人資料", | |||||
"primaryUser": "主要使用者", | "primaryUser": "主要使用者", | ||||
"resetAndBack": "重置並返回", | "resetAndBack": "重置並返回", | ||||
"edit": "編輯", | "edit": "編輯", | ||||
@@ -2,7 +2,7 @@ import dayjs from 'dayjs'; | |||||
export const datetimeStr = (date) =>{ | export const datetimeStr = (date) =>{ | ||||
return dateFormat(date,"DD-MM-YYYY HH:mm:ss") | |||||
return dateFormat(date,"YYYY-MM-DD HH:mm:ss") | |||||
}; | }; | ||||
export const dateStr = (date) =>{ | export const dateStr = (date) =>{ | ||||