"use client"; import { useState } from "react"; import type { FormBlockValue } from "@/types/wagtail"; const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:8000"; export default function LeadForm({ value }: { value: FormBlockValue }) { const [values, setValues] = useState>({}); const [website, setWebsite] = useState(""); // 蜂蜜陷阱字段,正常用户不可见,只有机器人会填写 const [status, setStatus] = useState<"idle" | "submitting" | "done" | "error">( "idle", ); const form = value.form; if (!form) { return null; } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setStatus("submitting"); try { const res = await fetch(`${API_BASE_URL}/api/v1/custom/leads/`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ form_id: form!.id, data: values, source_url: typeof window !== "undefined" ? window.location.href : "", website, }), }); if (!res.ok) throw new Error("submit failed"); setStatus("done"); } catch { setStatus("error"); } } if (status === "done") { return (
{form.success_message}
); } return (

{form.name}

{form.fields.map((field) => (
{field.field_type === "textarea" ? (