import React, { useState, Dispatch, useCallback } from 'react'; import { FormControl, Flex, Input, Button, FormErrorMessage, Box } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; import { PageTypeEnum } from '@/constants/user'; import { postLogin } from '@/api/user'; import type { ResLogin } from '@/api/response/user'; import { useToast } from '@/hooks/useToast'; import { useScreen } from '@/hooks/useScreen'; interface Props { setPageType: Dispatch<`${PageTypeEnum}`>; loginSuccess: (e: ResLogin) => void; } interface LoginFormType { username: string; password: string; } const LoginForm = ({ setPageType, loginSuccess }: Props) => { const { toast } = useToast(); const { mediaLgMd } = useScreen(); const { register, handleSubmit, formState: { errors } } = useForm(); const [requesting, setRequesting] = useState(false); const onclickLogin = useCallback( async ({ username, password }: LoginFormType) => { setRequesting(true); try { loginSuccess( await postLogin({ username, password }) ); toast({ title: '登录成功', status: 'success' }); } catch (error: any) { toast({ title: error.message || '登录异常', status: 'error' }); } setRequesting(false); }, [loginSuccess, toast] ); return ( <> 登录 FastGPT
{!!errors.username && errors.username.message} {!!errors.password && errors.password.message} setPageType('forgetPassword')} fontSize="sm" > 忘记密码? setPageType('register')} fontSize="sm" > 注册账号
); }; export default LoginForm;