index.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import {Button, Input} from 'antd';
  2. import css from './index.module.css';
  3. import {FC} from 'react';
  4. import {useFormState} from './hooks';
  5. import cla from 'classnames';
  6. import {Controller} from 'react-hook-form';
  7. const LoginInfo: FC = function() {
  8. const [{errors, control, isLoading, isDisable}, {onSubmit}] = useFormState();
  9. return (
  10. <div className={css.loginInfo}>
  11. <h1>仓储物流管理平台</h1>
  12. <form className={css.loginForm} onSubmit={onSubmit} data-testid='login_form'>
  13. <Controller
  14. control={control}
  15. name='name'
  16. render={function({field: {onChange, value}}) {
  17. return (
  18. <Input
  19. name='accountName'
  20. onChange={onChange}
  21. value={value}
  22. placeholder='请输入账户'
  23. />
  24. );
  25. }}
  26. />
  27. <p
  28. className={cla([
  29. css.errorTips,
  30. {[css.loginFieldHidden]: !errors.name?.message},
  31. ])}
  32. >
  33. {errors.name?.message ?? ''}
  34. </p>
  35. <Controller
  36. control={control}
  37. name='password'
  38. render={function({field: {onChange, value}}) {
  39. return (
  40. <Input
  41. name='accountPassword'
  42. onChange={onChange}
  43. value={value}
  44. placeholder='请输入密码'
  45. type='password'
  46. />
  47. );
  48. }}
  49. />
  50. <p
  51. className={cla([
  52. css.errorTips,
  53. {[css.loginFieldHidden]: !errors.password?.message},
  54. ])}
  55. >
  56. {errors.password?.message ?? ''}
  57. </p>
  58. <Button
  59. htmlType='submit'
  60. type='primary'
  61. block
  62. className={css.loginBtn}
  63. size='large'
  64. loading={isLoading}
  65. disabled={isDisable}
  66. >
  67. {
  68. isLoading
  69. ? '正在登录'
  70. : isDisable
  71. ? '登录成功'
  72. : '登录'
  73. }
  74. </Button>
  75. </form>
  76. </div>
  77. );
  78. };
  79. export default LoginInfo;