@@ -19,7 +19,7 @@ | |||||
} | } | ||||
#navbar div li{ | #navbar div li{ | ||||
list-style: none; | list-style: none; | ||||
padding: 0 20px; | |||||
padding: 0 1vw; | |||||
position: relative; | position: relative; | ||||
} | } | ||||
#navbar div li a{ | #navbar div li a{ | ||||
@@ -30,6 +30,15 @@ | |||||
color: black; | color: black; | ||||
transition: 0.3s ease-in-out; | transition: 0.3s ease-in-out; | ||||
} | } | ||||
#navbar div li a span{ | |||||
font-size: 1vw !important; | |||||
} | |||||
#navbar div li a svg{ | |||||
font-size: 1vw !important; | |||||
} | |||||
#navbar div li a:hover{ | #navbar div li a:hover{ | ||||
color: #0C489E; | color: #0C489E; | ||||
} | } | ||||
@@ -97,7 +97,7 @@ function Header(props) { | |||||
<Link className="proof" to='/proof/search'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Proof</Typography></Link> | <Link className="proof" to='/proof/search'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Proof</Typography></Link> | ||||
</li> | </li> | ||||
<li> | <li> | ||||
<Link className="paymentTop" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Payment</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /></Link> | |||||
<Link className="paymentTop" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Payment</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1vw' }} /></Link> | |||||
<ul className='dropdown'> | <ul className='dropdown'> | ||||
<li> | <li> | ||||
<Link className="payment" to='/paymentPage/search'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Online Payment Record</Typography></Link> | <Link className="payment" to='/paymentPage/search'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Online Payment Record</Typography></Link> | ||||
@@ -117,7 +117,7 @@ function Header(props) { | |||||
</ul> | </ul> | ||||
</li> | </li> | ||||
<li> | <li> | ||||
<Link className="client" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Client</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /></Link> | |||||
<Link className="client" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Client</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1vw' }} /></Link> | |||||
<ul className='dropdown'> | <ul className='dropdown'> | ||||
<li> | <li> | ||||
<Link className="userSearchview" to='/userSearchview'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>Users (GLD)</Typography></Link> | <Link className="userSearchview" to='/userSearchview'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>Users (GLD)</Typography></Link> | ||||
@@ -138,7 +138,7 @@ function Header(props) { | |||||
</ul> | </ul> | ||||
</li> | </li> | ||||
<li> | <li> | ||||
<Link className="setting" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Settings</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1.0rem' }} /></Link> | |||||
<Link className="setting" ><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 1 }}>Settings</Typography><KeyboardArrowDownIcon sx={{ fontSize: '1vw' }} /></Link> | |||||
<ul className='dropdown'> | <ul className='dropdown'> | ||||
<li> | <li> | ||||
<Link className="userProfileGld" to='/user/profile'><Typography style={{ opacity: 0.9 }} variant={"pnspsHeaderTitle"} sx={{ ml: 2, mt: 1, mb: 1 }}>My 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> | ||||
@@ -89,7 +89,7 @@ const ApplicationDetailCard = ({ formData, }) => { | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={5} lg={5} sx={{ mb: 1, ml: 1 }}> | |||||
<Grid item xs={12} md={5} lg={5} sx={{ mb: 1}}> | |||||
<Grid container alignItems={"left"}> | <Grid container alignItems={"left"}> | ||||
<Grid item xs={12} md={3} lg={3} | <Grid item xs={12} md={3} lg={3} | ||||
sx={{ display: 'flex', alignItems: 'center' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
@@ -36,7 +36,6 @@ const ClientDetailCard = ( | |||||
) => { | ) => { | ||||
// const params = useParams(); | // const params = useParams(); | ||||
const [currentApplicationDetailData, setCurrentApplicationDetailData] = useState({}); | const [currentApplicationDetailData, setCurrentApplicationDetailData] = useState({}); | ||||
const [orgDetailData, setOrgDetailData] = useState({}); | |||||
const [brExpiryDate,setBrExpiryDate] = useState(""); | const [brExpiryDate,setBrExpiryDate] = useState(""); | ||||
const [brNo,setBrNo] = useState(""); | const [brNo,setBrNo] = useState(""); | ||||
const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
@@ -50,40 +49,48 @@ const ClientDetailCard = ( | |||||
//if user data from parent are not null | //if user data from parent are not null | ||||
if (Object.keys(applicationDetailData).length > 0 && applicationDetailData !== undefined) { | if (Object.keys(applicationDetailData).length > 0 && applicationDetailData !== undefined) { | ||||
setCurrentApplicationDetailData(applicationDetailData.userData); | setCurrentApplicationDetailData(applicationDetailData.userData); | ||||
if (!applicationDetailData.orgDetail == null){ | |||||
setOrgDetailData(applicationDetailData.orgDetail.data); | |||||
} | |||||
if (!applicationDetailData.companyName1 == null) { | |||||
setCompanyName(applicationDetailData.companyName); | |||||
} else { | |||||
if (applicationDetailData.orgDetail != null){ | |||||
var orgDetail = applicationDetailData.orgDetail?.data; | |||||
setBrExpiryDate(DateUtils.dateValue(orgDetail?.brExpiryDate)); | |||||
setBrNo(orgDetail?.brNo); | |||||
const companyNameData = { | const companyNameData = { | ||||
enCompanyName: applicationDetailData.userData.enCompanyName, | |||||
chCompanyName: applicationDetailData.userData.chCompanyName | |||||
enCompanyName: orgDetail?.enCompanyName, | |||||
chCompanyName: orgDetail?.chCompanyName | |||||
} | |||||
setCompanyName(companyNameData) | |||||
}else{ | |||||
var userData = applicationDetailData.userData; | |||||
setBrExpiryDate(DateUtils.dateValue(userData?.brExpiryDate)); | |||||
setBrNo(userData?.brNo); | |||||
const companyNameData = { | |||||
enCompanyName: userData?.enCompanyName, | |||||
chCompanyName: userData?.chCompanyName | |||||
} | } | ||||
setCompanyName(companyNameData) | setCompanyName(companyNameData) | ||||
} | } | ||||
setOnReady(true); | |||||
} | } | ||||
}, [applicationDetailData]); | }, [applicationDetailData]); | ||||
useEffect(() => { | |||||
//if state data are ready and assign to different field | |||||
// console.log(currentApplicationDetailData) | |||||
if (Object.keys(currentApplicationDetailData).length > 0) { | |||||
if( currentApplicationDetailData.orgId!=null){ | |||||
if (Object.keys(orgDetailData).length > 0) { | |||||
setBrExpiryDate(DateUtils.dateValue(orgDetailData.brExpiryDate)); | |||||
setBrNo(orgDetailData.brNo); | |||||
setOnReady(true); | |||||
}else{ | |||||
setBrExpiryDate(DateUtils.dateValue(currentApplicationDetailData.brExpiryDate)); | |||||
setBrNo(currentApplicationDetailData.brNo); | |||||
setOnReady(true); | |||||
} | |||||
}else{ | |||||
setOnReady(true); | |||||
} | |||||
} | |||||
}, [currentApplicationDetailData]); | |||||
// useEffect(() => { | |||||
// //if state data are ready and assign to different field | |||||
// // console.log(currentApplicationDetailData) | |||||
// if (Object.keys(currentApplicationDetailData).length > 0) { | |||||
// if( currentApplicationDetailData.orgId!=null){ | |||||
// if (Object.keys(orgDetailData).length > 0) { | |||||
// setBrExpiryDate(DateUtils.dateValue(orgDetailData.brExpiryDate)); | |||||
// setBrNo(orgDetailData.brNo); | |||||
// setOnReady(true); | |||||
// }else{ | |||||
// setBrExpiryDate(DateUtils.dateValue(currentApplicationDetailData.brExpiryDate)); | |||||
// setBrNo(currentApplicationDetailData.brNo); | |||||
// setOnReady(true); | |||||
// } | |||||
// }else{ | |||||
// setOnReady(true); | |||||
// } | |||||
// } | |||||
// }, [currentApplicationDetailData, orgDetailData]); | |||||
useEffect(() => { | useEffect(() => { | ||||
if (brNo != undefined && brNo.length > 0) { | if (brNo != undefined && brNo.length > 0) { | ||||
@@ -142,24 +142,24 @@ const ApplicationDetailCard = ( | |||||
const latestData = {}; | const latestData = {}; | ||||
responseData.forEach(item => { | responseData.forEach(item => { | ||||
const { appId, timeDiff } = item; | |||||
if (latestData[appId] === undefined || timeDiff < latestData[appId].timeDiff) { | |||||
latestData[appId] = item; | |||||
} | |||||
const { appId, timeDiff } = item; | |||||
if (latestData[appId] === undefined || timeDiff < latestData[appId].timeDiff) { | |||||
latestData[appId] = item; | |||||
} | |||||
}); | }); | ||||
const latestDataObjects = Object.values(latestData); | const latestDataObjects = Object.values(latestData); | ||||
const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 || item.status !== "APPR"); | const filteredData = latestDataObjects.filter(item => item.timeDiff > 20 || item.status !== "APPR"); | ||||
const filteredAppIds = filteredData.map(item => item.appId); | const filteredAppIds = filteredData.map(item => item.appId); | ||||
const appIdsNotInData = appIdList.filter(appId => !latestDataObjects.some(item => item.appId === appId)); | const appIdsNotInData = appIdList.filter(appId => !latestDataObjects.some(item => item.appId === appId)); | ||||
const combinedAppIdsArray = [...appIdsNotInData, ...filteredAppIds]; | const combinedAppIdsArray = [...appIdsNotInData, ...filteredAppIds]; | ||||
const readyToPayment = appIdList.every(appId => combinedAppIdsArray.includes(appId)); | const readyToPayment = appIdList.every(appId => combinedAppIdsArray.includes(appId)); | ||||
if (readyToPayment){ | |||||
if (readyToPayment) { | |||||
setIsPopUp(true); | setIsPopUp(true); | ||||
return; | return; | ||||
}else{ | |||||
} else { | |||||
const appIdsInData = appIdList.filter(appId => !combinedAppIdsArray.some(item => item === appId)); | const appIdsInData = appIdList.filter(appId => !combinedAppIdsArray.some(item => item === appId)); | ||||
const HoldingApplication = latestDataObjects.filter(item => appIdsInData.includes(item.appId)); | const HoldingApplication = latestDataObjects.filter(item => appIdsInData.includes(item.appId)); | ||||
const resultString = HoldingApplication.map(item => item.appNo).join(' , '); | const resultString = HoldingApplication.map(item => item.appNo).join(' , '); | ||||
@@ -211,11 +211,11 @@ const ApplicationDetailCard = ( | |||||
onClick={cancelledClick()} | onClick={cancelledClick()} | ||||
color="edit" | color="edit" | ||||
disabled={currentApplicationDetailData.status == "rejected" | disabled={currentApplicationDetailData.status == "rejected" | ||||
|| currentApplicationDetailData.status == "cancelled" | |||||
|| (!currentApplicationDetailData.creditor | |||||
&& currentApplicationDetailData.status == "paid") | |||||
|| (currentApplicationDetailData.creditor | |||||
&& currentApplicationDetailData.status == "confirmed") | |||||
|| currentApplicationDetailData.status == "cancelled" | |||||
|| (!currentApplicationDetailData.creditor | |||||
&& currentApplicationDetailData.status == "paid") | |||||
|| (currentApplicationDetailData.creditor | |||||
&& currentApplicationDetailData.status == "confirmed") | |||||
} | } | ||||
title={intl.formatMessage({ id: 'cancel' })} | title={intl.formatMessage({ id: 'cancel' })} | ||||
startIcon={<CloseIcon />} | startIcon={<CloseIcon />} | ||||
@@ -265,7 +265,7 @@ const ApplicationDetailCard = ( | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} sm={12} md={9} lg={5} sx={{ mb: 1, ml: 1 }}> | |||||
<Grid item xs={12} sm={12} md={9} lg={5} sx={{ mb: 1}}> | |||||
<Grid container alignItems={"center"}> | <Grid container alignItems={"center"}> | ||||
<Grid item xs={12} md={3} lg={3} | <Grid item xs={12} md={3} lg={3} | ||||
sx={{ display: 'flex', alignItems: 'center' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
@@ -274,7 +274,7 @@ const ApplicationDetailCard = ( | |||||
</Typography></FormLabel> | </Typography></FormLabel> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={4} lg={4}> | |||||
<Grid item xs={12} md={9} lg={9}> | |||||
<FormControl variant="outlined"> | <FormControl variant="outlined"> | ||||
{currentApplicationDetailData.status ? StatusUtils.getStatusByTextIntl(currentApplicationDetailData.status, false, intl) : ""} | {currentApplicationDetailData.status ? StatusUtils.getStatusByTextIntl(currentApplicationDetailData.status, false, intl) : ""} | ||||
</FormControl> | </FormControl> | ||||
@@ -505,12 +505,23 @@ const ApplicationDetailCard = ( | |||||
<Grid item xs={12} md={3} lg={3} | <Grid item xs={12} md={3} lg={3} | ||||
sx={{ display: 'flex', alignItems: 'center' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
<FormLabel><Typography variant="pnspsFormParagraph"> | <FormLabel><Typography variant="pnspsFormParagraph"> | ||||
<FormattedMessage id="currencyPrice" />(HK$): | |||||
<FormattedMessage id="currencyAmount" />(HK$): | |||||
</Typography></FormLabel> | </Typography></FormLabel> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={9} lg={9}> | <Grid item xs={12} md={9} lg={9}> | ||||
<FormLabel><Typography variant="pnspsFormParagraph">{FormatUtils.currencyFormat(fee)}</Typography></FormLabel> | |||||
<FormControl variant="outlined" fullWidth disabled> | |||||
<OutlinedInput | |||||
size="small" | |||||
value={FormatUtils.currencyFormat(fee)} | |||||
sx={{ | |||||
"& .MuiInputBase-input.Mui-disabled": { | |||||
WebkitTextFillColor: "#000000", | |||||
background: "#f8f8f8", | |||||
}, | |||||
}} | |||||
/> | |||||
</FormControl> | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -618,7 +629,18 @@ const ApplicationDetailCard = ( | |||||
<FormLabel><Typography variant="pnspsFormParagraph"><FormattedMessage id="careOf" />:</Typography></FormLabel> | <FormLabel><Typography variant="pnspsFormParagraph"><FormattedMessage id="careOf" />:</Typography></FormLabel> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={9} lg={9}> | <Grid item xs={12} md={9} lg={9}> | ||||
<Typography variant="pnspsFormParagraph">{currentApplicationDetailData.careOf}</Typography> | |||||
<FormControl variant="outlined" sx={{ width: '100%' }} disabled> | |||||
<OutlinedInput | |||||
size="small" | |||||
value={currentApplicationDetailData.careOf} | |||||
sx={{ | |||||
"& .MuiInputBase-input.Mui-disabled": { | |||||
WebkitTextFillColor: "#000000", | |||||
background: "#f8f8f8", | |||||
}, | |||||
}} | |||||
/> | |||||
</FormControl> | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> : null | </Grid> : null | ||||
@@ -632,7 +654,18 @@ const ApplicationDetailCard = ( | |||||
</Typography></FormLabel> | </Typography></FormLabel> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={9} lg={9}> | <Grid item xs={12} md={9} lg={9}> | ||||
<Typography variant="pnspsFormParagraph">{currentApplicationDetailData.remarks}</Typography> | |||||
<FormControl variant="outlined" sx={{ width: '100%' }} disabled> | |||||
<OutlinedInput | |||||
size="small" | |||||
value={currentApplicationDetailData.remarks} | |||||
sx={{ | |||||
"& .MuiInputBase-input.Mui-disabled": { | |||||
WebkitTextFillColor: "#000000", | |||||
background: "#f8f8f8", | |||||
}, | |||||
}} | |||||
/> | |||||
</FormControl> | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -45,27 +45,27 @@ const Index = () => { | |||||
role: responseData.role, | role: responseData.role, | ||||
abilities: responseData.abilities, | abilities: responseData.abilities, | ||||
creditor: responseData.creditor, | creditor: responseData.creditor, | ||||
locale: responseData.preferLocale, | |||||
//locale: responseData.preferLocale, | |||||
//avatar: require('src/assets/images/users/avatar-3.png').default, | //avatar: require('src/assets/images/users/avatar-3.png').default, | ||||
} | } | ||||
const data = { ...userData, accessToken: responseData.accessToken, refreshToken: responseData.refreshToken } | |||||
if(responseData.type === "GLD"){ | |||||
// setLocale("en"); | |||||
localStorage.setItem('locale','en'); | |||||
}else{ | |||||
if (responseData.preferLocale ==="zh_HK"){ | |||||
// setLocale("zh-HK"); | |||||
localStorage.setItem('locale','zh-HK'); | |||||
} | |||||
if (responseData.preferLocale ==="zh-CN"){ | |||||
// setLocale("zh-CN"); | |||||
localStorage.setItem('locale','zh-CN'); | |||||
} | |||||
if (response.data.preferLocale ==="en"){ | |||||
// setLocale("zh-CN"); | |||||
localStorage.setItem('locale','en'); | |||||
} | |||||
} | |||||
const data = { ...userData, accessToken: responseData.accessToken, refreshToken: responseData.refreshToken } | |||||
// if(responseData.type === "GLD"){ | |||||
// // setLocale("en"); | |||||
// localStorage.setItem('locale','en'); | |||||
// }else{ | |||||
// if (responseData.preferLocale ==="zh_HK"){ | |||||
// // setLocale("zh-HK"); | |||||
// localStorage.setItem('locale','zh-HK'); | |||||
// } | |||||
// if (responseData.preferLocale ==="zh-CN"){ | |||||
// // setLocale("zh-CN"); | |||||
// localStorage.setItem('locale','zh-CN'); | |||||
// } | |||||
// if (response.data.preferLocale ==="en"){ | |||||
// // setLocale("zh-CN"); | |||||
// localStorage.setItem('locale','en'); | |||||
// } | |||||
// } | |||||
dispatch(handleLogin(data)) | dispatch(handleLogin(data)) | ||||
navigate('/dashboard'); | navigate('/dashboard'); | ||||
}, | }, | ||||