| @@ -130,7 +130,7 @@ export const SetupAxiosInterceptors = () => { | |||
| return response; | |||
| }, | |||
| async (error) => { | |||
| // ** const { config, response: { status } } = error | |||
| // const { config, response: { status } } = error | |||
| if (error.response.status === 401 && error.config.url !== apiPath + REFRESH_TOKEN) { | |||
| // Make a request to refresh the access token | |||
| const refreshToken = localStorage.getItem('refreshToken'); | |||
| @@ -170,25 +170,27 @@ export const SetupAxiosInterceptors = () => { | |||
| } | |||
| // ** if (status === 401) { | |||
| if (response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| } | |||
| } | |||
| // if (response.status === 401) { | |||
| // if (localStorage.getItem("expiredAlertShown") === null) { | |||
| // localStorage.setItem("expiredAlertShown", true) | |||
| // alert("登入驗證已過期,請重新登入。") | |||
| // } | |||
| // } | |||
| if (response && response.status === 401) { | |||
| if (localStorage.getItem("expiredAlertShown") === null) { | |||
| localStorage.setItem("expiredAlertShown", true) | |||
| alert("登入驗證已過期,請重新登入。") | |||
| } | |||
| } | |||
| // if (response && response.status === 401) { | |||
| // if (localStorage.getItem("expiredAlertShown") === null) { | |||
| // localStorage.setItem("expiredAlertShown", true) | |||
| // alert("登入驗證已過期,請重新登入。") | |||
| // } | |||
| // } | |||
| if (localStorage.getItem("expiredAlertShown")) { | |||
| await dispatch(handleLogoutFunction()); | |||
| await navigate('/login'); | |||
| await window.location.reload(); | |||
| } | |||
| // console.log(error) | |||
| } else { | |||
| if (error.response.status === 401) { | |||
| await dispatch(handleLogoutFunction()); | |||
| @@ -196,8 +198,8 @@ export const SetupAxiosInterceptors = () => { | |||
| // await window.location.reload(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| return Promise.reject(error) | |||
| } | |||
| @@ -75,6 +75,7 @@ const SearchPublicNoticeForm = ({ applySearch, searchCriteria }) => { | |||
| }; | |||
| function resetForm() { | |||
| setStatus(ComboData.paymentStatus[0]); | |||
| setMinDate(DateUtils.dateValue(new Date().setDate(new Date().getDate()-14))) | |||
| setMaxDate(DateUtils.dateValue(new Date())) | |||
| reset(); | |||
| @@ -222,7 +222,7 @@ export default function SubmittedTab({ setCount, url }) { | |||
| <FormattedMessage id={utils.getPaymentMethod(params.row.paymentMethod)} /><br /> | |||
| <div> | |||
| {dateStr(params.row.closingDateOff)} | |||
| {params.row.paymentMethod=="online" ? " 2pm" | |||
| {params.row.paymentMethod=="online" ? " 2:00pm" | |||
| :params.row.paymentMethod=="demandNote" ? " 12:00pm" | |||
| : " 12:30pm"} | |||
| </div> | |||
| @@ -16,7 +16,7 @@ const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingCo | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const UserAuthorityCard = ({ isCollectData, updateUserAuthList, userData, isNewRecord, editMode}) => { | |||
| const UserAuthorityCard = ({ isCollectData, updateUserAuthList, userData, isNewRecord, editMode, createMode}) => { | |||
| const [currentAuthData, setCurrentAuthData] = React.useState({}); | |||
| const [onReady, setOnReady] = useState(false); | |||
| const [selectedRow, setSelectedRow] = useState([]); | |||
| @@ -59,7 +59,7 @@ const UserAuthorityCard = ({ isCollectData, updateUserAuthList, userData, isNewR | |||
| userAuth={userData.authIds} | |||
| setSelectedRow={setSelectedRow} | |||
| isNewRecord={isNewRecord} | |||
| editMode={editMode} | |||
| editMode={createMode?true:editMode} | |||
| /> | |||
| <br/> | |||
| </MainCard> | |||
| @@ -15,7 +15,7 @@ const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingCo | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord,editMode}) => { | |||
| const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord,editMode,createMode}) => { | |||
| const [currentUserData, setCurrentUserData] = React.useState({}); | |||
| const [onReady, setOnReady] = useState(false); | |||
| const [selectedRow, setSelectedRow] = useState([]); | |||
| @@ -58,7 +58,7 @@ const UserGroupCard = ({isCollectData, updateUserGroupList,userData,isNewRecord, | |||
| userGroup={userData.groupIds} | |||
| setSelectedRow={setSelectedRow} | |||
| isNewRecord={isNewRecord} | |||
| editMode={editMode} | |||
| editMode={createMode?true:editMode} | |||
| /> | |||
| <br/> | |||
| </MainCard> | |||
| @@ -22,7 +22,7 @@ import VisibilityOff from '@mui/icons-material/VisibilityOff'; | |||
| import { useIntl } from "react-intl"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewRecord, editMode}) => { | |||
| const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewRecord, editMode, createMode}) => { | |||
| //const params = useParams(); | |||
| const [currentUserData, setCurrentUserData] = React.useState({}); | |||
| const [locked, setLocked] = useState(false); | |||
| @@ -205,7 +205,7 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||
| value: currentUserData.enName, | |||
| })} | |||
| id='enName' | |||
| disabled={!editMode} | |||
| disabled={createMode?false:!editMode} | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| @@ -229,7 +229,7 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||
| value: currentUserData.post, | |||
| })} | |||
| id='post' | |||
| disabled={!editMode} | |||
| disabled={createMode?false:!editMode} | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| @@ -253,7 +253,7 @@ const UserInformationCard = ({ isCollectData, updateUserObject, userData, isNewR | |||
| value: currentUserData.emailAddress, | |||
| })} | |||
| id='emailAddress' | |||
| disabled={!editMode} | |||
| disabled={createMode?false:!editMode} | |||
| /> | |||
| </FormControl> | |||
| </Grid> | |||
| @@ -55,6 +55,7 @@ const UserMaintainPage = () => { | |||
| const [isNewRecord, setIsNewRecord] = useState(false); | |||
| const [refUserData, setRefUserData] = useState({}); | |||
| const [editMode, setEditMode] = useState(false); | |||
| const [createMode, setCreateMode] = useState(false); | |||
| function updateUserObject(userData) { | |||
| setEditedCustomerData(userData); | |||
| @@ -120,6 +121,7 @@ const UserMaintainPage = () => { | |||
| } | |||
| ); | |||
| setIsNewRecord(true); | |||
| setCreateMode(true) | |||
| } | |||
| }, []); | |||
| @@ -203,11 +205,14 @@ const UserMaintainPage = () => { | |||
| navigate('/userSearchview'); | |||
| } | |||
| }) | |||
| .catch(error => { | |||
| console.log(error); | |||
| return false; | |||
| }); | |||
| } | |||
| .catch(function (error){ | |||
| // console.log(error.response.data) | |||
| if(error.response.data.error == "USERNAME_NOT_AVAILABLE"){ | |||
| alert("Username is already used.") | |||
| } | |||
| return false; | |||
| }); | |||
| } | |||
| } | |||
| setUserConfirm(false); | |||
| }, [editedCustomerData, userGroupData, userAuthData]); | |||
| @@ -257,65 +262,84 @@ const UserMaintainPage = () => { | |||
| isGrantedAny(["MAINTAIN_USER"]) ? | |||
| <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} | |||
| color='error' | |||
| > | |||
| Delete User | |||
| </Button> | |||
| <GeneralConfirmWindow | |||
| isWindowOpen={isWindowOpen} | |||
| title={"Attention"} | |||
| content={`Confirm to delete User "${userData.data.username}" ?`} | |||
| onNormalClose={handleClose} | |||
| onConfirmClose={deleteData} | |||
| /> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| { | |||
| createMode? | |||
| <ThemeProvider theme={PNSPS_BUTTON_THEME}> | |||
| <Grid item sx={{ ml: 3, mr: 3 }}> | |||
| <Button | |||
| size="large" | |||
| variant="contained" | |||
| type="submit" | |||
| sx={{ | |||
| textTransform: 'capitalize', | |||
| alignItems: 'end' | |||
| }} | |||
| onClick={submitData} | |||
| > | |||
| Create User | |||
| </Button> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| : | |||
| 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} | |||
| color='error' | |||
| > | |||
| Delete User | |||
| </Button> | |||
| <GeneralConfirmWindow | |||
| isWindowOpen={isWindowOpen} | |||
| title={"Attention"} | |||
| content={`Confirm to delete User "${userData.data.username}" ?`} | |||
| onNormalClose={handleClose} | |||
| onConfirmClose={deleteData} | |||
| /> | |||
| </Grid> | |||
| </ThemeProvider> | |||
| } | |||
| </Grid> | |||
| </Grid> | |||
| @@ -332,6 +356,7 @@ const UserMaintainPage = () => { | |||
| isCollectData={isCollectData} | |||
| isNewRecord={isNewRecord} | |||
| editMode={editMode} | |||
| createMode={createMode} | |||
| /> | |||
| </Box> | |||
| </Grid> | |||
| @@ -344,6 +369,7 @@ const UserMaintainPage = () => { | |||
| isCollectData={isCollectData} | |||
| isNewRecord={isNewRecord} | |||
| editMode={editMode} | |||
| createMode={createMode} | |||
| /> | |||
| </Box> | |||
| </Grid> | |||
| @@ -358,6 +384,7 @@ const UserMaintainPage = () => { | |||
| isCollectData={isCollectData} | |||
| isNewRecord={isNewRecord} | |||
| editMode={editMode} | |||
| createMode={createMode} | |||
| /> | |||
| </Box> | |||
| </Grid> | |||