diff --git a/src/app/(home)/product/page.tsx b/src/app/(home)/product/page.tsx index e9bcefd..32d1087 100644 --- a/src/app/(home)/product/page.tsx +++ b/src/app/(home)/product/page.tsx @@ -15,6 +15,11 @@ export default function ProductPage(props: ProductPageProps) { +
+

+ 为您的业务提供多样化代理产品 +

+
diff --git a/src/components/composites/purchase/_assets/Group.webp b/src/components/composites/purchase/_assets/Group.webp new file mode 100644 index 0000000..65ae74d Binary files /dev/null and b/src/components/composites/purchase/_assets/Group.webp differ diff --git a/src/components/composites/purchase/_assets/Mask-group.webp b/src/components/composites/purchase/_assets/Mask-group.webp new file mode 100644 index 0000000..fa3b7f0 Binary files /dev/null and b/src/components/composites/purchase/_assets/Mask-group.webp differ diff --git a/src/components/composites/purchase/custom/page.tsx b/src/components/composites/purchase/custom/page.tsx new file mode 100644 index 0000000..cd98674 --- /dev/null +++ b/src/components/composites/purchase/custom/page.tsx @@ -0,0 +1,244 @@ +'use client' +import {Form, FormField} from '@/components/ui/form' +import {Input} from '@/components/ui/input' +import {Button} from '@/components/ui/button' +import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue} from '@/components/ui/select' +import {useForm} from 'react-hook-form' +import {z} from 'zod' +import {zodResolver} from '@hookform/resolvers/zod' +import Image from 'next/image' +import check from '@/assets/check-accent.svg' +import banner from '../_assets/Mask-group.webp' +import group from '../_assets/Group.webp' +import {merge} from '@/lib/utils' +import FreeTrial from '@/components/free-trial' + +const formSchema = z.object({ + companyName: z.string().min(2, '企业名称至少2个字符'), + contactName: z.string().min(2, '联系人姓名至少2个字符'), + phone: z.string().min(11, '请输入11位手机号码').max(11, '手机号码长度不正确'), + monthlyUsage: z.string().min(1, '请选择您需要的用量'), + purpose: z.string().min(1, '输入用途'), +}) + +type FormValues = z.infer + +export default function CollectPage() { + const form = useForm({ + resolver: zodResolver(formSchema), + defaultValues: { + companyName: '', + contactName: '', + phone: '', + monthlyUsage: '', + purpose: '', + }, + }) + + return ( + <> +
+
+

优质代理IP服务商

+

+ 以技术升级为核心,提供优质的IP代理使用体验 +

+
+ +
+
+
+ 宣传图 +
+
+ +
+

+ 华连科技公司专注代理IP领域,多年来凭借专业技术与不懈努力,在行业内树立起良好口碑,为众多客户解决网络访问难题。公司拥有海量优质IP资源,涵盖全球多地,能精准匹配不同客户需求,无论是数据采集、网络营销还是突破地域限制,都能提供合适方案。凭借智能分配系统与严密安全防护,确保代理IP稳定、高效、安全运行,让用户使用过程顺畅无忧,数据安全有保障。秉持以客户为中心理念,配备专业客服与技术团队,提供7×24小时服务,助力企业与个人在网络世界畅行无阻,不断开拓业务新边界。 +

+ +
+ +
+ +
+
+ 特性 + IP时效3-30分钟(可定制) +
+
+ 特性 + IP时效3-30分钟(可定制) +
+
+ 特性 + IP时效3-30分钟(可定制) +
+
+ 特性 + 支持高并发提取 +
+
+ 特性 + 支持高并发提取 +
+
+ 特性 + 支持高并发提取 +
+
+
+
+
+ +
+

企业基本信息

+
+ +
+
+
+ {/* 企业名称 */} + + {({id, field}) => ( +
+ + +
+ )} +
+ + {/* 联系人姓名 */} + + {({id, field}) => ( +
+ + +
+ )} +
+ + {/* 联系人手机号码 */} + + {({id, field}) => ( +
+ + +
+ )} +
+ + {/* 每月需求用量 */} + + {({id, field}) => ( +
+ + +
+ )} +
+ + {/* 用途 */} + + {({id, field}) => ( +
+ + +
+ )} +
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+ 现在注册,免费领取5000IP +
+ +
+
+
+
+ + ) +} diff --git a/src/components/composites/purchase/index.tsx b/src/components/composites/purchase/index.tsx index 9508b95..3426191 100644 --- a/src/components/composites/purchase/index.tsx +++ b/src/components/composites/purchase/index.tsx @@ -4,6 +4,7 @@ import {merge} from '@/lib/utils' import {Tabs, TabsContent, TabsList, TabsTrigger} from '@/components/ui/tabs' import LongForm from '@/components/composites/purchase/long/form' import ShortForm from '@/components/composites/purchase/short/form' +import Custom from '@/components/composites/purchase/custom/page' import {usePathname, useRouter, useSearchParams} from 'next/navigation' import SelfDesc from '@/components/features/self-desc' export type TabType = 'short' | 'long' | 'fixed' | 'custom' diff --git a/src/components/composites/purchase/long/right.tsx b/src/components/composites/purchase/long/right.tsx index 1baa271..66e25e6 100644 --- a/src/components/composites/purchase/long/right.tsx +++ b/src/components/composites/purchase/long/right.tsx @@ -26,8 +26,6 @@ export default function Right() { const live = useWatch({control, name: 'live'}) const quota = useWatch({control, name: 'quota'}) const expire = useWatch({control, name: 'expire'}) - const dailyLimit = useWatch({control, name: 'daily_limit'}) - const [price, setPrice] = useState('0.00') useEffect(() => { @@ -58,7 +56,7 @@ export default function Right() { } } price() - }, [dailyLimit, expire, live, quota, mode]) + }, [expire, live, quota, mode]) return ( 每日限额 - {dailyLimit} + {quota} 个 @@ -115,7 +113,7 @@ export default function Right() {

- +
) @@ -128,7 +126,6 @@ function BalanceOrLogin(props: { live: string quota: number expire: string - dailyLimit: number }) { const profile = use(useProfileStore(store => store.profile)) return profile ? ( @@ -189,7 +186,7 @@ function BalanceOrLogin(props: { mode: Number(props.mode), live: Number(props.live), expire: Number(props.expire), - quota: props.mode === '1' ? props.dailyLimit : props.quota, + quota: props.quota, }, }}/> diff --git a/src/components/composites/purchase/short/right.tsx b/src/components/composites/purchase/short/right.tsx index 3ff4973..5c26af8 100644 --- a/src/components/composites/purchase/short/right.tsx +++ b/src/components/composites/purchase/short/right.tsx @@ -22,10 +22,8 @@ export default function Right() { const method = useWatch({control, name: 'pay_type'}) const live = useWatch({control, name: 'live'}) const mode = useWatch({control, name: 'type'}) - const dailyLimit = useWatch({control, name: 'daily_limit'}) const expire = useWatch({control, name: 'expire'}) const quota = useWatch({control, name: 'quota'}) - const [price, setPrice] = useState('0.00') useEffect(() => { const price = async () => { @@ -55,7 +53,7 @@ export default function Right() { } } price() - }, [dailyLimit, expire, live, quota, mode]) + }, [expire, live, quota, mode]) return ( 每日限额 - {dailyLimit} + {quota} 个 @@ -113,7 +111,7 @@ export default function Right() {

- +
) @@ -126,7 +124,6 @@ function BalanceOrLogin(props: { live: string quota: number expire: string - dailyLimit: number }) { const profile = use(useProfileStore(store => store.profile)) return profile ? ( @@ -187,7 +184,7 @@ function BalanceOrLogin(props: { mode: Number(props.mode), live: Number(props.live), expire: Number(props.expire), - quota: props.mode === '1' ? props.dailyLimit : props.quota, + quota: props.quota, }, }}/> diff --git a/src/components/wrap.tsx b/src/components/wrap.tsx index f2e9a29..c121cc7 100644 --- a/src/components/wrap.tsx +++ b/src/components/wrap.tsx @@ -7,7 +7,7 @@ export type WrapProps = { export default function Wrap(props: WrapProps) { return ( -
+
{props.children}
)