'use client'; import * as React from 'react'; import { useState } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { InputOTP, InputOTPGroup, InputOTPSlot, } from '@/components/ui/input-otp'; import { Button } from '@/components/ui/button'; import { Spinner } from '@/components/ui/spinner'; import { useTranslations } from 'next-intl'; interface PasswordDialogProps { isOpen: boolean; onOpenChange: (open: boolean) => void; onConfirm: (password: string) => void; loading?: boolean; title?: string; description?: string; } /** * 密码输入对话框 * * 用于敏感操作前的二次确认 */ export function PasswordDialog({ isOpen, onOpenChange, onConfirm, loading = false, title, description, }: PasswordDialogProps) { const [password, setPassword] = useState(''); const t = useTranslations('general.passwordDialog'); const displayTitle = title ?? t('enterPassword'); const displayDescription = description ?? t('enterPasswordDesc'); const handleConfirm = () => { if (password.length === 6) { onConfirm(password); } }; /* 当对话框关闭时重置密码*/ React.useEffect(() => { if (!isOpen) { setPassword(''); } }, [isOpen]); return ( {displayTitle} {displayDescription}
{ if (e.key === 'Enter' && password.length === 6 && !loading) { handleConfirm(); } }} >
); }