@@ -8,11 +8,15 @@ import * as HttpUtils from "../utils/HttpUtils" | |||||
import * as UrlUtils from "../utils/ApiPathConst" | import * as UrlUtils from "../utils/ApiPathConst" | ||||
import * as DateUtils from "../utils/DateUtils" | import * as DateUtils from "../utils/DateUtils" | ||||
import { FiDataGrid } from './FiDataGrid'; | import { FiDataGrid } from './FiDataGrid'; | ||||
import {useTheme} from "@emotion/react"; | |||||
import {useMediaQuery} from "@mui/material"; | |||||
// ==============================|| EVENT TABLE ||============================== // | // ==============================|| EVENT TABLE ||============================== // | ||||
export default function FileList({ refType, refId, allowDelete, sx, dateHideable,lang, ...props }) { | export default function FileList({ refType, refId, allowDelete, sx, dateHideable,lang, ...props }) { | ||||
const [rows, setRows] = React.useState([]); | const [rows, setRows] = React.useState([]); | ||||
const [rowModesModel] = React.useState({}); | const [rowModesModel] = React.useState({}); | ||||
const theme = useTheme(); | |||||
const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||||
React.useEffect(() => { | React.useEffect(() => { | ||||
loadData(); | loadData(); | ||||
@@ -92,13 +96,15 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||||
id: 'filename', | id: 'filename', | ||||
field: 'filename', | field: 'filename', | ||||
headerName: lang=="ch"?"檔案名稱":'File Name', | headerName: lang=="ch"?"檔案名稱":'File Name', | ||||
flex: 3, | |||||
width: isMdOrLg ? 'auto' : 400, | |||||
flex: isMdOrLg ? 3 : undefined, | |||||
}, | }, | ||||
{ | { | ||||
id: 'filesize', | id: 'filesize', | ||||
field: 'filesize', | field: 'filesize', | ||||
headerName: lang=="ch"?"檔案大小":'File Size', | headerName: lang=="ch"?"檔案大小":'File Size', | ||||
flex: 1, | |||||
width: isMdOrLg ? 'auto' : 160, | |||||
flex: isMdOrLg ? 1 : undefined, | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
return convertToStr(params.value); | return convertToStr(params.value); | ||||
} | } | ||||
@@ -110,7 +116,8 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||||
id: 'created', | id: 'created', | ||||
field: 'created', | field: 'created', | ||||
headerName: lang=="ch"?"日期":'Created', | headerName: lang=="ch"?"日期":'Created', | ||||
flex: 1, | |||||
width: isMdOrLg ? 'auto' : 160, | |||||
flex: isMdOrLg ? 1 : undefined, | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
return DateUtils.datetimeStr(params.value); | return DateUtils.datetimeStr(params.value); | ||||
} | } | ||||
@@ -137,13 +144,15 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||||
id: 'filename', | id: 'filename', | ||||
field: 'filename', | field: 'filename', | ||||
headerName: lang=="ch"?"檔案名稱":'File Name', | headerName: lang=="ch"?"檔案名稱":'File Name', | ||||
flex: 3, | |||||
width: isMdOrLg ? 'auto' : 400, | |||||
flex: isMdOrLg ? 3 : undefined, | |||||
}, | }, | ||||
{ | { | ||||
id: 'filesize', | id: 'filesize', | ||||
field: 'filesize', | field: 'filesize', | ||||
headerName: lang=="ch"?"檔案大小":'File Size', | headerName: lang=="ch"?"檔案大小":'File Size', | ||||
flex: 1, | |||||
width: isMdOrLg ? 'auto' : 160, | |||||
flex: isMdOrLg ? 1 : undefined, | |||||
valueGetter: (params) => { | valueGetter: (params) => { | ||||
return convertToStr(params.value); | return convertToStr(params.value); | ||||
} | } | ||||
@@ -175,7 +184,6 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||||
} | } | ||||
return ( | return ( | ||||
// <div style={{height: 400, width: '100%'}}> | |||||
<FiDataGrid | <FiDataGrid | ||||
{...props} | {...props} | ||||
hideFooterSelectedRowCount={true} | hideFooterSelectedRowCount={true} | ||||
@@ -191,7 +199,7 @@ export default function FileList({ refType, refId, allowDelete, sx, dateHideable | |||||
}} | }} | ||||
pageSizeOptions={[5, 10]} | pageSizeOptions={[5, 10]} | ||||
autoHeight={true} | autoHeight={true} | ||||
/> | /> | ||||
// </div> | |||||
); | ); | ||||
} | } |
@@ -58,7 +58,7 @@ const OrganizationCard = ({ userData, loadDataFun, id, setEditModeFun }) => { | |||||
faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(), | faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(), | ||||
brExpiryDate: yup.string().min(8).required(displayErrorMsg('請輸入商業登記證有效日期')), | brExpiryDate: yup.string().min(8).required(displayErrorMsg('請輸入商業登記證有效日期')), | ||||
brNo: yup.string().required(displayErrorMsg('請輸入商業登記證號碼')).test('checkBrNoFormat', displayErrorMsg(displayErrorMsg(`請輸入有效商業登記證號碼`)), function (value) { | 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 !== undefined) { | ||||
if (value.match(brNo_pattern)) { | if (value.match(brNo_pattern)) { | ||||
return true | return true | ||||
@@ -55,10 +55,10 @@ const OrganizationCard_loadFromUser = ({ userData, userId }) => { | |||||
phoneNumber: yup.string().min(8, displayErrorMsg('請輸入有效聯絡電話')).required(displayErrorMsg('請輸入聯絡電話')), | phoneNumber: yup.string().min(8, displayErrorMsg('請輸入有效聯絡電話')).required(displayErrorMsg('請輸入聯絡電話')), | ||||
faxNumber: yup.string().min(8).nullable(), | faxNumber: yup.string().min(8).nullable(), | ||||
brExpiryDate: yup.string().min(8).required(displayErrorMsg('請輸入商業登記證有效日期')), | 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 !== undefined) { | ||||
if (value.match(brNo_pattern)) { | |||||
if (value.size==8 && value.match(brNo_pattern)) { | |||||
return true | return true | ||||
} else { | } else { | ||||
return false | return false | ||||
@@ -4,23 +4,24 @@ import { | |||||
CardContent, | CardContent, | ||||
Grid, TextField, | Grid, TextField, | ||||
Typography, | Typography, | ||||
Checkbox, FormControlLabel, | |||||
Autocomplete, | |||||
} from '@mui/material'; | } from '@mui/material'; | ||||
import MainCard from "../../../components/MainCard"; | |||||
import MainCard from "components/MainCard"; | |||||
import { useForm } from "react-hook-form"; | import { useForm } from "react-hook-form"; | ||||
import { useState } from "react"; | import { useState } from "react"; | ||||
import * as React 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 ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
const OrganizationSearchForm = ({ applySearch }) => { | const OrganizationSearchForm = ({ applySearch }) => { | ||||
const [type, setType] = useState([]); | const [type, setType] = useState([]); | ||||
const [creditorSelected, setCreditorSelected] = React.useState({ key: 0, labelCht: '全部', label: 'All', type: 'all' }); | |||||
const { reset, register, handleSubmit } = useForm() | const { reset, register, handleSubmit } = useForm() | ||||
const onSubmit = (data) => { | const onSubmit = (data) => { | ||||
@@ -34,8 +35,12 @@ const OrganizationSearchForm = ({ applySearch }) => { | |||||
brNo: data.brNo, | brNo: data.brNo, | ||||
enCompanyName: data.enCompanyName, | enCompanyName: data.enCompanyName, | ||||
chCompanyName: data.chCompanyName, | chCompanyName: data.chCompanyName, | ||||
searchCreditor: data.searchCreditor | |||||
}; | }; | ||||
if(creditorSelected.type == 'true'){ | |||||
temp["creditor"] = true; | |||||
}else if(creditorSelected.type == 'false'){ | |||||
temp["creditor"] = false; | |||||
} | |||||
applySearch(temp); | applySearch(temp); | ||||
}; | }; | ||||
@@ -102,12 +107,26 @@ const OrganizationSearchForm = ({ applySearch }) => { | |||||
</Grid> | </Grid> | ||||
<Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3}}> | <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> | ||||
</Grid> | </Grid> | ||||
@@ -76,11 +76,14 @@ const FormPanel = ({ formData }) => { | |||||
}, | }, | ||||
files: attachments ? attachments : [], | files: attachments ? attachments : [], | ||||
onSuccess: function () { | onSuccess: function () { | ||||
notifyActionSuccess("提交成功!") | |||||
if (actionValue) { | if (actionValue) { | ||||
notifyActionSuccess("提交成功!") | |||||
navigate("/proof/pay/" + params.id); | |||||
if(data.creditor){ | |||||
navigate("/proof/search"); | |||||
}else{ | |||||
navigate("/proof/pay/" + params.id); | |||||
} | |||||
} else { | } else { | ||||
notifyActionSuccess("提交成功!") | |||||
navigate("/proof/search"); | navigate("/proof/search"); | ||||
} | } | ||||
}, | }, | ||||
@@ -100,19 +100,23 @@ const ApplicationDetailCard = ( | |||||
setStatus("withdraw") | setStatus("withdraw") | ||||
}; | }; | ||||
const doPublish =()=>()=>{ | |||||
setStatus("publish") | |||||
} | |||||
const onProofClick = () => { | const onProofClick = () => { | ||||
if (applicationDetailData.data.groupNo) { | if (applicationDetailData.data.groupNo) { | ||||
HttpUtils.get({ | 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.open("/proof/create/" + currentApplicationDetailData.id, "_blank", "noreferrer"); | ||||
window.addEventListener("focus", onFocus) | window.addEventListener("focus", onFocus) | ||||
}else{ | |||||
} else { | |||||
let msg = responeData.msg; | 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." | 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." | msg = "Action Failed: Already proofed." | ||||
} | } | ||||
setWarningText(msg); | setWarningText(msg); | ||||
@@ -120,8 +124,8 @@ const ApplicationDetailCard = ( | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||
}else { | |||||
} else { | |||||
setWarningText("Please generate Gazette Code before Create Proof."); | setWarningText("Please generate Gazette Code before Create Proof."); | ||||
setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
} | } | ||||
@@ -199,33 +203,49 @@ const ApplicationDetailCard = ( | |||||
<Typography ml={1} variant="h5">Not accept</Typography> | <Typography ml={1} variant="h5">Not accept</Typography> | ||||
</Button> | </Button> | ||||
</> : | </> : | ||||
currentApplicationDetailData.status == "paid" ? | |||||
(currentApplicationDetailData.status == "confirmed" && currentApplicationDetailData.creditor == 1) ? | |||||
<> | <> | ||||
<Button | <Button | ||||
// size="large" | // size="large" | ||||
variant="contained" | variant="contained" | ||||
onClick={complatedClick()} | |||||
onClick={doPublish()} | |||||
sx={{ | sx={{ | ||||
textTransform: 'capitalize', | textTransform: 'capitalize', | ||||
alignItems: 'end', | alignItems: 'end', | ||||
backgroundColor: '#52b202' | backgroundColor: '#52b202' | ||||
}}> | }}> | ||||
<DoneIcon /> | <DoneIcon /> | ||||
<Typography ml={1} variant="h5">Complete</Typography> | |||||
<Typography ml={1} variant="h5">Publish</Typography> | |||||
</Button> | </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> | </Stack> | ||||
</Grid> | </Grid> | ||||
@@ -267,7 +287,7 @@ const ApplicationDetailCard = ( | |||||
</Grid> | </Grid> | ||||
</Grid> | </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 container alignItems={"center"}> | ||||
<Grid item xs={12} md={4} lg={4} | <Grid item xs={12} md={4} lg={4} | ||||
sx={{ display: 'flex', alignItems: 'center' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
@@ -329,7 +349,7 @@ const ApplicationDetailCard = ( | |||||
</Grid> | </Grid> | ||||
</Grid> | </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 container alignItems={"center"}> | ||||
<Grid item xs={12} md={4} lg={4} | <Grid item xs={12} md={4} lg={4} | ||||
sx={{ display: 'flex', alignItems: 'center' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
@@ -351,7 +371,7 @@ const ApplicationDetailCard = ( | |||||
WebkitTextFillColor: "#000000", | WebkitTextFillColor: "#000000", | ||||
background: "#f8f8f8", | background: "#f8f8f8", | ||||
}, | }, | ||||
mr:1 | |||||
mr: 1 | |||||
}} | }} | ||||
inputProps={{ | inputProps={{ | ||||
maxLength: 3, | maxLength: 3, | ||||
@@ -414,7 +434,7 @@ const ApplicationDetailCard = ( | |||||
</Grid> | </Grid> | ||||
</Grid> | </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 container alignItems={"center"}> | ||||
<Grid item xs={12} md={4} lg={4} | <Grid item xs={12} md={4} lg={4} | ||||
sx={{ display: 'flex', alignItems: 'center' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
@@ -436,7 +456,7 @@ const ApplicationDetailCard = ( | |||||
WebkitTextFillColor: "#000000", | WebkitTextFillColor: "#000000", | ||||
background: "#f8f8f8", | background: "#f8f8f8", | ||||
}, | }, | ||||
mr:1, | |||||
mr: 1, | |||||
}} | }} | ||||
inputProps={{ | inputProps={{ | ||||
maxLength: 3, | maxLength: 3, | ||||
@@ -32,7 +32,8 @@ import { | |||||
SET_PUBLIC_NOTICE_STATUS_COMPLATED, | SET_PUBLIC_NOTICE_STATUS_COMPLATED, | ||||
SET_PUBLIC_NOTICE_STATUS_WITHDRAW, | SET_PUBLIC_NOTICE_STATUS_WITHDRAW, | ||||
SET_PUBLIC_NOTICE_STATUS_RESUBMIT, | SET_PUBLIC_NOTICE_STATUS_RESUBMIT, | ||||
SET_PUBLIC_NOTICE_STATUS_REVIEWED | |||||
SET_PUBLIC_NOTICE_STATUS_REVIEWED, | |||||
SET_PUBLIC_NOTICE_STATUS_PUBLISH | |||||
} from "utils/ApiPathConst"; | } from "utils/ApiPathConst"; | ||||
const StatusChangeDialog = Loadable(lazy(() => import('./StatusChangeDialog'))); | const StatusChangeDialog = Loadable(lazy(() => import('./StatusChangeDialog'))); | ||||
import * as DateUtils from "utils/DateUtils"; | import * as DateUtils from "utils/DateUtils"; | ||||
@@ -182,6 +183,8 @@ const PublicNoticeDetail_GLD = () => { | |||||
onNotAcceptClick(getReason); | onNotAcceptClick(getReason); | ||||
} else if (getStatus == "resubmit") { | } else if (getStatus == "resubmit") { | ||||
onReSubmitClick(); | onReSubmitClick(); | ||||
} else if (getStatus == "publish") { | |||||
onPublishClick(); | |||||
} | } | ||||
} | } | ||||
}, [statusWindowAccepted]); | }, [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 = () => { | const onComplatedClick = () => { | ||||
if (params.id > 0) { | if (params.id > 0) { | ||||
axios.get(`${SET_PUBLIC_NOTICE_STATUS_COMPLATED}/${params.id}`) | axios.get(`${SET_PUBLIC_NOTICE_STATUS_COMPLATED}/${params.id}`) | ||||
@@ -301,7 +317,7 @@ const PublicNoticeDetail_GLD = () => { | |||||
}, [getUploadStatus]); | }, [getUploadStatus]); | ||||
return ( | return ( | ||||
<Grid container sx={{ width:"100%", backgroundColor: 'backgroundColor.default' }} direction="column"> | |||||
<Grid container sx={{ width: "100%", backgroundColor: 'backgroundColor.default' }} direction="column"> | |||||
<StatusChangeDialog open={open} | <StatusChangeDialog open={open} | ||||
handleClose={handleClose} | handleClose={handleClose} | ||||
setReason={setReason} | setReason={setReason} | ||||
@@ -324,12 +340,12 @@ const PublicNoticeDetail_GLD = () => { | |||||
</div> | </div> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} sm={12} md={12} lg={12}> | <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> | </Button> | ||||
<Typography ml={4} mt={3} variant="h4">{title}</Typography> | <Typography ml={4} mt={3} variant="h4">{title}</Typography> | ||||
</Stack> | |||||
</Stack> | |||||
</Grid> | </Grid> | ||||
{/* <Grid item xs={12} > | {/* <Grid item xs={12} > | ||||
<Stack direction="row" height='20px' justifyContent="flex-start" alignItems="center"> | <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 item xs={12} md={12} lg={9} xl={9}> | ||||
<Grid container direction="column"> | <Grid container direction="column"> | ||||
<Grid item xs={12} sm={12} md={12} lg={12} xl={12}> | <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 ? | {isLoading && editMode ? | ||||
<LoadingComponent /> : | <LoadingComponent /> : | ||||
<ApplicationDetailCard | <ApplicationDetailCard | ||||
@@ -358,7 +374,7 @@ const PublicNoticeDetail_GLD = () => { | |||||
</Box> | </Box> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={12} lg={12} xl={12}> | <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 | <GazetteDetailCard | ||||
// updateUserObject={updateUserObject} | // updateUserObject={updateUserObject} | ||||
applicationDetailData={applicationDetailData} | applicationDetailData={applicationDetailData} | ||||
@@ -369,21 +385,21 @@ const PublicNoticeDetail_GLD = () => { | |||||
</Box> | </Box> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={12} lg={12} xl={12}> | <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 | <TabTableDetail | ||||
applicationDetailData={applicationDetailData} | applicationDetailData={applicationDetailData} | ||||
proofList={proofList} | proofList={proofList} | ||||
paymentList={paymentList} | paymentList={paymentList} | ||||
/> | /> | ||||
</Box> | </Box> | ||||
<br/> | |||||
<br /> | |||||
</Grid> | </Grid> | ||||
</Grid> | </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 container> | ||||
<Grid item xs={12} md={12}> | <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 | <ClientDetailCard | ||||
// updateUserObject={updateUserObject} | // updateUserObject={updateUserObject} | ||||
applicationDetailData={applicationDetailData} | applicationDetailData={applicationDetailData} | ||||
@@ -148,7 +148,8 @@ const ApplicationDetailCard = ( | |||||
onClick={() => { checkExprityDate(true) }} | onClick={() => { checkExprityDate(true) }} | ||||
disabled={currentApplicationDetailData.status == "rejected" | disabled={currentApplicationDetailData.status == "rejected" | ||||
|| currentApplicationDetailData.status == "cancelled" | || currentApplicationDetailData.status == "cancelled" | ||||
|| currentApplicationDetailData.status == "paid"} | |||||
|| currentApplicationDetailData.status == "paid" | |||||
|| currentApplicationDetailData.creditor} | |||||
sx={{ | sx={{ | ||||
textTransform: 'capitalize', | textTransform: 'capitalize', | ||||
alignItems: 'end' | alignItems: 'end' | ||||
@@ -144,12 +144,11 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||||
: | : | ||||
<form onSubmit={formik.handleSubmit} style={{ padding: 12 }}> | <form onSubmit={formik.handleSubmit} style={{ padding: 12 }}> | ||||
{/*top button*/} | {/*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"> | <Grid container maxWidth justifyContent="flex-start"> | ||||
{editMode ? | {editMode ? | ||||
<> | <> | ||||
<Grid item sx={{ ml: 3, mr: 3 }}> | |||||
<Grid item sx={{ mr: 3 }}> | |||||
<Button | <Button | ||||
size="large" | size="large" | ||||
variant="contained" | variant="contained" | ||||
@@ -180,7 +179,7 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||||
</> | </> | ||||
: | : | ||||
<> | <> | ||||
<Grid item sx={{ ml: 3, mr: 3 }}> | |||||
<Grid item sx={{ mr: 3 }}> | |||||
<Button | <Button | ||||
size="large" | size="large" | ||||
variant="contained" | variant="contained" | ||||
@@ -195,319 +194,315 @@ const UserInformationCard_Individual = ({ formData, loadDataFun }) => { | |||||
</Grid> | </Grid> | ||||
</> | </> | ||||
} | } | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
{/*end top button*/} | {/*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 | Individual User Details | ||||
</Typography> | </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({ | {FieldUtils.initField({ | ||||
valueName: "verifiedStatus", | valueName: "verifiedStatus", | ||||
disabled: true, | disabled: true, | ||||
form: formik, | form: formik, | ||||
})} | })} | ||||
</Grid> | </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({ | {FieldUtils.initField({ | ||||
valueName: "identification", | |||||
disabled: (!editMode), | |||||
valueName: "verifiedStatus", | |||||
disabled: true, | |||||
form: formik, | form: formik, | ||||
placeholder: "證件號碼", | |||||
inputProps: { | |||||
maxLength: 7, | |||||
onKeyDown: (e) => { | |||||
if (e.key === 'Enter') { | |||||
e.preventDefault(); | |||||
} | |||||
}, | |||||
} | |||||
})} | })} | ||||
</Grid> | </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({ | {FieldUtils.initField({ | ||||
valueName: "checkDigit", | |||||
valueName: "identification", | |||||
disabled: (!editMode), | disabled: (!editMode), | ||||
form: formik | form: formik | ||||
})} | })} | ||||
</Grid> | </Grid> | ||||
</> : | |||||
<Grid item lg={12}> | |||||
{FieldUtils.initField({ | |||||
valueName: "identification", | |||||
disabled: (!editMode), | |||||
form: formik | |||||
})} | |||||
</Grid> | |||||
} | |||||
} | |||||
</Grid> | |||||
</Grid> | </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({ | {FieldUtils.initField({ | ||||
valueName: "status", | valueName: "status", | ||||
disabled: true, | disabled: true, | ||||
form: formik, | form: formik, | ||||
})} | })} | ||||
</Grid> | </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> | </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> | |||||
<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> | ||||
</Grid> | </Grid> | ||||
</form> | </form> | ||||
} | } | ||||
</MainCard> | </MainCard> | ||||
@@ -1,7 +1,7 @@ | |||||
// material-ui | // material-ui | ||||
import * as React from "react"; | 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 FileList from "../../../components/FileList" | ||||
import MainCard from "../../../components/MainCard"; | import MainCard from "../../../components/MainCard"; | ||||
import * as HttpUtils from "../../../utils/HttpUtils"; | import * as HttpUtils from "../../../utils/HttpUtils"; | ||||
@@ -35,26 +35,6 @@ const UserMaintainPage_Individual = () => { | |||||
const [formData, setFormData] = React.useState({}) | const [formData, setFormData] = React.useState({}) | ||||
const [isLoading, setLoding] = React.useState(true); | 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(() => { | React.useEffect(() => { | ||||
loadData(); | loadData(); | ||||
}, []); | }, []); | ||||
@@ -102,7 +82,7 @@ const UserMaintainPage_Individual = () => { | |||||
isLoading ? | isLoading ? | ||||
<LoadingComponent /> | <LoadingComponent /> | ||||
: | : | ||||
<Grid container sx={{ minHeight: '90vh', backgroundColor: 'backgroundColor.default' }}> | |||||
<Grid container sx={{ backgroundColor: 'backgroundColor.default', maxWidth:'100%' }}> | |||||
<Grid item xs={12}> | <Grid item xs={12}> | ||||
<div style={BackgroundHead}> | <div style={BackgroundHead}> | ||||
<Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | ||||
@@ -116,29 +96,26 @@ const UserMaintainPage_Individual = () => { | |||||
</Button> | </Button> | ||||
</Grid> | </Grid> | ||||
{/*col 1*/} | {/*col 1*/} | ||||
<Grid item xs={12}> | |||||
<Grid item xs={12} sm={12} md={12} lg={12} > | |||||
<Grid container> | <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> | ||||
<Grid item xs={12} md={12} lg={12}> | <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 | <FileList | ||||
sx={_sx} | |||||
refId={params.id} | refId={params.id} | ||||
refType={"identification"} | refType={"identification"} | ||||
/> | /> | ||||
</MainCard> | |||||
</Box> | |||||
</Grid> | |||||
</MainCard> | |||||
<br /> | <br /> | ||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
@@ -59,8 +59,8 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||||
phoneNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).required(displayErrorMsg('請輸入聯絡電話')), | phoneNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).required(displayErrorMsg('請輸入聯絡電話')), | ||||
faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(), | faxNumber: yup.string().min(8, displayErrorMsg('請輸入8位數字')).nullable(), | ||||
brExpiryDate: yup.string().min(8, displayErrorMsg('請輸入商業登記證有效日期')), | 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 !== undefined) { | ||||
if (value.match(brNo_pattern)) { | if (value.match(brNo_pattern)) { | ||||
return true | return true | ||||
@@ -56,6 +56,7 @@ const Register = () => { | |||||
const [completed, setCompleted] = useState([false]); | const [completed, setCompleted] = useState([false]); | ||||
const [updateValid, setUpdateValid] = useState(false); | const [updateValid, setUpdateValid] = useState(false); | ||||
const [base64Url, setBase64Url] = useState("") | const [base64Url, setBase64Url] = useState("") | ||||
const [checkCode, setCheckCode] = useState("") | |||||
const [idNo, setIdNo] = useState(""); | const [idNo, setIdNo] = useState(""); | ||||
const totalSteps = () => { | const totalSteps = () => { | ||||
@@ -526,8 +526,9 @@ const BusCustomFormWizard = (props) => { | |||||
phone: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')).required(displayErrorMsg('請輸入聯絡電話')), | phone: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')).required(displayErrorMsg('請輸入聯絡電話')), | ||||
fax: yup.string().min(8, displayErrorMsg('請輸入最少8位數字')), | 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('請輸入商業登記證有效日期')), | 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 !== undefined) { | ||||
if (value.match(brNo_pattern)) { | if (value.match(brNo_pattern)) { | ||||
return true | return true | ||||
@@ -834,7 +835,7 @@ const BusCustomFormWizard = (props) => { | |||||
<Stack spacing={1}> | <Stack spacing={1}> | ||||
<InputLabel htmlFor="brNo-signup" sx={{ whiteSpace: 'pre-wrap', wordWrap: 'break-word' }}> | <InputLabel htmlFor="brNo-signup" sx={{ whiteSpace: 'pre-wrap', wordWrap: 'break-word' }}> | ||||
<Typography variant="pnspsFormHeader"> | <Typography variant="pnspsFormHeader"> | ||||
商業登記證號碼 (e.g. 12341234-123-12-12-1) | |||||
商業登記證號碼 (e.g. 12341234) | |||||
<span style={{ color: '#f10000' }}>*</span> | <span style={{ color: '#f10000' }}>*</span> | ||||
</Typography> | </Typography> | ||||
</InputLabel> | </InputLabel> | ||||
@@ -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_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_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_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 UPDATE_PUBLIC_NOTICE_APPLY_DETAIL = apiPath+'/application/save'; | ||||
export const GET_ISSUE_COMBO = apiPath+'/gazette-issue/combo'; | export const GET_ISSUE_COMBO = apiPath+'/gazette-issue/combo'; | ||||
@@ -86,4 +86,10 @@ export const denmandNoteStatus = [ | |||||
{ key: 2, labelCht: '待支付', label:'To be Paid', type: 'to be paid' }, | { key: 2, labelCht: '待支付', label:'To be Paid', type: 'to be paid' }, | ||||
{ key: 3, labelCht: '已付費', label:'Paid', type: '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' }, | |||||
]; | ]; |
@@ -27,12 +27,12 @@ export const getDateField = ({ label, valueName, form, disabled }) => { | |||||
} | } | ||||
export const getTextField = ({ 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' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
<Typography variant="h5">{label}</Typography> | <Typography variant="h5">{label}</Typography> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={6} lg={6}> | |||||
<Grid item xs={12} sm={12} md={6} lg={6}> | |||||
{initField({ | {initField({ | ||||
type: "text", | type: "text", | ||||
valueName: valueName, | valueName: valueName, | ||||
@@ -71,7 +71,7 @@ export const getTextArea = ({ label, valueName, form, disabled, inputProps, ...p | |||||
export const getPhoneField = ({ label, valueName, form, disabled }) => { | 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} | <Grid item xs={12} md={3} lg={3} | ||||
sx={{ display: 'flex', alignItems: 'center' }}> | sx={{ display: 'flex', alignItems: 'center' }}> | ||||
<Typography variant="h5">{label}</Typography> | <Typography variant="h5">{label}</Typography> | ||||
@@ -123,7 +123,7 @@ export const getAddressField = ({ label, valueName, form, disabled }) => { | |||||
</Grid> | </Grid> | ||||
</Grid> | </Grid> | ||||
<Grid item xs={12} md={6} lg={6}> | <Grid item xs={12} md={6} lg={6}> | ||||
<Grid item lg={12}> | |||||
<Grid item lg={12} sx={{mb:2}}> | |||||
{initField({ | {initField({ | ||||
type: "text", | type: "text", | ||||
valueName: valueName[0], | valueName: valueName[0], | ||||
@@ -131,7 +131,7 @@ export const getAddressField = ({ label, valueName, form, disabled }) => { | |||||
disabled: disabled | disabled: disabled | ||||
})} | })} | ||||
</Grid> | </Grid> | ||||
<Grid item lg={12}> | |||||
<Grid item lg={12} sx={{mb:2}}> | |||||
{initField({ | {initField({ | ||||
type: "text", | type: "text", | ||||
valueName: valueName[1], | valueName: valueName[1], | ||||
@@ -139,7 +139,7 @@ export const getAddressField = ({ label, valueName, form, disabled }) => { | |||||
disabled: disabled | disabled: disabled | ||||
})} | })} | ||||
</Grid> | </Grid> | ||||
<Grid item lg={12}> | |||||
<Grid item lg={12} sx={{mb:2}}> | |||||
{initField({ | {initField({ | ||||
type: "text", | type: "text", | ||||
valueName: valueName[2], | 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 }) => { | 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' }}> | <Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}> | ||||
<Typography variant="h5">{label}</Typography> | <Typography variant="h5">{label}</Typography> | ||||
</Grid> | </Grid> | ||||
@@ -3,17 +3,17 @@ | |||||
import {getStatusTag} from "utils/statusUtils/Base"; | import {getStatusTag} from "utils/statusUtils/Base"; | ||||
export function getStatus(params) { | 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) { | switch (status) { | ||||
case "submitted": | case "submitted": | ||||
return getStatusTag({ color: "#f5a83d", text: "處理中" }) | return getStatusTag({ color: "#f5a83d", text: "處理中" }) | ||||
case "reviewed": | case "reviewed": | ||||
return getStatusTag({ color: "#f5a83d", text: "處理中" }) | return getStatusTag({ color: "#f5a83d", text: "處理中" }) | ||||
case "confirmed": | case "confirmed": | ||||
if (localStorage.getItem('userData').creditor) | |||||
if (creditor) | |||||
return getStatusTag({ color: "#22a13f", text: "待發布" }) | return getStatusTag({ color: "#22a13f", text: "待發布" }) | ||||
else | else | ||||
return getStatusTag({ color: "#22a13f", text: "待付款" }) | return getStatusTag({ color: "#22a13f", text: "待付款" }) | ||||
@@ -37,16 +37,16 @@ export function getStatusByText(status) { | |||||
} | } | ||||
export function getStatusEng(params) { | 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) { | switch (status) { | ||||
case "submitted": | case "submitted": | ||||
return getStatusTag({ color: "#f5a83d", text: "Submitted" }) | return getStatusTag({ color: "#f5a83d", text: "Submitted" }) | ||||
case "reviewed": | case "reviewed": | ||||
return getStatusTag({ color: "#0C489E", text: "Reviewed" }) | return getStatusTag({ color: "#0C489E", text: "Reviewed" }) | ||||
case "confirmed": | case "confirmed": | ||||
if (localStorage.getItem('userData').creditor) | |||||
if (creditor) | |||||
return getStatusTag({ color: "#22a13f", text: "Pending Publish" }) | return getStatusTag({ color: "#22a13f", text: "Pending Publish" }) | ||||
else | else | ||||
return getStatusTag({ color: "#22a13f", text: "Pending Payment" }) | return getStatusTag({ color: "#22a13f", text: "Pending Payment" }) | ||||