diff --git a/src/App.tsx b/src/App.tsx
index da9614c..433c4df 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -7,6 +7,8 @@ import ECommerce from './pages/Dashboard/ECommerce';
import Create from './pages/Create';
import Cate from './pages/Cate';
import DefaultLayout from './layout/DefaultLayout';
+import Login from './pages/Login';
+
import { ConfigProvider } from 'antd';
function App() {
@@ -21,6 +23,8 @@ function App() {
setTimeout(() => setLoading(false), 1000);
}, []);
+ const isLoginRoute = pathname === '/login';
+
return loading ? (
) : (
@@ -33,41 +37,54 @@ function App() {
},
}}
>
-
+ {isLoginRoute ? (
-
-
- >
- }
- />
-
-
-
- >
- }
- />
-
-
-
-
+
>
}
/>
-
-
+ ) : (
+
+
+
+
+
+ >
+ }
+ />
+
+
+
+ >
+ }
+ />
+
+
+
+
+ >
+ }
+ />
+
+
+ )}
+
);
}
diff --git a/src/api/User.ts b/src/api/User.ts
index 74701ff..6814fed 100644
--- a/src/api/User.ts
+++ b/src/api/User.ts
@@ -1,7 +1,8 @@
+import { account, editUser, Login, UserInfo } from '@/types/user'
import Request from '@/utils/request'
// 登录
-export const loginDataAPI = (data: Login) => Request("POST", "/login", data)
+export const loginDataAPI = (data: Login) => Request("POST", "/user/login", data)
// 获取用户信息
export const getUserDataAPI = (id?: number) => Request("GET", `/user/${id}`)
diff --git a/src/pages/Login/index.tsx b/src/pages/Login/index.tsx
new file mode 100644
index 0000000..c08fca2
--- /dev/null
+++ b/src/pages/Login/index.tsx
@@ -0,0 +1,90 @@
+import React, { useState } from 'react';
+import { useNavigate, useLocation } from 'react-router-dom';
+import { useForm } from 'antd/es/form/Form';
+import { Button, Form, Input, notification } from 'antd';
+import { UserOutlined, LockOutlined, EyeOutlined, EyeInvisibleOutlined } from '@ant-design/icons';
+import { loginDataAPI } from '@/api/User';
+import { useUserStore } from '@/stores';
+
+const LoginForm: React.FC = () => {
+ const [form] = useForm();
+ const [isPassVisible, setIsPassVisible] = useState(false);
+ const store = useUserStore();
+ const navigate = useNavigate();
+ const location = useLocation();
+ const returnUrl = new URLSearchParams(location.search).get('returnUrl') || '/home';
+
+ const onSubmit = async () => {
+ try {
+ const values = await form.validateFields();
+ const { data } = await loginDataAPI(values);
+ store.token = data.token;
+ store.user = data.user;
+
+ notification.success({
+ message: 'success',
+ description: `Hello ${data.user.name} 欢迎回来 🎉`,
+ });
+
+ navigate(returnUrl);
+ } catch (error) {
+ console.error('Failed to login:', error);
+ }
+ };
+
+ return (
+
+
+
+
+
+ } placeholder="请输入用户名" />
+
+
+
+ }
+ type={isPassVisible ? 'text' : 'password'}
+ placeholder="请输入密码"
+ iconRender={visible =>
+ visible ? (
+ setIsPassVisible(!isPassVisible)} />
+ ) : (
+ setIsPassVisible(!isPassVisible)} />
+ )
+ }
+ />
+
+
+
+
+
+
+
+
+ );
+};
+
+export default LoginForm;