index.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { LockOutlined, UserOutlined } from '@ant-design/icons';
  2. import { LoginForm, ProFormText } from '@ant-design/pro-components';
  3. import { history, useModel } from '@umijs/max';
  4. import Settings from '../../../../config/defaultSettings';
  5. import React from 'react';
  6. import { flushSync } from 'react-dom';
  7. import { login } from '@/services/api/auth';
  8. import { App } from 'antd';
  9. import { Msg } from '@/components/Msg';
  10. /** 登录页面 */
  11. const Page = () => {
  12. const { initialState, setInitialState } = useModel('@@initialState');
  13. const { message } = App.useApp();
  14. /** 获取用户信息 */
  15. const fetchUserInfo = async () => {
  16. const userInfo = await initialState?.fetchUserInfo?.();
  17. if (userInfo) {
  18. flushSync(() => {
  19. setInitialState((s) => ({
  20. ...s,
  21. currentUser: userInfo,
  22. }));
  23. });
  24. }
  25. };
  26. /** 提交表单 */
  27. const onFinish = async (values: API.loginParams) => {
  28. await login(values);
  29. message.success('登录成功');
  30. await fetchUserInfo();
  31. const urlParams = new URL(window.location.href).searchParams;
  32. const to = urlParams.get('redirect') || '/';
  33. setTimeout(() => history.push(to), 1500);
  34. };
  35. return (
  36. <LoginForm
  37. logo={<img alt="logo" src={Settings.logo} />}
  38. title={Settings.title}
  39. subTitle={'钉钉消息推送管理后台'}
  40. onFinish={onFinish}
  41. >
  42. <ProFormText
  43. name="username"
  44. fieldProps={{
  45. size: 'large',
  46. prefix: <UserOutlined />,
  47. }}
  48. placeholder={'请输入用户名'}
  49. rules={[
  50. {
  51. required: true,
  52. message: '用户名是必填项!',
  53. },
  54. ]}
  55. />
  56. <ProFormText.Password
  57. name="password"
  58. fieldProps={{
  59. size: 'large',
  60. prefix: <LockOutlined />,
  61. }}
  62. placeholder={'请输入密码'}
  63. rules={[
  64. {
  65. required: true,
  66. message: '密码是必填项!',
  67. },
  68. ]}
  69. />
  70. </LoginForm>
  71. );
  72. };
  73. export default () => {
  74. return (
  75. <App>
  76. <Page />
  77. <Msg />
  78. </App>
  79. );
  80. };