# 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> | |||
<ul className='dropdown'> | |||
<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> | |||
<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)}> | |||
<FormattedMessage id="setting" /> | |||
</Typography> | |||
<KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /> | |||
</Link> | |||
<ul className='dropdown' style={{ width: "max-content" }}> | |||
<li> | |||
@@ -266,6 +267,7 @@ function Header(props) { | |||
<Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }} onClick={(event) => console.log(event)}> | |||
<FormattedMessage id="setting" /> | |||
</Typography> | |||
<KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /> | |||
</Link> | |||
<ul className='dropdown' style={{ width: "max-content" }}> | |||
<li> | |||
@@ -11,7 +11,6 @@ import DownloadIcon from '@mui/icons-material/Download'; | |||
import * as DateUtils from "utils/DateUtils"; | |||
import * as FormatUtils from "utils/FormatUtils"; | |||
import * as StatusUtils from "utils/statusUtils/DnStatus"; | |||
import * as PublicNoteStatusUtils from "utils/statusUtils/PublicNoteStatusUtils"; | |||
import { useNavigate } from "react-router-dom"; | |||
import { FiDataGrid } from "components/FiDataGrid"; | |||
import { notifyDownloadSuccess } from 'utils/CommonFunction'; | |||
@@ -200,7 +199,7 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
}, | |||
{ | |||
field: 'cm', | |||
headerName: 'Length(cm)', | |||
headerName: 'Length', | |||
width: 100, | |||
renderCell: (params) => { | |||
return (<> | |||
@@ -213,6 +212,7 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
field: 'amount', | |||
headerName: 'Amount($)', | |||
width: 100, | |||
align: 'right', | |||
valueGetter: (params) => { | |||
return FormatUtils.currencyFormat(params?.value); | |||
} | |||
@@ -228,18 +228,13 @@ export default function SearchDemandNote({ recordList, reloadFun, applySearch }) | |||
{ | |||
id: '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>; | |||
}, | |||
}, | |||
{ | |||
field: 'appStatus', | |||
headerName: 'App Status', | |||
width: 175, | |||
renderCell: (params) => { | |||
return [PublicNoteStatusUtils.getStatusByTextEng(params?.value, true)] | |||
}, | |||
}, | |||
{ | |||
field: 'status', | |||
headerName: 'Status', | |||
@@ -2,6 +2,7 @@ | |||
import { | |||
Grid, Button, Checkbox, FormControlLabel, Typography, | |||
Dialog, DialogTitle, DialogContent, DialogActions, | |||
FormHelperText | |||
} from '@mui/material'; | |||
// import { FormControlLabel } from '@material-ui/core'; | |||
import MainCard from "components/MainCard"; | |||
@@ -33,6 +34,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
const [editMode, setEditMode] = useState(false); | |||
const [createMode, setCreateMode] = useState(false); | |||
const [onReady, setOnReady] = useState(false); | |||
const [errorMsg, setErrorMsg] = useState(""); | |||
useEffect(() => { | |||
//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 | |||
</Typography> | |||
</Grid> | |||
<Grid item xs={12}> | |||
<FormHelperText error id="helper-text-address1-signup"> | |||
<Typography variant="errorMessage1"> | |||
{errorMsg} | |||
</Typography> | |||
</FormHelperText> | |||
</Grid> | |||
<Grid item lg={4} > | |||
{FieldUtils.getTextField({ | |||
label: FieldUtils.notNullFieldLabel("BR No.:"), | |||
@@ -4,6 +4,7 @@ import { | |||
// Checkbox, FormControlLabel, | |||
Typography, | |||
Dialog, DialogTitle, DialogContent, DialogActions, | |||
FormHelperText | |||
} from '@mui/material'; | |||
// import { FormControlLabel } from '@material-ui/core'; | |||
import MainCard from "components/MainCard"; | |||
@@ -35,6 +36,7 @@ const OrganizationPubCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||
const [editMode, setEditMode] = useState(false); | |||
const [createMode, setCreateMode] = useState(false); | |||
const [onReady, setOnReady] = useState(false); | |||
const [errorMsg, setErrorMsg] = useState(""); | |||
useEffect(() => { | |||
//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'}))), | |||
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" /> | |||
</Typography> | |||
</Grid> | |||
<Grid item xs={12}> | |||
<FormHelperText error id="helper-text-address1-signup"> | |||
<Typography variant="errorMessage1"> | |||
{errorMsg} | |||
</Typography> | |||
</FormHelperText> | |||
</Grid> | |||
<Grid item lg={4} > | |||
{FieldUtils.getTextField({ | |||
label: intl.formatMessage({id: 'brNo'}) + ":", | |||
@@ -2,15 +2,16 @@ | |||
import { | |||
Grid, Button, Typography, | |||
Dialog, DialogTitle, DialogContent, DialogActions, | |||
FormHelperText | |||
} from '@mui/material'; | |||
import MainCard from "../../../components/MainCard"; | |||
import MainCard from "components/MainCard"; | |||
import * as React from "react"; | |||
import * as yup from 'yup'; | |||
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 { useFormik } from 'formik'; | |||
const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | |||
@@ -29,6 +30,7 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||
const [onReady, setOnReady] = useState(false); | |||
const [isFailPopUp, setIsFailPopUp] = useState(false); | |||
const [failText, setFailText] = useState(""); | |||
const [errorMsg, setErrorMsg] = useState(""); | |||
useEffect(() => { | |||
//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(), | |||
brExpiryDate: yup.string().min(8).required(displayErrorMsg(intl.formatMessage({id: 'pleaseFillInBusinessRegCertValidityDate'}))), | |||
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}/ | |||
if (value !== undefined) { | |||
if (value.match(brNo_pattern)) { | |||
@@ -69,45 +71,53 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||
}), | |||
}), | |||
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}> | |||
{/*top*/} | |||
<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 | |||
size="large" | |||
variant="contained" | |||
@@ -155,10 +163,17 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||
Create | |||
</Button> | |||
</Grid> | |||
</Grid> | |||
{/*top*/} | |||
<Grid item xs={12}> | |||
<FormHelperText error id="helper-text-address1-signup"> | |||
<Typography variant="errorMessage1"> | |||
{errorMsg} | |||
</Typography> | |||
</FormHelperText> | |||
</Grid> | |||
<Grid item lg={4}> | |||
{FieldUtils.getTextField({ | |||
label: "BR No.:", | |||
@@ -1,18 +1,30 @@ | |||
// material-ui | |||
import {Grid, Typography} from '@mui/material'; | |||
import {Grid, Typography, Stack, Box} from '@mui/material'; | |||
import {useEffect, useState} 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 {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 { lazy } from 'react'; | |||
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 ||============================== // | |||
@@ -34,8 +46,8 @@ const OrganizationDetailPage_FromUser = () => { | |||
HttpUtils.get({ | |||
url: UrlUtils.GET_ORG_FROM_USER_PATH+"/"+params.id, | |||
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["addressLine2"] = response.data.addressTemp?.addressLine2; | |||
response.data["addressLine3"] = response.data.addressTemp?.addressLine3; | |||
@@ -62,20 +74,32 @@ const OrganizationDetailPage_FromUser = () => { | |||
return ( | |||
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> | |||
{/*col 1*/} | |||
<Grid item xs={12} > | |||
<Grid container> | |||
<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> | |||
@@ -51,7 +51,7 @@ const AckPage = () => { | |||
// const [transactionTime, setTransactionTime] = React.useState(""); | |||
const [onReady, setOnReady] = React.useState(false); | |||
const paymentStatusApi = "/api/payment/status/"; | |||
const [onDownload, setOnDownload] = React.useState(false); | |||
React.useEffect(() => { | |||
loadForm(); | |||
@@ -142,8 +142,15 @@ const AckPage = () => { | |||
const doPrint = () => { | |||
// window.print(); | |||
setOnDownload(true) | |||
HttpUtils.fileDownload({ | |||
url: UrlUtils.GEN_PAYMENT_RECEIPT+"/"+localStorage.getItem("paymentId"), | |||
onResponse:()=>{ | |||
setOnDownload(false) | |||
}, | |||
onError:()=>{ | |||
setOnDownload(false) | |||
} | |||
}); | |||
}; | |||
@@ -182,6 +189,7 @@ const AckPage = () => { | |||
<PaymentDetails | |||
formData={paymentData} | |||
doPrint={doPrint} | |||
onDownload={onDownload} | |||
style={{ | |||
display: "flex", | |||
height: "100%", | |||
@@ -40,6 +40,7 @@ const Index = () => { | |||
const [paymentData, setPaymentData] = React.useState({}); | |||
const [itemList, setItemList] = React.useState([]); | |||
// const [paymentId, setPaymentId] = React.useState(""); | |||
const [onDownload, setOnDownload] = React.useState(false); | |||
const [transactionData, setTransactionData] = React.useState({}); | |||
// const [transactionDate, setTransactionDate] = React.useState(""); | |||
@@ -144,8 +145,15 @@ const Index = () => { | |||
const doPrint = () => { | |||
// window.print(); | |||
setOnDownload(true) | |||
HttpUtils.fileDownload({ | |||
url: UrlUtils.GEN_PAYMENT_RECEIPT+"/"+localStorage.getItem("paymentId"), | |||
onResponse:()=>{ | |||
setOnDownload(false) | |||
}, | |||
onError:()=>{ | |||
setOnDownload(false) | |||
} | |||
}); | |||
}; | |||
@@ -176,7 +184,7 @@ const Index = () => { | |||
{/*row 1*/} | |||
<Grid item xs={12} md={12} spacing={2} sx={{ textAlign: "center" }}> | |||
<Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}> | |||
您的申請和付款已收到 | |||
<FormattedMessage id="MSG.paymentMsg"/> | |||
</Typography> | |||
<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 }}> | |||
@@ -184,6 +192,7 @@ const Index = () => { | |||
<PaymentDetails | |||
formData={paymentData} | |||
doPrint={doPrint} | |||
onDownload={onDownload} | |||
style={{ | |||
display: "flex", | |||
height: "100%", | |||
@@ -226,21 +235,21 @@ const Index = () => { | |||
<center> | |||
<Grid item xs={12} md={8} > | |||
<Typography variant="h5" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}> | |||
付款取消訊息: | |||
<FormattedMessage id="MSG.paymentCancelMsg1"/> | |||
<br /><br /> | |||
您的付款已被取消。我們收到了您的付款請求,但由於某些原因,付款無法完成。請注意以下事項: | |||
<FormattedMessage id="MSG.paymentCancelMsg2"/> | |||
<br /><br /> | |||
如果您主動取消了支付,請確認並確保取消是您的意願。 | |||
<FormattedMessage id="MSG.paymentCancelMsg3"/> | |||
<br /> | |||
如果付款被取消是由於系統問題或其他原因,請您嘗試以下解決方法: | |||
<FormattedMessage id="MSG.paymentCancelMsg4"/> | |||
<br /><br /> | |||
檢查您的支付帳戶是否有任何異常或限制。 | |||
<FormattedMessage id="MSG.paymentCancelMsg5"/> | |||
<br /> | |||
確保您的付款資訊準確無誤。 | |||
<FormattedMessage id="MSG.paymentCancelMsg6"/> | |||
<br /> | |||
檢查您的網路連線是否正常。 | |||
<FormattedMessage id="MSG.paymentCancelMsg7"/> | |||
<br /><br /> | |||
如果您需要進一步的協助或有任何疑問,請隨時與我們聯繫,我們將盡快解決您的付款問題。謝謝! | |||
<FormattedMessage id="MSG.paymentCancelMsg8"/> | |||
</Typography> | |||
</Grid> | |||
</center> | |||
@@ -26,7 +26,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
{ | |||
field: 'actions', | |||
headerName: 'Proof No.', | |||
width: 150, | |||
width: 170, | |||
cellClassName: 'actions', | |||
renderCell: (params) => { | |||
return <Button onClick={handleEditClick(params)}><u>{params.row.refNo}</u></Button>; | |||
@@ -36,7 +36,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'appId', | |||
field: 'appId', | |||
headerName: 'Application No./ Gazette Code/ Gazette Issue', | |||
flex: 1.5, | |||
width: 400, | |||
renderCell: (params) => { | |||
let appNo = params.row.appNo; | |||
let code = params.row.groupNo; | |||
@@ -76,9 +76,9 @@ const PublicNotice = ({ applicationDetailData, proofList, paymentList }) => { | |||
<TabContext value={selectedTab}> | |||
<Box sx={{ borderBottom: 1, borderColor: 'divider', overflowX: 'auto' }}> | |||
<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> | |||
</Box> | |||
<TabPanel value="1" sx={{p:0}}> | |||
@@ -59,11 +59,11 @@ const PublicNotice = ({ proofList, paymentList }) => { | |||
<Tab | |||
aria-label={intl.formatMessage({id: 'proofRecord'})} | |||
label={ | |||
intl.formatMessage({id: 'proofRecord'}) + "(" + _proofList.length + ") "} value="1" | |||
intl.formatMessage({id: 'proofRecord'}) + " (" + _proofList.length + ") "} value="1" | |||
/> | |||
<Tab | |||
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> | |||
</Box> | |||
@@ -85,7 +85,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'groupNo', | |||
field: 'groupNo', | |||
headerName: 'Gazette Group', | |||
flex: 1, | |||
flex: 0.5, | |||
valueGetter: (params) => { | |||
return (params?.value) ? (params?.value) : ""; | |||
} | |||
@@ -94,7 +94,7 @@ export default function SearchPublicNoticeTable({ recordList }) { | |||
id: 'issueId', | |||
field: 'issueId', | |||
headerName: 'Issue No', | |||
flex: 1, | |||
flex: 1.5, | |||
valueGetter: (params) => { | |||
return params.row.issueYear | |||
+ " Vol. " + FormatUtils.zeroPad(params.row.issueVolume, 3) | |||
@@ -1,23 +1,24 @@ | |||
// material-ui | |||
import { | |||
Grid, Button, Typography | |||
Grid, Button, Typography, | |||
FormHelperText | |||
} from '@mui/material'; | |||
import MainCard from "../../../components/MainCard"; | |||
import MainCard from "components/MainCard"; | |||
import * as React from "react"; | |||
import { useEffect, useState } from "react"; | |||
import * as yup from 'yup'; | |||
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'))); | |||
import Loadable from 'components/Loadable'; | |||
import { lazy } from 'react'; | |||
import { notifyActiveSuccess, notifyLockSuccess, notifySaveSuccess, notifyVerifySuccess } from 'utils/CommonFunction'; | |||
import {useIntl} from "react-intl"; | |||
import {PNSPS_BUTTON_THEME} from "../../../themes/buttonConst"; | |||
import {PNSPS_BUTTON_THEME} from "themes/buttonConst"; | |||
import {ThemeProvider} from "@emotion/react"; | |||
// ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
@@ -29,6 +30,7 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||
const [editMode, setEditMode] = useState(false); | |||
const [locked, setLocked] = useState(false); | |||
const [onReady, setOnReady] = useState(false); | |||
const [errorMsg, setErrorMsg] = useState(""); | |||
useEffect(() => { | |||
//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(), | |||
}), | |||
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> | |||
<Grid item xs={12} sm={12} md={12} lg={12}> | |||
<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} > | |||
{FieldUtils.getTextField({ | |||
label: "Username:", | |||
@@ -1,6 +1,7 @@ | |||
// material-ui | |||
import { | |||
Grid, Button, Typography | |||
Grid, Button, Typography, | |||
FormHelperText | |||
} from '@mui/material'; | |||
import MainCard from "components/MainCard"; | |||
import * as React from "react"; | |||
@@ -28,6 +29,7 @@ const UserInformationCard_Individual_Pub = ({ formData, loadDataFun }) => { | |||
const [currentUserData, setCurrentUserData] = useState(formData); | |||
const [editMode, setEditMode] = useState(false); | |||
const [onReady, setOnReady] = useState(false); | |||
const [errorMsg, setErrorMsg] = useState(""); | |||
useEffect(() => { | |||
//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(), | |||
}), | |||
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> | |||
<Grid item xs={12} sm={12} md={12} lg={12}> | |||
<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} > | |||
{FieldUtils.getTextField({ | |||
label: intl.formatMessage({id: 'userLoginName'}) + ":", | |||
@@ -87,7 +87,7 @@ const UserMaintainPage = () => { | |||
<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', pt:2 }}}> | |||
User Profile | |||
My Profile | |||
</Typography> | |||
</Stack> | |||
</div> | |||
@@ -10,8 +10,8 @@ import * as React from "react"; | |||
import * as HttpUtils from "utils/HttpUtils"; | |||
import * as UrlUtils from "utils/ApiPathConst"; | |||
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 = { | |||
backgroundImage: `url(${titleBackgroundImg})`, | |||
@@ -87,16 +87,16 @@ const ManageOrgUserPage = () => { | |||
if (params.row.locked) { | |||
return ( | |||
<> | |||
{getStatusTag({ color: "#525150", text: intl.formatMessage({id: 'locked'}) })} | |||
{getStatusTag({ color: "#525150", text: intl.formatMessage({ id: 'locked' }) })} | |||
<Button variant="outlined" onClick={() => onActiveClick(params)}> | |||
<FormattedMessage id="unlock" /> | |||
</Button> | |||
</> | |||
) | |||
} 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") { | |||
return getStatusTag({ color: "#73AD21", text: intl.formatMessage({id: 'active'}) }) | |||
return getStatusTag({ color: "#73AD21", text: intl.formatMessage({ id: 'active' }) }) | |||
} | |||
return getStatusTag({ text: params.row.status }) | |||
} | |||
@@ -126,7 +126,7 @@ const ManageOrgUserPage = () => { | |||
{ | |||
id: 'username', | |||
field: 'username', | |||
headerName: getHeader(intl.formatMessage({id: 'loginName'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'loginName' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
@@ -134,7 +134,7 @@ const ManageOrgUserPage = () => { | |||
{ | |||
id: 'contactPerson', | |||
field: 'contactPerson', | |||
headerName: getHeader(intl.formatMessage({id: 'userName'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'userName' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
@@ -142,7 +142,7 @@ const ManageOrgUserPage = () => { | |||
{ | |||
id: 'contactTel', | |||
field: 'contactTel', | |||
headerName: getHeader(intl.formatMessage({id: 'userContactNumber'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'userContactNumber' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: (params) => { | |||
@@ -153,14 +153,14 @@ const ManageOrgUserPage = () => { | |||
{ | |||
id: 'emailBus', | |||
field: 'emailBus', | |||
headerName: getHeader(intl.formatMessage({id: 'userContactEmail'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'userContactEmail' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
}, | |||
{ | |||
id: 'lastLogin', | |||
field: 'lastLogin', | |||
headerName: getHeader(intl.formatMessage({id: 'lastLoginDate'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'lastLoginDate' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: (params) => { | |||
@@ -170,7 +170,7 @@ const ManageOrgUserPage = () => { | |||
{ | |||
id: 'lastApply', | |||
field: 'lastApply', | |||
headerName: getHeader(intl.formatMessage({id: 'lastSubmissionDate'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'lastSubmissionDate' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
valueGetter: () => { | |||
@@ -180,7 +180,7 @@ const ManageOrgUserPage = () => { | |||
{ | |||
field: 'actions', | |||
type: 'actions', | |||
headerName: getHeader(intl.formatMessage({id: 'status'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'status' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
cellClassName: 'actions', | |||
@@ -192,7 +192,7 @@ const ManageOrgUserPage = () => { | |||
id: 'primaryUser', | |||
field: 'primaryUser', | |||
type: 'bool', | |||
headerName: getHeader(intl.formatMessage({id: 'primary'})), | |||
headerName: getHeader(intl.formatMessage({ id: 'primary' })), | |||
width: isMdOrLg ? 'auto' : 160, | |||
flex: isMdOrLg ? 1 : undefined, | |||
renderCell: (params) => { | |||
@@ -204,7 +204,16 @@ const ManageOrgUserPage = () => { | |||
<Checkbox | |||
onClick={() => { | |||
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); | |||
setIsWarningPopUp(true); | |||
}} | |||
@@ -222,7 +231,7 @@ const ManageOrgUserPage = () => { | |||
<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' }}}> | |||
<Typography ml={15} color='#FFF' variant="h4" sx={{ display: { xs: 'none', sm: 'none', md: 'block' } }}> | |||
<FormattedMessage id="companyOrUserRecord" /> | |||
</Typography> | |||
</Stack> | |||
@@ -20,6 +20,7 @@ const RegisterCustom = () => { | |||
const [isPopUp, setIsPopUp] = React.useState(false); | |||
const intl = useIntl(); | |||
const { locale } = intl; | |||
const registerWithIAmSmart = () => { | |||
setIsPopUp(true); | |||
@@ -41,7 +42,7 @@ const RegisterCustom = () => { | |||
+"&source=" + getBowserType() | |||
+"&redirectURI="+encodeURIComponent(callbackUrl) | |||
+"&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=" | |||
+"&brokerPage=false" | |||
window.location.assign(url); | |||
@@ -55,7 +56,7 @@ const RegisterCustom = () => { | |||
+"&source=" + getBowserType() | |||
+"&redirectURI="+encodeURIComponent(callbackUrl) | |||
+"&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=" | |||
+"&brokerPage=true" | |||
window.location.assign(url); | |||
@@ -80,7 +81,7 @@ const RegisterCustom = () => { | |||
<Box alignItems="center"> | |||
<Grid container> | |||
<Grid item xs={12} md={12}> | |||
<Typography mt={4} variant="h2"> | |||
<Typography mt={4} variant="h3"> | |||
<FormattedMessage id="registerTitle1"/> | |||
<strong style={{ color: '#FF5733' }}> | |||
{" " + intl.formatMessage({id: 'registerTitle2'}) + " "} | |||
@@ -98,14 +99,15 @@ const RegisterCustom = () => { | |||
<Typography mb={4} variant="h3"> | |||
<FormattedMessage id="personalUser"/> | |||
</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} > | |||
<Typography textAlign='justify' variant="body1" display="block" gutterBottom> | |||
你可點擊「智方便」按鈕,系統會自動輸入個人資料,或自行輸入個人資料,以即時啟動憲報刊登公告帳戶。 | |||
<br />如欲使用「智方便」提供個人資料,請先下載「智方便」流動應用程式並登記成為「智方便」用戶。 | |||
<div dangerouslySetInnerHTML={{ __html: intl.formatMessage({id: 'MSG.registerIAmSmart'}) }} /> | |||
</Typography> | |||
<Link href="https://www.iamsmart.gov.hk/tc/"> | |||
<FormattedMessage id="learnMore"/> | |||
@@ -121,8 +123,7 @@ const RegisterCustom = () => { | |||
</Typography></Button> | |||
<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> | |||
</Grid> | |||
<Grid item xs={12} md={6} sx={{ borderLeft: 1, borderColor: 'grey.500' }}> | |||
@@ -133,8 +134,7 @@ const RegisterCustom = () => { | |||
<FormattedMessage id="registerNewBusinessUser"/> | |||
</Typography></Button> | |||
<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> | |||
</Grid> | |||
</Grid> | |||
@@ -205,7 +205,7 @@ const AuthLoginCustom = () => { | |||
+ "&source=" + getBowserType() | |||
+ "&redirectURI=" + encodeURIComponent(callbackUrl) | |||
+ "&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=" | |||
+ "&brokerPage=false" | |||
window.location=url; | |||
@@ -237,7 +237,7 @@ const AuthLoginCustom = () => { | |||
+ "&source=" + getBowserType() | |||
+ "&redirectURI=" + encodeURIComponent(callbackUrl) | |||
+ "&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=" | |||
+ "&brokerPage=true" | |||
window.location=url; | |||
@@ -361,7 +361,7 @@ const AuthLoginCustom = () => { | |||
<Grid container> | |||
<Grid item xs={12}> | |||
<Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}> | |||
<Button onClick={() => getQRWithIAmSmart()} color="iAmSmart" fullWidth size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}> | |||
<Button onClick={() => getQRWithIAmSmart()} sx={{textTransform: 'none'}} color="iAmSmart" fullWidth size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}> | |||
<Typography variant="h5"> | |||
<FormattedMessage id="iAmSmartLogin"/> | |||
</Typography> | |||
@@ -110,7 +110,7 @@ const CustomFormWizard = (props) => { | |||
useEffect(() => { | |||
changePassword(''); | |||
if(captchaImg=="") | |||
if (captchaImg == "") | |||
onCaptchaChange(); | |||
}, []); | |||
@@ -171,7 +171,7 @@ const CustomFormWizard = (props) => { | |||
const onCaptchaChange = () => { | |||
HttpUtils.post({ | |||
url: POST_CAPTCHA, | |||
params: { width: 130, height: 40, captcha: captchaImg}, | |||
params: { width: 130, height: 40, captcha: captchaImg }, | |||
onSuccess: (responseData) => { | |||
props.setBase64Url(responseData.base64Url) | |||
localStorage.setItem("base64Url", responseData.base64Url); | |||
@@ -300,7 +300,7 @@ const CustomFormWizard = (props) => { | |||
useEffect(() => { | |||
props.step == 2 ? _onSubmit() : null; | |||
if(captchaImg=="") | |||
if (captchaImg == "") | |||
onCaptchaChange(); | |||
checkDataField(values) | |||
}, [props.step]) | |||
@@ -309,7 +309,7 @@ const CustomFormWizard = (props) => { | |||
const _onSubmit = () => { | |||
setLoding(true); | |||
values.idDocType = selectedIdDocType.type | |||
values.address4 = selectedAddress4==null?"":selectedAddress4.key | |||
values.address4 = selectedAddress4 == null ? "" : selectedAddress4.key | |||
values.address5 = selectedAddress5.key | |||
// console.log(values) | |||
const userAddress = { | |||
@@ -383,7 +383,7 @@ const CustomFormWizard = (props) => { | |||
}) | |||
.then(( | |||
// response | |||
) => { | |||
) => { | |||
// console.log(response) | |||
setCheckUpload(true) | |||
setLoding(false); | |||
@@ -551,27 +551,27 @@ const CustomFormWizard = (props) => { | |||
captchaField: '' | |||
}), | |||
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; | |||
var pattern_HKIDv1 = /^[A-Z]{1}[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位數字'), | |||
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位數字'), | |||
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 } }}> | |||
<Button variant="outlined" type="reset" onClick={handleReset.bind(null, formik.resetForm)} sx={{ height: '40px' }}> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="reset"/> | |||
<FormattedMessage id="reset" /> | |||
</Typography> | |||
</Button> | |||
<div style={{ borderBottom: "3px solid #1A4399", width: "100%", margin_right: "15px" }}> | |||
<Typography display="inline" variant="h3" sx={{ color: '#1A4399' }}> | |||
<FormattedMessage id="becomeNewPersonalUser"/> | |||
<FormattedMessage id="becomeNewPersonalUser" /> | |||
</Typography> | |||
</div> | |||
<Typography mt={0.25} variant="h6" sx={{ color: '#f10000' }}> | |||
<FormattedMessage id="requireString"/> | |||
<FormattedMessage id="requireString" /> | |||
</Typography> | |||
<Typography mt={0.25} variant="h4" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="yourLoginInformation"/> | |||
<FormattedMessage id="yourLoginInformation" /> | |||
</Typography> | |||
</Stack> | |||
</Grid> | |||
@@ -683,7 +683,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1}> | |||
<InputLabel htmlFor="username-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userLoginName"/> | |||
<FormattedMessage id="userLoginName" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
{/*<Button*/} | |||
{/* variant="contained"*/} | |||
@@ -703,7 +703,7 @@ const CustomFormWizard = (props) => { | |||
props.setUsername(e.target.value) | |||
formik.handleChange(e) | |||
}} | |||
placeholder={intl.formatMessage({id: 'userLoginName'})} | |||
placeholder={intl.formatMessage({ id: 'userLoginName' })} | |||
fullWidth | |||
error={Boolean((formik.touched.username && formik.errors.username) || checkUsername)} | |||
onBlur={formik.handleBlur} | |||
@@ -722,7 +722,7 @@ const CustomFormWizard = (props) => { | |||
)} | |||
{checkUsername && ( | |||
<FormHelperText error id="helper-text-username-signup"> | |||
<FormattedMessage id="usernameTaken"/> | |||
<FormattedMessage id="usernameTaken" /> | |||
</FormHelperText> | |||
)} | |||
</Stack> | |||
@@ -734,7 +734,7 @@ const CustomFormWizard = (props) => { | |||
<Stack direction="row" justifyContent="space-between"> | |||
<InputLabel htmlFor="password-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userPassword"/> | |||
<FormattedMessage id="userPassword" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -763,7 +763,7 @@ const CustomFormWizard = (props) => { | |||
</IconButton> | |||
</InputAdornment> | |||
} | |||
placeholder={intl.formatMessage({id: 'userPassword'})} | |||
placeholder={intl.formatMessage({ id: 'userPassword' })} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
onKeyDown: (e) => { | |||
@@ -786,7 +786,7 @@ const CustomFormWizard = (props) => { | |||
</Grid> | |||
<Grid item> | |||
<Typography variant="subtitle1"> | |||
<FormattedMessage id={level ? level?.label : "pwWeak" }/> | |||
<FormattedMessage id={level ? level?.label : "pwWeak"} /> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
@@ -796,7 +796,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1}> | |||
<InputLabel htmlFor="confirmPassword-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="confirmPassword"/> | |||
<FormattedMessage id="confirmPassword" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -830,7 +830,7 @@ const CustomFormWizard = (props) => { | |||
</IconButton> | |||
</InputAdornment> | |||
} | |||
placeholder={intl.formatMessage({id: 'confirmPassword'})} | |||
placeholder={intl.formatMessage({ id: 'confirmPassword' })} | |||
fullWidth | |||
error={Boolean(formik.touched.confirmPassword && formik.errors.confirmPassword)} | |||
/> | |||
@@ -841,12 +841,12 @@ const CustomFormWizard = (props) => { | |||
)} | |||
</Stack> | |||
<Grid container spacing={2} alignItems="center"> | |||
<Grid item sx={{mt:1}}> | |||
<Grid item sx={{ mt: 1 }}> | |||
<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> | |||
</Grid> | |||
</Grid> | |||
@@ -856,7 +856,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} mt={1} mb={1}> | |||
<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' }}> | |||
<FormattedMessage id="yourPersonalInformation"/> | |||
<FormattedMessage id="yourPersonalInformation" /> | |||
</Typography> | |||
{/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | |||
Already have an account? | |||
@@ -868,7 +868,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1}> | |||
<InputLabel htmlFor="idDocType-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userIdDoc"/> | |||
<FormattedMessage id="userIdDoc" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -892,9 +892,9 @@ const CustomFormWizard = (props) => { | |||
onBlur={formik.handleBlur} | |||
filterOptions={(options) => options} | |||
inputValue={selectedIdDocInputType} | |||
getOptionLabel={(option) => option.label? intl.formatMessage({ id: option.label }) : ""} | |||
getOptionLabel={(option) => option.label ? intl.formatMessage({ id: option.label }) : ""} | |||
onChange={(event, newValue) => { | |||
if (newValue != null ) { | |||
if (newValue != null) { | |||
setSelectedIdDocInputType(intl.formatMessage({ id: newValue.label })); | |||
setSelectedIdDocType(newValue); | |||
if (newValue.type !== "HKID") { | |||
@@ -907,13 +907,13 @@ const CustomFormWizard = (props) => { | |||
sx={{ "#address4-combo": { padding: "0px 0px 0px 0px" }, "& .MuiAutocomplete-endAdornment": { top: "auto" }, }} | |||
renderInput={(params) => <TextField | |||
{...params} | |||
placeholder={intl.formatMessage({id: 'idDocType'})} | |||
placeholder={intl.formatMessage({ id: 'idDocType' })} | |||
/>} | |||
/> | |||
{formik.touched.idDocType && ( | |||
selectedIdDocType === null ? | |||
<FormHelperText error id="helper-text-idDocType-signup"> | |||
<FormattedMessage id="requireIdDocType"/> | |||
<FormattedMessage id="requireIdDocType" /> | |||
</FormHelperText> : '' | |||
)} | |||
</Stack> | |||
@@ -941,7 +941,7 @@ const CustomFormWizard = (props) => { | |||
} | |||
} | |||
}} | |||
placeholder={intl.formatMessage({id: 'idDocNumber'})} | |||
placeholder={intl.formatMessage({ id: 'idDocNumber' })} | |||
fullWidth | |||
sx={{ mr: 1 }} | |||
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 | |||
sx={{ mr: 1 }} | |||
error={Boolean(formik.touched.idNo && formik.errors.idNo)} | |||
@@ -1049,7 +1049,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1}> | |||
<InputLabel htmlFor="enName-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userEnglishName"/> | |||
<FormattedMessage id="userEnglishName" /> | |||
{selectedIdDocType.type === "CNID" ? "" : <span style={{ color: '#f10000' }}>*</span>} | |||
</Typography> | |||
</InputLabel> | |||
@@ -1059,7 +1059,7 @@ const CustomFormWizard = (props) => { | |||
value={formik.values.enName} | |||
name="enName" | |||
onChange={formik.handleChange} | |||
placeholder={intl.formatMessage({id: 'sameAsYourIdDoc'})} | |||
placeholder={intl.formatMessage({ id: 'sameAsYourIdDoc' })} | |||
fullWidth | |||
error={Boolean(formik.touched.enName && formik.errors.enName && selectedIdDocType.type !== "CNID")} | |||
onBlur={formik.handleBlur} | |||
@@ -1082,7 +1082,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1}> | |||
<InputLabel htmlFor="chName-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userChineseName"/> | |||
<FormattedMessage id="userChineseName" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -1094,7 +1094,7 @@ const CustomFormWizard = (props) => { | |||
value={formik.values.chName.trim()} | |||
name="chName" | |||
onChange={formik.handleChange} | |||
placeholder={intl.formatMessage({id: 'sameAsYourIdDoc'})} | |||
placeholder={intl.formatMessage({ id: 'sameAsYourIdDoc' })} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
maxLength: 6, | |||
@@ -1116,7 +1116,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1}> | |||
<InputLabel htmlFor="address1-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="formAddress"/> | |||
<FormattedMessage id="formAddress" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -1127,7 +1127,7 @@ const CustomFormWizard = (props) => { | |||
value={formik.values.address1} | |||
name="address1" | |||
onChange={formik.handleChange} | |||
placeholder={intl.formatMessage({id: 'addressLine1'})} | |||
placeholder={intl.formatMessage({ id: 'addressLine1' })} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
onKeyDown: (e) => { | |||
@@ -1144,7 +1144,7 @@ const CustomFormWizard = (props) => { | |||
value={formik.values.address2} | |||
name="address2" | |||
onChange={formik.handleChange} | |||
placeholder={intl.formatMessage({id: 'addressLine2'})} | |||
placeholder={intl.formatMessage({ id: 'addressLine2' })} | |||
inputProps={{ | |||
onKeyDown: (e) => { | |||
if (e.key === 'Enter') { | |||
@@ -1160,7 +1160,7 @@ const CustomFormWizard = (props) => { | |||
value={formik.values.address3} | |||
name="address3" | |||
onChange={formik.handleChange} | |||
placeholder={intl.formatMessage({id: 'addressLine3'})} | |||
placeholder={intl.formatMessage({ id: 'addressLine3' })} | |||
inputProps={{ | |||
onKeyDown: (e) => { | |||
if (e.key === 'Enter') { | |||
@@ -1175,14 +1175,16 @@ const CustomFormWizard = (props) => { | |||
value={selectedAddress4} | |||
options={ComboData.district} | |||
disabled={checkCountry} | |||
getOptionLabel={(option) => option.type? intl.formatMessage({ id: option.type }) : ""} | |||
getOptionLabel={(option) => option.type ? intl.formatMessage({ id: option.type }) : ""} | |||
onChange={(event, newValue) => { | |||
setSelectedAddress4(newValue); | |||
}} | |||
sx={{ "& .MuiInputBase-root": { height: "41px" }, | |||
sx={{ | |||
"& .MuiInputBase-root": { height: "41px" }, | |||
"#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 | |||
@@ -1190,7 +1192,7 @@ const CustomFormWizard = (props) => { | |||
id="address5-combo" | |||
value={selectedAddress5} | |||
options={ComboData.country} | |||
getOptionLabel={(option) => option.type? intl.formatMessage({ id: option.type }) : ""} | |||
getOptionLabel={(option) => option.type ? intl.formatMessage({ id: option.type }) : ""} | |||
onChange={(event, newValue) => { | |||
if (newValue !== null) { | |||
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" }, }} | |||
renderInput={(params) => <TextField {...params} placeholder={intl.formatMessage({id: 'regionOrCountry'})} />} | |||
renderInput={(params) => <TextField {...params} placeholder={intl.formatMessage({ id: 'regionOrCountry' })} />} | |||
/> | |||
{formik.touched.address1 && formik.errors.address1 && ( | |||
<FormHelperText error id="helper-text-address1-signup"> | |||
@@ -1229,7 +1231,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} mt={1} mb={1}> | |||
<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' }}> | |||
<FormattedMessage id="yourContact"/> | |||
<FormattedMessage id="yourContact" /> | |||
</Typography> | |||
</Stack> | |||
</Grid> | |||
@@ -1239,7 +1241,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1} sx={{ mr: { md: 1 }, mb: 1 }}> | |||
<InputLabel htmlFor="email-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userContactEmail"/> | |||
<FormattedMessage id="userContactEmail" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -1251,7 +1253,7 @@ const CustomFormWizard = (props) => { | |||
value={formik.values.email.trim()} | |||
name="email" | |||
onChange={formik.handleChange} | |||
placeholder={intl.formatMessage({id: 'userContactEmail'})} | |||
placeholder={intl.formatMessage({ id: 'userContactEmail' })} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
onKeyDown: (e) => { | |||
@@ -1268,7 +1270,7 @@ const CustomFormWizard = (props) => { | |||
)} | |||
{checkEmail && ( | |||
<FormHelperText error id="helper-text-email-signup"> | |||
<FormattedMessage id="emailUsed"/> | |||
<FormattedMessage id="emailUsed" /> | |||
</FormHelperText> | |||
)} | |||
</Stack> | |||
@@ -1277,7 +1279,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1} > | |||
<InputLabel htmlFor="emailConfirm-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userContactEmail"/> | |||
<FormattedMessage id="userContactEmail" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -1290,7 +1292,7 @@ const CustomFormWizard = (props) => { | |||
name="emailConfirm" | |||
// onBlur={formik.handleBlur} | |||
onChange={formik.handleChange} | |||
placeholder={intl.formatMessage({id: 'confirmEmail'})} | |||
placeholder={intl.formatMessage({ id: 'confirmEmail' })} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
onKeyDown: (e) => { | |||
@@ -1317,7 +1319,7 @@ const CustomFormWizard = (props) => { | |||
<Stack direction="column" spacing={1} sx={{ mr: { md: 1 }, mb: 1 }}> | |||
<InputLabel htmlFor="phone-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userContactNumber"/> | |||
<FormattedMessage id="userContactNumber" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</InputLabel> | |||
@@ -1336,7 +1338,7 @@ const CustomFormWizard = (props) => { | |||
} | |||
formik.setFieldValue("phoneCountryCode", value); | |||
}} | |||
placeholder={intl.formatMessage({id: 'dialingCode'})} | |||
placeholder={intl.formatMessage({ id: 'dialingCode' })} | |||
error={Boolean(formik.touched.phone && formik.errors.phone)} | |||
onBlur={formik.handleBlur} | |||
endAdornment={<InputAdornment position="end">-</InputAdornment>} | |||
@@ -1348,7 +1350,7 @@ const CustomFormWizard = (props) => { | |||
} | |||
}, | |||
}} | |||
sx={{ width: '33%', mr:1}} | |||
sx={{ width: '33%', mr: 1 }} | |||
/> | |||
<OutlinedInput | |||
id="phone-login" | |||
@@ -1364,7 +1366,7 @@ const CustomFormWizard = (props) => { | |||
} | |||
formik.setFieldValue("phone", value); | |||
}} | |||
placeholder={intl.formatMessage({id: 'userContactNumber'})} | |||
placeholder={intl.formatMessage({ id: 'userContactNumber' })} | |||
error={Boolean(formik.touched.phone && formik.errors.phone)} | |||
onBlur={formik.handleBlur} | |||
inputProps={{ | |||
@@ -1393,7 +1395,7 @@ const CustomFormWizard = (props) => { | |||
<Stack spacing={1} direction="column"> | |||
<InputLabel htmlFor="fax-signup"> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="userFaxNumber"/> | |||
<FormattedMessage id="userFaxNumber" /> | |||
</Typography> | |||
</InputLabel> | |||
<Stack direction="row"> | |||
@@ -1411,7 +1413,7 @@ const CustomFormWizard = (props) => { | |||
} | |||
formik.setFieldValue("faxCountryCode", value); | |||
}} | |||
placeholder={intl.formatMessage({id: 'dialingCode'})} | |||
placeholder={intl.formatMessage({ id: 'dialingCode' })} | |||
onBlur={formik.handleBlur} | |||
endAdornment={<InputAdornment position="end">-</InputAdornment>} | |||
inputProps={{ | |||
@@ -1422,7 +1424,7 @@ const CustomFormWizard = (props) => { | |||
} | |||
}, | |||
}} | |||
sx={{ width: '33%' , mr: 1}} | |||
sx={{ width: '33%', mr: 1 }} | |||
/> | |||
<OutlinedInput | |||
id="fax-login" | |||
@@ -1438,7 +1440,7 @@ const CustomFormWizard = (props) => { | |||
} | |||
formik.setFieldValue("fax", value); | |||
}} | |||
placeholder={intl.formatMessage({id: 'userFaxNumber'})} | |||
placeholder={intl.formatMessage({ id: 'userFaxNumber' })} | |||
inputProps={{ | |||
maxLength: 8, | |||
onKeyDown: (e) => { | |||
@@ -1461,28 +1463,28 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={12}> | |||
<Stack spacing={1} direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="userIdDoc"/> | |||
<FormattedMessage id="userIdDoc" /> | |||
<span style={{ color: '#f10000' }}>*</span></Typography> | |||
<Typography display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="pleaseUploadIdDoc"/> | |||
<FormattedMessage id="pleaseUploadIdDoc" /> | |||
</Typography> | |||
<Typography display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="pleaseUploadIdDocSubTitle"/> | |||
<FormattedMessage id="pleaseUploadIdDocSubTitle" /> | |||
</Typography> | |||
<Stack mt={1} direction="row" justifyContent="flex-start" alignItems="center" spacing={2}> | |||
<ThemeProvider theme={PNSPS_LONG_BUTTON_THEME}> | |||
<Button variant="contained" component="label" sx={{ height: '40px' }}> | |||
<FormattedMessage id="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> | |||
{/*<Typography xs={12} sm={9} md={3} display="inline" variant="subtitle1" sx={{ color: 'primary.primary' }}>如: 香港身份證; 護照; 中國內地身份證等</Typography>*/} | |||
</Stack> | |||
@@ -1501,7 +1503,7 @@ const CustomFormWizard = (props) => { | |||
<Grid container> | |||
<Grid item xs={12} md={12}> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="termsAndCondition"/> | |||
<FormattedMessage id="termsAndCondition" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
</Grid> | |||
@@ -1526,7 +1528,7 @@ const CustomFormWizard = (props) => { | |||
size="small" | |||
/> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="acceptTerms"/> | |||
<FormattedMessage id="acceptTerms" /> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
@@ -1542,7 +1544,7 @@ const CustomFormWizard = (props) => { | |||
size="small" | |||
/> | |||
<Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="rejectTerms"/> | |||
<FormattedMessage id="rejectTerms" /> | |||
</Typography> | |||
</Grid> | |||
</Grid> | |||
@@ -1556,7 +1558,7 @@ const CustomFormWizard = (props) => { | |||
<Grid container> | |||
<Stack direction="column"> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="verify"/> | |||
<FormattedMessage id="verify" /> | |||
<span style={{ color: '#f10000' }}>*</span> | |||
</Typography> | |||
<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 } }}> | |||
<div style={{ borderBottom: "3px solid #1A4399", width: "100%", margin_right: "15px" }}> | |||
<Typography display="inline" variant="h3" sx={{ color: '#1A4399' }}> | |||
<FormattedMessage id="becomeNewPersonalUser"/> | |||
<FormattedMessage id="becomeNewPersonalUser" /> | |||
</Typography> | |||
</div> | |||
{/* <Typography mt={0.25} variant="h6" sx={{ fontSize: 12,color: '#f10000'}}>註有*的項目必須輸入資料</Typography> */} | |||
<Typography mt={0.25} variant="h4" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="yourLoginInformation"/> | |||
<FormattedMessage id="yourLoginInformation" /> | |||
</Typography> | |||
{/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | |||
Already have an account? | |||
@@ -1621,7 +1623,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} > | |||
<Stack spacing={2} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="userLoginName"/>: | |||
<FormattedMessage id="userLoginName" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" id="preview-username-login"> | |||
{formik.values.username} | |||
@@ -1631,7 +1633,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} mt={1} mb={1}> | |||
<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' }}> | |||
<FormattedMessage id="yourPersonalInformation"/> | |||
<FormattedMessage id="yourPersonalInformation" /> | |||
</Typography> | |||
{/* <Typography component={Link} to="/login" variant="body1" sx={{ textDecoration: 'none' }} color="primary"> | |||
Already have an account? | |||
@@ -1641,7 +1643,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={12} > | |||
<Stack spacing={1}> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="userIdDoc"/> | |||
<FormattedMessage id="userIdDoc" /> | |||
</Typography> | |||
</Stack> | |||
</Grid> | |||
@@ -1649,17 +1651,18 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={6} > | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="idDocType"/>: | |||
<FormattedMessage id="idDocType" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" name="preview-idDocType"> | |||
{selectedIdDocType.label} | |||
{intl.formatMessage({ id: selectedIdDocType?.label??" " })} | |||
</Typography> | |||
</Stack> | |||
</Grid> | |||
<Grid item xs={12} md={6}> | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="idDocNumber"/>: | |||
<FormattedMessage id="idDocNumber" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" id="idNo-login"> | |||
{formik.values.idNo} {selectedIdDocType.type == "HKID" ? '(' + formik.values.checkDigit + ')' : null} | |||
@@ -1670,7 +1673,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={6}> | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="userEnglishName"/>: | |||
<FormattedMessage id="userEnglishName" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" id="preview-enName-signup"> | |||
{formik.values.enName} | |||
@@ -1680,7 +1683,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={6}> | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="userChineseName"/>: | |||
<FormattedMessage id="userChineseName" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" id="preview-chName-signup"> | |||
{formik.values.chName} | |||
@@ -1690,7 +1693,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12}> | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="formAddress"/>: | |||
<FormattedMessage id="formAddress" />: | |||
</Typography> | |||
<Stack spacing={1} direction="column"> | |||
<Typography variant="pnspsFormHeader" id="preview-address1-signup"> | |||
@@ -1709,19 +1712,19 @@ const CustomFormWizard = (props) => { | |||
{selectedAddress5.label === "hongKong" ? | |||
<Stack direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]} id="preview-address4-signup"> | |||
<FormattedMessage id="region"/>: | |||
<FormattedMessage id="region" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader"> | |||
{!selectedAddress4? "" : intl.formatMessage({id: selectedAddress4.type})} | |||
{!selectedAddress4 ? "" : intl.formatMessage({ id: selectedAddress4.type })} | |||
</Typography> | |||
</Stack> | |||
: null} | |||
<Stack direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]} id="preview-address5-signup"> | |||
<FormattedMessage id="regionOrCountry"/>: | |||
<FormattedMessage id="regionOrCountry" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader"> | |||
{intl.formatMessage({id: selectedAddress5.type})} | |||
{intl.formatMessage({ id: selectedAddress5.type })} | |||
</Typography> | |||
</Stack> | |||
</Stack> | |||
@@ -1730,14 +1733,14 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} mt={1} mb={1}> | |||
<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' }}> | |||
<FormattedMessage id="yourContact"/> | |||
<FormattedMessage id="yourContact" /> | |||
</Typography> | |||
</Stack> | |||
</Grid> | |||
<Grid item xs={12} md={12}> | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="userContactEmail"/>: | |||
<FormattedMessage id="userContactEmail" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" id="preview-email-signup"> | |||
{formik.values.email} | |||
@@ -1747,7 +1750,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={6}> | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="userContactNumber"/>: | |||
<FormattedMessage id="userContactNumber" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" id="preview-phone-signup"> | |||
+{formik.values.phoneCountryCode} {formik.values.phone} | |||
@@ -1758,7 +1761,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={6}> | |||
<Stack spacing={1} direction="row"> | |||
<Typography variant="pnspsFormHeader" color={theme.palette.grey[600]}> | |||
<FormattedMessage id="userFaxNumber"/>: | |||
<FormattedMessage id="userFaxNumber" />: | |||
</Typography> | |||
<Typography variant="pnspsFormHeader" id="preview-fax-signup"> | |||
+{formik.values.faxCountryCode} {formik.values.fax} | |||
@@ -1771,7 +1774,7 @@ const CustomFormWizard = (props) => { | |||
<Grid item xs={12} md={12}> | |||
<Stack spacing={1} direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}> | |||
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary' }}> | |||
<FormattedMessage id="userIdDoc"/> | |||
<FormattedMessage id="userIdDoc" /> | |||
</Typography> | |||
{fileList != 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}> | |||
<CheckCircleOutlineIcon color="success" sx={{ width: "200px", height: "200px" }} /> | |||
<Typography display="inline" variant="h4"> | |||
<FormattedMessage id="registerSubmitted"/> | |||
<FormattedMessage id="registerSubmitted" /> | |||
</Typography> | |||
<Typography display="inline" variant="h4"> | |||
<FormattedMessage id="emailSent"/> | |||
<FormattedMessage id="emailSent" /> | |||
</Typography> | |||
<Button variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="backToLogin"/> | |||
<FormattedMessage id="backToLogin" /> | |||
</Typography></Button> | |||
</Stack> | |||
: | |||
@@ -1812,7 +1815,7 @@ const CustomFormWizard = (props) => { | |||
<FormattedMessage id="registerFail" /> | |||
</Typography> | |||
<Button color="error" variant="outlined" component={Link} to="/login" ><Typography variant="pnspsFormHeader"> | |||
<FormattedMessage id="backToLogin"/> | |||
<FormattedMessage id="backToLogin" /> | |||
</Typography></Button> | |||
</Stack> | |||
} | |||
@@ -29,6 +29,23 @@ | |||
"noMoreThen40Words": "Must not exceed 40 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", | |||
"registerTitle2": "Gazette Notice", | |||
"registerTitle3": "Publisher now", | |||
@@ -53,7 +70,7 @@ | |||
"publicNoticePaymentProofDoneAndPaid": "Public Notice: Proofreading Completed and Payment", | |||
"publicNoticePaymentProofComment": "Public Notice: Proofreading Reply", | |||
"publicNoticePaymentProofInfo": "Public Notice: Proofreading Information", | |||
"proofRecord": "Proof Record", | |||
"proofRecord": "Proof Records", | |||
"onlinePaymentHistory": "Online Payment History", | |||
"setting": "Settings", | |||
"companyOrUserRecord": "Company/Institutional User Records", | |||
@@ -62,7 +79,7 @@ | |||
"login": "Login", | |||
"logout": "Logout", | |||
"iAmSmartLogin": "iAM Smart Login", | |||
"continueWithIAmSmart": "Continue with iAmSmart", | |||
"continueWithIAmSmart": "Continue with iAM Smart", | |||
"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:", | |||
"iAmSmartAutoFillIn": "Use \"iAmSmart\" to automatically fill in", | |||
@@ -96,20 +113,20 @@ | |||
"user": "User", | |||
"personalUser": "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", | |||
"userChineseName": "Chinese Name", | |||
"userEnglishName": "English Name", | |||
"userContactName": "Name", | |||
"userRequireChineseName": "Please enter your Chinese name", | |||
"userRequireEnglishName": "Please enter your English name", | |||
"userRequireName": "Please enter your name", | |||
"userRequireName": "Name is required.", | |||
"userContactEmail": "Email", | |||
"confirmEmail": "Confirm Email", | |||
"requireEmail": "Please enter your email", | |||
"requireEmail": "Email address is required.", | |||
"validEmailFormat": "Please enter a valid email", | |||
"validSameEmail": "Please enter same email address", | |||
"emailUsed": "This email has been registered, please use another email", | |||
@@ -117,7 +134,7 @@ | |||
"userContactNumber": "Contact Number", | |||
"contactFaxNumber": "Contact Fax", | |||
"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", | |||
"require8Number": "Please enter an 8-digit number", | |||
"requireAtLeast8Number": "Please enter at least 8 digits", | |||
@@ -135,9 +152,9 @@ | |||
"personalInformation": "Personal Information", | |||
"yourPersonalInformation": "Your Personal 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", | |||
"finishSubmission": "Finish Submission", | |||
"reset": "Reset", | |||
@@ -199,6 +216,8 @@ | |||
"requireUsername": "Please enter user name", | |||
"requirePassword": "Please enter password", | |||
"regionOrCountry": "Country/Region", | |||
"pleaseFillInCountry": "Please enter the Country/Region", | |||
"pleaseFillInDistrict": "Please enter the District", | |||
"hongKong": "Hong Kong", | |||
"mainland": "Mainland China", | |||
"macau": "Macau", | |||
@@ -362,6 +381,8 @@ | |||
"pendingFor": "Pending approval", | |||
"active": "Active", | |||
"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", | |||
"applicationSubheading": "Provide your advertisement content with formatting, proofreading and pricing.", | |||
@@ -372,7 +393,7 @@ | |||
"msgDetails": "Message Details", | |||
"userDetail": "User Details", | |||
"userProfile": "User Profile", | |||
"userProfile": "My Profile", | |||
"primaryUser": "Primary User", | |||
"resetAndBack": "Reset & Back", | |||
"edit": "Edit", | |||
@@ -391,8 +412,8 @@ | |||
"loading": "Loading...", | |||
"ok": "Ok", | |||
"organizationProfile": "Organization Profile", | |||
"organizationDetails": "Organization Details", | |||
"organizationProfile": "Organisation Profile", | |||
"organizationDetails": "Organisation Details", | |||
"brNo": "BR No.", | |||
"creditorAccount": "Creditor account", | |||
"nameEng": "Name (Eng)", | |||
@@ -29,6 +29,21 @@ | |||
"noMoreThen40Words": "不得超过 40 个字符", | |||
"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": "立即成为", | |||
"registerTitle2": "宪报刊登公告", | |||
"registerTitle3": "用户", | |||
@@ -195,6 +210,8 @@ | |||
"requirePassword": "请输入密码", | |||
"region": "区域 (只适用于香港)", | |||
"regionOrCountry": "国家/地区", | |||
"pleaseFillInCountry": "请输入国家/地区", | |||
"pleaseFillInDistrict": "请输入地区", | |||
"hongKong": "香港", | |||
"mainland": "内地", | |||
"macau": "澳门", | |||
@@ -357,7 +374,9 @@ | |||
"unlock": "解锁", | |||
"pendingFor": "待批核", | |||
"active": "生效中", | |||
"primary": "源自", | |||
"primary": "主要账户", | |||
"MSG.setPrimay": "是否确定设定 “{username}” 为主要账户吗?", | |||
"MSG.revokePrimay": "是否确定要撤销 “{username}” 为主要用户吗?", | |||
"submitApplication": "提交公共启事申请", | |||
"applicationSubheading": "提供你的启事内容作排版,校对及计价。", | |||
@@ -368,7 +387,7 @@ | |||
"msgDetails": "消息详情", | |||
"userDetail": "用户详细信息", | |||
"userProfile": "用户个人资料", | |||
"userProfile": "我的个人资料", | |||
"primaryUser": "主要用户", | |||
"resetAndBack": "重置并返回", | |||
"edit": "编辑", | |||
@@ -29,6 +29,21 @@ | |||
"noMoreThen40Words": "不得超過 40 個字符", | |||
"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": "立即成為", | |||
"registerTitle2": "憲報刊登公告", | |||
"registerTitle3": "用戶", | |||
@@ -200,6 +215,8 @@ | |||
"requirePassword": "請輸入密碼", | |||
"region": "區域 (只適用於香港)", | |||
"regionOrCountry": "國家/地區", | |||
"pleaseFillInCountry": "請輸入國家/地區", | |||
"pleaseFillInDistrict": "請輸入地區", | |||
"hongKong": "香港", | |||
"mainland": "內地", | |||
"macau": "澳門", | |||
@@ -363,6 +380,8 @@ | |||
"pendingFor": "待批核", | |||
"active": "生效中", | |||
"primary": "主要帳戶", | |||
"MSG.setPrimay": "是否確定設定 “{username}” 為主要帳戶嗎?", | |||
"MSG.revokePrimay": "是否確定要撤銷 “{username}” 為主要使用者嗎?", | |||
"submitApplication": "提交公共啟事申請", | |||
"applicationSubheading": "提供你的啟事內容作排版,校對及計價。", | |||
@@ -373,7 +392,7 @@ | |||
"msgDetails": "消息詳情", | |||
"userDetail": "使用者詳細資料", | |||
"userProfile": "使用者個人資料", | |||
"userProfile": "我的個人資料", | |||
"primaryUser": "主要使用者", | |||
"resetAndBack": "重置並返回", | |||
"edit": "編輯", | |||
@@ -2,7 +2,7 @@ import dayjs from 'dayjs'; | |||
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) =>{ | |||