import React, { useState } from "react" import { useMutation } from "@tanstack/react-query" import { Button } from "@workspace/ui/components/button" import { Input } from "@workspace/ui/components/input" import { EyeIcon, EyeOffIcon } from "@workspace/ui/components/icon" import { cn } from "@workspace/ui/lib/utils" import { ThemeToggleButton } from "@workspace/blocks/blocks/appearance" import { Logo } from "@/components/logo" export function LoginPage() { return (

欢迎回来 👋🏻

让商品、订单与运营管理更简单高效。

) } const features = [ { label: "Jwt", img: "https://pub-c5e31b5cdafb419fb247a8ac2e78df7a.r2.dev/public/assets/icons/platforms/ic-jwt.svg", }, { label: "Firebase", img: "https://pub-c5e31b5cdafb419fb247a8ac2e78df7a.r2.dev/public/assets/icons/platforms/ic-firebase.svg", }, { label: "Amplify", img: "https://pub-c5e31b5cdafb419fb247a8ac2e78df7a.r2.dev/public/assets/icons/platforms/ic-amplify.svg", }, { label: "Auth0", img: "https://pub-c5e31b5cdafb419fb247a8ac2e78df7a.r2.dev/public/assets/icons/platforms/ic-auth0.svg", }, { label: "Supabase", img: "https://pub-c5e31b5cdafb419fb247a8ac2e78df7a.r2.dev/public/assets/icons/platforms/ic-supabase.svg", }, ] function Features() { const [index, setIndex] = React.useState(0) React.useEffect(() => { const timerId = setInterval(() => { setIndex((currentIndex) => (currentIndex + 1) % features.length) }, 1000) return () => { clearInterval(timerId) } }, []) return ( ) } function LoginForm() { // const navigate = useNavigate() const [username, setUsername] = useState("") const [password, setPassword] = useState("") const mutation = useMutation({ // mutationFn: () => { // return api.post("/api/v1/admin/auth/login", { // username, // password, // }) // }, // onSuccess: () => { // login() // Toast("登录成功", "success") // navigate("/", { replace: true }) // }, // onError: (err: Error) => toast(err.message || "登录失败", "error"), }) return (
账号登录

请输入您的帐户信息以开始管理您的系统

{ e.preventDefault() mutation.mutate() }} >
) } type FieldInputProps = { inputId: string className?: string value: string setValue: React.Dispatch> } type FieldInputComponent = React.ComponentType function Field({ label, Component, ...props }: Omit & { label: string Component: FieldInputComponent }) { return (
) } function UsernameInput({ inputId, className, value, setValue, }: FieldInputProps) { return ( setValue(e.target.value)} placeholder="请输入用户名" required /> ) } function PasswordInput({ inputId, className, value, setValue, }: FieldInputProps) { const [isVisible, setVisile] = React.useState(false) return ( <> setValue(e.target.value)} placeholder="请输入登录密码" required />
) }