添加测试配置及登陆部分的测试
Change-Id: I6fa1fe23ad8773548927fdc921dceab841f2368a
diff --git a/src/views/login/login.tsx b/src/views/login/login.tsx
new file mode 100644
index 0000000..26b7842
--- /dev/null
+++ b/src/views/login/login.tsx
@@ -0,0 +1,61 @@
+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;
\ No newline at end of file