import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { apiClient, errorMessage } from '../services/api'; import './Login.css'; type TabType = 'login' | 'register'; function Login() { const navigate = useNavigate(); const [activeTab, setActiveTab] = useState('login'); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); // Login form const [loginEmail, setLoginEmail] = useState(''); const [loginPassword, setLoginPassword] = useState(''); // Register form const [regEmail, setRegEmail] = useState(''); const [regGarminEmail, setRegGarminEmail] = useState(''); const [regPassword, setRegPassword] = useState(''); const [regConfirmPassword, setRegConfirmPassword] = useState(''); const validateEmail = (email: string): boolean => { const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return re.test(email); }; const validatePassword = (password: string): boolean => { return password.length >= 6; }; const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (!validateEmail(loginEmail)) { setError('Please enter a valid email'); return; } if (!validatePassword(loginPassword)) { setError('Password must be at least 6 characters'); return; } setLoading(true); try { const { token } = await apiClient.login(loginEmail, loginPassword); apiClient.setSession(token); navigate('/'); } catch (err: any) { setError(errorMessage(err, '登录失败')); } finally { setLoading(false); } }; const handleRegister = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (!validateEmail(regEmail)) { setError('Please enter a valid email'); return; } if (!validateEmail(regGarminEmail)) { setError('Please enter a valid Garmin email'); return; } if (!validatePassword(regPassword)) { setError('Password must be at least 6 characters'); return; } if (regPassword !== regConfirmPassword) { setError('Passwords do not match'); return; } setLoading(true); try { const { token } = await apiClient.register(regEmail, regGarminEmail, regPassword); apiClient.setSession(token); navigate('/'); } catch (err: any) { setError(errorMessage(err, '注册失败')); } finally { setLoading(false); } }; return (

🏃 Garmin Health Lab

健康数据分析平台

{error &&
{error}
} {activeTab === 'login' && (
setLoginEmail(e.target.value)} placeholder="example@example.com" required disabled={loading} />
setLoginPassword(e.target.value)} placeholder="••••••••" required disabled={loading} />
)} {activeTab === 'register' && (
setRegEmail(e.target.value)} placeholder="example@example.com" required disabled={loading} />
setRegGarminEmail(e.target.value)} placeholder="garmin@example.com" required disabled={loading} />
setRegPassword(e.target.value)} placeholder="••••••••" required disabled={loading} />
setRegConfirmPassword(e.target.value)} placeholder="••••••••" required disabled={loading} />
)}
); } export default Login;