在准备环境前提交次全部更改。

This commit is contained in:
Neo
2026-02-19 08:35:13 +08:00
parent ded6dfb9d8
commit 4eac07da47
1387 changed files with 6107191 additions and 33002 deletions

View File

@@ -0,0 +1,92 @@
/**
* 登录页面 — Ant Design Form + Zustand authStore。
*/
import React, { useState } from "react";
import { Button, Card, Form, Input, message, Typography, Space } from "antd";
import { LockOutlined, UserOutlined } from "@ant-design/icons";
import { useNavigate } from "react-router-dom";
import { useAuthStore } from "../store/authStore";
const { Title, Text } = Typography;
interface LoginFormValues {
username: string;
password: string;
}
const Login: React.FC = () => {
const navigate = useNavigate();
const login = useAuthStore((s) => s.login);
const [loading, setLoading] = useState(false);
const onFinish = async (values: LoginFormValues) => {
setLoading(true);
try {
await login(values.username, values.password);
message.success("登录成功");
navigate("/", { replace: true });
} catch (err: unknown) {
const detail =
(err as { response?: { data?: { detail?: string } } })?.response?.data
?.detail ?? "登录失败,请检查用户名和密码";
message.error(detail);
} finally {
setLoading(false);
}
};
return (
<div
style={{
display: "flex",
justifyContent: "center",
alignItems: "center",
minHeight: "100vh",
background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
}}
>
<Card
style={{
width: 400,
borderRadius: 12,
boxShadow: "0 8px 32px rgba(0,0,0,0.15)",
}}
>
<Space direction="vertical" style={{ width: "100%", textAlign: "center", marginBottom: 24 }}>
<Title level={3} style={{ margin: 0 }}>NeoZQYY</Title>
<Text type="secondary"></Text>
</Space>
<Form<LoginFormValues>
name="login"
onFinish={onFinish}
autoComplete="off"
size="large"
>
<Form.Item
name="username"
rules={[{ required: true, message: "请输入用户名" }]}
>
<Input prefix={<UserOutlined />} placeholder="用户名" />
</Form.Item>
<Form.Item
name="password"
rules={[{ required: true, message: "请输入密码" }]}
>
<Input.Password prefix={<LockOutlined />} placeholder="密码" />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit" loading={loading} block>
</Button>
</Form.Item>
</Form>
</Card>
</div>
);
};
export default Login;