diff --git a/webui/src/features/auth/LoginPage.tsx b/webui/src/features/auth/LoginPage.tsx index 1e5a7377..b9b98857 100644 --- a/webui/src/features/auth/LoginPage.tsx +++ b/webui/src/features/auth/LoginPage.tsx @@ -1,5 +1,5 @@ import { zodResolver } from "@hookform/resolvers/zod"; -import { LockKeyhole, ShieldCheck } from "lucide-react"; +import { Eye, EyeOff, LockKeyhole, ShieldCheck } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { useLocation, useNavigate } from "react-router-dom"; @@ -25,6 +25,7 @@ export function LoginPage() { const setToken = useAuthStore((state) => state.setToken); const storedToken = useAuthStore((state) => state.token); const [submitError, setSubmitError] = useState(""); + const [isPasswordVisible, setIsPasswordVisible] = useState(false); const { register, @@ -121,9 +122,21 @@ export function LoginPage() { id="token" placeholder={t("粘贴 Bearer Token(仅本地保存)")} autoComplete="off" + type={isPasswordVisible ? "text" : "password"} invalid={Boolean(errors.token)} {...register("token")} /> + {errors.token?.message ?
{t(errors.token.message)}
: null} diff --git a/webui/src/i18n/translations.ts b/webui/src/i18n/translations.ts index 31566ba2..fcc93431 100644 --- a/webui/src/i18n/translations.ts +++ b/webui/src/i18n/translations.ts @@ -14,6 +14,8 @@ const EXACT_ZH_TO_EN: Record