blob: 26b78420057f42dfa94e1a6181688d2ee8a8c7e9 [file] [log] [blame] [edit]
import React, { useEffect } from 'react';
import { useApi } from '@/hooks/request';
import request from '@/utils/request';
import { postUserLogin} from '@/api/auth';
import { useAppDispatch } from '@/hooks/store';
import { RootState } from '@/store';
import style from './login.module.css';
import { useState } from 'react';
import { useSelector } from 'react-redux';
import { useNavigate } from 'react-router';
import logo from '&/asserts/logo.png';
import { getUserInfo } from '@/api/user';
const Login: React.FC = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const dispatch = useAppDispatch();
const { refresh: postUserLoginRefresh } = useApi(() => request.post(postUserLogin, {}), false);
const { refresh: getUserInfoRefresh } = useApi(async () => await request.get(getUserInfo), false);
const nav = useNavigate();
const handleLogin = async () => {
try {
const res = await postUserLoginRefresh();
if (res==null ||(res as any).error) {
alert('Login failed. Please check your credentials.');
return;
}
dispatch({ type: "user/login", payload: res });
const userInfo = await getUserInfoRefresh();
if (userInfo==null || (userInfo as any).error) {
alert('Failed to fetch user information.');
return;
}
dispatch({ type: "user/getUserInfo", payload: userInfo });
nav('/');
} catch (error) {
alert('An unexpected error occurred. Please try again later.');
if (error instanceof Error) {
console.error(error.message); // 明确访问 message 属性
} else {
console.error('Unknown error occurred');
}
}
};
return (
<div className={style.form}>
<img className={style.logo} src={logo} alt="logo"></img>
<input type="email" value={email} onChange={(e) => setEmail(e.target.value)} className={style.email} placeholder="Enter your email" />
<input type="password" value={password} onChange={(e) => setPassword(e.target.value)} className={style.password} placeholder="Enter your password" />
<button className={style.submit} onClick={handleLogin}>登录</button>
<button className={style.register}>注册</button>
<button className={style.forget}> 忘记密码</button>
</div>
);
};
export default Login;