diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index d02cc86..5d09c8e 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,6 +1,7 @@ import { Navigate, Route, Routes } from 'react-router-dom'; import { List } from './edit/List'; import { Main } from './layouts'; +import { Login } from './login/Login'; export const App = () => { return ( @@ -8,7 +9,7 @@ export const App = () => { }> } /> + } /> ); }; - diff --git a/src/pages/user/login/Login.tsx b/src/pages/user/login/Login.tsx new file mode 100644 index 0000000..71e6809 --- /dev/null +++ b/src/pages/user/login/Login.tsx @@ -0,0 +1,53 @@ +import { Button, Form, Input } from 'antd'; +import { useLoginStore } from '../store/login'; +import { useShallow } from 'zustand/react/shallow'; +import { useEffect } from 'react'; +import { isObjectNull } from '@/utils/is-null'; +export const Login = () => { + const [form] = Form.useForm(); + const loginStore = useLoginStore( + useShallow((state) => { + return { + login: state.login, + formData: state.formData, + setFormData: state.setFormData, + }; + }), + ); + useEffect(() => { + const isNull = isObjectNull(loginStore.formData); + if (isNull) { + form.setFieldsValue({}); + } else { + form.setFieldsValue(loginStore.formData); + } + }, [loginStore.formData]); + const onFinish = (values: any) => { + loginStore.setFormData(values); + loginStore.login(); + }; + return ( +
+
+

Login

+
+
+ + + + + + + +
+ +
+
+
+
+
+
+ ); +}; diff --git a/src/pages/user/store/login.ts b/src/pages/user/store/login.ts new file mode 100644 index 0000000..9814c3a --- /dev/null +++ b/src/pages/user/store/login.ts @@ -0,0 +1,54 @@ +import { query } from '@/modules'; +import { message } from 'antd'; +import { create } from 'zustand'; +type LoginStore = { + loading: boolean; + setLoading: (loading: boolean) => void; + formData: any; + setFormData: (formData: any) => void; + login: () => Promise; + register: () => Promise; + isLogin: boolean; + setIsLogin: (isLogin: boolean) => void; +}; +export const useLoginStore = create((set, get) => { + return { + loading: false, + setLoading: (loading) => set({ loading }), + formData: {}, + setFormData: (formData) => set({ formData }), + login: async () => { + const { formData } = get(); + const { username, password } = formData; + if (!username || !password) { + message.error('Please input username and password'); + return; + } + set({ loading: true }); + const loaded = message.loading('loading...', 0); + const res = await query.post({ path: 'user', key: 'login', username, password }); + loaded(); + if (res.code === 200) { + message.success('Success'); + set({ isLogin: true }); + // 跳到某一个页面,更新localStorage + } else { + message.error(res.msg || 'Request failed'); + } + }, + register: async () => { + set({ loading: true }); + const loaded = message.loading('loading...', 0); + const res = await query.post({ path: 'user', key: 'register' }); + loaded(); + if (res.code === 200) { + message.success('Success'); + // 跳到某一个页面 + } else { + message.error(res.msg || 'Request failed'); + } + }, + isLogin: false, + setIsLogin: (isLogin) => set({ isLogin }), + }; +});