import React from 'react'; import { useLogin } from '@/hooks/useLogin'; /* ──────────────── 极光之境 · 登录组件 ──────────────── */ const KEYFRAMES = ` @keyframes aurora-drift-1 { 0% { transform: translate(-30%, -10%) rotate(-12deg) scaleX(1.2); opacity: 0.35; } 25% { transform: translate(-10%, 5%) rotate(-8deg) scaleX(1.5); opacity: 0.5; } 50% { transform: translate(10%, -5%) rotate(-14deg) scaleX(1.3); opacity: 0.4; } 75% { transform: translate(-5%, 10%) rotate(-10deg) scaleX(1.6); opacity: 0.55; } 100% { transform: translate(-30%, -10%) rotate(-12deg) scaleX(1.2); opacity: 0.35; } } @keyframes aurora-drift-2 { 0% { transform: translate(20%, 15%) rotate(8deg) scaleX(1.3); opacity: 0.25; } 30% { transform: translate(-10%, -5%) rotate(12deg) scaleX(1.6); opacity: 0.45; } 60% { transform: translate(5%, 10%) rotate(6deg) scaleX(1.4); opacity: 0.35; } 100% { transform: translate(20%, 15%) rotate(8deg) scaleX(1.3); opacity: 0.25; } } @keyframes aurora-drift-3 { 0% { transform: translate(-15%, 25%) rotate(-5deg) scaleX(1.5); opacity: 0.3; } 33% { transform: translate(15%, 5%) rotate(-9deg) scaleX(1.8); opacity: 0.5; } 66% { transform: translate(0%, 20%) rotate(-3deg) scaleX(1.4); opacity: 0.4; } 100% { transform: translate(-15%, 25%) rotate(-5deg) scaleX(1.5); opacity: 0.3; } } @keyframes aurora-drift-4 { 0% { transform: translate(10%, -15%) rotate(15deg) scaleX(1.4); opacity: 0.2; } 40% { transform: translate(-20%, 0%) rotate(10deg) scaleX(1.7); opacity: 0.4; } 80% { transform: translate(0%, 8%) rotate(18deg) scaleX(1.5); opacity: 0.3; } 100% { transform: translate(10%, -15%) rotate(15deg) scaleX(1.4); opacity: 0.2; } } @keyframes twinkle { 0%, 100% { opacity: 0.15; transform: scale(0.8); } 50% { opacity: 0.9; transform: scale(1.2); } } @keyframes float-card { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } } @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 20px rgba(124, 58, 237, 0.15), 0 0 60px rgba(5, 150, 105, 0.08); } 50% { box-shadow: 0 0 30px rgba(124, 58, 237, 0.25), 0 0 80px rgba(5, 150, 105, 0.15); } } `; /* ──────────────── 星星数据 ──────────────── */ const STARS = [ { left: '8%', top: '5%', size: 2, delay: 0, duration: 3 }, { left: '18%', top: '15%', size: 1.5, delay: 0.7, duration: 4 }, { left: '5%', top: '35%', size: 1, delay: 1.2, duration: 2.5 }, { left: '25%', top: '8%', size: 2.5, delay: 0.3, duration: 3.5 }, { left: '75%', top: '6%', size: 1.5, delay: 1.5, duration: 4.5 }, { left: '88%', top: '12%', size: 2, delay: 0.5, duration: 3 }, { left: '92%', top: '30%', size: 1, delay: 2, duration: 2.8 }, { left: '82%', top: '45%', size: 1.5, delay: 0.9, duration: 3.8 }, { left: '68%', top: '18%', size: 1, delay: 1.8, duration: 2.2 }, { left: '38%', top: '3%', size: 2, delay: 0.2, duration: 4 }, { left: '55%', top: '10%', size: 1.5, delay: 1.1, duration: 3.2 }, { left: '45%', top: '22%', size: 1, delay: 0.6, duration: 2.6 }, { left: '12%', top: '55%', size: 1, delay: 1.6, duration: 3.6 }, { left: '95%', top: '55%', size: 1.5, delay: 0.4, duration: 2.4 }, { left: '60%', top: '30%', size: 1, delay: 2.2, duration: 4.2 }, ]; export default function AuroraView(): JSX.Element { const { username, password, loading, error, setUsername, setPassword, handleLogin } = useLogin(); return ( <> {/* ═══════════════ 全屏背景容器 ═══════════════ */}
{/* ────────── 极光光带 1:紫罗兰色 ────────── */}
{/* ────────── 极光光带 2:翠绿色 ────────── */}
{/* ────────── 极光光带 3:青蓝色 ────────── */}
{/* ────────── 极光光带 4:紫绿混合 ────────── */}
{/* ────────── 星光点缀 ────────── */} {STARS.map((star, i) => (
))} {/* ═══════════════ 登录卡片 ═══════════════ */}
{/* ──────── 品牌区域 ──────── */}
{/* Logo */}
{/* 标题 */}

SQL审核平台

{/* 副标题 */}

企业级数据库审核与合规管理

{/* ──────── 表单区域 ──────── */}
{/* 错误提示 */} {error && (
{error}
)} {/* 用户名输入框 */}
setUsername(e.target.value)} disabled={loading} autoComplete="username" style={{ width: '100%', height: 46, padding: '0 16px', borderRadius: 10, background: 'rgba(255,255,255,0.05)', border: '1px solid rgba(255,255,255,0.08)', color: '#fff', fontSize: 14, outline: 'none', boxSizing: 'border-box', transition: 'border-color 0.25s ease, box-shadow 0.25s ease', fontFamily: 'inherit', }} onFocus={(e) => { e.currentTarget.style.borderColor = 'rgba(124, 58, 237, 0.4)'; e.currentTarget.style.boxShadow = '0 0 0 3px rgba(124, 58, 237, 0.08)'; }} onBlur={(e) => { e.currentTarget.style.borderColor = 'rgba(255,255,255,0.08)'; e.currentTarget.style.boxShadow = 'none'; }} />
{/* 密码输入框 */}
setPassword(e.target.value)} disabled={loading} autoComplete="current-password" style={{ width: '100%', height: 46, padding: '0 16px', borderRadius: 10, background: 'rgba(255,255,255,0.05)', border: '1px solid rgba(255,255,255,0.08)', color: '#fff', fontSize: 14, outline: 'none', boxSizing: 'border-box', transition: 'border-color 0.25s ease, box-shadow 0.25s ease', fontFamily: 'inherit', }} onFocus={(e) => { e.currentTarget.style.borderColor = 'rgba(124, 58, 237, 0.4)'; e.currentTarget.style.boxShadow = '0 0 0 3px rgba(124, 58, 237, 0.08)'; }} onBlur={(e) => { e.currentTarget.style.borderColor = 'rgba(255,255,255,0.08)'; e.currentTarget.style.boxShadow = 'none'; }} />
{/* 登录按钮 */}
{/* ──────── 版权信息 ──────── */}
© 2025 SQL审核平台
{/* ──────── 底部辉光装饰 ──────── */}
{/* 全局旋转动画 */} ); }