'use client'; import { useState } from 'react'; import api from '@/lib/api'; import { useRouter } from 'next/navigation'; import ForgotPasswordModal from '@/components/ForgotPasswordModal'; import { useLanguage } from '@/lib/i18n/LanguageContext'; import { Zap } from 'lucide-react'; // 1. 引入通用消息弹窗 import MessageModal from '@/components/common/MessageModal'; export default function AuthForm() { const router = useRouter(); const { t } = useLanguage(); const [isLoginMode, setIsLoginMode] = useState(true); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ email: '', password: '' }); const [isForgotOpen, setIsForgotOpen] = useState(false); // 2. 新增:控制消息弹窗的状态 const [msgModal, setMsgModal] = useState({ isOpen: false, title: '', message: '', type: 'info' as 'info' | 'error' | 'success', onOk: null as (() => void) | null, // 关闭弹窗后的回调函数 }); // 辅助函数:显示消息弹窗 const showMessage = (message: string, type: 'info' | 'error' | 'success' = 'info', onOk?: () => void) => { setMsgModal({ isOpen: true, title: type === 'error' ? t('common.error') : t('common.notice'), message, type, onOk: onOk || null, }); }; // 处理弹窗关闭 const handleCloseMsg = () => { const callback = msgModal.onOk; setMsgModal((prev) => ({ ...prev, isOpen: false })); if (callback) callback(); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { let res; if (isLoginMode) { res = await api.post('/api/auth/login', formData); } else { res = await api.post('/api/auth/auto-register', {}); } const data = res.data.data || res.data; const token = data.token || data.access_token; if (token) { localStorage.setItem('rsid', token); if (data.user) { localStorage.setItem('user_info', JSON.stringify(data.user)); } window.dispatchEvent(new Event('storage')); if (!isLoginMode) { showMessage(t('auth.auto_register_success'), 'success', () => { router.push('/dashboard'); }); } else { router.push('/dashboard'); } } else { showMessage(t('auth.login_success_no_token'), 'error'); } } catch (error: any) { console.error(error); const msg = error.response?.data?.message || t('common.unknown_error'); showMessage(msg, 'error'); } finally { setLoading(false); } }; return (

{isLoginMode ? t('auth.welcome_back') : t('auth.auto_register')}

{isLoginMode ? ( <>
setFormData({...formData, email: e.target.value})} placeholder={t('auth.email_placeholder')} />
setFormData({...formData, password: e.target.value})} placeholder="••••••••" />
) : (

{t('auth.auto_reg_title')}

{t('auth.auto_reg_desc')}

)}
setIsForgotOpen(false)} /> {/* 4. 挂载消息弹窗 */}
); }