完善页头页尾

This commit is contained in:
2025-03-18 18:00:29 +08:00
parent c0f367954d
commit 705af45d2a
25 changed files with 502 additions and 436 deletions

View File

@@ -0,0 +1,67 @@
import Link from "next/link"
import Image from "next/image"
import Wrap from "@/components/wrap"
import h01 from '@/assets/header/help/01.svg'
import h02 from '@/assets/header/help/02.svg'
import h03 from '@/assets/header/help/03.svg'
import banner from '@/assets/header/help/banner.webp'
export default function HelpMenu() {
return (
<Wrap className="w-full grid grid-cols-4 gap-4 justify-items-center">
<Column
icon={h01}
title="提取IP"
items={[
{ lead: '短效动态IP提取', href: '#' },
{ lead: '长效静态IP提取', href: '#' },
]}
/>
<Column
icon={h02}
title="使用教程"
items={[
{ lead: '快速入手', href: '#' },
{ lead: '代码下载', href: '#' },
{ lead: 'API文档', href: '#' },
]}
/>
<Column
icon={h03}
title="产品功能"
items={[
{ lead: '常见问题', href: '#' },
{ lead: '产品介绍', href: '#' },
{ lead: '行业资讯', href: '#' },
]}
/>
<Image src={banner} alt={`banner`} className={``} />
</Wrap>
)
}
function Column(props: {
icon: any
title: string
items: {
lead: string
href: string
}[]
}) {
return (
<div className="flex flex-col gap-4">
<h3 className="font-bold flex gap-3 items-center">
<Image src={props.icon} alt={props.title} className="w-10 h-10" />
<span>{props.title}</span>
</h3>
<ul className=" text-gray-500 text-sm flex flex-col items-end gap-2">
{props.items.map((item, index) => (
<li key={index}><Link href={item.href}>{item.lead}</Link></li>
))}
</ul>
</div>
)
}

View File

@@ -0,0 +1,127 @@
'use client'
import { useState, ReactNode } from "react"
import Wrap from "@/components/wrap"
import Image from "next/image"
import prod from '@/assets/header/product/prod.svg'
import custom from '@/assets/header/product/custom.svg'
import anno from '@/assets/header/product/anno.svg'
type TabType = 'domestic' | 'oversea'
export default function ProductMenu() {
const [type, setType] = useState<TabType>('domestic')
return (
<Wrap className="flex">
<ul role="tablist" className="w-48">
<Tab selected={type === 'domestic'} onSelect={() => setType('domestic')}></Tab>
<Tab selected={type === 'oversea'} onSelect={() => setType('oversea')}></Tab>
</ul>
<div className="flex-1">
{type === 'domestic'
? (
<section role="tabpanel" className="flex gap-16 mr-16">
<div className="w-64 flex flex-col gap-6">
<h3 className="font-bold mb-2 flex items-center gap-3">
<Image src={prod} alt={`产品`} className={`w-10 h-=10`} />
<span></span>
</h3>
<div className="flex flex-col gap-2">
<p className="flex gap-2">
<span>IP</span>
<span className="text-orange-500 text-xs text-light px-2 py-1 bg-orange-50 rounded-full">
45%
</span>
</p>
<p className="text-gray-400 text-sm">
300+
</p>
</div>
<div className="flex flex-col gap-2">
<p className="flex gap-2">
<span>IP</span>
<span className="text-orange-500 text-xs text-light px-2 py-1 bg-orange-50 rounded-full">
45%
</span>
</p>
<p className="text-gray-400 text-sm">
IPI资源覆盖全国
</p>
</div>
<div>
<p className="flex gap-2">
<span>IP</span>
<span className="text-orange-500 text-xs text-light px-2 py-1 bg-orange-50 rounded-full">
45%
</span>
</p>
</div>
</div>
<div className="w-64 flex flex-col gap-4">
<h3 className="font-bold mb-2 flex items-center gap-3">
<Image src={custom} alt="定制" className="w-10 h-10" />
<span></span>
</h3>
<div className="flex flex-col gap-2">
<p>//IP</p>
<p className="text-gray-400 text-sm">
1000
1 1 24
</p>
</div>
</div>
</section>
) : (
<section role="tabpanel">
</section>
)
}
</div>
<aside className="w-64">
<h3 className="flex gap-3 items-center mb-4">
<Image src={anno} alt={`公告`} className={`w-10 h-10`} />
<span></span>
</h3>
<div className="flex flex-col gap-2">
<p>线</p>
<p className="text-gray-400 text-sm">
1.使使
使
</p>
<p className="text-gray-400 text-sm">
2.使使
使
</p>
</div>
</aside>
</Wrap>
)
}
function Tab(props: {
selected: boolean
onSelect: () => void
children: ReactNode
}) {
return (
<li role="tab">
<button
className={[
`p-8 text-lg cursor-pointer border-r`,
props.selected ? `bg-gradient-to-r from-transparent to-blue-200 border-blue-400` : `border-gray-200`,
].join(' ')}
onClick={props.onSelect}
>
{props.children}
</button>
</li>
)
}

View File

@@ -0,0 +1,79 @@
import Image from "next/image"
import Wrap from "@/components/wrap"
import s01 from "@/assets/header/solution/01.svg"
import s02 from "@/assets/header/solution/02.svg"
import s03 from "@/assets/header/solution/03.svg"
import s04 from "@/assets/header/solution/04.svg"
import s05 from "@/assets/header/solution/05.svg"
import s06 from "@/assets/header/solution/06.svg"
import s07 from "@/assets/header/solution/07.svg"
import s08 from "@/assets/header/solution/08.svg"
export default function SolutionMenu() {
return (
<Wrap className="grid grid-cols-4 auto-rows-fr gap-4">
<SolutionItem
icon={s01}
title="数据抓取"
desc="高效采集和分析大量数据,助力企业获取大量情报"
/>
<SolutionItem
icon={s02}
title="广告验证"
desc="确保广告点击和展示数据的真实性,帮助企业,提升广告效果"
/>
<SolutionItem
icon={s03}
title="市场调查"
desc="收集全网行业数据,了解竞争对手动态"
/>
<SolutionItem
icon={s04}
title="SEO优化"
desc="收集搜索引擎情报,提高网站在搜索引擎的排名"
/>
<SolutionItem
icon={s05}
title="品牌保护"
desc="保护品牌商标打造,优质品牌形象,为企业获得更多用户"
/>
<SolutionItem
icon={s06}
title="价格监控"
desc="利用优质代理IP实时监控行业价格信息提高市场竞争力"
/>
<SolutionItem
icon={s07}
title="金融数据"
desc="快速获取金融市场实时数据,帮助投资者分析趋势,使其做出精准决策"
/>
<SolutionItem
icon={s08}
title="网站测试"
desc="在不同环境下对网站进行性能和兼容的测试,让用户有高质量体验"
/>
</Wrap>
)
}
function SolutionItem(props: {
icon: any
title: string
desc: string
}) {
return (
<div
className={[
`h-full p-4 flex gap-4 items-start rounded-md cursor-pointer`,
`transition-colors duration-200 hover:bg-blue-100`,
].join(' ')}
>
<Image src={props.icon} alt={props.title} className="w-10 h-10" />
<div className="flex flex-col gap-1">
<h3 className="font-bold">{props.title}</h3>
<p className="text-gray-400 text-sm">{props.desc}</p>
</div>
</div>
)
}