import { useState } from 'react'; import { Card, Form, Input, Button, message, Typography } from 'antd'; import { LockOutlined, UserOutlined } from '@ant-design/icons'; import { useNavigate } from 'react-router-dom'; import { authApi } from '../api/modules'; import { setAuth, type AuthUser } from '../store/auth'; import { getErrorMessage } from '../utils/error'; import { useTheme } from '../store/useTheme'; import { useAppInfo } from '../hooks/useAppInfo'; const { Title, Text } = Typography; export default function LoginPage({ onLogin }: { onLogin?: () => void }) { const [loading, setLoading] = useState(false); const navigate = useNavigate(); const { isDark } = useTheme(); const appInfo = useAppInfo(); const versionText = appInfo?.version ? `v${appInfo.version}` : 'v--'; const onFinish = async (values: { username: string; password: string }) => { setLoading(true); try { const result = await authApi.login(values.username, values.password); const user: AuthUser = { id: 0, username: result.username, role: result.role, permissions: result.permissions, }; setAuth(user); message.success('登录成功'); onLogin?.(); // 触发 App 重渲染 navigate('/', { replace: true }); } catch (e: unknown) { message.error(getErrorMessage(e) || '登录失败'); } finally { setLoading(false); } }; return (