'use client' import {Button} from '@/components/ui/button' import Image from 'next/image' import Page from '@/components/page' import {Dialog, DialogContent, DialogFooter, DialogTitle, DialogTrigger} from '@/components/ui/dialog' import {Form, FormField} from '@/components/ui/form' import {useForm} from 'react-hook-form' import zod from 'zod' import {zodResolver} from '@hookform/resolvers/zod' import {Identify} from '@/actions/user' import {toast} from 'sonner' import {ReactNode, Suspense, use, useEffect, useRef, useState} from 'react' import * as qrcode from 'qrcode' import {useProfileStore} from '@/components/stores/profile' import {merge} from '@/lib/utils' import banner from './_assets/banner.webp' import personal from './_assets/personal.webp' import step1 from './_assets/step1.webp' import step2 from './_assets/step2.webp' import step3 from './_assets/step3.webp' import {Card, CardContent, CardHeader, CardTitle} from '@/components/ui/card' import {CheckCircleIcon, WorkflowIcon} from 'lucide-react' const schema = zod.object({ type: zod.enum([`personal`, `enterprise`], {errorMap: () => ({message: `请选择认证类型`})}).default('personal'), name: zod.string().min(2, {message: `姓名至少2个字符`}), iden_no: zod.string().length(18, {message: `身份证号码必须为18位`}), }) type Schema = zod.infer export type IdentifyPageProps = {} export default function IdentifyPage(props: IdentifyPageProps) { // ====================== // 填写信息 // ====================== const form = useForm({ resolver: zodResolver(schema), defaultValues: { type: `personal`, name: ``, iden_no: ``, }, }) const handler = form.handleSubmit( async (value) => { const resp = await Identify({ type: value.type === `personal` ? 1 : 2, name: value.name, iden_no: value.iden_no, }) if (resp.success) { form.reset() if (!resp.data?.identified) { setStep('scan') setTarget(resp.data.target) } else { toast.success('认证已完成') } } else { toast.error(resp.message || `认证失败:请稍后重试`) } }, ) // ====================== // 扫码认证 // ====================== const [step, setStep] = useState<'form' | 'scan'>('form') const [target, setTarget] = useState('') const [openDialog, setOpenDialog] = useState(false) const canvas = useRef(null) useEffect(() => { if (canvas.current && target) { qrcode.toCanvas(canvas.current, target, { width: 256, margin: 0, }, (error) => { if (error) { console.error(error) toast.error(`二维码生成失败:请稍后重试`) } }) } }, [target]) // ====================== // 用户数据 // ====================== const profile = useProfileStore(store => store.profile) const refreshProfile = useProfileStore(store => store.refreshProfile) // 重置认证流程 const handleDialogOpenChange = async (open: boolean) => { setOpenDialog(open) if (!open) { setStep('form') setTarget('') await refreshProfile() } } // ====================== // render // ====================== return (
{/* banner */}
背景图

蓝狐HTTP邀请您参与【先测后买】服务

为了保障您的账户安全,请先完成实名认证,即可获取福利套餐测试资格

{/* 个人认证 */}
个人认证

个人认证

平台不会收集您的个人信息,您的信息仅用于账户安全认证

{step === 'form' ? `实名认证` : `扫码完成认证`} {step === 'form' && (
name="name" label="姓名"> {({id, field}) => ( )} name="iden_no" label="身份证号"> {({id, field}) => ( )} )} {step === 'scan' && (

请扫码完成认证

)}
操作引导

为响应国家相关规定,使用HTTP代理需完成实名认证。认证服务由支付宝提供,您的个人信息将受到严格保护,仅用于账户安全认证

01 注册账号 步骤配图

02 实名认证 步骤配图

03 支付订单 步骤配图

) } function IfNotIdentofy(props: {children: ReactNode}) { const profile = use(useProfileStore(store => store.profile)) return !profile?.id_token ? props.children : (

已完成实名认证

) }