Bläddra i källkod

add client code

update layout
update pdf page
update user group combo
master
kelvinsuen 11 månader sedan
förälder
incheckning
2a561c75d2
16 ändrade filer med 171 tillägg och 61 borttagningar
  1. +18
    -18
      src/menu-items/setting.js
  2. +65
    -2
      src/pages/client/ClientMaintainPage/ClientForm.js
  3. +1
    -1
      src/pages/client/ClientMaintainPage/index.js
  4. +11
    -0
      src/pages/client/ClientSearchPage/ClientSearchForm.js
  5. +19
    -13
      src/pages/client/ClientSearchPage/ClientTable.js
  6. +1
    -1
      src/pages/lionerLoginLog/index.js
  7. +1
    -1
      src/pages/lionerPasswordPolicyPage/index.js
  8. +1
    -1
      src/pages/lionerSettingPage/index.js
  9. +4
    -4
      src/pages/lionerUserDetailPage/UserInformationCard.js
  10. +1
    -1
      src/pages/lionerUserDetailPage/index.js
  11. +1
    -1
      src/pages/lionerUserSearchPage/index.js
  12. +4
    -0
      src/pages/pdf/PdfMaintainPage/index.js
  13. +2
    -2
      src/pages/pdf/PdfSearchPage/PdfSearchForm.js
  14. +26
    -13
      src/pages/pdf/PdfSearchPage/PdfTable.js
  15. +15
    -2
      src/pages/pdf/PdfSearchPage/SelectTemplateWindow.js
  16. +1
    -1
      src/utils/ComboConst.js

+ 18
- 18
src/menu-items/setting.js Visa fil

@@ -123,24 +123,24 @@ const setting = {
breadcrumbs: false, breadcrumbs: false,
ability:['VIEW','LOGIN_LOG'] ability:['VIEW','LOGIN_LOG']
}, },
{
id: 'passwordPolicy',
title: 'Password Policy',
type: 'item',
url: '/passwordpolicy',
icon: icons.SafetyCertificateOutlined,
breadcrumbs: false,
ability:['MANAGE','SYSTEM_CONFIGURATION']
},
{
id: 'setting',
title: 'System Configuration',
type: 'item',
url: '/setting',
icon: icons.SettingOutlined,
breadcrumbs: false,
ability:['MANAGE','SYSTEM_CONFIGURATION']
},
// {
// id: 'passwordPolicy',
// title: 'Password Policy',
// type: 'item',
// url: '/passwordpolicy',
// icon: icons.SafetyCertificateOutlined,
// breadcrumbs: false,
// ability:['MANAGE','SYSTEM_CONFIGURATION']
// },
// {
// id: 'setting',
// title: 'System Configuration',
// type: 'item',
// url: '/setting',
// icon: icons.SettingOutlined,
// breadcrumbs: false,
// ability:['MANAGE','SYSTEM_CONFIGURATION']
// },
// { // {
// id: 'generateReminder', // id: 'generateReminder',
// title: 'Generate Reminder', // title: 'Generate Reminder',


+ 65
- 2
src/pages/client/ClientMaintainPage/ClientForm.js Visa fil

@@ -562,6 +562,39 @@ const ClientForm = ({ refClientDetail,


<form> <form>
<Grid container> <Grid container>
<Grid item xs={12} s={12} md={12} lg={5.5} sx={{mt:1, ml: 3, mr: 3, mb: 3}}>
<Grid container alignItems={"flex-start"}>
<Grid item xs={4} s={4} md={4} lg={4}
sx={{ml: 3, mr: 3,mt:1, display: 'flex', alignItems: 'flex-start'}}>
<Typography variant="lionerSize" component="span">
Client Code: <Typography sx={{ color: GENERAL_RED_COLOR }} component="span">*</Typography>
</Typography>
</Grid>

<Grid item xs={7} s={7} md={7} lg={6.5}>
<TextField
fullWidth
{...register("clientCode",
{
value: refClient.clientCode,
})}
id='clientCode'
required
inputProps={{maxLength: 255, style: {fontSize: '1.1rem'}}}
InputProps={{
style: { minHeight:'42.5px', maxHeight: '50vh' },
}}
multiline
maxRows={3}
error={!!errors.lastname}
helperText={errors.lastname}
disabled
autoComplete="off"
/>
</Grid>
</Grid>
</Grid>

<Grid item xs={12} s={12} md={12} lg={5.5} sx={{mt:1, ml: 3, mr: 3, mb: 3}}> <Grid item xs={12} s={12} md={12} lg={5.5} sx={{mt:1, ml: 3, mr: 3, mb: 3}}>
<Grid container alignItems={"flex-start"}> <Grid container alignItems={"flex-start"}>
<Grid item xs={4} s={4} md={4} lg={4} <Grid item xs={4} s={4} md={4} lg={4}
@@ -745,7 +778,7 @@ const ClientForm = ({ refClientDetail,
</Grid> </Grid>
</Grid> </Grid>


<Grid item xs={12} sm={12} md={12} lg={5.5} sx={{ml: 3, mr: 3, mb: 3}}>
{/* <Grid item xs={12} sm={12} md={12} lg={5.5} sx={{ml: 3, mr: 3, mb: 3}}>
<Grid container alignItems={"center"}> <Grid container alignItems={"center"}>
<Grid item xs={4} s={4} md={4} lg={4} <Grid item xs={4} s={4} md={4} lg={4}
sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}>
@@ -769,7 +802,7 @@ const ClientForm = ({ refClientDetail,
/> />
</Grid> </Grid>
</Grid> </Grid>
</Grid>
</Grid> */}


<Grid item xs={12} s={12} md={12} lg={5.5} sx={{ml: 3, mr: 3, mb: 3}}> <Grid item xs={12} s={12} md={12} lg={5.5} sx={{ml: 3, mr: 3, mb: 3}}>
<Grid container alignItems={"flex-start"}> <Grid container alignItems={"flex-start"}>
@@ -780,6 +813,21 @@ const ClientForm = ({ refClientDetail,
</Typography> </Typography>
</Grid> </Grid>


<Grid item xs={7} s={7} md={7} lg={6.5}>
<TextField
fullWidth
inputProps={{maxLength: 50}}
size="small"
{...register("cm",
{
value: "N/A",//refClient.phone1,
})}
id='cm'
disabled
autoComplete="off"
/>
</Grid>

{/* <Grid item xs={7} s={7} md={7} lg={7}> {/* <Grid item xs={7} s={7} md={7} lg={7}>
<Autocomplete <Autocomplete
multiple multiple
@@ -828,6 +876,21 @@ const ClientForm = ({ refClientDetail,
</Typography> </Typography>
</Grid> </Grid>


<Grid item xs={7} s={7} md={7} lg={6.5}>
<TextField
fullWidth
inputProps={{maxLength: 50}}
size="small"
{...register("cs",
{
value: "N/A",//refClient.phone1,
})}
id='cs'
disabled
autoComplete="off"
/>
</Grid>

{/* <Grid item xs={7} s={7} md={7} lg={7}> {/* <Grid item xs={7} s={7} md={7} lg={7}>
<Autocomplete <Autocomplete
multiple multiple


+ 1
- 1
src/pages/client/ClientMaintainPage/index.js Visa fil

@@ -182,7 +182,7 @@ const ClientPanel = () => {
<Grid container justifyContent="flex-start" alignItems="center"> <Grid container justifyContent="flex-start" alignItems="center">
<Grid item xs={3} sx={{mt:-1, mb: -2.25}} > <Grid item xs={3} sx={{mt:-1, mb: -2.25}} >
<Box sx={{ display: 'flex', alignItems: 'center'}}> <Box sx={{ display: 'flex', alignItems: 'center'}}>
<Typography align="center" variant="h5" >{isNewRecord? "New Client" : "Maintain Client"}</Typography>
<Typography align="center" variant="h4" >{isNewRecord? "New Client" : "Maintain Client"}</Typography>
</Box> </Box>
</Grid> </Grid>
</Grid> </Grid>


+ 11
- 0
src/pages/client/ClientSearchPage/ClientSearchForm.js Visa fil

@@ -240,6 +240,17 @@ const ClientSearchForm = ({applySearch, setExpanded,expanded}) => {
<ThemeProvider theme={LIONER_FORM_THEME}> <ThemeProvider theme={LIONER_FORM_THEME}>
{/*row 2*/} {/*row 2*/}
<Grid container alignItems={"flex-start"} > <Grid container alignItems={"flex-start"} >
<Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}>
<InputLabel htmlFor="clientCode">Client Code</InputLabel>
<TextField
fullWidth
{...register("clientCode")}
inputProps={{maxLength: 500}}
id="clientCode"
autoComplete="off"
/>
</Grid>

<Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}> <Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}>
<InputLabel htmlFor="clientLastName">Client Last Name</InputLabel> <InputLabel htmlFor="clientLastName">Client Last Name</InputLabel>
<TextField <TextField


+ 19
- 13
src/pages/client/ClientSearchPage/ClientTable.js Visa fil

@@ -87,6 +87,12 @@ export default function ClientTable({recordList, pageSize}) {
// // </div> // // </div>
// ), // ),
// }, // },
{
id: 'clientCode',
field: 'clientCode',
headerName: 'Client Code',
flex: 1.5,
},
{ {
id: 'fullname', id: 'fullname',
field: 'fullname', field: 'fullname',
@@ -168,19 +174,19 @@ export default function ClientTable({recordList, pageSize}) {
); );
} }
}, },
{
id: 'phone2',
field: 'phone2',
headerName: '2nd Phone No.',
flex: 1,
renderCell: (params) => {
return (
<div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}>
{params.value}
</div>
);
}
},
// {
// id: 'phone2',
// field: 'phone2',
// headerName: '2nd Phone No.',
// flex: 1,
// renderCell: (params) => {
// return (
// <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}>
// {params.value}
// </div>
// );
// }
// },
{ {
id: 'remarks', id: 'remarks',
field: 'remarks', field: 'remarks',


+ 1
- 1
src/pages/lionerLoginLog/index.js Visa fil

@@ -65,7 +65,7 @@ const LoginLogSearchPanel = () => {
<Grid container justifyContent="flex-start" alignItems="center"> <Grid container justifyContent="flex-start" alignItems="center">
<Grid item xs={3} sx={{mb: -2.25}} > <Grid item xs={3} sx={{mb: -2.25}} >
<Box sx={{ display: 'flex', alignItems: 'center'}}> <Box sx={{ display: 'flex', alignItems: 'center'}}>
<Typography align="center" variant="h5" >Login Log</Typography>
<Typography align="center" variant="h4" >Login Log</Typography>
</Box> </Box>
</Grid> </Grid>
</Grid> </Grid>


+ 1
- 1
src/pages/lionerPasswordPolicyPage/index.js Visa fil

@@ -156,7 +156,7 @@ const PasswordPolicyPage = () => {
<Grid container rowSpacing={4.5} columnSpacing={2.75} justifyContent="center"> <Grid container rowSpacing={4.5} columnSpacing={2.75} justifyContent="center">
<ThemeProvider theme={LIONER_FORM_THEME}> <ThemeProvider theme={LIONER_FORM_THEME}>
<Grid item xs={12} sx={{mb: -2.25}}> <Grid item xs={12} sx={{mb: -2.25}}>
<Typography variant="h5">Password Policy</Typography>
<Typography variant="h4">Password Policy</Typography>
</Grid> </Grid>
<Grid item xs={12} md={11} lg={10} > <Grid item xs={12} md={11} lg={10} >
<MainCard xs={12} md={12} lg={12} <MainCard xs={12} md={12} lg={12}


+ 1
- 1
src/pages/lionerSettingPage/index.js Visa fil

@@ -169,7 +169,7 @@ const SettingPage = () => {
: :
<Grid container rowSpacing={4.5} columnSpacing={2.75} justifyContent="center"> <Grid container rowSpacing={4.5} columnSpacing={2.75} justifyContent="center">
<Grid item xs={12} sx={{mb: -2.25}}> <Grid item xs={12} sx={{mb: -2.25}}>
<Typography variant="h5">System Configuration</Typography>
<Typography variant="h4">System Configuration</Typography>
</Grid> </Grid>
<Grid item xs={12} md={11} lg={10} > <Grid item xs={12} md={11} lg={10} >
<MainCard xs={12} md={12} lg={12} <MainCard xs={12} md={12} lg={12}


+ 4
- 4
src/pages/lionerUserDetailPage/UserInformationCard.js Visa fil

@@ -177,16 +177,16 @@ const UserInformationCard = ({isCollectData, updateUserObject,userData,
content={false} content={false}
// sx={{height:'77.5vh'}} // sx={{height:'77.5vh'}}
> >
<Typography variant="h5" sx={{mt: 1.5, ml: 3, mb: 1}}>
Information
</Typography>
{/*<Typography variant="h5" sx={{mt: 1.5, ml: 3, mb: 1}}>
</Typography>*/}


<form> <form>
{/* <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb:1}}> {/* <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb:1}}>
</Grid> */} </Grid> */}


<Grid container> <Grid container>
<Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mb: 1}}>
<Grid item xs={12} s={12} md={12} lg={12} sx={{mt: 3, ml: 3, mr: 3, mb: 1}}>
<Grid container alignItems={"center"}> <Grid container alignItems={"center"}>
<Grid item xs={4} s={4} md={4} lg={4} <Grid item xs={4} s={4} md={4} lg={4}
sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}> sx={{ml: 3, mr: 3, display: 'flex', alignItems: 'center'}}>


+ 1
- 1
src/pages/lionerUserDetailPage/index.js Visa fil

@@ -196,7 +196,7 @@ const UserMaintainPage = () => {
<Grid container rowSpacing={3} columnSpacing={1.5}> <Grid container rowSpacing={3} columnSpacing={1.5}>
<ThemeProvider theme={LIONER_FORM_THEME}> <ThemeProvider theme={LIONER_FORM_THEME}>
<Grid item xs={12} sx={{mt:-1, mb: -2.25}}> <Grid item xs={12} sx={{mt:-1, mb: -2.25}}>
<Typography variant="h5">{isNewRecord? "Create User" : "Maintain User"}</Typography>
<Typography variant="h4">{isNewRecord? "Create User" : "Maintain User"}</Typography>
</Grid> </Grid>
{/*col 1*/} {/*col 1*/}
<Grid item xs={12} md={12}/* lg={5}*/> <Grid item xs={12} md={12}/* lg={5}*/>


+ 1
- 1
src/pages/lionerUserSearchPage/index.js Visa fil

@@ -62,7 +62,7 @@ const UserSettingPage = () => {
<Grid container justifyContent="flex-start" alignItems="center"> <Grid container justifyContent="flex-start" alignItems="center">
<Grid item xs={12} sx={{mb: -2.25}} > <Grid item xs={12} sx={{mb: -2.25}} >
<Box sx={{ display: 'flex', alignItems: 'center'}}> <Box sx={{ display: 'flex', alignItems: 'center'}}>
<Typography align="center" variant="h5">View User</Typography>
<Typography align="center" variant="h4">View User</Typography>
</Box> </Box>
</Grid> </Grid>
</Grid> </Grid>


+ 4
- 0
src/pages/pdf/PdfMaintainPage/index.js Visa fil

@@ -23,6 +23,7 @@ function PDF() {
const viewerRef = useRef(null); // Ref for the DOM element where PDF will render const viewerRef = useRef(null); // Ref for the DOM element where PDF will render
const [pdfLoaded, setPdfLoaded] = useState(false); const [pdfLoaded, setPdfLoaded] = useState(false);
const [viewerLoaded, setViewerLoaded] = useState(false); const [viewerLoaded, setViewerLoaded] = useState(false);
const [isSaving, setIsSaving] = useState(false);
const [viewInstance,setViewInstance] = useState(); const [viewInstance,setViewInstance] = useState();
const [adobeDCView,setAdobeDCView] = useState(); const [adobeDCView,setAdobeDCView] = useState();
const [pdfUrl, setPdfUrl] = useState(); const [pdfUrl, setPdfUrl] = useState();
@@ -194,6 +195,7 @@ function PDF() {
const formData = new FormData(); const formData = new FormData();
formData.append('file', filledPdfBlob, 'filled_form.pdf'); formData.append('file', filledPdfBlob, 'filled_form.pdf');
formData.append('record', JSON.stringify(record)); formData.append('record', JSON.stringify(record));
setIsSaving(true);
// Send the filled PDF to your Spring Boot backend's save endpoint // Send the filled PDF to your Spring Boot backend's save endpoint
await axios.post(`${apiPath}${POST_PDF_PATH}`, formData, { await axios.post(`${apiPath}${POST_PDF_PATH}`, formData, {
headers: { headers: {
@@ -201,6 +203,7 @@ function PDF() {
}, },
}) })
.then(response => { .then(response => {
setIsSaving(false);
console.log('PDF saved on server:', response.data); console.log('PDF saved on server:', response.data);
setRecord({ setRecord({
id: response.data.data.id, id: response.data.data.id,
@@ -264,6 +267,7 @@ function PDF() {
variant="contained" variant="contained"
color="cancel" color="cancel"
onClick={viewerLoaded ? handleBackClick : handleBack} onClick={viewerLoaded ? handleBackClick : handleBack}
disabled={isSaving}
> >
Back Back
</Button> </Button>


+ 2
- 2
src/pages/pdf/PdfSearchPage/PdfSearchForm.js Visa fil

@@ -246,7 +246,7 @@ const PdfSearchForm = ({applySearch, setExpanded,expanded, clientId}) => {
</Grid> </Grid>
</Grid> </Grid>


<Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}>
{/* <Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:0.5}}>
<InputLabel htmlFor="remarks">Remarks</InputLabel> <InputLabel htmlFor="remarks">Remarks</InputLabel>
<TextField <TextField
fullWidth fullWidth
@@ -255,7 +255,7 @@ const PdfSearchForm = ({applySearch, setExpanded,expanded, clientId}) => {
id="remarks" id="remarks"
autoComplete="off" autoComplete="off"
/> />
</Grid>
</Grid> */}


</Grid> </Grid>




+ 26
- 13
src/pages/pdf/PdfSearchPage/PdfTable.js Visa fil

@@ -117,6 +117,19 @@ export default function PdfTable({recordList}) {
</div> </div>
), ),
}, },
{
id: 'version',
field: 'version',
headerName: 'Version',
flex: 0.5,
renderCell: (params) => {
return (
<div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}>
{params.value}
</div>
);
}
},
{ {
id: 'modified', id: 'modified',
field: 'modified', field: 'modified',
@@ -198,19 +211,19 @@ export default function PdfTable({recordList}) {
// ); // );
// } // }
// }, // },
{
id: 'remarks',
field: 'remarks',
headerName: 'Remarks',
flex: 2,
renderCell: (params) => {
return (
<div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}>
{params.value}
</div>
);
}
},
// {
// id: 'remarks',
// field: 'remarks',
// headerName: 'Remarks',
// flex: 2,
// renderCell: (params) => {
// return (
// <div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'normal', wordBreak: 'break-word'}}>
// {params.value}
// </div>
// );
// }
// },


]; ];




+ 15
- 2
src/pages/pdf/PdfSearchPage/SelectTemplateWindow.js Visa fil

@@ -46,6 +46,19 @@ export function SelectTemplateWindow({ isWindowOpen, onNormalClose, onConfirmClo
const createNewForm = (templateId) => { const createNewForm = (templateId) => {
navigate(`/pdf/maintain/-${clientId}T${templateId}`); navigate(`/pdf/maintain/-${clientId}T${templateId}`);
}; };

const generateColorFromKey = (key) => {
let hash = 0;
for (let i = 0; i < key.length; i++) {
hash += key.charCodeAt(i);
}

const baseHue = (hash * 37) % 360; // Multiply by a prime number for better distribution
const saturation = 120; // Higher saturation for more vibrant colors
const lightness = 30; // Lower lightness for darker colors

return `hsl(${baseHue}, ${saturation}%, ${lightness}%)`;
};
return ( return (
<Dialog <Dialog
@@ -75,8 +88,8 @@ export function SelectTemplateWindow({ isWindowOpen, onNormalClose, onConfirmClo
<div key={record.id} style={{ margin: '10px' }}> <div key={record.id} style={{ margin: '10px' }}>
<Button <Button
variant="contained" variant="contained"
color="create"
sx={{mr: 1}}
//color="create"
sx={{backgroundColor: generateColorFromKey(record.name.split(' ')[0]), color: 'white', mr: 1}}
onClick={() => createNewForm(record.id)} onClick={() => createNewForm(record.id)}
> >
{record.name} {record.name}


+ 1
- 1
src/utils/ComboConst.js Visa fil

@@ -52,7 +52,7 @@ export const MODULE_COMBO = [


export const USER_GROUP_COMBO = [ export const USER_GROUP_COMBO = [
// {id:0, key: 0, label: 'System Admin'}, // {id:0, key: 0, label: 'System Admin'},
{id:1, key: 1, label: 'Case Officer'},
{id:1, key: 1, label: 'Case Manager'},
{id:2, key: 2, label: 'Administrator'}, {id:2, key: 2, label: 'Administrator'},
]; ];




Laddar…
Avbryt
Spara