pages_login_reg.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import React, { useState } from 'react';
  2. import {
  3. Form,
  4. Input,
  5. Button,
  6. Card,
  7. message,
  8. } from 'antd';
  9. import {
  10. UserOutlined,
  11. } from '@ant-design/icons';
  12. import { useNavigate } from 'react-router';
  13. import {
  14. useAuth,
  15. } from './hooks_sys.tsx';
  16. // 登录页面
  17. export const LoginPage = () => {
  18. const { login } = useAuth();
  19. const [form] = Form.useForm();
  20. const [loading, setLoading] = useState(false);
  21. const navigate = useNavigate();
  22. const handleSubmit = async (values: { username: string; password: string }) => {
  23. try {
  24. setLoading(true);
  25. await login(values.username, values.password);
  26. // 登录成功后跳转到管理后台首页
  27. navigate('/admin/dashboard');
  28. } catch (error: any) {
  29. message.error(error.response?.data?.error || '登录失败');
  30. } finally {
  31. setLoading(false);
  32. }
  33. };
  34. return (
  35. <div className="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
  36. <div className="max-w-md w-full space-y-8">
  37. <div>
  38. <h2 className="mt-6 text-center text-3xl font-extrabold text-gray-900">
  39. 登录管理后台
  40. </h2>
  41. </div>
  42. <Card>
  43. <Form
  44. form={form}
  45. name="login"
  46. onFinish={handleSubmit}
  47. autoComplete="off"
  48. layout="vertical"
  49. >
  50. <Form.Item
  51. name="username"
  52. rules={[{ required: true, message: '请输入用户名' }]}
  53. >
  54. <Input
  55. prefix={<UserOutlined />}
  56. placeholder="用户名"
  57. size="large"
  58. />
  59. </Form.Item>
  60. <Form.Item
  61. name="password"
  62. rules={[{ required: true, message: '请输入密码' }]}
  63. >
  64. <Input.Password
  65. placeholder="密码"
  66. size="large"
  67. />
  68. </Form.Item>
  69. <Form.Item>
  70. <Button
  71. type="primary"
  72. htmlType="submit"
  73. size="large"
  74. block
  75. loading={loading}
  76. >
  77. 登录
  78. </Button>
  79. </Form.Item>
  80. </Form>
  81. <div className="mt-4 text-center text-gray-500">
  82. <p>测试账号: admin / admin123</p>
  83. {/* <p>普通账号: user1 / 123456</p> */}
  84. </div>
  85. </Card>
  86. </div>
  87. </div>
  88. );
  89. };