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 (
+
+ );
+};
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 }),
+ };
+});