"use client" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { IconInput } from "@/components/ui/icon-input" import { Label } from "@/components/ui/label" import { login as loginApi } from "@/lib/api" import { toApiError } from "@/lib/errors" import { notifyInfo } from "@/lib/toast" import { useAuthStore } from "@/store/auth" import { standardSchemaResolver } from "@hookform/resolvers/standard-schema" import { Eye, EyeOff, Lock, User } from "lucide-react" import Link from "next/link" import { useRouter } from "next/navigation" import { useState } from "react" import { useForm } from "react-hook-form" import { z } from "zod" const loginSchema = z.object({ username: z.string().min(1, "请输入用户名"), password: z.string().min(6, "密码至少6位"), }) export default function LoginPage() { const router = useRouter() const { login: storeLogin } = useAuthStore() const [showPassword, setShowPassword] = useState(false) const { register, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ resolver: standardSchemaResolver(loginSchema), }) const onSubmit = async (data: z.infer) => { try { const user = await loginApi({ username: data.username, password: data.password }) storeLogin(user, user.verifiedRoles) router.push("/") } catch (err) { notifyInfo(toApiError(err).msg) } } return ( <>

欢迎回来

登录你的聚玩账号,继续游戏之旅

} placeholder="输入用户名" {...register("username")} /> {errors.username &&

{errors.username.message}

}
忘记密码?
} type={showPassword ? "text" : "password"} placeholder="输入密码" rightElement={ } {...register("password")} /> {errors.password &&

{errors.password.message}

}

还没有账号?{" "} 立即注册

) }