| @@ -2,6 +2,9 @@ | |||||
| import { useMediaQuery, Container, Link, Typography, Stack } from '@mui/material'; | import { useMediaQuery, Container, Link, Typography, Stack } from '@mui/material'; | ||||
| import bhkLogo from 'assets/images/BHK_logo_rgb_zh-hk.png'; | import bhkLogo from 'assets/images/BHK_logo_rgb_zh-hk.png'; | ||||
| import {FormattedMessage} from "react-intl"; | import {FormattedMessage} from "react-intl"; | ||||
| import { | |||||
| isGLDLoggedIn, | |||||
| } from "utils/Utils"; | |||||
| // ==============================|| FOOTER - AUTHENTICATION ||============================== // | // ==============================|| FOOTER - AUTHENTICATION ||============================== // | ||||
| const AuthFooter = () => { | const AuthFooter = () => { | ||||
| @@ -42,14 +45,16 @@ const AuthFooter = () => { | |||||
| </Typography> | </Typography> | ||||
| </Stack> | </Stack> | ||||
| <Stack direction={matchDownSM ? 'column' : 'row'} spacing={matchDownSM ? 1 : 3} textAlign={matchDownSM ? 'center' : 'inherit'} justifyContent={matchDownSM?"center":"flex-end"}> | <Stack direction={matchDownSM ? 'column' : 'row'} spacing={matchDownSM ? 1 : 3} textAlign={matchDownSM ? 'center' : 'inherit'} justifyContent={matchDownSM?"center":"flex-end"}> | ||||
| <a href="https://www.w3.org/WAI/WCAG2AA-Conformance" | |||||
| title="Explanation of WCAG 2 Level AA conformance"> | |||||
| <img height="32" width="88" | |||||
| src="https://www.w3.org/WAI/wcag2AA" | |||||
| alt="Level AA conformance, | |||||
| W3C WAI Web Content Accessibility Guidelines 2.0"/> | |||||
| </a> | |||||
| {!isGLDLoggedIn()? | |||||
| <a href="https://www.w3.org/WAI/WCAG2AA-Conformance" | |||||
| title="Explanation of WCAG 2 Level AA conformance"> | |||||
| <img height="32" width="88" | |||||
| src="https://www.w3.org/WAI/wcag2AA" | |||||
| alt="Level AA conformance, | |||||
| W3C WAI Web Content Accessibility Guidelines 2.0"/> | |||||
| </a>:null | |||||
| } | |||||
| <a href="https://www.brandhk.gov.hk/zh-hk" | <a href="https://www.brandhk.gov.hk/zh-hk" | ||||
| title="Brand Hong Kong"> | title="Brand Hong Kong"> | ||||
| <img src={bhkLogo} alt="logo" height="32" width="88" | <img src={bhkLogo} alt="logo" height="32" width="88" | ||||
| @@ -221,7 +221,7 @@ const MultiPaymentWindow = (props) => { | |||||
| const readyToPayment = appIdList.every(appId => combinedAppIdsArray.includes(appId)); | const readyToPayment = appIdList.every(appId => combinedAppIdsArray.includes(appId)); | ||||
| if (readyToPayment){ | if (readyToPayment){ | ||||
| // props.setConfirmPayment(true); | |||||
| props.setConfirmPayment(true); | |||||
| return; | return; | ||||
| }else{ | }else{ | ||||
| const appIdsInData = appIdList.filter(appId => !combinedAppIdsArray.some(item => item === appId)); | const appIdsInData = appIdList.filter(appId => !combinedAppIdsArray.some(item => item === appId)); | ||||
| @@ -0,0 +1,81 @@ | |||||
| // material-ui | |||||
| import * as React from 'react'; | |||||
| import {FiDataGrid} from "components/FiDataGrid"; | |||||
| import { | |||||
| // Button, | |||||
| // Typography, | |||||
| useMediaQuery | |||||
| } from '@mui/material'; | |||||
| import * as DateUtils from "utils/DateUtils" | |||||
| // import {useNavigate} from "react-router-dom"; | |||||
| // import { | |||||
| // isORGLoggedIn, | |||||
| // } from "utils/Utils"; | |||||
| import {useTheme} from "@emotion/react"; | |||||
| // import {getStatusIntl} from "utils/statusUtils/PublicNoteStatusUtils"; | |||||
| // import { | |||||
| // FormattedMessage, | |||||
| // useIntl} from "react-intl"; | |||||
| // ==============================|| EVENT TABLE ||============================== // | |||||
| export default function LoginGrid({rows}) { | |||||
| // const navigate = useNavigate() | |||||
| const theme = useTheme(); | |||||
| const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | |||||
| // const intl = useIntl(); | |||||
| // const handleDetailClick = (params) => () => { | |||||
| // navigate('/publicNotice/'+ params.id); | |||||
| // }; | |||||
| // const remarkHeadername = rows.orgId===null?"我的備註":"Care Of / 我的備註" | |||||
| const columns = [ | |||||
| { | |||||
| id: 'loginTime', | |||||
| field: 'loginTime', | |||||
| headerName: "Date Time", | |||||
| width: isMdOrLg ? 'auto' : 160, | |||||
| flex: isMdOrLg ? 1 : undefined, | |||||
| valueGetter:(params)=>{ | |||||
| return DateUtils.datetimeStr(params?.value); | |||||
| } | |||||
| }, | |||||
| { | |||||
| id: 'result', | |||||
| field: 'result', | |||||
| headerName: 'Result', | |||||
| width: isMdOrLg ? 'auto' : 300, | |||||
| flex: isMdOrLg ? 2 : undefined, | |||||
| valueGetter:(params)=>{ | |||||
| let resultMessage = ""; | |||||
| if (params.row.success>0){ | |||||
| resultMessage="Success" | |||||
| } | |||||
| if (params.row.success==0){ | |||||
| resultMessage="Fail" | |||||
| } | |||||
| if (params.row.success<0){ | |||||
| resultMessage= params.row.actionType + " by " + (params.row.modifiedBy == null?"multiple times failed login attempt.":params.row.modifiedBy) | |||||
| } | |||||
| return resultMessage; | |||||
| } | |||||
| }, | |||||
| ]; | |||||
| // function handleRowDoubleClick(params) { | |||||
| // navigate('/publicNotice/'+ params.id); | |||||
| // } | |||||
| return ( | |||||
| <div style={{minHeight: 200, height:"100%", width: '100%', padding: 4}}> | |||||
| <FiDataGrid | |||||
| rows={rows} | |||||
| columns={columns} | |||||
| customPageSize={10} | |||||
| // onRowDoubleClick={handleRowDoubleClick} | |||||
| getRowHeight={() => 'auto'} | |||||
| /> | |||||
| </div> | |||||
| ); | |||||
| } | |||||
| @@ -15,7 +15,7 @@ const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingCo | |||||
| // ==============================|| EVENT TABLE ||============================== // | // ==============================|| EVENT TABLE ||============================== // | ||||
| export default function UserAuthTable({setSelectedRow, userAuth,isNewRecord}) { | |||||
| export default function UserAuthTable({setSelectedRow, userAuth,isNewRecord,editMode}) { | |||||
| const [authData, setAuthData] = useState([]); | const [authData, setAuthData] = useState([]); | ||||
| const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
| const [currentSelectedRow, setCurrentSelectedRow] = useState(userAuth); | const [currentSelectedRow, setCurrentSelectedRow] = useState(userAuth); | ||||
| @@ -37,7 +37,8 @@ export default function UserAuthTable({setSelectedRow, userAuth,isNewRecord}) { | |||||
| axios.get(`${apiPath}${GET_AUTH_LIST}`) | axios.get(`${apiPath}${GET_AUTH_LIST}`) | ||||
| .then((response) => { | .then((response) => { | ||||
| if (response.status === 200) { | if (response.status === 200) { | ||||
| setAuthData(response.data.records); | |||||
| const data = response.data.records | |||||
| setAuthData(data); | |||||
| } | } | ||||
| }) | }) | ||||
| .catch(error => { | .catch(error => { | ||||
| @@ -79,7 +80,7 @@ export default function UserAuthTable({setSelectedRow, userAuth,isNewRecord}) { | |||||
| editMode="row" | editMode="row" | ||||
| initialState={{ | initialState={{ | ||||
| pagination: { | pagination: { | ||||
| paginationModel: {page: 0, pageSize: 20}, | |||||
| paginationModel: {page: 0, pageSize: 10}, | |||||
| }, | }, | ||||
| }} | }} | ||||
| pageSizeOptions={[10, 20, 30]} | pageSizeOptions={[10, 20, 30]} | ||||
| @@ -87,8 +88,10 @@ export default function UserAuthTable({setSelectedRow, userAuth,isNewRecord}) { | |||||
| rowSelectionModel={currentSelectedRow} | rowSelectionModel={currentSelectedRow} | ||||
| onRowSelectionModelChange={(ids) => { | onRowSelectionModelChange={(ids) => { | ||||
| // console.log(ids); | // console.log(ids); | ||||
| setSelectedRow(ids); | |||||
| setCurrentSelectedRow(ids); | |||||
| if (editMode){ | |||||
| setSelectedRow(ids); | |||||
| setCurrentSelectedRow(ids); | |||||
| } | |||||
| }} | }} | ||||
| autoHeight | autoHeight | ||||
| sx={_sx} | sx={_sx} | ||||
| @@ -16,7 +16,7 @@ const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingCo | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const UserAuthorityCard = ({ isCollectData, updateUserAuthList, userData, isNewRecord }) => { | |||||
| const UserAuthorityCard = ({ isCollectData, updateUserAuthList, userData, isNewRecord, editMode}) => { | |||||
| const [currentAuthData, setCurrentAuthData] = React.useState({}); | const [currentAuthData, setCurrentAuthData] = React.useState({}); | ||||
| const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
| const [selectedRow, setSelectedRow] = useState([]); | const [selectedRow, setSelectedRow] = useState([]); | ||||
| @@ -59,6 +59,7 @@ const UserAuthorityCard = ({ isCollectData, updateUserAuthList, userData, isNewR | |||||
| userAuth={userData.authIds} | userAuth={userData.authIds} | ||||
| setSelectedRow={setSelectedRow} | setSelectedRow={setSelectedRow} | ||||
| isNewRecord={isNewRecord} | isNewRecord={isNewRecord} | ||||
| editMode={editMode} | |||||
| /> | /> | ||||
| <br/> | <br/> | ||||
| </MainCard> | </MainCard> | ||||
| @@ -15,7 +15,7 @@ const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingCo | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord}) => { | |||||
| const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord,editMode}) => { | |||||
| const [currentUserData, setCurrentUserData] = React.useState({}); | const [currentUserData, setCurrentUserData] = React.useState({}); | ||||
| const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
| const [selectedRow, setSelectedRow] = useState([]); | const [selectedRow, setSelectedRow] = useState([]); | ||||
| @@ -58,6 +58,7 @@ const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord} | |||||
| userGroup={userData.groupIds} | userGroup={userData.groupIds} | ||||
| setSelectedRow={setSelectedRow} | setSelectedRow={setSelectedRow} | ||||
| isNewRecord={isNewRecord} | isNewRecord={isNewRecord} | ||||
| editMode={editMode} | |||||
| /> | /> | ||||
| <br/> | <br/> | ||||
| </MainCard> | </MainCard> | ||||
| @@ -13,7 +13,7 @@ const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingCo | |||||
| // ==============================|| EVENT TABLE ||============================== // | // ==============================|| EVENT TABLE ||============================== // | ||||
| export default function UserGroupTable({setSelectedRow, userGroup,isNewRecord}) { | |||||
| export default function UserGroupTable({setSelectedRow, userGroup,isNewRecord,editMode}) { | |||||
| const [groupData, setGroupData] = useState([]); | const [groupData, setGroupData] = useState([]); | ||||
| const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
| const [currentSelectedRow, setCurrentSelectedRow] = useState(userGroup); | const [currentSelectedRow, setCurrentSelectedRow] = useState(userGroup); | ||||
| @@ -85,8 +85,10 @@ export default function UserGroupTable({setSelectedRow, userGroup,isNewRecord}) | |||||
| rowSelectionModel={currentSelectedRow} | rowSelectionModel={currentSelectedRow} | ||||
| onRowSelectionModelChange={(ids) => { | onRowSelectionModelChange={(ids) => { | ||||
| // console.log(ids); | // console.log(ids); | ||||
| setSelectedRow(ids); | |||||
| setCurrentSelectedRow(ids); | |||||
| if (editMode){ | |||||
| setSelectedRow(ids); | |||||
| setCurrentSelectedRow(ids); | |||||
| } | |||||
| }} | }} | ||||
| autoHeight | autoHeight | ||||
| sx={_sx} | sx={_sx} | ||||
| @@ -22,7 +22,7 @@ import VisibilityOff from '@mui/icons-material/VisibilityOff'; | |||||
| import { useIntl } from "react-intl"; | import { useIntl } from "react-intl"; | ||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewRecord }) => { | |||||
| const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewRecord, editMode}) => { | |||||
| //const params = useParams(); | //const params = useParams(); | ||||
| const [currentUserData, setCurrentUserData] = React.useState({}); | const [currentUserData, setCurrentUserData] = React.useState({}); | ||||
| const [locked, setLocked] = useState(false); | const [locked, setLocked] = useState(false); | ||||
| @@ -56,12 +56,12 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||||
| }, [currentUserData]); | }, [currentUserData]); | ||||
| useEffect(() => { | useEffect(() => { | ||||
| console.log("num"); | |||||
| console.log(pw.match(/^(?=.*[0-9])/)); | |||||
| console.log("small char"); | |||||
| console.log(pw.match(/^(?=.*[a-z])/)); | |||||
| console.log("SpecialChar"); | |||||
| console.log(pw.match(/^(?=.*[!@#%&]?)/)); | |||||
| // console.log("num"); | |||||
| // console.log(pw.match(/^(?=.*[0-9])/)); | |||||
| // console.log("small char"); | |||||
| // console.log(pw.match(/^(?=.*[a-z])/)); | |||||
| // console.log("SpecialChar"); | |||||
| // console.log(pw.match(/^(?=.*[!@#%&]?)/)); | |||||
| setPwErr(''); | setPwErr(''); | ||||
| if (pw.length == 0) { | if (pw.length == 0) { | ||||
| @@ -205,6 +205,7 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||||
| value: currentUserData.enName, | value: currentUserData.enName, | ||||
| })} | })} | ||||
| id='enName' | id='enName' | ||||
| disabled={!editMode} | |||||
| /> | /> | ||||
| </FormControl> | </FormControl> | ||||
| </Grid> | </Grid> | ||||
| @@ -228,6 +229,7 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||||
| value: currentUserData.post, | value: currentUserData.post, | ||||
| })} | })} | ||||
| id='post' | id='post' | ||||
| disabled={!editMode} | |||||
| /> | /> | ||||
| </FormControl> | </FormControl> | ||||
| </Grid> | </Grid> | ||||
| @@ -251,6 +253,7 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||||
| value: currentUserData.emailAddress, | value: currentUserData.emailAddress, | ||||
| })} | })} | ||||
| id='emailAddress' | id='emailAddress' | ||||
| disabled={!editMode} | |||||
| /> | /> | ||||
| </FormControl> | </FormControl> | ||||
| </Grid> | </Grid> | ||||
| @@ -294,6 +297,7 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||||
| name="checked" | name="checked" | ||||
| color="primary" | color="primary" | ||||
| size="small" | size="small" | ||||
| disabled={!editMode} | |||||
| /> | /> | ||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| @@ -10,7 +10,8 @@ import { useEffect, useState } from "react"; | |||||
| import * as React from "react"; | import * as React from "react"; | ||||
| import axios from "axios"; | import axios from "axios"; | ||||
| import { useNavigate, useParams } from "react-router-dom"; | import { useNavigate, useParams } from "react-router-dom"; | ||||
| import { GLD_USER_PATH, DELETE_USER, POST_ADMIN_USER_REGISTER } from "utils/ApiPathConst"; | |||||
| import { GLD_USER_PATH, DELETE_USER, POST_ADMIN_USER_REGISTER,GET_LOGIN_LOG_LIST } from "utils/ApiPathConst"; | |||||
| import * as HttpUtils from "utils/HttpUtils"; | |||||
| import Loadable from 'components/Loadable'; | import Loadable from 'components/Loadable'; | ||||
| import { lazy } from 'react'; | import { lazy } from 'react'; | ||||
| @@ -18,6 +19,10 @@ const UserInformationCard = Loadable(lazy(() => import('./UserInformationCard')) | |||||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | ||||
| const UserGroupCard = Loadable(lazy(() => import('./UserGroupCard'))); | const UserGroupCard = Loadable(lazy(() => import('./UserGroupCard'))); | ||||
| const UserAuthorityCard = Loadable(lazy(() => import('./UserAuthorityCard'))); | const UserAuthorityCard = Loadable(lazy(() => import('./UserAuthorityCard'))); | ||||
| const LoginGrid = Loadable(React.lazy(() => import('./LoginGrid'))); | |||||
| import {ThemeProvider} from "@emotion/react"; | |||||
| import {PNSPS_BUTTON_THEME} from "themes/buttonConst"; | |||||
| import { | import { | ||||
| GeneralConfirmWindow, | GeneralConfirmWindow, | ||||
| getDeletedRecordWithRefList, | getDeletedRecordWithRefList, | ||||
| @@ -51,7 +56,8 @@ const UserMaintainPage = () => { | |||||
| const [userConfirm, setUserConfirm] = useState(false); | const [userConfirm, setUserConfirm] = useState(false); | ||||
| const [isNewRecord, setIsNewRecord] = useState(false); | const [isNewRecord, setIsNewRecord] = useState(false); | ||||
| const [refUserData, setRefUserData] = React.useState({}); | const [refUserData, setRefUserData] = React.useState({}); | ||||
| const [loginLogData, setLoginLogData] = React.useState([]) | |||||
| const [editMode, setEditMode] = React.useState(false); | |||||
| function updateUserObject(userData) { | function updateUserObject(userData) { | ||||
| setEditedCustomerData(userData); | setEditedCustomerData(userData); | ||||
| @@ -99,17 +105,7 @@ const UserMaintainPage = () => { | |||||
| useEffect(() => { | useEffect(() => { | ||||
| if (params.id > 0) { | if (params.id > 0) { | ||||
| axios.get(`${GLD_USER_PATH}/${params.id}`) | |||||
| .then((response) => { | |||||
| if (response.status === 200) { | |||||
| setRefUserData(response.data); | |||||
| setUserData(response.data); | |||||
| } | |||||
| }) | |||||
| .catch(error => { | |||||
| console.log(error); | |||||
| return false; | |||||
| }); | |||||
| loadData() | |||||
| } | } | ||||
| else { | else { | ||||
| setUserData( | setUserData( | ||||
| @@ -131,7 +127,25 @@ const UserMaintainPage = () => { | |||||
| }, []); | }, []); | ||||
| const loadData = () => { | |||||
| setOnReady(false); | |||||
| setEditMode(false); | |||||
| axios.get(`${GLD_USER_PATH}/${params.id}`) | |||||
| .then((response) => { | |||||
| if (response.status === 200) { | |||||
| setRefUserData(response.data); | |||||
| setUserData(response.data); | |||||
| getLoginLogList() | |||||
| } | |||||
| }) | |||||
| .catch(error => { | |||||
| console.log(error); | |||||
| return false; | |||||
| }); | |||||
| } | |||||
| useEffect(() => { | useEffect(() => { | ||||
| // if (Object.keys(userData).length > 0 && userData !== undefined) { | |||||
| if (Object.keys(userData).length > 0 && userData !== undefined) { | if (Object.keys(userData).length > 0 && userData !== undefined) { | ||||
| setOnReady(true); | setOnReady(true); | ||||
| } | } | ||||
| @@ -201,6 +215,23 @@ const UserMaintainPage = () => { | |||||
| setUserConfirm(false); | setUserConfirm(false); | ||||
| }, [editedCustomerData, userGroupData, userAuthData]); | }, [editedCustomerData, userGroupData, userAuthData]); | ||||
| const getLoginLogList = () => { | |||||
| HttpUtils.get({ | |||||
| url: `${GET_LOGIN_LOG_LIST}`, | |||||
| params:{ | |||||
| userId:params.id | |||||
| }, | |||||
| onSuccess: function (response) { | |||||
| // console.log(response) | |||||
| setLoginLogData(response); | |||||
| } | |||||
| }); | |||||
| } | |||||
| const onEditClick = () => { | |||||
| setEditMode(true); | |||||
| }; | |||||
| return ( | return ( | ||||
| !onReady ? | !onReady ? | ||||
| <Grid container sx={{ minHeight: '87vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center"> | <Grid container sx={{ minHeight: '87vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center"> | ||||
| @@ -223,6 +254,70 @@ const UserMaintainPage = () => { | |||||
| </Button> | </Button> | ||||
| </Grid> | </Grid> | ||||
| {/*col 1*/} | {/*col 1*/} | ||||
| {/*bottom button*/} | |||||
| <Grid item s={12} md={12} lg={12} sx={{ mt:2, mb:2 }} alignItems={"start"} justifyContent="center"> | |||||
| <Grid container maxWidth justifyContent="flex-start"> | |||||
| {editMode ? | |||||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||||
| <Button | |||||
| variant="contained" | |||||
| onClick={loadData} | |||||
| color="cancel" | |||||
| > | |||||
| Reset & Back | |||||
| </Button> | |||||
| </Grid> | |||||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||||
| <Button | |||||
| size="large" | |||||
| variant="contained" | |||||
| type="submit" | |||||
| sx={{ | |||||
| textTransform: 'capitalize', | |||||
| alignItems: 'end' | |||||
| }} | |||||
| onClick={submitData} | |||||
| > | |||||
| Save | |||||
| </Button> | |||||
| </Grid> | |||||
| </ThemeProvider>: | |||||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||||
| <Grid item sx={{ml: 3,mr: 3 }}> | |||||
| <Button | |||||
| variant="contained" | |||||
| onClick={onEditClick} | |||||
| > | |||||
| Edit | |||||
| </Button> | |||||
| </Grid> | |||||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||||
| <Button | |||||
| size="large" | |||||
| variant="contained" | |||||
| sx={{ | |||||
| textTransform: 'capitalize', | |||||
| alignItems: 'end' | |||||
| }} | |||||
| disabled={isNewRecord} | |||||
| onClick={handleDeleteClick} | |||||
| > | |||||
| Delete User | |||||
| </Button> | |||||
| <GeneralConfirmWindow | |||||
| isWindowOpen={isWindowOpen} | |||||
| title={"Attention"} | |||||
| content={`Confirm to delete User "${userData.data.username}" ?`} | |||||
| onNormalClose={handleClose} | |||||
| onConfirmClose={deleteData} | |||||
| /> | |||||
| </Grid> | |||||
| </ThemeProvider> | |||||
| } | |||||
| </Grid> | |||||
| </Grid> | |||||
| <Grid item xs={12} md={5} lg={5}> | <Grid item xs={12} md={5} lg={5}> | ||||
| <Grid container> | <Grid container> | ||||
| <Grid item xs={12} md={12} lg={12}> | <Grid item xs={12} md={12} lg={12}> | ||||
| @@ -232,6 +327,7 @@ const UserMaintainPage = () => { | |||||
| userData={userData} | userData={userData} | ||||
| isCollectData={isCollectData} | isCollectData={isCollectData} | ||||
| isNewRecord={isNewRecord} | isNewRecord={isNewRecord} | ||||
| editMode={editMode} | |||||
| /> | /> | ||||
| </Box> | </Box> | ||||
| </Grid> | </Grid> | ||||
| @@ -243,6 +339,7 @@ const UserMaintainPage = () => { | |||||
| userData={userData} | userData={userData} | ||||
| isCollectData={isCollectData} | isCollectData={isCollectData} | ||||
| isNewRecord={isNewRecord} | isNewRecord={isNewRecord} | ||||
| editMode={editMode} | |||||
| /> | /> | ||||
| </Box> | </Box> | ||||
| </Grid> | </Grid> | ||||
| @@ -256,50 +353,16 @@ const UserMaintainPage = () => { | |||||
| userData={userData} | userData={userData} | ||||
| isCollectData={isCollectData} | isCollectData={isCollectData} | ||||
| isNewRecord={isNewRecord} | isNewRecord={isNewRecord} | ||||
| editMode={editMode} | |||||
| /> | /> | ||||
| </Box> | </Box> | ||||
| </Grid> | </Grid> | ||||
| {/*bottom button*/} | |||||
| <Grid item s={12} md={12} lg={12} sx={{ mt:1, mb:2 }} alignItems={"end"} justifyContent="center"> | |||||
| <Grid container maxWidth justifyContent="flex-end"> | |||||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||||
| <Button | |||||
| size="large" | |||||
| variant="contained" | |||||
| sx={{ | |||||
| textTransform: 'capitalize', | |||||
| alignItems: 'end' | |||||
| }} | |||||
| disabled={isNewRecord} | |||||
| onClick={handleDeleteClick} | |||||
| > | |||||
| <Typography variant="h5">Delete User</Typography> | |||||
| </Button> | |||||
| <GeneralConfirmWindow | |||||
| isWindowOpen={isWindowOpen} | |||||
| title={"Attention"} | |||||
| content={`Confirm to delete User "${userData.data.username}" ?`} | |||||
| onNormalClose={handleClose} | |||||
| onConfirmClose={deleteData} | |||||
| /> | |||||
| </Grid> | |||||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||||
| <Button | |||||
| size="large" | |||||
| variant="contained" | |||||
| type="submit" | |||||
| sx={{ | |||||
| textTransform: 'capitalize', | |||||
| alignItems: 'end' | |||||
| }} | |||||
| onClick={submitData} | |||||
| > | |||||
| <Typography variant="h5">Save</Typography> | |||||
| </Button> | |||||
| </Grid> | |||||
| </Grid> | |||||
| <Grid item xs={12} md={12} lg={12}> | |||||
| <Box xs={12} ml={2} mt={2} mr={3} sx={{ borderRadius: '10px', backgroundColor: '#fff' }}> | |||||
| <LoginGrid | |||||
| rows = {loginLogData} | |||||
| /> | |||||
| </Box> | |||||
| </Grid> | </Grid> | ||||
| </Grid> | </Grid> | ||||
| ); | ); | ||||