From 7a00868dc7730b83dc1e3d232b9f2e2b43ad237a Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期五, 07 二月 2025 14:51:29 +0800
Subject: [PATCH] #

---
 rsf-admin/src/page/login/index.jsx |  247 ++++++++++++++++---------------------------------
 1 files changed, 80 insertions(+), 167 deletions(-)

diff --git a/rsf-admin/src/page/login/index.jsx b/rsf-admin/src/page/login/index.jsx
index 634211a..5c56eaf 100644
--- a/rsf-admin/src/page/login/index.jsx
+++ b/rsf-admin/src/page/login/index.jsx
@@ -1,195 +1,108 @@
-import * as React from 'react';
-import { useState } from 'react';
-import { useLocation } from 'react-router-dom';
+import React, { useState, useRef, useEffect, useMemo } from "react";
 import {
-    Avatar,
     Box,
-    Button,
+    AppBar,
     Card,
-    CardActions,
+    Toolbar,
     CircularProgress,
+    Typography,
+    Tabs,
+    Tab,
 } from '@mui/material';
-import LockIcon from '@mui/icons-material/Lock';
 import {
-    Form,
-    required,
-    TextInput,
     useTranslate,
     useLogin,
     useNotify,
-    SelectInput,
 } from 'react-admin';
 import { LOGIN_BACKGROUND } from '@/config/setting';
 import { tenants } from '@/api/auth';
+import Login from "./Login";
+import Register from "./Register";
 
-const Login = () => {
-    const [loading, setLoading] = useState(false);
+const Index = () => {
     const translate = useTranslate();
 
-    const notify = useNotify();
-    const login = useLogin();
-    const location = useLocation();
+    const [tab, setTab] = useState(0)
+    const [tenantList, setTenantList] = useState([]);
 
-    const [tenantList, setTenantList] = React.useState([]);
-    const [tenantId, setTenantId] = React.useState(null);
-
-    React.useEffect(() => {
+    useEffect(() => {
         tenants().then(data => {
             setTenantList(data);
-            if (data.length > 0) {
-                setTenantId(data[0].id);
-            }
         })
     }, []);
 
-    React.useEffect(() => {
-        console.log(tenantId);
-    }, [tenantId]);
-
-    const handleSubmit = (auth) => {
-        setLoading(true);
-        // js native confirm && root
-        login(
-            auth,
-            location.state ? (location.state).nextPathname : '/'
-        ).catch((error) => {
-            setLoading(false);
-            notify(
-                typeof error === 'string'
-                    ? error
-                    : typeof error === 'undefined' || !error.message
-                        ? 'ra.auth.sign_in_error'
-                        : error.message,
-                {
-                    type: 'error',
-                    messageArgs: {
-                        _:
-                            typeof error === 'string'
-                                ? error
-                                : error && error.message
-                                    ? error.message
-                                    : undefined,
-                    },
-                }
-            );
-        });
-    };
-
     return (
-        <Form onSubmit={handleSubmit} noValidate>
-            {/* https://unsplash.com/ */}
-            <Box
-                sx={{
-                    display: 'flex',
-                    flexDirection: 'column',
-                    minHeight: '100vh',
-                    alignItems: 'center',
-                    justifyContent: 'flex-start',
-                    // justifyContent: 'center',
-                    background: `url(/login_bg.jpg)`,
-                    backgroundRepeat: 'no-repeat',
-                    backgroundSize: 'cover',
+        <Box
+            sx={{
+                display: 'flex',
+                flexDirection: 'column',
+                minHeight: '100vh',
+                alignItems: 'center',
+                justifyContent: 'flex-start',
+                // justifyContent: 'center',
+                background: `url(/login_bg.jpg)`, // https://unsplash.com/
+                backgroundRepeat: 'no-repeat',
+                backgroundSize: 'cover',
+            }
+            }
+        >
+            <video
+                autoPlay
+                loop
+                muted
+                style={{
+                    position: 'fixed',
+                    top: 0,
+                    left: 0,
+                    width: '100%',
+                    height: '100%',
+                    // objectFit: 'cover',
+                    // objectFit: 'contain',
+                    objectFit: 'fill',
+                    // objectFit: 'scale-down',
+                    zIndex: 0,
                 }}
             >
-                <video
-                    autoPlay
-                    loop
-                    muted
-                    style={{
-                        position: 'fixed',
-                        top: 0,
-                        left: 0,
-                        width: '100%',
-                        height: '100%',
-                        // objectFit: 'cover',
-                        // objectFit: 'contain',
-                        objectFit: 'fill',
-                        // objectFit: 'scale-down',
-                        zIndex: 0,
-                    }}
-                >
-                    {LOGIN_BACKGROUND === 'media' && (
-                        <source src="/login_bg.mp4" type="video/mp4" />
-                    )}
-                </video>
+                {LOGIN_BACKGROUND === 'media' && (
+                    <source src="/login_bg.mp4" type="video/mp4" />
+                )}
+            </video>
 
-                <Card sx={{
-                    minWidth: 300,
-                    marginTop: '6em',
-                    zIndex: 1
-                }}>
-                    <Box
-                        sx={{
-                            margin: '1em',
-                            display: 'flex',
-                            justifyContent: 'center',
-                        }}
-                    >
-                        <Avatar sx={{ bgcolor: 'secondary.main' }}>
-                            <LockIcon />
-                        </Avatar>
-                    </Box>
-                    <Box
-                        sx={{
-                            marginTop: '1em',
-                            display: 'flex',
-                            justifyContent: 'center',
-                            color: theme => theme.palette.grey[500],
-                        }}
-                    >
-                        Hint: root / 123456
-                    </Box>
-                    <Box sx={{ padding: '0 1em 1em 1em' }}>
-                        <Box sx={{ marginTop: '1em' }}>
-                            <SelectInput
-                                label="page.login.tenant"
-                                source="tenantId"
-                                choices={tenantList.map(item => ({
-                                    id: item.id,
-                                    name: item.name
-                                }))}
-                                validate={required()}
-                                value={tenantId}
-                                onChange={e => setTenantId(e.target.value)}
-                            />
-                        </Box>
-                        <Box sx={{ marginTop: '.1em' }}>
-                            <TextInput
-                                autoFocus
-                                source="username"
-                                label={translate('ra.auth.username')}
-                                disabled={loading}
-                                validate={required()}
-                            />
-                        </Box>
-                        <Box sx={{ marginTop: '.1em' }}>
-                            <TextInput
-                                source="password"
-                                label={translate('ra.auth.password')}
-                                type="password"
-                                disabled={loading}
-                                validate={required()}
-                            />
-                        </Box>
-                    </Box>
-                    <CardActions sx={{ padding: '0 1em 1em 1em' }}>
-                        <Button
-                            variant="contained"
-                            type="submit"
-                            color="primary"
-                            disabled={loading}
-                            fullWidth
-                        >
-                            {loading && (
-                                <CircularProgress size={25} thickness={2} />
-                            )}
-                            {translate('ra.auth.sign_in')}
-                        </Button>
-                    </CardActions>
-                </Card>
-            </Box>
-        </Form>
+            <Card sx={{
+                width: 400,
+                marginTop: '6em',
+                zIndex: 1
+            }}>
+                <div>
+                    <AppBar position="static" sx={{ backgroundColor: '#3D4BA7' }}>
+                        <Toolbar>
+                            <Typography variant="h6" color="inherit">Welcome</Typography>
+                        </Toolbar>
+                    </AppBar>
+                </div>
+
+                <Tabs
+                    value={tab}
+                    onChange={(event, value) => {
+                        setTab(value);
+                    }}
+                    indicatorColor="primary"
+                    textColor="primary"
+                    variant="fullWidth"
+                >
+                    <Tab label="Login" sx={{ fontSize: '.8em' }} />
+                    <Tab label="Register" sx={{ fontSize: '.8em' }} />
+                </Tabs>
+
+                {tab === 0 && <Login tenantList={tenantList} />}
+                {tab === 1 && <Register tenantList={tenantList} />}
+
+                <Box mt={1} mb={1} sx={{ textAlign: 'center' }}>
+                    <Typography variant="caption" align="center">rsf - sever</Typography>
+                </Box>
+            </Card>
+        </Box >
     );
 };
 
-export default Login;
+export default Index;

--
Gitblit v1.9.1