"use client"; import { LockOutlined, UserOutlined } from "@ant-design/icons"; import { App, Button, Form, Input } from "antd"; import { useRouter, useSearchParams } from "next/navigation"; import { Suspense } from "react"; import { useUserStore } from "@/stores/use-user-store"; type LoginFormValues = { username: string; password: string; confirmPassword?: string; }; export default function LoginPage() { return ( ); } function LoginContent() { const { message } = App.useApp(); const router = useRouter(); const searchParams = useSearchParams(); const login = useUserStore((state) => state.login); const isLoading = useUserStore((state) => state.isLoading); const redirect = searchParams.get("redirect") || "/"; const submit = async (values: LoginFormValues) => { try { const user = await login({ username: values.username, password: values.password }); message.success("登录成功"); router.replace(redirect.startsWith("/") ? redirect : "/"); router.refresh(); if (user.role !== "admin") router.replace("/"); } catch (error) { message.error(error instanceof Error ? error.message : "登录失败"); } }; return (

管理员登录

当前暂时关闭注册,仅允许管理员账号登录。

layout="vertical" size="large" requiredMark={false} onFinish={submit}> 用户名} rules={[{ required: true, message: "请输入用户名" }]}> } autoComplete="username" /> 密码} rules={[{ required: true, message: "请输入密码" }]}> } autoComplete="current-password" />
); }