'use client'; import { useMutation } from '@tanstack/react-query'; import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import { useState } from 'react'; import { InlineMessage } from '@/components/feedback/inline-message'; import { AppCard } from '@/components/ui/app-card'; import { resetPassword } from '@/features/auth/api/auth'; import { AuthButton, AuthFormField, AuthInput, SecondaryButton, } from '@/features/auth/components/auth-form-primitives'; export function PasswordResetConfirmForm() { const searchParams = useSearchParams(); const email = searchParams?.get('email') || ''; const token = searchParams?.get('token') || ''; const [message, setMessage] = useState<{ tone: 'success' | 'danger'; text: string } | null>(null); const mutation = useMutation({ mutationFn: () => resetPassword({ email, token }), onSuccess: async (password) => { try { await navigator.clipboard.writeText(password); setMessage({ tone: 'success', text: `密码已重置,新密码已复制到剪贴板:${password}` }); } catch { setMessage({ tone: 'success', text: `密码已重置:${password}` }); } }, onError: (error: Error) => { setMessage({ tone: 'danger', text: error.message || '密码重置失败,请重新获取链接。' }); }, }); const missingParams = !email || !token; return (
{missingParams ? ( ) : null} {message ? : null}
mutation.mutate()}> {mutation.isPending ? '处理中...' : '确认重置密码'} {message?.tone === 'success' ? ( { const password = message.text.split(':').pop() || ''; if (password) { await navigator.clipboard.writeText(password); } }} > 再次复制密码 ) : null}
处理完成后可返回 登录页
); }