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 ( +
+
+
+

Thrive

+

现代化博客管理系统

+
+ +
+ + } placeholder="请输入用户名" /> + + + + } + type={isPassVisible ? 'text' : 'password'} + placeholder="请输入密码" + iconRender={visible => + visible ? ( + setIsPassVisible(!isPassVisible)} /> + ) : ( + setIsPassVisible(!isPassVisible)} /> + ) + } + /> + + + + + +
+
+
+ ); +}; + +export default LoginForm;