'use client'; /** * 登录/注册弹窗组件 */ import { useState } from 'react'; import { X, User, Lock, Eye, EyeOff } from 'lucide-react'; import { useAuthStore } from '@/store/authStore'; interface AuthModalProps { onClose: () => void; initialMode?: 'login' | 'register'; } export default function AuthModal({ onClose, initialMode = 'login' }: AuthModalProps) { const [mode, setMode] = useState<'login' | 'register'>(initialMode); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [showPassword, setShowPassword] = useState(false); const [error, setError] = useState(''); const { login, register, isLoading } = useAuthStore(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); // 前端验证 if (username.trim().length < 3) { setError('用户名至少3个字符'); return; } if (password.length < 6) { setError('密码至少6位'); return; } if (mode === 'register' && password !== confirmPassword) { setError('两次密码输入不一致'); return; } try { if (mode === 'login') { await login(username.trim(), password); } else { await register(username.trim(), password); } onClose(); } catch (err: any) { setError(err.message || (mode === 'login' ? '登录失败' : '注册失败')); } }; const switchMode = () => { setMode(mode === 'login' ? 'register' : 'login'); setError(''); setConfirmPassword(''); }; return (
e.stopPropagation()} > {/* Header */}

{mode === 'login' ? '登录' : '注册'}

{/* Form */}
{/* Error */} {error && (
{error}
)} {/* Username */}
setUsername(e.target.value)} placeholder="请输入用户名(至少3位)" className="w-full bg-[#12141C] border border-gray-700/50 rounded-xl pl-10 pr-4 py-3 text-white text-sm placeholder-gray-600 focus:outline-none focus:border-blue-500 transition-colors" autoComplete="username" autoFocus />
{/* Password */}
setPassword(e.target.value)} placeholder="请输入密码(至少6位)" className="w-full bg-[#12141C] border border-gray-700/50 rounded-xl pl-10 pr-10 py-3 text-white text-sm placeholder-gray-600 focus:outline-none focus:border-blue-500 transition-colors" autoComplete={mode === 'login' ? 'current-password' : 'new-password'} />
{/* Confirm Password (register only) */} {mode === 'register' && (
setConfirmPassword(e.target.value)} placeholder="请再次输入密码" className="w-full bg-[#12141C] border border-gray-700/50 rounded-xl pl-10 pr-4 py-3 text-white text-sm placeholder-gray-600 focus:outline-none focus:border-blue-500 transition-colors" autoComplete="new-password" />
)} {/* Submit */} {/* Switch mode */}
{mode === 'login' ? ( <>还没有账号? ) : ( <>已有账号? )}
); }