import React, { useState, useEffect, useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import { mockAdBanners, mockApps } from '@/mock/data'; import type { AdBanner, MarketApp } from '@/types'; import './LandingPage.css'; /* ---------- 内联 Lucide 风格图标(满足"用 Lucide 图标、禁 emoji"铁律) ---------- */ const Icon: React.FC<{ d: React.ReactNode; size?: number }> = ({ d, size = 20 }) => ( {d} ); /* ---------- 品牌同系渐变(仅靛蓝→青蓝,无第三色相) ---------- */ const appGradients: Record = { a1: 'linear-gradient(135deg,#5B5FED 0%,#4F8DF9 100%)', a2: 'linear-gradient(135deg,#6366F1 0%,#60A5FA 100%)', a3: 'linear-gradient(135deg,#5B5FED 0%,#818CF8 100%)', a4: 'linear-gradient(135deg,#4F8DF9 0%,#38BDF8 100%)', a5: 'linear-gradient(135deg,#6366F1 0%,#7DD3FC 100%)', a6: 'linear-gradient(135deg,#5B5FED 0%,#8185F5 100%)', a7: 'linear-gradient(135deg,#4F8DF9 0%,#818CF8 100%)', a8: 'linear-gradient(135deg,#6366F1 0%,#4F8DF9 100%)', }; const gradFor = (id: string) => appGradients[id] || 'linear-gradient(135deg,#5B5FED 0%,#4F8DF9 100%)'; const typeLabels: Record = { skill: 'Skill', agent: 'Agent', mcp: 'MCP' }; const typeBadge: Record = { skill: 'badge-skill', agent: 'badge-agent', mcp: 'badge-mcp', }; /* ---------- 文案数据(来自用户原始需求提炼) ---------- */ const painPoints = [ { d: <>, title: '大模型 API 贵且复杂', desc: '多家模型计费规则不一、调用门槛高,个人与小企业难以低成本接入。' }, { d: <>, title: 'Prompt 难调试', desc: '缺乏可视化编排与复用,效果全靠手感,团队无法沉淀最佳实践。' }, { d: <>, title: '数据孤岛', desc: '知识散落在文档、表格、聊天记录里,AI 答非所问,价值无法被激活。' }, { d: <>, title: '个人开发者无变现渠道', desc: '做出好用的 AI 能力却找不到分发与交易场景,难以转化为收入。' }, ]; const valueProps = [ { d: <>, title: '低价订阅 · 无限 Token', kw: '无限Token', desc: '一个低价会员即可放开使用,告别按次计费与额度焦虑,放心把 AI 用进日常。' }, { d: <>, title: '垂直可用办公模板', kw: '办公提效', desc: '写 PPT、出投标书、做运营、排版公众号——开箱即用的模板,把重复劳动交给 AI。' }, { d: <>, title: '可交易的技能市场', kw: 'AI变现', desc: '把自己打磨的技能上架交易,按订阅 / 下载获得收益,能力即资产。' }, { d: <>, title: 'AI 创作应用基地', kw: '', desc: '写小说、做漫剧、谱音乐——在 AI 试炼场低成本试错,让创作想法快速跑通。' }, { d: <>, title: '低成本养模型', kw: '', desc: '低成本微调 / 托管你的专属模型——养马、养龙虾、养螃蟹,把"养模型"变成可负担的日常。' }, ]; const features = [ { d: <>, title: '多模型 AI 对话', desc: 'DeepSeek / Qwen / 国际模型自由切换,按需选用最优模型。' }, { d: <>, title: '私有知识库', desc: '上传文档构建专属知识库,AI 回答基于你的内容,更精准可靠。' }, { d: <>, title: '技能 / 应用中心', desc: '丰富的 Skills、Agent、MCP 应用,即装即用,一键接入工作流。' }, { d: <>, title: 'Token 驾驶舱', desc: '实时监控 Token 消耗,费用透明可控,每一笔都有据可查。' }, { d: <>, title: 'AI 微信Bot', desc: '个人微信 AI 助手直接对接,消息自动回复,AI 融入你的日常沟通。' }, { d: <>, title: '自动化任务编排', desc: '关键词触发、定时执行等自动化任务,让 AI 按你的节奏工作。' }, ]; const LandingPage: React.FC = () => { const navigate = useNavigate(); const [currentSlide, setCurrentSlide] = useState(0); const [isPaused, setIsPaused] = useState(false); const [mobileMenu, setMobileMenu] = useState(false); const [banners, setBanners] = useState( mockAdBanners.filter(b => b.status === 'active') ); const publishedApps = mockApps.filter(a => a.status === 'published'); const topSkills = [...publishedApps].sort((a, b) => b.installCount - a.installCount).slice(0, 5); const nextSlide = useCallback(() => { if (banners.length === 0) return; setCurrentSlide(prev => (prev + 1) % banners.length); }, [banners.length]); useEffect(() => { if (banners.length <= 1 || isPaused) return; const timer = setInterval(nextSlide, 4500); return () => clearInterval(timer); }, [banners.length, isPaused, nextSlide]); // 精选推荐:对接平台「广告位」能力——拉取后台已上架(active)的真实广告轮播; // 无数据或接口异常时回退到内置示例,保证首屏不空。 useEffect(() => { let alive = true; fetch('/app/api/market/ads') .then(r => (r.ok ? r.json() : Promise.reject(r.status))) .then((rows: any[]) => { if (!alive || !Array.isArray(rows) || rows.length === 0) return; const mapped: AdBanner[] = rows.map(a => ({ id: a.id, title: a.title, imageUrl: a.image_url || '', linkAppId: a.link_app_id || undefined, linkAppName: a.link_app_name || undefined, sortOrder: a.sort_order ?? 0, clickCount: a.click_count ?? 0, status: (a.status as 'active' | 'inactive') || 'active', createdAt: a.created_at || '', })); setBanners(mapped); setCurrentSlide(0); }) .catch(() => { /* 静默失败,保留 mock 回退 */ }); return () => { alive = false; }; }, []); // SEO / GEO:动态写入标题与描述 useEffect(() => { document.title = '七虎AI · 个人体验 AI、办公提效与 AI 创收的一站式平台'; let meta = document.querySelector('meta[name="description"]'); if (!meta) { meta = document.createElement('meta'); meta.setAttribute('name', 'description'); document.head.appendChild(meta); } meta.setAttribute('content', '七虎AI 是面向个人与职场用户的 AI 平台:低价订阅无限 Token、垂直办公模板、可交易技能市场、AI 创作试炼场与低成本养模型,让每个人用 AI 把事做成。'); }, []); const goLogin = () => navigate('/login'); // 点击 logo 回到首页顶部(.lp 是滚动容器,用 scrollTo 而非 window) const goTop = () => { const el = document.querySelector('.lp') as HTMLElement | null; if (el) el.scrollTo({ top: 0, behavior: 'smooth' }); else window.scrollTo({ top: 0, behavior: 'smooth' }); }; // 页内锚点导航:原生 会触发路由跳转而非滚动, // 故改为编程式 scrollIntoView + preventDefault,仅在 LandingPage 内部滚动容器内跳转。 const anchorClick = (id: string, after?: () => void) => (e: React.MouseEvent) => { e.preventDefault(); document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' }); after?.(); }; const jsonLd = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: '七虎AI', applicationCategory: 'BusinessApplication', operatingSystem: 'Web', offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' }, aggregateRating: { '@type': 'AggregateRating', ratingValue: '4.8', reviewCount: '1000' }, }; return (
{/* JSON-LD 富媒体摘要(SEO / GEO) */}