import { FormEvent, useState } from 'react' import { Lock, User } from 'lucide-react' import AppIcon from '../components/AppIcon' import { useAuth } from '../contexts/AuthContext' import { useLanguage } from '../contexts/LanguageContext' import AutoTranslate from '../components/AutoTranslate' import BrowserDialogTranslator from '../components/BrowserDialogTranslator' function LanguageIcon({ className = '' }: { className?: string }) { return ( ) } export default function Login() { const { login, accessCodeLogin } = useAuth() const { language, toggleLanguage, t } = useLanguage() const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) // Check for access code in URL const urlParams = new URLSearchParams(window.location.search) const accessCode = urlParams.get('code') || '' const isAccessCodeLogin = !!accessCode const handleSubmit = async (event: FormEvent) => { event.preventDefault() setError('') setLoading(true) try { if (isAccessCodeLogin) { await accessCodeLogin(accessCode, password) } else { await login(username, password) } } catch (err: unknown) { const error = err as { response?: { status?: number; data?: { message?: string } } } if (error.response?.status === 401) { setError(t(isAccessCodeLogin ? '访问码或密码错误' : '用户名或密码错误')) } else { setError(error.response?.data?.message || t('登录失败,请检查用户名和密码')) } } finally { setLoading(false) } } return (

CLICD

{isAccessCodeLogin ? '容器管理登录' : 'Container Manager'}

{error && (
{error}
)} {!isAccessCodeLogin && (
setUsername(event.target.value)} className="block w-full pl-10 pr-3 py-2.5 border border-gray-300 rounded-md text-black bg-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-black focus:border-black text-sm" placeholder={t('输入用户名')} required autoComplete="username" />
)}
setPassword(event.target.value)} className="block w-full pl-10 pr-3 py-2.5 border border-gray-300 rounded-md text-black bg-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-black focus:border-black text-sm" placeholder={t('输入密码')} required autoComplete="current-password" />

CLICD v1.1.27

) }