import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { User, Lock, Palette, Check, Loader2, AlertCircle, Eye, EyeOff, Languages, Activity } from 'lucide-react'; import { useUserStore, useLanguageStore } from '@/store'; import { authApi } from '@/api'; import { useTheme } from '@/hooks/useTheme'; import { ThemePicker } from '@/components/layout/ThemePicker'; import { cn } from '@/lib/utils'; import { SUPPORTED_LANGUAGES, type AppLanguage } from '@/i18n'; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, } from '@/components/ui/dropdown-menu'; /** 登录页 — 克制企业风,无渐变/粉彩色光球 // Logan.Li */ export function Login() { const { t } = useTranslation(); const navigate = useNavigate(); const { theme, setTheme } = useTheme(); const { language, setLanguage } = useLanguageStore(); const [username, setUsername] = useState('admin'); const [password, setPassword] = useState('123456'); const [showPassword, setShowPassword] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); setLoading(true); try { const result = await authApi.login(username, password) as { user: { id: number; username: string }; token: string; permissions?: string[] }; useUserStore.getState().login(result.user, result.token, result.permissions ?? null); localStorage.setItem('token', result.token); navigate('/', { replace: true }); } catch (err) { const message = err instanceof Error ? err.message : t('login.loginFailed'); setError(message); } finally { setLoading(false); } }; return (
{/* 极弱品牌氛围 — 单色径向,非彩色光球 // Logan.Li */}
{/* 语言 / 主题 */}
{t('header.languageSwitch')} {SUPPORTED_LANGUAGES.map((lang) => ( setLanguage(lang.code as AppLanguage)} > {lang.flag} {lang.label} {language === lang.code && } ))} {t('header.themeSwitch')}
{/* 登录卡片 */}

AIOps

{t('login.subtitle')}

{error && (
{error}
)}
setUsername(e.target.value)} placeholder={t('login.usernamePlaceholder')} autoComplete="username" autoFocus className="dg-input w-full py-2.5 pl-10 pr-4 text-sm" />
setPassword(e.target.value)} placeholder={t('login.passwordPlaceholder')} autoComplete="current-password" className="dg-input w-full py-2.5 pl-10 pr-12 text-sm" />

默认管理员账号{' '} admin / 123456

LDAP 用户可直接使用域账号登录

© AIOps 智能运维平台

); }