From e6df4123693fca526040115475701bcd3e373904 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期四, 13 二月 2025 13:36:59 +0800
Subject: [PATCH] #
---
rsf-admin/src/page/login/Login.jsx | 54 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 42 insertions(+), 12 deletions(-)
diff --git a/rsf-admin/src/page/login/Login.jsx b/rsf-admin/src/page/login/Login.jsx
index e30af97..b70c721 100644
--- a/rsf-admin/src/page/login/Login.jsx
+++ b/rsf-admin/src/page/login/Login.jsx
@@ -7,25 +7,31 @@
Button,
TextField,
Stack,
- Autocomplete
+ Autocomplete,
+ InputAdornment,
+ IconButton,
} from '@mui/material';
import {
useTranslate,
useLogin,
useNotify,
} from 'react-admin';
-import { useForm, Controller } from 'react-hook-form';
+import { useForm, Controller, useWatch, FormProvider, useFormContext } 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();
const notify = useNotify();
const login = useLogin();
const location = useLocation();
- const { tenantList } = props;
+ const { systemInfo, tenantList } = props;
- const { control, watch, handleSubmit, setValue } = useForm();
+ const { control, handleSubmit, watch, setValue, getValues } = useForm();
const [loading, setLoading] = useState(false);
+ const [showPassword, setShowPassword] = useState(false);
const username = watch('username');
const password = watch('password');
@@ -33,7 +39,12 @@
useEffect(() => {
if (tenantList.length > 0 && !tenantId) {
- setValue('tenantId', tenantList[0].id);
+ const rememberTenantId = localStorage.getItem('remember_tenantId');
+ if (rememberTenantId && tenantList.some(t => t.id === Number(rememberTenantId))) {
+ setValue('tenantId', Number(rememberTenantId));
+ } else {
+ setValue('tenantId', tenantList[0].id);
+ }
}
}, [tenantList, setValue]);
@@ -87,7 +98,9 @@
getOptionLabel={(option) => option.name}
value={selectedTenant}
onChange={(_, newValue) => {
- onChange(newValue ? newValue.id : '');
+ const newTenantId = newValue ? newValue.id : '';
+ onChange(newTenantId);
+ localStorage.setItem('remember_tenantId', newTenantId);
}}
renderInput={(params) => (
<TextField
@@ -110,10 +123,11 @@
render={({ field }) => (
<TextField
{...field}
- label={translate('ra.auth.username')}
+ label={translate("page.login.username")}
variant="standard"
disabled={loading}
autoFocus
+ autoComplete="off"
/>
)}
/>
@@ -126,23 +140,37 @@
render={({ field }) => (
<TextField
{...field}
- label={translate('ra.auth.password')}
- type="password"
+ label={translate("page.login.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>
+ ),
+ }}
/>
)}
/>
- <Box mt={10}></Box>
+ <Box />
<Button
type="submit"
variant="contained"
disabled={loading || !(tenantId && username && password)}
sx={{
- backgroundColor: "#3D4BA7"
+ // backgroundColor: "#3D4BA7"
}}
>
{loading && <CircularProgress size={25} thickness={2} />}
@@ -151,6 +179,8 @@
</Stack>
<Box mt={1} mb={1} sx={{ textAlign: 'center' }}>or</Box>
+
+ <ProviderChoices type="LOG IN" />
</Box >
</>
)
--
Gitblit v1.9.1