"use client" import * as React from "react" import Link from "next/link" import { useRouter } from "next/navigation" import { toast } from "sonner" import { motion, AnimatePresence } from "motion/react" import { ShieldCheck } from "lucide-react" import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@/components/ui/breadcrumb" import { Button } from "@/components/ui/button" import { InputOTP, InputOTPGroup, InputOTPSlot } from "@/components/ui/input-otp" import { Spinner } from "@/components/ui/spinner" import { UserService } from "@/lib/services/user" export function SecurityMain() { const router = useRouter() const [setupStep, setSetupStep] = React.useState<'password' | 'confirm'>('password') const [payKey, setPayKey] = React.useState("") const [confirmPayKey, setConfirmPayKey] = React.useState("") const [isSubmitting, setIsSubmitting] = React.useState(false) const isPayKeyValid = payKey.length === 6 && /^\d{6}$/.test(payKey) const isConfirmValid = confirmPayKey.length === 6 && /^\d{6}$/.test(confirmPayKey) const passwordsMatch = payKey === confirmPayKey /* 安全密码输入 */ const handlePayKeyChange = (value: string) => { const numericValue = value.replaceAll(/\D/g, '') setPayKey(numericValue) } /* 确认安全密码 */ const handleConfirmPayKeyChange = (value: string) => { const numericValue = value.replaceAll(/\D/g, '') setConfirmPayKey(numericValue) } const handlePayKeySubmit = async (e: React.FormEvent) => { e.preventDefault() if (setupStep === 'password') { if (!isPayKeyValid) { toast.error("安全密码必须为6位数字") return } setSetupStep('confirm') } else { if (!isConfirmValid) { toast.error("确认密码必须为6位数字") return } if (!passwordsMatch) { toast.error("两次输入的安全密码不一致") setSetupStep('password') setConfirmPayKey("") return } setIsSubmitting(true) try { await UserService.updatePayKey(payKey) toast.success("修改成功", { description: "您的安全密码已成功更新", }) // 立即退出 router.push('/settings') } catch (error) { toast.error("修改失败", { description: error instanceof Error ? error.message : "更新密码时发生错误,请稍后重试", }) setSetupStep('password') setConfirmPayKey("") } finally { setIsSubmitting(false) } } } return (
{setupStep === 'password' ? '请输入新的6位数字安全密码' : '请再次输入密码进行确认'}