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