Files
WonderQ-Admin-UI/src/pages/login/LoginPage.tsx
duanshuwen 51dc77ac68 refactor: clean up login-kicker and update button text
remove the unused .login-kicker CSS class and corresponding span element from the login page
update the login button text to "login" from the original "enter maintenance desk" for more accurate labeling
2026-07-12 09:48:34 +08:00

59 lines
2.0 KiB
TypeScript

import { FormEvent, useState } from "react";
import { login, setToken } from "@/api";
import { Alert, AlertDescription } from "@/components/ui/alert";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
export function LoginPage({ onDone }: { onDone: () => void }) {
const [email, setEmail] = useState("admin@example.com");
const [password, setPassword] = useState("ChangeMe123!");
const [error, setError] = useState("");
const [loading, setLoading] = useState(false);
const submit = async (event: FormEvent) => {
event.preventDefault();
setLoading(true);
setError("");
try {
const result = await login(email, password);
setToken(result.token);
onDone();
} catch (err) {
setError(err instanceof Error ? err.message : "登录失败");
} finally {
setLoading(false);
}
};
return (
<main className="login-shell">
<Card className="login-panel">
<CardHeader className="p-0">
<CardTitle></CardTitle>
<CardDescription>线</CardDescription>
</CardHeader>
<CardContent className="p-0">
<form className="login-form-stack" onSubmit={submit}>
<label>
<Input value={email} onChange={(event) => setEmail(event.target.value)} autoComplete="username" />
</label>
<label>
<Input type="password" value={password} onChange={(event) => setPassword(event.target.value)} autoComplete="current-password" />
</label>
{error ? (
<Alert variant="warning">
<AlertDescription>{error}</AlertDescription>
</Alert>
) : null}
<Button disabled={loading}>{loading ? "登录中" : "登录"}</Button>
</form>
</CardContent>
</Card>
</main>
);
}