import React, { useState } from 'react'; import { useRouter } from 'next/router'; import Head from 'next/head'; import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'; const LoginPage = () => { const router = useRouter(); const [formData, setFormData] = useState({ email: '', password: '' }); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [showPassword, setShowPassword] = useState(false); const [isRedirecting, setIsRedirecting] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); // 防止重复提交 if (loading || isRedirecting) { return; } setLoading(true); setError(''); try { const response = await fetch('/api/auth/admin-login', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }); const data = await response.json(); if (response.ok && data.success) { // 设置重定向状态,防止重复提交 setIsRedirecting(true); // 存储用户信息和令牌 localStorage.setItem('user', JSON.stringify(data.user)); localStorage.setItem('adminToken', data.token); // 使用 window.location 进行重定向,避免 Next.js 路由问题 window.location.href = '/dashboard'; } else { setError(data.error || '登录失败'); setLoading(false); } } catch (error) { console.error('登录错误:', error); setError('网络错误,请稍后重试'); setLoading(false); } }; const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; // 预设账号快速填充 const fillDemoAccount = (email: string, password: string) => { if (loading || isRedirecting) return; setFormData({ email, password }); setError(''); }; // 如果正在重定向,显示加载状态 if (isRedirecting) { return (
登录成功,正在跳转...
); } return ( <> 管理员登录 - 口译服务管理平台

管理员登录

口译服务管理后台系统

{/* 预设账号提示 */}

测试管理员账号

系统管理员:admin@example.com / admin123
{error && (
{error}
)}

如需添加新的管理员账号,请联系系统管理员

); }; export default LoginPage;