import React, { useCallback, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Form, Input, Button, Card, Typography } from 'antd'; import { UserOutlined, LockOutlined } from '@ant-design/icons'; import api from '../../api'; import { message } from '../../ui/app-message'; import { writePermissions } from '../../auth/permission-store'; import { findRoleAwareLandingPath } from '../../auth/menu-policy'; const { Title } = Typography; const LoginPage: React.FC = () => { const [loading, setLoading] = useState(false); const navigate = useNavigate(); const onFinish = useCallback( async (values: any) => { setLoading(true); try { const res: any = await api.post('/auth/login', values); localStorage.setItem('token', res.access_token); localStorage.setItem('user', JSON.stringify(res.user)); const permissions = res.user.permissions || []; writePermissions(permissions); message.success('登录成功'); navigate(findRoleAwareLandingPath(res.user.roles || [], permissions) || '/', { replace: true, }); } catch (err: any) { message.error(err?.message || '登录失败'); } finally { setLoading(false); } }, [navigate], ); return (
学生管理系统

学生综合管理平台

} placeholder="用户名" autoComplete="username" /> } placeholder="密码" autoComplete="current-password" />
); }; export default LoginPage;