Bladeren bron

update jwt respon with type, chName and enName

master
Alex Cheung 2 jaren geleden
bovenliggende
commit
c4a7f92639
18 gewijzigde bestanden met toevoegingen van 229 en 66 verwijderingen
  1. +2
    -2
      src/layout/MainLayout/Header/HeaderContent/Profile/index.js
  2. +3
    -3
      src/layout/MainLayout/Header/index.js
  3. +4
    -2
      src/pages/authentication/AuthWrapper.js
  4. +3
    -1
      src/pages/authentication/auth-forms/AuthLogin.js
  5. +24
    -27
      src/pages/authentication/auth-forms/AuthLoginCustom.js
  6. +4
    -1
      src/pages/authentication/auth-forms/BusCustomFormWizard.js
  7. +5
    -1
      src/pages/authentication/auth-forms/CustomFormWizard.js
  8. +41
    -0
      src/pages/gldDashboard/index.js
  9. +3
    -3
      src/pages/pnspsUserDetailPage/UserInformationCard.js
  10. +3
    -3
      src/pages/pnspsUserSearchPage/UserSearchForm.js
  11. +3
    -3
      src/pages/pnspsUserSearchPage_Individual/UserSearchForm_Individual.js
  12. +3
    -3
      src/pages/pnspsUserSearchPage_Organization/UserSearchForm_Organization.js
  13. +40
    -0
      src/pages/publicDashboard/index.js
  14. +32
    -0
      src/routes/GLDUserRoutes.js
  15. +0
    -14
      src/routes/MainRoutes.js
  16. +32
    -0
      src/routes/PublicUserRoutes.js
  17. +11
    -2
      src/routes/index.js
  18. +16
    -1
      src/utils/Utils.js

+ 2
- 2
src/layout/MainLayout/Header/HeaderContent/Profile/index.js Bestand weergeven

@@ -152,9 +152,9 @@ const Profile = () => {
<Stack>
<Typography style={{ color: 'black',fontFamily: "微軟正黑體", fontSize: "1.2rem" }} variant="subtitle1">我的帳戶</Typography>
<Typography variant="body2" color="textSecondary">
{userData == null ? "" : userData.fullName}
{userData == null ? "" : userData.fullenName}
</Typography>
{/* <Typography variant="subtitle1">{userData == null ? "" : userData.fullName}</Typography> */}
{/* <Typography variant="subtitle1">{userData == null ? "" : userData.fullenName}</Typography> */}
</Stack>
</Stack>
</Grid>


+ 3
- 3
src/layout/MainLayout/Header/index.js Bestand weergeven

@@ -41,7 +41,7 @@ import AdminLogo from 'components/AdminLogo';
import MobileLogo from 'components/MobileLogo';
import Profile from './HeaderContent/Profile';
import "assets/style/navbarStyles.css";
import {isUserLoggedIn,isAdminLoggedIn} from "utils/Utils";
import {isUserLoggedIn,isGLDLoggedIn} from "utils/Utils";
import { handleLogoutFunction } from 'auth/index';

// assets
@@ -71,7 +71,7 @@ function Header(props) {
};
const loginContent = (
isAdminLoggedIn() ?
isGLDLoggedIn() ?
<div id="adminContent">
<li>
<Link className="dashboard" to='/dashboard'>Dashboard</Link>
@@ -180,7 +180,7 @@ function Header(props) {
<Box>
<AppBar component="nav">
<Toolbar id ="nav" width="100%">
{isAdminLoggedIn()
{isGLDLoggedIn()
?<Stack
direction="row"
justifyContent="flex-start"


+ 4
- 2
src/pages/authentication/AuthWrapper.js Bestand weergeven

@@ -43,14 +43,16 @@ const AuthWrapper = ({ children }) => (
justifyContent="space-between"
alignItems="center"
spacing={2}>
<Grid item xs={12} md={8} sx={{ ml: 4, mt: 3 ,display: { xs: 'none', sm: 'block' }}}>
<Grid item xs={12} md={8} lg={8} xl={9} sx={{ ml: 4, mt: 3 ,display: { xs: 'none', sm: 'block' }}}>
<Typography style={{textAlign: "center",fontFamily: "微軟正黑體",fontSize: "1.6rem"}}>香港特別行政區政府</Typography>
<Typography style={{textAlign: "center",fontFamily: "微軟正黑體",fontSize: "1.6rem",fontWeight:"bold"}}>憲報</Typography>
</Grid>
<Grid
item
xs={12}
md={3}
md={4}
lg={4}
xl={4}
container
justifyContent="right"
alignItems="center"


+ 3
- 1
src/pages/authentication/auth-forms/AuthLogin.js Bestand weergeven

@@ -70,8 +70,10 @@ const AuthLogin = () => {
setPosts(response.data);
const userData = {
id: response.data.id,
fullName: response.data.name,
fullenName: response.data.name,
fullchName: response.data.chName,
email: response.data.email,
type: response.data.type,
role: response.data.role,
abilities: response.data.abilities,
//avatar: require('src/assets/images/users/avatar-3.png').default,


+ 24
- 27
src/pages/authentication/auth-forms/AuthLoginCustom.js Bestand weergeven

@@ -55,12 +55,8 @@ const AuthLoginCustom = () => {

// let [posts, setPosts] = useState([]);
const [isValid, setisValid] = useState(false);
// const [isSuccess, setSuccess] = useState();
// const [isSumitting, setSumitting] = useState();
const [open, setOpen] = React.useState(false);
// useEffect(() => {
// // console.log("POST: " + posts.accessToken);
// },[posts]);
const [isButtonDisabled, setIsButtonDisabled] = useState(true);

const handleMouseDownPassword = (event) => {
event.preventDefault();
@@ -72,10 +68,13 @@ const AuthLoginCustom = () => {
useJwt
.login({username: values.username, password: values.password})
.then((response) => {
console.log("123")
const userData = {
id: response.data.id,
fullName: response.data.name,
fullenName: response.data.name,
fullchName: response.data.chName,
email: response.data.email,
type: response.data.type,
role: response.data.role,
abilities: response.data.abilities,
//avatar: require('src/assets/images/users/avatar-3.png').default,
@@ -90,6 +89,7 @@ const AuthLoginCustom = () => {
// setSuccess(false)
setOpen(true)
console.error(error)
console.log("321")
});
}else{
setOpen(true)
@@ -121,9 +121,11 @@ const AuthLoginCustom = () => {
)
{
setisValid(true)
setIsButtonDisabled(false);
return isValid
}else{
setisValid(false)
setIsButtonDisabled(true);
return isValid
}
};
@@ -134,27 +136,22 @@ const AuthLoginCustom = () => {
var lowerCase = /[a-z]/g;
var upperCase = /[A-Z]/g;
var numbers = /[0-9]/g;
var symbol = /^(?=.*[!@#%&])/;
if (!new_pass.match(lowerCase)) {
return false;
} else if (!new_pass.match(upperCase)) {
return false;
} else if (!new_pass.match(numbers)) {
return false;
} else if (new_pass.length < 8) {
} else if (!new_pass.match(symbol)) {
return false;
} else if (new_pass.length < 8) {
return false;
} else {
return true;
}
}

// function handle6Digi(value) {
// if (value.length < 6) {
// return false;
// } else {
// return true;
// }
// }

const handleClose = () => {
setOpen(false);
};
@@ -235,15 +232,23 @@ const AuthLoginCustom = () => {

<Grid item xs={12}>
<AnimateButton>
<Button disableElevation
fullWidth size="large" type="submit" variant="contained" color="primary">
<Button disableElevation disabled={isButtonDisabled}
fullWidth size="large" type="submit" variant="contained" color="primary"
sx={{
"&.Mui-disabled": {
background: "#bbdefb",
color: "#fff",
border: "2px solid",
borderColor: "#e7e7e7"
}
}}>
登錄
</Button>
</AnimateButton>
</Grid>
<Grid item xs={12}>
<Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}>
<Link variant="h6" component={RouterLink} to="" color="text.primary">
<Link variant="h6" component={RouterLink} to="" color="primary">
<Typography align="center">
忘記密碼?
</Typography>
@@ -252,7 +257,7 @@ const AuthLoginCustom = () => {
</Grid>
<Grid item xs={12}>
<Stack direction="row" justifyContent="space-between" alignItems="center" spacing={2}>
<Button fullWidth size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}>智方便登入</Button>
<Button size="large" variant="outlined" startIcon={<img src={iAmSmartICon} alt="iAM Smart" width="30" />}>智方便登入</Button>
</Stack>
</Grid>
<Grid item xs={12}>
@@ -265,14 +270,6 @@ const AuthLoginCustom = () => {
<Button fullWidth size="large" variant="outlined" href="/register" >建立/重新啟動帳戶</Button>
</Stack>
</Grid>
{/* <Grid item xs={12}>*/}
{/* <Divider>*/}
{/* <Typography variant="caption"> Login with</Typography>*/}
{/* </Divider>*/}
{/*</Grid>*/}
{/*<Grid item xs={12}>*/}
{/* <FirebaseSocial />*/}
{/*</Grid> */}
</Grid>
<PasswordAlertDialog open={open} handleClose={handleClose}/>
</form>


+ 4
- 1
src/pages/authentication/auth-forms/BusCustomFormWizard.js Bestand weergeven

@@ -313,14 +313,17 @@ const BusCustomFormWizard = (props) => {
var lowerCase = /[a-z]/g;
var upperCase = /[A-Z]/g;
var numbers = /[0-9]/g;
var symbol = /^(?=.*[!@#%&])/;
if (!new_pass.match(lowerCase)) {
return false;
} else if (!new_pass.match(upperCase)) {
return false;
} else if (!new_pass.match(numbers)) {
return false;
} else if (new_pass.length < 8) {
} else if (!new_pass.match(symbol)) {
return false;
} else if (new_pass.length < 8) {
return false;
} else {
return true;
}


+ 5
- 1
src/pages/authentication/auth-forms/CustomFormWizard.js Bestand weergeven

@@ -334,12 +334,15 @@ const CustomFormWizard = (props) => {
var lowerCase = /[a-z]/g;
var upperCase = /[A-Z]/g;
var numbers = /[0-9]/g;
var symbol = /^(?=.*[!@#%&])/;
if (!new_pass.match(lowerCase)) {
return false;
} else if (!new_pass.match(upperCase)) {
return false;
} else if (!new_pass.match(numbers)) {
return false;
} else if (!new_pass.match(symbol)) {
return false;
} else if (new_pass.length < 8) {
return false;
} else {
@@ -849,6 +852,7 @@ const CustomFormWizard = (props) => {
options={address5ComboList}
onChange={(event, newValue) => {
setSelectedAddress5(newValue);
// if()
}}
sx={{"& .MuiInputBase-root": { height: "41px" },"#address5-combo":{padding: "0px 0px 0px 0px"}, "& .MuiAutocomplete-endAdornment": { top: "auto" },}}
@@ -1085,7 +1089,7 @@ const CustomFormWizard = (props) => {
<Stack spacing={1} direction="column" justifyContent="space-between" alignItems="baseline" sx={{ mb: { xs: -0.5, sm: 0.5 } }}>
<Typography display="inline" variant="h4" sx={{ color: 'primary.primary'}}>身份證明文件</Typography>
<Typography display="inline" variant="h6" sx={{ fontSize: 12,color: 'primary.primary'}}>請上傳你的 有效身份證明文件 的數碼檔案,以驗證你的身份。</Typography>
<Typography display="inline" variant="h6" sx={{ fontSize: 12,color: 'primary.primary'}}>如: 香港身份證; 護照; 中國內地身份證等</Typography>
<Typography display="inline" variant="h6" sx={{ fontSize: 12,color: 'primary.primary'}}>如: 香港身份證; 護照; 中國內地身份證; 專業執業証書等</Typography>
<Stack mt={1} direction="row" justifyContent="flex-start" alignItems="center" spacing={2}>
<Button variant="contained" component="label" sx={{ fontSize: 12,height:'40px'}}>上傳身份證明文件
<input


+ 41
- 0
src/pages/gldDashboard/index.js Bestand weergeven

@@ -0,0 +1,41 @@
// import { useState } from 'react';

// material-ui
import {
// Avatar,
// AvatarGroup,
// Box,
// Button,
Grid,
// List,
// ListItemAvatar,
// ListItemButton,
// ListItemSecondaryAction,
// ListItemText,
// MenuItem,
// Stack,
// TextField,
Typography
} from '@mui/material';

// project import
// import Loadable from 'components/Loadable';
// import { lazy } from 'react';


// ==============================|| DASHBOARD - DEFAULT ||============================== //

const DashboardDefault = () => {
const userData = JSON.parse(localStorage.getItem("userData"));

return (
<Grid container rowSpacing={4.5} columnSpacing={2.75} sx={{minHeight: '80vh'}}>
<Grid item xs={12} ml={2} mt={1}>
<Typography variant="h5">Moring, {userData.fullenName}</Typography>
</Grid>
</Grid>
);
};

export default DashboardDefault;

+ 3
- 3
src/pages/pnspsUserDetailPage/UserInformationCard.js Bestand weergeven

@@ -171,11 +171,11 @@ const UserInformationCard = ({isCollectData, updateUserObject,userData}) => {
<Grid item xs={7} s={7} md={7} lg={6}>
<TextField
fullWidth
{...register("fullName",
{...register("fullenName",
{
value: currentUserData.fullname,
value: currentUserData.fullenName,
})}
id='fullName'
id='fullenName'
/>
</Grid>
</Grid>


+ 3
- 3
src/pages/pnspsUserSearchPage/UserSearchForm.js Bestand weergeven

@@ -53,7 +53,7 @@ const UserSearchForm = ({applySearch}) => {

const temp = {
username: data.userName,
fullName: data.fullName,
fullenName: data.fullenName,
post: data.post,
// subDivision: subDivision,
email: data.email,
@@ -107,8 +107,8 @@ const UserSearchForm = ({applySearch}) => {
<Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:3}}>
<TextField
fullWidth
{...register("fullName")}
id="fullName"
{...register("fullenName")}
id="fullenName"
label="Full Name"
/>
</Grid>


+ 3
- 3
src/pages/pnspsUserSearchPage_Individual/UserSearchForm_Individual.js Bestand weergeven

@@ -28,7 +28,7 @@ const UserSearchForm_Individual = ({applySearch}) => {

const temp = {
username: data.userName,
fullName: data.fullName,
fullenName: data.fullenName,
email: data.email,
phone: data.phone,
accountFilter: accountFilter,
@@ -68,8 +68,8 @@ const UserSearchForm_Individual = ({applySearch}) => {
<Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:3}}>
<TextField
fullWidth
{...register("fullName")}
id="fullName"
{...register("fullenName")}
id="fullenName"
label="Full Name"
/>
</Grid>


+ 3
- 3
src/pages/pnspsUserSearchPage_Organization/UserSearchForm_Organization.js Bestand weergeven

@@ -29,7 +29,7 @@ const UserSearchForm_Organization = ({applySearch}) => {

const temp = {
username: data.userName,
fullName: data.fullName,
fullenName: data.fullenName,
email: data.email,
phone: data.phone,
brNoStr: data.brNoStr,
@@ -90,8 +90,8 @@ const UserSearchForm_Organization = ({applySearch}) => {
<Grid item xs={9} s={6} md={5} lg={3} sx={{ml:3, mr:3, mb:3}}>
<TextField
fullWidth
{...register("fullName")}
id="fullName"
{...register("fullenName")}
id="fullenName"
label="Full Name"
/>
</Grid>


+ 40
- 0
src/pages/publicDashboard/index.js Bestand weergeven

@@ -0,0 +1,40 @@
// import { useState } from 'react';

// material-ui
import {
// Avatar,
// AvatarGroup,
// Box,
// Button,
Grid,
// List,
// ListItemAvatar,
// ListItemButton,
// ListItemSecondaryAction,
// ListItemText,
// MenuItem,
// Stack,
// TextField,
Typography
} from '@mui/material';

// project import
// import Loadable from 'components/Loadable';
// import { lazy } from 'react';


// ==============================|| DASHBOARD - DEFAULT ||============================== //

const DashboardDefault = () => {

return (
<Grid container rowSpacing={4.5} columnSpacing={2.75} sx={{minHeight: '80vh'}}>
<Grid item xs={12} ml={2} mt={1}>
<Typography variant="h5">我的公共啟事</Typography>
</Grid>
</Grid>
);
};

export default DashboardDefault;

+ 32
- 0
src/routes/GLDUserRoutes.js Bestand weergeven

@@ -0,0 +1,32 @@
import { lazy } from 'react';

// project import
import Loadable from 'components/Loadable';
import MainLayout from 'layout/MainLayout';

// render - dashboard
const DashboardDefault = Loadable(lazy(() => import('pages/gldDashboard')));

// ==============================|| MAIN ROUTING ||============================== //

const GLDUserRoutes = {
path: '/',
element: <MainLayout />,
children: [
{
path: '/',
element: <DashboardDefault />
},
{
path: '/',
children: [
{
path: 'dashboard',
element: <DashboardDefault />
}
]
},
]
};

export default GLDUserRoutes;

+ 0
- 14
src/routes/MainRoutes.js Bestand weergeven

@@ -5,7 +5,6 @@ import Loadable from 'components/Loadable';
import MainLayout from 'layout/MainLayout';

// render - dashboard
const DashboardDefault = Loadable(lazy(() => import('pages/dashboard')));

// render - sample page
const SamplePage = Loadable(lazy(() => import('pages/extra-pages/SamplePage')));
@@ -22,19 +21,6 @@ const MainRoutes = {
path: '/',
element: <MainLayout />,
children: [
{
path: '/',
element: <DashboardDefault />
},
{
path: '/',
children: [
{
path: 'dashboard',
element: <DashboardDefault />
}
]
},
{
path: 'color',
element: <Color />


+ 32
- 0
src/routes/PublicUserRoutes.js Bestand weergeven

@@ -0,0 +1,32 @@
import { lazy } from 'react';

// project import
import Loadable from 'components/Loadable';
import MainLayout from 'layout/MainLayout';

// render - dashboard
const DashboardDefault = Loadable(lazy(() => import('pages/publicDashboard')));

// ==============================|| MAIN ROUTING ||============================== //

const PublicDashboard = {
path: '/',
element: <MainLayout />,
children: [
{
path: '/',
element: <DashboardDefault />
},
{
path: '/',
children: [
{
path: 'dashboard',
element: <DashboardDefault />
}
]
},
]
};

export default PublicDashboard;

+ 11
- 2
src/routes/index.js Bestand weergeven

@@ -1,8 +1,15 @@
// project import
import LoginRoutes from './LoginRoutes'
import MainRoutes from './MainRoutes'
import PublicUserRoutes from './PublicUserRoutes'
import GLDUserRoutes from './GLDUserRoutes'
import {useRoutes} from 'react-router-dom'
import {isUserLoggedIn,isAdminLoggedIn} from "utils/Utils";
import {isUserLoggedIn,
// isAdminLoggedIn,
isGLDLoggedIn,
isINDLoggedIn,
isORGLoggedIn,
} from "utils/Utils";
import {Navigate} from "react-router";
import {
setupAxiosInterceptors,
@@ -36,7 +43,9 @@ console.log();
]
},
isUserLoggedIn() ? MainRoutes : LoginRoutes,
isUserLoggedIn()&&isAdminLoggedIn() ? SettingRoutes : LoginRoutes,
isUserLoggedIn()&&isINDLoggedIn()||isUserLoggedIn()&&isORGLoggedIn() ? PublicUserRoutes : LoginRoutes,
isUserLoggedIn()&&isGLDLoggedIn() ? SettingRoutes : LoginRoutes,
isUserLoggedIn()&&isGLDLoggedIn() ? GLDUserRoutes : LoginRoutes,
!isUserLoggedIn()?{
path: '*',
element: <Navigate to="/login"/>


+ 16
- 1
src/utils/Utils.js Bestand weergeven

@@ -62,7 +62,22 @@ export const isAdminLoggedIn = () =>{
if (localStorage.getItem('userData') != null){
return JSON.parse(localStorage.getItem('userData')).role === 'admin'
}
}
}
export const isGLDLoggedIn = () =>{
if (localStorage.getItem('userData') != null){
return JSON.parse(localStorage.getItem('userData')).type === 'GLD'
}
}
export const isINDLoggedIn = () =>{
if (localStorage.getItem('userData') != null){
return JSON.parse(localStorage.getItem('userData')).type === 'IND'
}
}
export const isORGLoggedIn = () =>{
if (localStorage.getItem('userData') != null){
return JSON.parse(localStorage.getItem('userData')).type === 'ORG'
}
}
/**
** This function is used for demo purpose route navigation
** In real app you won't need this function because your app will navigate to same route for each users regardless of ability


Laden…
Annuleren
Opslaan