import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; export default function Profile() { const { user } = useAuth(); const navigate = useNavigate(); const [newEmail, setNewEmail] = useState(''); const [newPassword, setNewPassword] = useState(''); const [emailCode, setEmailCode] = useState(''); const [loadingCode, setLoadingCode] = useState(false); const [loadingSubmit, setLoadingSubmit] = useState(false); const [message, setMessage] = useState(''); const [error, setError] = useState(''); const [smtpEnabled, setSmtpEnabled] = useState(false); useEffect(() => { fetch('/api/sys/config') .then(res => res.json()) .then(data => { if (data && data.smtp_enabled !== undefined) { setSmtpEnabled(data.smtp_enabled); } }) .catch(err => console.error("获取系统配置失败:", err)); }, []); if (!user) { navigate('/login'); return null; } const handleSendCode = async () => { setError(''); setMessage(''); setLoadingCode(true); try { const token = localStorage.getItem('token'); const res = await fetch('/api/auth/send-code', { method: 'POST', headers: { Authorization: `Bearer ${token}` } }); const data = await res.json(); if (!res.ok) throw new Error(data.detail || data.error); setMessage(data.message || '验证码已发送到原邮箱 (请查看后端控制台输出模拟邮件)'); } catch (err) { setError(err.message); } finally { setLoadingCode(false); } }; const handleSubmit = async (e) => { e.preventDefault(); setError(''); setMessage(''); if (!newEmail && !newPassword) { setError('请输入你要修改的新邮箱或新密码'); return; } if (smtpEnabled && !emailCode) { setError('请输入原邮箱收到的验证码'); return; } setLoadingSubmit(true); try { const token = localStorage.getItem('token'); const res = await fetch('/api/auth/update-profile', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }, body: JSON.stringify({ email_code: emailCode || null, new_email: newEmail || null, new_password: newPassword || null }) }); const data = await res.json(); if (!res.ok) throw new Error(data.detail || data.error); setMessage('信息更新成功!如果您修改了密码,建议重新登录。'); setNewEmail(''); setNewPassword(''); setEmailCode(''); } catch (err) { setError(err.message); } finally { setLoadingSubmit(false); } }; return (
当前账号: {user.username}
当前邮箱: {user.email || '未绑定'}