From a19b70e1af79238c298ef8af6d0265bf6a22c92d Mon Sep 17 00:00:00 2001 From: vincentlu <t1341870251@gmail.com> Date: 星期五, 07 二月 2025 16:15:50 +0800 Subject: [PATCH] # --- rsf-admin/src/page/login/Register.jsx | 60 ++++++++++++++++++++++++++++- rsf-admin/src/i18n/zh.js | 1 rsf-admin/src/page/login/Login.jsx | 26 +++++++++++- rsf-admin/src/i18n/en.js | 1 4 files changed, 82 insertions(+), 6 deletions(-) diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js index 71fd531..8d6f16a 100644 --- a/rsf-admin/src/i18n/en.js +++ b/rsf-admin/src/i18n/en.js @@ -222,6 +222,7 @@ page: { login: { tenant: 'Company', + confirmPwd: 'Confirm Password', button: { login: 'LOG IN', register: 'REGISTER', diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js index bcf6924..9e6b249 100644 --- a/rsf-admin/src/i18n/zh.js +++ b/rsf-admin/src/i18n/zh.js @@ -222,6 +222,7 @@ page: { login: { tenant: '鍏徃', + confirmPwd: '纭瀵嗙爜', button: { login: 'LOG IN', register: 'REGISTER', diff --git a/rsf-admin/src/page/login/Login.jsx b/rsf-admin/src/page/login/Login.jsx index aa5dcf4..c4e4825 100644 --- a/rsf-admin/src/page/login/Login.jsx +++ b/rsf-admin/src/page/login/Login.jsx @@ -7,7 +7,9 @@ Button, TextField, Stack, - Autocomplete + Autocomplete, + InputAdornment, + IconButton, } from '@mui/material'; import { useTranslate, @@ -16,6 +18,8 @@ } from 'react-admin'; import { useForm, Controller } from 'react-hook-form'; import ProviderChoices from "./ProviderChoices"; +import Visibility from '@mui/icons-material/Visibility'; +import VisibilityOff from '@mui/icons-material/VisibilityOff'; const Login = (props) => { const translate = useTranslate(); @@ -27,6 +31,7 @@ const { control, watch, handleSubmit, setValue } = useForm(); const [loading, setLoading] = useState(false); + const [showPassword, setShowPassword] = useState(false); const username = watch('username'); const password = watch('password'); @@ -122,6 +127,7 @@ variant="standard" disabled={loading} autoFocus + autoComplete="off" /> )} /> @@ -135,10 +141,24 @@ <TextField {...field} label={translate('ra.auth.password')} - type="password" + type={showPassword ? 'text' : 'password'} variant="standard" disabled={loading} - + autoComplete="off" + InputProps={{ + endAdornment: ( + <InputAdornment position="end"> + <IconButton + aria-label="toggle password visibility" + onClick={() => setShowPassword((show) => !show)} + onMouseDown={(event) => { event.preventDefault() }} + edge="end" + > + {showPassword ? <VisibilityOff /> : <Visibility />} + </IconButton> + </InputAdornment> + ), + }} /> )} /> diff --git a/rsf-admin/src/page/login/Register.jsx b/rsf-admin/src/page/login/Register.jsx index ca2f563..940663b 100644 --- a/rsf-admin/src/page/login/Register.jsx +++ b/rsf-admin/src/page/login/Register.jsx @@ -7,7 +7,9 @@ Button, TextField, Stack, - Autocomplete + Autocomplete, + InputAdornment, + IconButton, } from '@mui/material'; import { useTranslate, @@ -16,6 +18,8 @@ } from 'react-admin'; import { useForm, Controller } from 'react-hook-form'; import ProviderChoices from "./ProviderChoices"; +import Visibility from '@mui/icons-material/Visibility'; +import VisibilityOff from '@mui/icons-material/VisibilityOff'; const Register = (props) => { const translate = useTranslate(); @@ -27,9 +31,11 @@ const { control, watch, handleSubmit, setValue } = useForm(); const [loading, setLoading] = useState(false); + const [showPassword, setShowPassword] = useState(true); const username = watch('username'); const password = watch('password'); + const confirmPassword = watch('confirmPassword'); const tenantId = watch('tenantId'); useEffect(() => { @@ -39,6 +45,8 @@ }, [tenantList, setValue]); const onSubmit = (data) => { + notify("Registration is not open yet"); + return; setLoading(true); // js native confirm && root login( @@ -116,6 +124,7 @@ variant="standard" disabled={loading} autoFocus + autoComplete="off" /> )} /> @@ -129,10 +138,55 @@ <TextField {...field} label={translate('ra.auth.password')} - type="password" + type={showPassword ? 'text' : 'password'} variant="standard" disabled={loading} + autoComplete="off" + InputProps={{ + endAdornment: ( + <InputAdornment position="end"> + <IconButton + aria-label="toggle password visibility" + onClick={() => setShowPassword((show) => !show)} + onMouseDown={(event) => { event.preventDefault() }} + edge="end" + > + {showPassword ? <VisibilityOff /> : <Visibility />} + </IconButton> + </InputAdornment> + ), + }} + /> + )} + /> + <Controller + name="confirmPassword" + control={control} + defaultValue="" + rules={{ required: true }} + render={({ field }) => ( + <TextField + {...field} + label={translate('page.login.confirmPwd')} + type={showPassword ? 'text' : 'password'} + variant="standard" + disabled={loading} + autoComplete="off" + InputProps={{ + endAdornment: ( + <InputAdornment position="end"> + <IconButton + aria-label="toggle password visibility" + onClick={() => setShowPassword((show) => !show)} + onMouseDown={(event) => { event.preventDefault() }} + edge="end" + > + {showPassword ? <VisibilityOff /> : <Visibility />} + </IconButton> + </InputAdornment> + ), + }} /> )} /> @@ -142,7 +196,7 @@ <Button type="submit" variant="contained" - disabled={loading || !(tenantId && username && password)} + disabled={loading || !(tenantId && username && password && confirmPassword)} sx={{ backgroundColor: "#3D4BA7" }} -- Gitblit v1.9.1