diff --git a/src/assets/logo_bg_white.png b/src/assets/logo_bg_white.png new file mode 100644 index 0000000..cbdbf45 Binary files /dev/null and b/src/assets/logo_bg_white.png differ diff --git a/src/assets/logo_text.png b/src/assets/logo_text.png new file mode 100644 index 0000000..8fa3e9d Binary files /dev/null and b/src/assets/logo_text.png differ diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx index f9bdb85..8f14944 100644 --- a/src/pages/Login.tsx +++ b/src/pages/Login.tsx @@ -9,253 +9,156 @@ import { TextField, Typography, Link, - styled + AppBar, + Toolbar, + Card, + CardContent } from '@mui/material'; -const LoginContainer = styled(Box)({ - height: '100vh', - display: 'flex', - flexDirection: 'column', - backgroundColor: '#f5f7fa', -}); - -const TopBar = styled(Box)({ - height: '60px', - backgroundColor: '#1a1a2e', - display: 'flex', - alignItems: 'center', - padding: '0 20px', -}); - -const BrandLogo = styled(Box)({ - width: '40px', - height: '40px', - backgroundColor: '#fff', - color: '#1a1a2e', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - borderRadius: '50%', - fontWeight: 'bold', - fontSize: '1.2rem', -}); - -const LoginMain = styled(Box)({ - flex: 1, - display: 'flex', - alignItems: 'center', - justifyContent: 'center', -}); - -const LoginCard = styled(Box)({ - width: '400px', - backgroundColor: '#fff', - borderRadius: '8px', - boxShadow: '0 4px 12px rgba(0,0,0,0.1)', - padding: '30px', -}); - -const ServiceName = styled(Typography)({ - fontSize: '0.75rem', - color: '#666', - marginBottom: '10px', -}); - -const LoginTitle = styled(Typography)({ - fontSize: '1.5rem', - fontWeight: 'bold', - marginBottom: '20px', -}); - -const LoginForm = styled('form')({ - display: 'flex', - flexDirection: 'column', - gap: '20px', -}); - -const RememberRow = styled(Box)({ - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between', -}); - -const ActionButtons = styled(Box)({ - display: 'flex', - gap: '10px', - marginTop: '10px', -}); - -const PrimaryButton = styled(Button)({ - backgroundColor: '#e20074', - '&:hover': { - backgroundColor: '#c10062', - }, -}); - -const SecondaryButton = styled(Button)({ - color: '#333', - backgroundColor: '#f5f5f5', - '&:hover': { - backgroundColor: '#e0e0e0', - }, -}); - -const HelpSection = styled(Box)({ - marginTop: '20px', - textAlign: 'center', - fontSize: '0.875rem', -}); - -const SocialLogin = styled(Box)({ - display: 'flex', - justifyContent: 'center', - gap: '10px', - marginTop: '15px', -}); - -const SocialButton = styled(Box)({ - width: '30px', - height: '30px', - borderRadius: '50%', - backgroundColor: '#e0e0e0', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - cursor: 'pointer', -}); - -const Footer = styled(Box)({ - height: '50px', - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between', - padding: '0 20px', - borderTop: '1px solid #eee', - fontSize: '0.75rem', - color: '#666', -}); - -const LegalLinks = styled(Box)({ - display: 'flex', - gap: '15px', -}); - const Login = () => { - const [username, setUsername] = useState(''); - const [rememberUser, setRememberUser] = useState(false); + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [rememberEmail, setRememberEmail] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); - const [error, setError] = useState(false); + const [emailError, setEmailError] = useState(false); + const [passwordError, setPasswordError] = useState(false); const navigate = useNavigate(); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - - if (!username.trim()) { - setError(true); - return; - } - + + const hasEmail = !!email.trim(); + const hasPassword = !!password.trim(); + setEmailError(!hasEmail); + setPasswordError(!hasPassword); + if (!hasEmail || !hasPassword) return; + setIsSubmitting(true); - setError(false); - // 模拟登录过程 setTimeout(() => { navigate('/'); }, 800); }; - const handleCancel = () => { - navigate('/'); - }; - return ( - - - T - - - - - Servicename - - Enter Login
Username -
- - - setUsername(e.target.value)} - error={error} - required - /> - - - setRememberUser(e.target.checked)} - id="rememberUser" - /> - } - label="Remember username" + + {/* 顶部栏使用主题主色 */} + + + + T + + + + + {/* 主体卡片 */} + + + + + Servicename + + + Enter Login +
Email & Password +
+ + + setEmail(e.target.value)} + error={emailError} + required + sx={{ mb: 2 }} /> - - Forgot your username or password? - -
- - - - {isSubmitting ? 'Processing...' : 'Next'} - - - Cancel - - -
- - - Do you need help? - - No account? Sign up or log in with your social network account. + id="password" + name="password" + type="password" + placeholder="Password" + autoComplete="current-password" + value={password} + onChange={(e) => setPassword(e.target.value)} + error={passwordError} + required + sx={{ mb: 2 }} + /> + + + setRememberEmail(e.target.checked)} + id="rememberEmail" + /> + } + label="Remember email" + /> + + Forgot your username or password? + + + + - - - - - f - - - t - - -
-
- - -
+ + + ); };