Alex Cheung 1 rok temu
rodzic
commit
3c91b928d9
17 zmienionych plików z 440 dodań i 392 usunięć
  1. +15
    -7
      src/components/FileList.js
  2. +1
    -1
      src/pages/Organization/DetailPage/OrganizationCard.js
  3. +3
    -3
      src/pages/Organization/DetailPage_FromUser/OrganizationCard_loadFromUser.js
  4. +31
    -12
      src/pages/Organization/SearchPage/OrganizationSearchForm.js
  5. +6
    -3
      src/pages/Proof/Reply_Public/ProofForm.js
  6. +49
    -29
      src/pages/PublicNotice/Details_GLD/ApplicationDetailCard.js
  7. +28
    -12
      src/pages/PublicNotice/Details_GLD/index.js
  8. +2
    -1
      src/pages/PublicNotice/Details_Public/ApplicationDetailCard.js
  9. +262
    -267
      src/pages/User/DetailsPage_Individual/UserInformationCard_Individual.js
  10. +15
    -38
      src/pages/User/DetailsPage_Individual/index.js
  11. +2
    -2
      src/pages/User/DetailsPage_Organization/UserInformationCard_Organization.js
  12. +1
    -0
      src/pages/authentication/IAmSmartRegister.js
  13. +4
    -3
      src/pages/authentication/auth-forms/BusCustomFormWizard.js
  14. +1
    -0
      src/utils/ApiPathConst.js
  15. +6
    -0
      src/utils/ComboData.js
  16. +8
    -8
      src/utils/FieldUtils.js
  17. +6
    -6
      src/utils/statusUtils/PublicNoteStatusUtils.js

+ 15
- 7
src/components/FileList.js Wyświetl plik

@@ -8,11 +8,15 @@ import * as HttpUtils from "../utils/HttpUtils"
import * as UrlUtils from "../utils/ApiPathConst"
import * as DateUtils from "../utils/DateUtils"
import { FiDataGrid } from './FiDataGrid';
import {useTheme} from "@emotion/react";
import {useMediaQuery} from "@mui/material";
// ==============================|| EVENT TABLE ||============================== //

export default function FileList({ refType, refId, allowDelete, sx, dateHideable,lang, ...props }) {
const [rows, setRows] = React.useState([]);
const [rowModesModel] = React.useState({});
const theme = useTheme();
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md'));

React.useEffect(() => {
loadData();
@@ -92,13 +96,15 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable
id: 'filename',
field: 'filename',
headerName: lang=="ch"?"檔案名稱":'File Name',
flex: 3,
width: isMdOrLg ? 'auto' : 400,
flex: isMdOrLg ? 3 : undefined,
},
{
id: 'filesize',
field: 'filesize',
headerName: lang=="ch"?"檔案大小":'File Size',
flex: 1,
width: isMdOrLg ? 'auto' : 160,
flex: isMdOrLg ? 1 : undefined,
valueGetter: (params) => {
return convertToStr(params.value);
}
@@ -110,7 +116,8 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable
id: 'created',
field: 'created',
headerName: lang=="ch"?"日期":'Created',
flex: 1,
width: isMdOrLg ? 'auto' : 160,
flex: isMdOrLg ? 1 : undefined,
valueGetter: (params) => {
return DateUtils.datetimeStr(params.value);
}
@@ -137,13 +144,15 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable
id: 'filename',
field: 'filename',
headerName: lang=="ch"?"檔案名稱":'File Name',
flex: 3,
width: isMdOrLg ? 'auto' : 400,
flex: isMdOrLg ? 3 : undefined,
},
{
id: 'filesize',
field: 'filesize',
headerName: lang=="ch"?"檔案大小":'File Size',
flex: 1,
width: isMdOrLg ? 'auto' : 160,
flex: isMdOrLg ? 1 : undefined,
valueGetter: (params) => {
return convertToStr(params.value);
}
@@ -175,7 +184,6 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable
}

return (
// <div style={{height: 400, width: '100%'}}>
<FiDataGrid
{...props}
hideFooterSelectedRowCount={true}
@@ -191,7 +199,7 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable
}}
pageSizeOptions={[5, 10]}
autoHeight={true}

/>
// </div>
);
}

+ 1
- 1
src/pages/Organization/DetailPage/OrganizationCard.js Wyświetl plik

@@ -58,7 +58,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => {
faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(),
brExpiryDate: yup.string().min(8).required(displayErrorMsg('請輸入商業登記證有效日期')),
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(`請輸入有效商業登記證號碼`)), function (value) {
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/
var brNo_pattern = /[0-9]{8}/
if (value !== undefined) {
if (value.match(brNo_pattern)) {
return true


+ 3
- 3
src/pages/Organization/DetailPage_FromUser/OrganizationCard_loadFromUser.js Wyświetl plik

@@ -55,10 +55,10 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => {
phoneNumber: yup.string().min(8, displayErrorMsg('請輸入有效聯絡電話')).required(displayErrorMsg('請輸入聯絡電話')),
faxNumber: yup.string().min(8).nullable(),
brExpiryDate: yup.string().min(8).required(displayErrorMsg('請輸入商業登記證有效日期')),
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(`請輸入有效商業登記證號碼 (e.g. 12341234-123-12-12-1)`)), function (value) {
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/
brNo: yup.string().max(8).required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(`請輸入有效商業登記證號碼 (e.g. 12341234)`)), function (value) {
var brNo_pattern = /[0-9]{8}/
if (value !== undefined) {
if (value.match(brNo_pattern)) {
if (value.size==8 && value.match(brNo_pattern)) {
return true
} else {
return false


+ 31
- 12
src/pages/Organization/SearchPage/OrganizationSearchForm.js Wyświetl plik

@@ -4,23 +4,24 @@ import {
CardContent,
Grid, TextField,
Typography,
Checkbox, FormControlLabel,
Autocomplete,
} from '@mui/material';
import MainCard from "../../../components/MainCard";
import MainCard from "components/MainCard";
import { useForm } from "react-hook-form";

import { useState } from "react";
import * as React from "react";

import * as UrlUtils from "../../../utils/ApiPathConst";
import * as HttpUtils from "../../../utils/HttpUtils";
import * as UrlUtils from "utils/ApiPathConst";
import * as HttpUtils from "utils/HttpUtils";
import * as ComboData from "utils/ComboData";
// ==============================|| DASHBOARD - DEFAULT ||============================== //


const OrganizationSearchForm = ({ applySearch }) => {

const [type, setType] = useState([]);
const [creditorSelected, setCreditorSelected] = React.useState({ key: 0, labelCht: '全部', label: 'All', type: 'all' });
const { reset, register, handleSubmit } = useForm()
const onSubmit = (data) => {

@@ -34,8 +35,12 @@ const OrganizationSearchForm = ({ applySearch }) => {
brNo: data.brNo,
enCompanyName: data.enCompanyName,
chCompanyName: data.chCompanyName,
searchCreditor: data.searchCreditor
};
if(creditorSelected.type == 'true'){
temp["creditor"] = true;
}else if(creditorSelected.type == 'false'){
temp["creditor"] = false;
}
applySearch(temp);
};

@@ -102,12 +107,26 @@ const OrganizationSearchForm = ({ applySearch }) => {
</Grid>

<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3}}>
<FormControlLabel
{...register("searchCreditor")}
control={<Checkbox/>}
label="Search Creditor Only"
id="searchCreditor"
/>
<Autocomplete
{...register("searchCreditor")}
id="searchCreditor"
size="small"
options={ComboData.CreditorStatus}
value={creditorSelected}
onChange={(event, newValue) => {
setCreditorSelected(newValue);
}}
getOptionLabel={(option) => option.label}
renderInput={(params) => (
<TextField
{...params}
label="Status"
InputLabelProps={{
shrink: true
}}
/>
)}
/>
</Grid>

</Grid>


+ 6
- 3
src/pages/Proof/Reply_Public/ProofForm.js Wyświetl plik

@@ -76,11 +76,14 @@ const FormPanel = ({ formData }) => {
},
files: attachments ? attachments : [],
onSuccess: function () {
notifyActionSuccess("提交成功!")
if (actionValue) {
notifyActionSuccess("提交成功!")
navigate("/proof/pay/" + params.id);
if(data.creditor){
navigate("/proof/search");
}else{
navigate("/proof/pay/" + params.id);
}
} else {
notifyActionSuccess("提交成功!")
navigate("/proof/search");
}
},


+ 49
- 29
src/pages/PublicNotice/Details_GLD/ApplicationDetailCard.js Wyświetl plik

@@ -100,19 +100,23 @@ const ApplicationDetailCard = (
setStatus("withdraw")
};

const doPublish =()=>()=>{
setStatus("publish")
}

const onProofClick = () => {
if (applicationDetailData.data.groupNo) {
HttpUtils.get({
url: UrlUtils.CHECK_CREATE_PROOF+"/"+currentApplicationDetailData.id,
onSuccess:function(responeData){
if(responeData.success == true){
url: UrlUtils.CHECK_CREATE_PROOF + "/" + currentApplicationDetailData.id,
onSuccess: function (responeData) {
if (responeData.success == true) {
window.open("/proof/create/" + currentApplicationDetailData.id, "_blank", "noreferrer");
window.addEventListener("focus", onFocus)
}else{
} else {
let msg = responeData.msg;
if(msg === "haveActiveProof"){
if (msg === "haveActiveProof") {
msg = "Action Failed: There is already a pending payment and proofreading record for client review."
}else if(msg === "haveProofed"){
} else if (msg === "haveProofed") {
msg = "Action Failed: Already proofed."
}
setWarningText(msg);
@@ -120,8 +124,8 @@ const ApplicationDetailCard = (
}
}
});
}else {
} else {
setWarningText("Please generate Gazette Code before Create Proof.");
setIsWarningPopUp(true);
}
@@ -199,33 +203,49 @@ const ApplicationDetailCard = (
<Typography ml={1} variant="h5">Not accept</Typography>
</Button>
</> :
currentApplicationDetailData.status == "paid" ?
(currentApplicationDetailData.status == "confirmed" && currentApplicationDetailData.creditor == 1) ?
<>
<Button
// size="large"
variant="contained"
onClick={complatedClick()}
onClick={doPublish()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#52b202'
}}>
<DoneIcon />
<Typography ml={1} variant="h5">Complete</Typography>
<Typography ml={1} variant="h5">Publish</Typography>
</Button>
<Button
// size="large"
variant="contained"
onClick={withdrawnClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>
<CloseIcon />
<Typography ml={1} variant="h5">Withdraw</Typography>
</Button>
</> : null
</>
:
(currentApplicationDetailData.status == "paid" && currentApplicationDetailData.creditor == 0) ?
<>
<Button
// size="large"
variant="contained"
onClick={complatedClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#52b202'
}}>
<DoneIcon />
<Typography ml={1} variant="h5">Complete</Typography>
</Button>
<Button
// size="large"
variant="contained"
onClick={withdrawnClick()}
sx={{
textTransform: 'capitalize',
alignItems: 'end',
backgroundColor: '#ffa733'
}}>
<CloseIcon />
<Typography ml={1} variant="h5">Withdraw</Typography>
</Button>
</> : null
}
</Stack>
</Grid>
@@ -267,7 +287,7 @@ const ApplicationDetailCard = (
</Grid>
</Grid>
</Grid>
<Grid item xs={12} sm={12} md={5.5} lg={5.5} sx={{ mb: 1, ml: {md:1, lg:3} }}>
<Grid item xs={12} sm={12} md={5.5} lg={5.5} sx={{ mb: 1, ml: { md: 1, lg: 3 } }}>
<Grid container alignItems={"center"}>
<Grid item xs={12} md={4} lg={4}
sx={{ display: 'flex', alignItems: 'center' }}>
@@ -329,7 +349,7 @@ const ApplicationDetailCard = (
</Grid>
</Grid>
</Grid>
<Grid item xs={12} md={5.5} lg={5.5} sx={{ mb: 1, ml: {md:1, lg:3} }}>
<Grid item xs={12} md={5.5} lg={5.5} sx={{ mb: 1, ml: { md: 1, lg: 3 } }}>
<Grid container alignItems={"center"}>
<Grid item xs={12} md={4} lg={4}
sx={{ display: 'flex', alignItems: 'center' }}>
@@ -351,7 +371,7 @@ const ApplicationDetailCard = (
WebkitTextFillColor: "#000000",
background: "#f8f8f8",
},
mr:1
mr: 1
}}
inputProps={{
maxLength: 3,
@@ -414,7 +434,7 @@ const ApplicationDetailCard = (
</Grid>
</Grid>
</Grid>
<Grid item xs={12} md={5.5} lg={5.5} sx={{ mb: 1, ml: {md:1, lg:3} }}>
<Grid item xs={12} md={5.5} lg={5.5} sx={{ mb: 1, ml: { md: 1, lg: 3 } }}>
<Grid container alignItems={"center"}>
<Grid item xs={12} md={4} lg={4}
sx={{ display: 'flex', alignItems: 'center' }}>
@@ -436,7 +456,7 @@ const ApplicationDetailCard = (
WebkitTextFillColor: "#000000",
background: "#f8f8f8",
},
mr:1,
mr: 1,
}}
inputProps={{
maxLength: 3,


+ 28
- 12
src/pages/PublicNotice/Details_GLD/index.js Wyświetl plik

@@ -32,7 +32,8 @@ import {
SET_PUBLIC_NOTICE_STATUS_COMPLATED,
SET_PUBLIC_NOTICE_STATUS_WITHDRAW,
SET_PUBLIC_NOTICE_STATUS_RESUBMIT,
SET_PUBLIC_NOTICE_STATUS_REVIEWED
SET_PUBLIC_NOTICE_STATUS_REVIEWED,
SET_PUBLIC_NOTICE_STATUS_PUBLISH
} from "utils/ApiPathConst";
const StatusChangeDialog = Loadable(lazy(() => import('./StatusChangeDialog')));
import * as DateUtils from "utils/DateUtils";
@@ -182,6 +183,8 @@ const PublicNoticeDetail_GLD = () => {
onNotAcceptClick(getReason);
} else if (getStatus == "resubmit") {
onReSubmitClick();
} else if (getStatus == "publish") {
onPublishClick();
}
}
}, [statusWindowAccepted]);
@@ -225,6 +228,19 @@ const PublicNoticeDetail_GLD = () => {
});
}

const onPublishClick = () => {
if (params.id <= 0) return;
HttpUtils.get({
url: `${SET_PUBLIC_NOTICE_STATUS_PUBLISH}/${params.id}`,
onSuccess: function () {
setOpen(false);
handleClose();
loadApplicationDetail()
notifySaveSuccess()
}
});
}

const onComplatedClick = () => {
if (params.id > 0) {
axios.get(`${SET_PUBLIC_NOTICE_STATUS_COMPLATED}/${params.id}`)
@@ -301,7 +317,7 @@ const PublicNoticeDetail_GLD = () => {
}, [getUploadStatus]);

return (
<Grid container sx={{ width:"100%", backgroundColor: 'backgroundColor.default' }} direction="column">
<Grid container sx={{ width: "100%", backgroundColor: 'backgroundColor.default' }} direction="column">
<StatusChangeDialog open={open}
handleClose={handleClose}
setReason={setReason}
@@ -324,12 +340,12 @@ const PublicNoticeDetail_GLD = () => {
</div>
</Grid>
<Grid item xs={12} sm={12} md={12} lg={12}>
<Stack direction="row">
<Button title="Back" sx={{ml:3.5, mt:2.5}} style={{ border: '2px solid' }} variant="outlined" onClick={()=>{navigate("/application/search")}}>
<ForwardIcon style={{height: 30, width: 50, transform : "rotate(180deg)"}}/>
<Stack direction="row">
<Button title="Back" sx={{ ml: 3.5, mt: 2.5 }} style={{ border: '2px solid' }} variant="outlined" onClick={() => { navigate("/application/search") }}>
<ForwardIcon style={{ height: 30, width: 50, transform: "rotate(180deg)" }} />
</Button>
<Typography ml={4} mt={3} variant="h4">{title}</Typography>
</Stack>
</Stack>
</Grid>
{/* <Grid item xs={12} >
<Stack direction="row" height='20px' justifyContent="flex-start" alignItems="center">
@@ -341,7 +357,7 @@ const PublicNoticeDetail_GLD = () => {
<Grid item xs={12} md={12} lg={9} xl={9}>
<Grid container direction="column">
<Grid item xs={12} sm={12} md={12} lg={12} xl={12}>
<Box xs={12} sx={{ ml:2 , mt:3, mr:{xs:2, sm:2}, borderRadius: '10px', backgroundColor: '#ffffff' }}>
<Box xs={12} sx={{ ml: 2, mt: 3, mr: { xs: 2, sm: 2 }, borderRadius: '10px', backgroundColor: '#ffffff' }}>
{isLoading && editMode ?
<LoadingComponent /> :
<ApplicationDetailCard
@@ -358,7 +374,7 @@ const PublicNoticeDetail_GLD = () => {
</Box>
</Grid>
<Grid item xs={12} md={12} lg={12} xl={12}>
<Box xs={12} sx={{ml:2, mt:3, mr:{xs:2, sm:2}, borderRadius: '10px', backgroundColor: '#ffffff' }}>
<Box xs={12} sx={{ ml: 2, mt: 3, mr: { xs: 2, sm: 2 }, borderRadius: '10px', backgroundColor: '#ffffff' }}>
<GazetteDetailCard
// updateUserObject={updateUserObject}
applicationDetailData={applicationDetailData}
@@ -369,21 +385,21 @@ const PublicNoticeDetail_GLD = () => {
</Box>
</Grid>
<Grid item xs={12} md={12} lg={12} xl={12}>
<Box xs={12} sx={{ml:2, mt:3, mr:{sm:2}, borderRadius: '10px',width: {xs:'92vw', sm:'96.5vw', md:"auto"}, backgroundColor: '#ffffff' }}>
<Box xs={12} sx={{ ml: 2, mt: 3, mr: { sm: 2 }, borderRadius: '10px', width: { xs: '92vw', sm: '96.5vw', md: "auto" }, backgroundColor: '#ffffff' }}>
<TabTableDetail
applicationDetailData={applicationDetailData}
proofList={proofList}
paymentList={paymentList}
/>
</Box>
<br/>
<br />
</Grid>
</Grid>
</Grid>
<Grid item xs={12} md={12} lg={3} xl={3}>
<Grid item xs={12} md={12} lg={3} xl={3} sx={{ mt: { xs: -3, sm: -3 } }}>
<Grid container>
<Grid item xs={12} md={12}>
<Box xs={12} md={12} height='800px' sx={{ ml:2, mt:3, mr:{xs:2, sm:2}, borderRadius: '10px', backgroundColor: '#ffffff' }}>
<Box xs={12} md={12} height='800px' sx={{ ml: 2, mt: 3, mb: 3, mr: { xs: 2, sm: 2 }, borderRadius: '10px', backgroundColor: '#ffffff' }}>
<ClientDetailCard
// updateUserObject={updateUserObject}
applicationDetailData={applicationDetailData}


+ 2
- 1
src/pages/PublicNotice/Details_Public/ApplicationDetailCard.js Wyświetl plik

@@ -148,7 +148,8 @@ const ApplicationDetailCard = (
onClick={() => { checkExprityDate(true) }}
disabled={currentApplicationDetailData.status == "rejected"
|| currentApplicationDetailData.status == "cancelled"
|| currentApplicationDetailData.status == "paid"}
|| currentApplicationDetailData.status == "paid"
|| currentApplicationDetailData.creditor}
sx={{
textTransform: 'capitalize',
alignItems: 'end'


+ 262
- 267
src/pages/User/DetailsPage_Individual/UserInformationCard_Individual.js Wyświetl plik

@@ -144,12 +144,11 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => {
:
<form onSubmit={formik.handleSubmit} style={{ padding: 12 }}>
{/*top button*/}
<Grid item s={12} md={12} lg={12} sx={{ mb: 3 }} alignItems={"start"} justifyContent="center">
<Grid item xs={12} sm={12} md={12} lg={12} sx={{ mb: 3 }} alignItems={"start"} justifyContent="center">
<Grid container maxWidth justifyContent="flex-start">

{editMode ?
<>
<Grid item sx={{ ml: 3, mr: 3 }}>
<Grid item sx={{ mr: 3 }}>
<Button
size="large"
variant="contained"
@@ -180,7 +179,7 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => {
</>
:
<>
<Grid item sx={{ ml: 3, mr: 3 }}>
<Grid item sx={{ mr: 3 }}>
<Button
size="large"
variant="contained"
@@ -195,319 +194,315 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => {
</Grid>
</>
}

</Grid>
</Grid>
{/*end top button*/}
<Typography variant="h4" sx={{ mt: 3, ml: 3, mb: 2, mr: 3, borderBottom: "1px solid black" }}>
<Typography variant="h4" sx={{ mt: 3, mb: 2, borderBottom: "1px solid black" }}>
Individual User Details
</Typography>
<Grid container spacing={1} sx={{ mt: 3, ml: 3, mb: 2, mr: 3}}>
<Grid item lg={4}>
{FieldUtils.getTextField({
label: "Username:",
valueName: "username",
disabled: true,
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getTextField({
label: "English Name:",
valueName: "enName",
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={12}>
<Grid container>
<Grid item xs={12} sm={12} md={12} lg={4} >
{FieldUtils.getTextField({
label: "Username:",
valueName: "username",
disabled: true,
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getTextField({
label: "Created Date:",
valueName: "createDate",
disabled: true,
form: formik
})}
</Grid>
<Grid item lg={4}>
{FieldUtils.getTextField({
label: "Prefix:",
valueName: "prefix",
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getTextField({
label: "English Name:",
valueName: "enName",
disabled: (!editMode),
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getTextField({
label: "Chinese Name:",
valueName: "chName",
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getTextField({
label: "Created Date:",
valueName: "createDate",
disabled: true,
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getTextField({
label: "Prefix:",
valueName: "prefix",
disabled: (!editMode),
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getTextField({
label: "Last Updated:",
valueName: "modifieDate",
disabled: true,
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getTextField({
label: "Chinese Name:",
valueName: "chName",
disabled: (!editMode),
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getComboField({
label: "ID Type:",
valueName: "idDocType",
disabled: (!editMode),
dataList: ComboData.idDocType,
filterOptions: (options) => options,
getOptionLabel: (item) => item ? typeof item === 'string' ? item : (item["type"] ? item["type"] + "-" + item["label"] : "") : "",
onInputChange: (event, newValue, setInputValue) => {
if (newValue == null) {
setInputValue("");
}
let _val = newValue.split("-");
if (_val[0]) {
setInputValue(_val[0]);
}
},
onChange: (event, newValue) => {
if (newValue == null) {
formik.setFieldValue("idDocType", "");
return;
}
formik.setFieldValue("idDocType", newValue.type);
},
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getTextField({
label: "Last Updated:",
valueName: "modifieDate",
disabled: true,
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getPhoneField({
label: "Contact Tel:",
valueName: {
code: "tel_countryCode",
num: "phoneNumber"
},
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getComboField({
label: "ID Type:",
valueName: "idDocType",
disabled: (!editMode),
dataList: ComboData.idDocType,
filterOptions: (options) => options,
getOptionLabel: (item) => item ? typeof item === 'string' ? item : (item["type"] ? item["type"] + "-" + item["label"] : "") : "",
onInputChange: (event, newValue, setInputValue) => {
if (newValue == null) {
setInputValue("");
}
let _val = newValue.split("-");
if (_val[0]) {
setInputValue(_val[0]);
}
},
onChange: (event, newValue) => {
if (newValue == null) {
formik.setFieldValue("idDocType", "");
return;
}
formik.setFieldValue("idDocType", newValue.type);
},
form: formik
})}
</Grid>

<Grid item lg={4}>
<Grid container alignItems={"center"}>
<Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">Verified:</Typography>
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getPhoneField({
label: "Contact Tel:",
valueName: {
code: "tel_countryCode",
num: "phoneNumber"
},
disabled: (!editMode),
form: formik
})}
</Grid>

{
currentUserData.verifiedBy || editMode ?
<Grid item xs={12} md={6} lg={6}>
{FieldUtils.initField({
valueName: "verifiedStatus",
disabled: true,
form: formik,
})}
</Grid>
:
<>
<Grid item xs={10} md={4} lg={4}>
<Grid item xs={12} sm={12} md={12} lg={4}>
<Grid container alignItems={"center"}>
<Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">Verified:</Typography>
</Grid>
{
currentUserData.verifiedBy || editMode ?
<Grid item xs={12} sm={12} md={6} lg={6} sx={{mb:2}}>
{FieldUtils.initField({
valueName: "verifiedStatus",
disabled: true,
form: formik,
})}
</Grid>
<Grid item xs={1}>
<Button
size="large"
variant="contained"
sx={{
textTransform: 'capitalize',
alignItems: 'end',
}}
onClick={onVerifiedClick}
>
<Typography variant="h5">Verify</Typography>
</Button>
</Grid>
</>
}

</Grid>
</Grid>

<Grid item lg={4}>
<Grid container alignItems={"center"}>
<Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">ID No.:</Typography>
</Grid>

<Grid item xs={12} md={6} lg={6}>
<Grid container>
{formik.values.idDocType == "HKID" ?
:
<>
<Grid item lg={8}>
<Grid item xs={8} sm={8} md={6} lg={4} sx={{mb:2}}>
{FieldUtils.initField({
valueName: "identification",
disabled: (!editMode),
valueName: "verifiedStatus",
disabled: true,
form: formik,
placeholder: "證件號碼",
inputProps: {
maxLength: 7,
onKeyDown: (e) => {
if (e.key === 'Enter') {
e.preventDefault();
}
},
}
})}

</Grid>
<Grid item lg={4}>
<Grid item xs={2} sm={2} md={2} lg={2} sx={{ml:2 ,mb:2}}>
<Button
variant="contained"
sx={{
textTransform: 'capitalize',
alignItems: 'end',
}}
onClick={onVerifiedClick}
>
<Typography variant="h5">Verify</Typography>
</Button>
</Grid>
</>
}

</Grid>
</Grid>

<Grid xs={12} sm={12} md={12} lg={4}>
<Grid container alignItems={"center"} sx={{mb:2}}>
<Grid item xs={12} sm={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">ID No.:</Typography>
</Grid>

<Grid item xs={12} sm={12} md={9} lg={6}>
<Grid container>
{formik.values.idDocType === "HKID" ?
<>
<Grid item xs={6} sm={6} md={6} lg={7.5} sx={{mr:1}}>
{FieldUtils.initField({
valueName: "identification",
disabled: (!editMode),
form: formik,
placeholder: "證件號碼",
inputProps: {
maxLength: 7,
onKeyDown: (e) => {
if (e.key === 'Enter') {
e.preventDefault();
}
},
}
})}

</Grid>
<Grid item xs={2} sm={2} md={2} lg={2}>
{FieldUtils.initField({
valueName: "checkDigit",
disabled: (!editMode),
form: formik
})}
</Grid>
</> :
<Grid item xs={12} sm={6} md={6} lg={12}>
{FieldUtils.initField({
valueName: "checkDigit",
valueName: "identification",
disabled: (!editMode),
form: formik
})}
</Grid>
</> :
<Grid item lg={12}>
{FieldUtils.initField({
valueName: "identification",
disabled: (!editMode),
form: formik
})}
</Grid>
}
}
</Grid>
</Grid>
</Grid>
</Grid>
</Grid>

<Grid item lg={4}>
{FieldUtils.getPhoneField({
label: "Fax No.:",
valueName: {
code: "fax_countryCode",
num: "faxNumber"
},
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getPhoneField({
label: "Fax No.:",
valueName: {
code: "fax_countryCode",
num: "faxNumber"
},
disabled: (!editMode),
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getTextField({
label: "Last Login:",
valueName: "lastLoginDate",
disabled: true,
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getTextField({
label: "Last Login:",
valueName: "lastLoginDate",
disabled: true,
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getComboField({
label: "Country:",
valueName: "country",
dataList: ComboData.country,
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getComboField({
label: "Country:",
valueName: "country",
dataList: ComboData.country,
disabled: (!editMode),
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getTextField({
label: "Email:",
valueName: "emailAddress",
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getTextField({
label: "Email:",
valueName: "emailAddress",
disabled: (!editMode),
form: formik
})}
</Grid>


<Grid item lg={4}>
<Grid container alignItems={"center"}>
<Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">Status:</Typography>
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
<Grid container alignItems={"center"} sx={{mb:2}}>
<Grid item xs={12} sm={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">Status:</Typography>
</Grid>

{
editMode ?
<Grid item xs={12} md={6} lg={6}>
{FieldUtils.initField({
valueName: "status",
disabled: true,
form: formik,
})}
</Grid>
:
<>
<Grid item lg={4}>
{
editMode ?
<Grid item xs={8} sm={8} md={6} lg={6}>
{FieldUtils.initField({
valueName: "status",
disabled: true,
form: formik,
})}
</Grid>
{locked ?
<Grid item lg={1} sx={{ml:1}}>
<Button
size="large"
variant="contained"
color="success"
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
onClick={doUnlock}
>
<Typography variant="h5">Active</Typography>
</Button>
</Grid>
:
<Grid item lg={1} sx={{ml:1}}>
<Button
size="large"
variant="contained"
color="error"
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
onClick={doLock}
>
<Typography variant="h5">Lock</Typography>
</Button>
:
<>
<Grid item xs={8} sm={8} md={6} lg={4}>
{FieldUtils.initField({
valueName: "status",
disabled: true,
form: formik,
})}
</Grid>
}
</>
}
{locked ?
<Grid item xs={2} sm={2} md={2} lg={2} sx={{ml:2}}>
<Button
variant="contained"
color="success"
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
onClick={doUnlock}
>
<Typography variant="h5">Active</Typography>
</Button>
</Grid>
:
<Grid item xs={2} sm={2} md={2} lg={2} sx={{ml:2}}>
<Button
variant="contained"
color="error"
sx={{
textTransform: 'capitalize',
alignItems: 'end'
}}
onClick={doLock}
>
<Typography variant="h5">Lock</Typography>
</Button>
</Grid>
}
</>
}
</Grid>
</Grid>
</Grid>

<Grid item lg={4}>
{FieldUtils.getAddressField({
label: "Address:",
valueName: ["addressLine1", "addressLine2", "addressLine3"],
disabled: (!editMode),
form: formik
})}
</Grid>
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getAddressField({
label: "Address:",
valueName: ["addressLine1", "addressLine2", "addressLine3"],
disabled: (!editMode),
form: formik
})}
</Grid>

<Grid item lg={4}>
{FieldUtils.getComboField({
label: "District:",
valueName: "district",
dataList: ComboData.district,
disabled: (!editMode),
form: formik
})}
<Grid item xs={12} sm={12} md={12} lg={4}>
{FieldUtils.getComboField({
label: "District:",
valueName: "district",
dataList: ComboData.district,
disabled: (!editMode),
form: formik
})}
</Grid>
</Grid>
</Grid>

</form>
}
</MainCard>


+ 15
- 38
src/pages/User/DetailsPage_Individual/index.js Wyświetl plik

@@ -1,7 +1,7 @@
// material-ui
import * as React from "react";

import { Grid, Typography, Button, Stack, Box } from '@mui/material';
import { Grid, Typography, Button, Stack } from '@mui/material';
import FileList from "../../../components/FileList"
import MainCard from "../../../components/MainCard";
import * as HttpUtils from "../../../utils/HttpUtils";
@@ -35,26 +35,6 @@ const UserMaintainPage_Individual = () => {
const [formData, setFormData] = React.useState({})
const [isLoading, setLoding] = React.useState(true);

const _sx = {
ml: 6,
mr: 6,
mb: 3,
mt: 3,
padding: "4 2 4 2",
boxShadow: 1,
border: 1,
borderColor: '#DDD',
'& .MuiDataGrid-cell': {
borderTop: 1,
borderBottom: 1,
borderColor: "#EEE"
},
'& .MuiDataGrid-footerContainer': {
border: 1,
borderColor: "#EEE"
}
}

React.useEffect(() => {
loadData();
}, []);
@@ -102,7 +82,7 @@ const UserMaintainPage_Individual = () => {
isLoading ?
<LoadingComponent />
:
<Grid container sx={{ minHeight: '90vh', backgroundColor: 'backgroundColor.default' }}>
<Grid container sx={{ backgroundColor: 'backgroundColor.default', maxWidth:'100%' }}>
<Grid item xs={12}>
<div style={BackgroundHead}>
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center">
@@ -116,29 +96,26 @@ const UserMaintainPage_Individual = () => {
</Button>
</Grid>
{/*col 1*/}
<Grid item xs={12}>
<Grid item xs={12} sm={12} md={12} lg={12} >
<Grid container>
<Grid item xs={12} md={12} lg={12}>
<Box xs={12} ml={0} mt={-1} mr={0} sx={{ p: 1, borderRadius: '10px' }}>
<UserInformationCard
formData={formData}
loadDataFun={loadData}
/>
</Box>
<Grid item xs={12} sm={12} md={12} lg={12} >
<UserInformationCard
formData={formData}
loadDataFun={loadData}
/>
</Grid>
<Grid item xs={12} md={12} lg={12}>
<Box xs={12} ml={0} mt={-3} mr={11.5} sx={{ p: 1, borderRadius: '10px' }}>
<MainCard elevation={0} border={false} content={false}>
<Typography variant="h4" sx={{ mt: 4, ml: 6, mb: 2, mr: 6, borderBottom: "1px solid black" }}>
Files
</Typography>
<MainCard elevation={0} border={false} content={false} sx={{maxWidth: '100%', mr:2, width: "-webkit-fill-available"}}>
<Typography variant="h4" sx={{ mt: 4, ml: 2, mb: 2, mr: 2, borderBottom: "1px solid black" }}>
Files
</Typography>
<Grid item xs={12} sm={12} md={12} lg={12} sx={{maxWidth: '100%'}}>
<FileList
sx={_sx}
refId={params.id}
refType={"identification"}
/>
</MainCard>
</Box>
</Grid>
</MainCard>
<br />
</Grid>
</Grid>


+ 2
- 2
src/pages/User/DetailsPage_Organization/UserInformationCard_Organization.js Wyświetl plik

@@ -59,8 +59,8 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) =>
phoneNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).required(displayErrorMsg('請輸入聯絡電話')),
faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(),
brExpiryDate: yup.string().min(8, displayErrorMsg('請輸入商業登記證有效日期')),
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(`請輸入有效商業登記證號碼 (e.g. 12341234-123-12-12-1)`), function (value) {
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/
brNo: yup.string().max(8).required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(`請輸入有效商業登記證號碼 (e.g. 12341234)`), function (value) {
var brNo_pattern = /[0-9]{8}/
if (value !== undefined) {
if (value.match(brNo_pattern)) {
return true


+ 1
- 0
src/pages/authentication/IAmSmartRegister.js Wyświetl plik

@@ -56,6 +56,7 @@ const Register = () => {
const [completed, setCompleted] = useState([false]);
const [updateValid, setUpdateValid] = useState(false);
const [base64Url, setBase64Url] = useState("")
const [checkCode, setCheckCode] = useState("")
const [idNo, setIdNo] = useState("");

const totalSteps = () => {


+ 4
- 3
src/pages/authentication/auth-forms/BusCustomFormWizard.js Wyświetl plik

@@ -526,8 +526,9 @@ const BusCustomFormWizard = (props) => {
phone: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')).required(displayErrorMsg('請輸入聯絡電話')),
fax: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')),
brExpiryDate: yup.date().min(new Date().toISOString().split("T")[0], displayErrorMsg('請輸入商業登記證有效日期')).max("2099-12-31", displayErrorMsg('請輸入商業登記證有效日期')).required(displayErrorMsg('請輸入商業登記證有效日期')),
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(`請輸入有效商業登記證號碼 (e.g. 12341234-123-12-12-1)`), function (value) {
var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/
brNo: yup.string().max(8).required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(`請輸入有效商業登記證號碼 (e.g. 12341234)`), function (value) {
// var brNo_pattern = /[0-9]{8}-[0-9]{3}-(0[1-9]|1[012])-[0-9]{2}-[0-9A-Z]{1}/
var brNo_pattern = /[0-9]{8}/
if (value !== undefined) {
if (value.match(brNo_pattern)) {
return true
@@ -834,7 +835,7 @@ const BusCustomFormWizard = (props) => {
<Stack spacing={1}>
<InputLabel htmlFor="brNo-signup" sx={{ whiteSpace: 'pre-wrap', wordWrap: 'break-word' }}>
<Typography variant="pnspsFormHeader">
商業登記證號碼 (e.g. 12341234-123-12-12-1)
商業登記證號碼 (e.g. 12341234)
<span style={{ color: '#f10000' }}>*</span>
</Typography>
</InputLabel>


+ 1
- 0
src/utils/ApiPathConst.js Wyświetl plik

@@ -77,6 +77,7 @@ export const SET_PUBLIC_NOTICE_STATUS_COMPLATED = apiPath+'/application/applicat
export const SET_PUBLIC_NOTICE_STATUS_WITHDRAW = apiPath+'/application/application-detail-status-withdrawn';
export const SET_PUBLIC_NOTICE_STATUS_RESUBMIT = apiPath+'/application/application-detail-status-resubmit';
export const SET_PUBLIC_NOTICE_STATUS_REVIEWED = apiPath+'/application/application-detail-status-reviewed';
export const SET_PUBLIC_NOTICE_STATUS_PUBLISH = apiPath+'/application/application-detail-status-publish';
export const UPDATE_PUBLIC_NOTICE_APPLY_DETAIL = apiPath+'/application/save';

export const GET_ISSUE_COMBO = apiPath+'/gazette-issue/combo';


+ 6
- 0
src/utils/ComboData.js Wyświetl plik

@@ -86,4 +86,10 @@ export const denmandNoteStatus = [
{ key: 2, labelCht: '待支付', label:'To be Paid', type: 'to be paid' },
{ key: 3, labelCht: '已付費', label:'Paid', type: 'paid' },

];

export const CreditorStatus = [
{ key: 0, labelCht: '全部', label: 'All', type: 'all' },
{ key: 1, labelCht: '債權人', label:'Creditor', type: 'true' },
{ key: 2, labelCht: '非債權人', label:'No-Creditor', type: 'false' },
];

+ 8
- 8
src/utils/FieldUtils.js Wyświetl plik

@@ -27,12 +27,12 @@ export const getDateField = ({ label, valueName, form, disabled }) => {
}

export const getTextField = ({ label, valueName, form, disabled }) => {
return <Grid container alignItems={"center"}>
<Grid item xs={12} md={3} lg={3}
return <Grid container alignItems={"center"} xs={12} sm={12} md={12} lg={12} sx={{mb:2}}>
<Grid item xs={12} sm={12} md={3} lg={3}
sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">{label}</Typography>
</Grid>
<Grid item xs={12} md={6} lg={6}>
<Grid item xs={12} sm={12} md={6} lg={6}>
{initField({
type: "text",
valueName: valueName,
@@ -71,7 +71,7 @@ export const getTextArea = ({ label, valueName, form, disabled, inputProps, ...p

export const getPhoneField = ({ label, valueName, form, disabled }) => {

return <Grid container alignItems={"center"}>
return <Grid container alignItems={"center"} sx={{mb:2}}>
<Grid item xs={12} md={3} lg={3}
sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">{label}</Typography>
@@ -123,7 +123,7 @@ export const getAddressField = ({ label, valueName, form, disabled }) => {
</Grid>
</Grid>
<Grid item xs={12} md={6} lg={6}>
<Grid item lg={12}>
<Grid item lg={12} sx={{mb:2}}>
{initField({
type: "text",
valueName: valueName[0],
@@ -131,7 +131,7 @@ export const getAddressField = ({ label, valueName, form, disabled }) => {
disabled: disabled
})}
</Grid>
<Grid item lg={12}>
<Grid item lg={12} sx={{mb:2}}>
{initField({
type: "text",
valueName: valueName[1],
@@ -139,7 +139,7 @@ export const getAddressField = ({ label, valueName, form, disabled }) => {
disabled: disabled
})}
</Grid>
<Grid item lg={12}>
<Grid item lg={12} sx={{mb:2}}>
{initField({
type: "text",
valueName: valueName[2],
@@ -152,7 +152,7 @@ export const getAddressField = ({ label, valueName, form, disabled }) => {
}

export const getComboField = ({ label, dataList, valueName, form, disabled, getOptionLabel, onInputChange, onChange, filterOptions, ...props }) => {
return <Grid container alignItems={"center"}>
return <Grid container alignItems={"center"} sx={{mb:2}}>
<Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
<Typography variant="h5">{label}</Typography>
</Grid>


+ 6
- 6
src/utils/statusUtils/PublicNoteStatusUtils.js Wyświetl plik

@@ -3,17 +3,17 @@
import {getStatusTag} from "utils/statusUtils/Base";

export function getStatus(params) {
return getStatusByText(params.row.status);
return getStatusByText(params.row.status, params.row.creditor);
}

export function getStatusByText(status) {
export function getStatusByText(status, creditor) {
switch (status) {
case "submitted":
return getStatusTag({ color: "#f5a83d", text: "處理中" })
case "reviewed":
return getStatusTag({ color: "#f5a83d", text: "處理中" })
case "confirmed":
if (localStorage.getItem('userData').creditor)
if (creditor)
return getStatusTag({ color: "#22a13f", text: "待發布" })
else
return getStatusTag({ color: "#22a13f", text: "待付款" })
@@ -37,16 +37,16 @@ export function getStatusByText(status) {
}

export function getStatusEng(params) {
return getStatusByTextEng(params.row.status);
return getStatusByTextEng(params.row.status, params.row.creditor);
}
export function getStatusByTextEng(status) {
export function getStatusByTextEng(status, creditor) {
switch (status) {
case "submitted":
return getStatusTag({ color: "#f5a83d", text: "Submitted" })
case "reviewed":
return getStatusTag({ color: "#0C489E", text: "Reviewed" })
case "confirmed":
if (localStorage.getItem('userData').creditor)
if (creditor)
return getStatusTag({ color: "#22a13f", text: "Pending Publish" })
else
return getStatusTag({ color: "#22a13f", text: "Pending Payment" })


Ładowanie…
Anuluj
Zapisz