import { useLogin } from '@/hooks/useLogin'; export default function SidePanel() { const { username, password, loading, error, setUsername, setPassword, handleLogin } = useLogin(); /* 6 orbit light-points evenly spaced at 60° intervals on a 300px ring (radius 150px) */ const orbitDots = [ { angle: 0, size: 8, opacity: 0.9 }, { angle: 60, size: 6, opacity: 0.6 }, { angle: 120, size: 7, opacity: 0.75 }, { angle: 180, size: 6, opacity: 0.5 }, { angle: 240, size: 8, opacity: 0.8 }, { angle: 300, size: 6, opacity: 0.55 }, ]; /* Scattered twinkling stars */ const stars = [ { top: '6%', left: '12%', size: 3, delay: '0s', dur: '3s' }, { top: '14%', left: '72%', size: 2, delay: '1.2s', dur: '4s' }, { top: '25%', left: '38%', size: 4, delay: '0.5s', dur: '3.5s' }, { top: '18%', left: '55%', size: 2, delay: '2s', dur: '5s' }, { top: '60%', left: '15%', size: 3, delay: '1s', dur: '4.5s' }, { top: '70%', left: '80%', size: 2, delay: '0.3s', dur: '3.2s' }, { top: '82%', left: '30%', size: 4, delay: '1.8s', dur: '3.8s' }, { top: '45%', left: '8%', size: 2, delay: '2.5s', dur: '4.2s' }, { top: '35%', left: '88%', size: 3, delay: '0.8s', dur: '3.6s' }, { top: '90%', left: '65%', size: 2, delay: '1.5s', dur: '5.2s' }, ]; return (
{/* ========== Left Panel — 40% Celestial Animation ========== */}
{/* --- Core Celestial Orb (200px, centered-upper) --- */}
{/* Main orb */}
{/* --- Orbit Ring (300px, dashed) with 6 light dots --- */}
{orbitDots.map((dot, i) => { const rad = (dot.angle * Math.PI) / 180; const r = 150; // radius of the 300px ring const x = 150 + r * Math.cos(rad) - dot.size / 2; const y = 150 + r * Math.sin(rad) - dot.size / 2; return (
); })}
{/* --- 3 Meteors --- */} {/* Meteor 1 */}
{/* Meteor 2 */}
{/* Meteor 3 */}
{/* --- Scattered Twinkling Stars --- */} {stars.map((s, i) => (
))} {/* --- Bottom-left brand text --- */}
SQL审核平台
企业级数据库审核与合规管理
{/* --- Keyframes --- */}
{/* ========== Right Panel — 60% Login Form ========== */}

欢迎回来

登录以继续

{error && (
{error}
)} {/* Username */}
setUsername(e.target.value)} className="w-full" style={{ padding: '13px 16px', borderRadius: 10, background: 'var(--dg-bg-secondary)', border: 'none', color: 'var(--dg-text-primary)', fontSize: 14, outline: 'none', transition: 'background 0.3s', }} onFocus={(e) => { e.target.style.background = 'var(--dg-bg-tertiary)'; }} onBlur={(e) => { e.target.style.background = 'var(--dg-bg-secondary)'; }} />
{/* Password */}
setPassword(e.target.value)} className="w-full" style={{ padding: '13px 16px', borderRadius: 10, background: 'var(--dg-bg-secondary)', border: 'none', color: 'var(--dg-text-primary)', fontSize: 14, outline: 'none', transition: 'background 0.3s', }} onFocus={(e) => { e.target.style.background = 'var(--dg-bg-tertiary)'; }} onBlur={(e) => { e.target.style.background = 'var(--dg-bg-secondary)'; }} />
{/* Submit */}
); }