Phase C1-R: Landing Page repositioned for individual AI practitioners
This commit is contained in:
1 parent
6d12ee9ff9
commit
35a8d727e0
2 files changed
+1122
-778
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -21,11 +21,18 @@ const LandingPage: React.FC = () => {
|
|||||||
const publishedApps = mockApps.filter(a => a.status === 'published');
|
const publishedApps = mockApps.filter(a => a.status === 'published');
|
||||||
const [appTypeFilter, setAppTypeFilter] = useState<'' | 'skill' | 'agent' | 'mcp'>('');
|
const [appTypeFilter, setAppTypeFilter] = useState<'' | 'skill' | 'agent' | 'mcp'>('');
|
||||||
const [toastMsg, setToastMsg] = useState('');
|
const [toastMsg, setToastMsg] = useState('');
|
||||||
|
const [scrolled, setScrolled] = useState(false);
|
||||||
|
|
||||||
const filteredApps = appTypeFilter
|
const filteredApps = appTypeFilter
|
||||||
? publishedApps.filter(a => a.type === appTypeFilter)
|
? publishedApps.filter(a => a.type === appTypeFilter)
|
||||||
: publishedApps;
|
: publishedApps;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const handleScroll = () => setScrolled(window.scrollY > 60);
|
||||||
|
window.addEventListener('scroll', handleScroll);
|
||||||
|
return () => window.removeEventListener('scroll', handleScroll);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const showToast = (msg: string) => {
|
const showToast = (msg: string) => {
|
||||||
setToastMsg(msg);
|
setToastMsg(msg);
|
||||||
setTimeout(() => setToastMsg(''), 2000);
|
setTimeout(() => setToastMsg(''), 2000);
|
||||||
@@ -36,7 +43,6 @@ const LandingPage: React.FC = () => {
|
|||||||
setTimeout(() => navigate('/login'), 800);
|
setTimeout(() => navigate('/login'), 800);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Auto rotate carousel
|
|
||||||
const nextSlide = useCallback(() => {
|
const nextSlide = useCallback(() => {
|
||||||
if (banners.length === 0) return;
|
if (banners.length === 0) return;
|
||||||
setCurrentSlide(prev => (prev + 1) % banners.length);
|
setCurrentSlide(prev => (prev + 1) % banners.length);
|
||||||
@@ -63,304 +69,379 @@ const LandingPage: React.FC = () => {
|
|||||||
return gradients[app.id] || 'linear-gradient(135deg, #5B5FED 0%, #A78BFA 100%)';
|
return gradients[app.id] || 'linear-gradient(135deg, #5B5FED 0%, #A78BFA 100%)';
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
// Platform Architecture - layers from bottom to top
|
||||||
<div className="landing-page">
|
const archLayers = [
|
||||||
{/* Toast notification */}
|
{
|
||||||
{toastMsg && (
|
label: '应用层',
|
||||||
<div className="landing-toast">{toastMsg}</div>
|
color: '#6C63FF',
|
||||||
)}
|
items: ['AI 对话工作台', '知识库问答', '自动化流程', 'IM Bot 接入', 'API 集成'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '能力层',
|
||||||
|
color: '#10B981',
|
||||||
|
items: ['技能市场 (Skill)', '智能体 (Agent)', 'MCP 协议', 'RAG 检索增强', '工具链编排'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '模型层',
|
||||||
|
color: '#F59E0B',
|
||||||
|
items: ['DeepSeek', 'GPT-4o', 'Claude', 'Qwen', '多模态模型'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '基础设施',
|
||||||
|
color: '#3B82F6',
|
||||||
|
items: ['向量数据库', '对象存储', '任务调度', 'API 网关', '监控告警'],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
{/* Hero / Nav bar */}
|
// Capability groups
|
||||||
<header className="landing-header">
|
const capabilities = [
|
||||||
<div className="landing-header-inner">
|
{
|
||||||
<div className="landing-brand">
|
icon: <SVGIcon size={28}><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></SVGIcon>,
|
||||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none">
|
title: 'AI 对话',
|
||||||
<rect width="32" height="32" rx="8" fill="#5B5FED"/>
|
desc: '接入 50+ 主流大模型,支持流式输出、多轮对话、Function Calling,你的专属 AI 助手',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: <SVGIcon size={28}><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></SVGIcon>,
|
||||||
|
title: '知识库',
|
||||||
|
desc: '上传文档、网页、代码构建个人知识库,RAG 增强检索让 AI 回答更精准可靠',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: <SVGIcon size={28}><rect x="3" y="3" width="7" height="7" rx="1.2"/><rect x="14" y="3" width="7" height="7" rx="1.2"/><rect x="3" y="14" width="7" height="7" rx="1.2"/><rect x="14" y="14" width="7" height="7" rx="1.2"/></SVGIcon>,
|
||||||
|
title: '技能市场',
|
||||||
|
desc: '100+ 预制 AI 技能,一键安装即用。支持 Skill、Agent、MCP 三种形态,持续扩展',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: <SVGIcon size={28}><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></SVGIcon>,
|
||||||
|
title: 'IM Bot',
|
||||||
|
desc: '将 AI 能力接入飞书、微信、钉钉,在聊天中调用 AI,无缝融入日常工作流',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: <SVGIcon size={28}><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></SVGIcon>,
|
||||||
|
title: 'AI 自进化',
|
||||||
|
desc: '从每次对话中持续学习,自动沉淀知识图谱,你的 AI 越用越懂你',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: <SVGIcon size={28}><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></SVGIcon>,
|
||||||
|
title: 'Token 驾驶舱',
|
||||||
|
desc: '实时监控调用量、Token 消耗与成本,精细化管理你的 AI 使用预算',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// Scenarios - individual practitioner focused
|
||||||
|
const scenarios = [
|
||||||
|
{ icon: '📚', title: '学习助手', desc: '构建课程知识库,AI 辅助理解复杂概念、整理笔记、解答疑问' },
|
||||||
|
{ icon: '💼', title: '工作效率', desc: '自动化重复任务、智能撰写文档邮件、快速检索信息,效率翻倍' },
|
||||||
|
{ icon: '🤖', title: 'AI Agent 开发', desc: '用 Skill + Agent + MCP 搭建专属 AI 助手,从原型到生产一站完成' },
|
||||||
|
{ icon: '📊', title: '数据分析', desc: '自然语言查询数据库,自动生成可视化报告,让数据说话更简单' },
|
||||||
|
{ icon: '✍️', title: '内容创作', desc: 'AI 辅助写文章、做翻译、润色文案,让创作更有灵感' },
|
||||||
|
{ icon: '🔬', title: '技术探索', desc: '接入最新模型做实验,对比不同 LLM 效果,探索 AI 的前沿能力' },
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="landing-page-v2">
|
||||||
|
{/* Toast */}
|
||||||
|
{toastMsg && <div className="landing-toast-v2">{toastMsg}</div>}
|
||||||
|
|
||||||
|
{/* Header */}
|
||||||
|
<header className={`landing-header-v2 ${scrolled ? 'scrolled' : ''}`}>
|
||||||
|
<div className="landing-header-inner-v2">
|
||||||
|
<div className="landing-brand-v2">
|
||||||
|
<svg width="36" height="36" viewBox="0 0 32 32" fill="none">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="logoGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||||
|
<stop offset="0%" stopColor="#5B5FED"/>
|
||||||
|
<stop offset="100%" stopColor="#A78BFA"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="32" height="32" rx="8" fill="url(#logoGrad)"/>
|
||||||
<path d="M8 20V12l4 4 4-4v8" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" fill="none"/>
|
<path d="M8 20V12l4 4 4-4v8" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" fill="none"/>
|
||||||
<path d="M6 22h20" stroke="white" strokeWidth="1.5" strokeLinecap="round" opacity="0.5"/>
|
<path d="M6 22h20" stroke="white" strokeWidth="1.5" strokeLinecap="round" opacity="0.5"/>
|
||||||
</svg>
|
</svg>
|
||||||
<span className="brand-name">Qihu-AIFlow</span>
|
<span className="landing-brand-text">Qihu-AIFlow</span>
|
||||||
</div>
|
</div>
|
||||||
<nav className="landing-nav-links">
|
<nav className="landing-nav-v2">
|
||||||
<a href="#market">应用市场</a>
|
<a href="#what-is">平台介绍</a>
|
||||||
<a href="#features">平台能力</a>
|
<a href="#architecture">平台架构</a>
|
||||||
|
<a href="#capabilities">能力体系</a>
|
||||||
|
<a href="#scenarios">应用场景</a>
|
||||||
|
<a href="#market">技能生态</a>
|
||||||
</nav>
|
</nav>
|
||||||
<div className="landing-header-actions">
|
<div className="landing-actions-v2">
|
||||||
<button className="landing-btn landing-btn-outline" onClick={() => navigate('/login')}>登录</button>
|
<button className="btn-ghost-v2" onClick={() => navigate('/login')}>登录</button>
|
||||||
<button className="landing-btn landing-btn-primary" onClick={() => navigate('/login')}>免费注册</button>
|
<button className="btn-primary-v2" onClick={() => navigate('/login')}>免费注册</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* Hero Section */}
|
{/* Hero Section — What is Qihu-AIFlow */}
|
||||||
<section className="landing-hero">
|
<section className="hero-section-v2">
|
||||||
<div className="landing-hero-content">
|
<div className="hero-bg-orb orb-1" />
|
||||||
<h1 className="hero-title">
|
<div className="hero-bg-orb orb-2" />
|
||||||
用 <span className="hero-accent">AI</span> 构建你的<br/>智能自动化工作流
|
<div className="hero-bg-orb orb-3" />
|
||||||
|
<div className="hero-content-v2">
|
||||||
|
<div className="hero-badge-v2">
|
||||||
|
<span className="hero-badge-dot" />
|
||||||
|
AI 个人工作台 · 为创造者而生
|
||||||
|
</div>
|
||||||
|
<h1 className="hero-title-v2">
|
||||||
|
每一个 AI 创造者
|
||||||
|
<span className="hero-gradient-text"> 的超级工作台</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p className="hero-desc">
|
<p className="hero-subtitle-v2">
|
||||||
Qihu-AIFlow 是一站式AI智能自动化PaaS平台,集成多模态大模型、知识库管理、应用市场,
|
Qihu-AIFlow 是一站式 AI 能力集成平台,让你在一个地方完成对话、知识库、技能编排、模型切换、自动化搭建<br/>
|
||||||
让每个人都能轻松搭建属于自己的AI自动化SOP。
|
无需拼接多个工具,从想法到落地,一个平台就够了
|
||||||
</p>
|
</p>
|
||||||
<div className="hero-actions">
|
<div className="hero-cta-v2">
|
||||||
<button className="landing-btn landing-btn-primary landing-btn-lg" onClick={() => navigate('/login')}>
|
<button className="btn-hero-primary" onClick={() => navigate('/login')}>
|
||||||
免费开始使用
|
免费开始使用
|
||||||
|
<SVGIcon size={18}><path d="M5 12h14"/><path d="M12 5l7 7-7 7"/></SVGIcon>
|
||||||
</button>
|
</button>
|
||||||
<button className="landing-btn landing-btn-outline landing-btn-lg" onClick={() => { document.getElementById('market')?.scrollIntoView({ behavior: 'smooth' }); }}>
|
<button className="btn-hero-secondary" onClick={() => document.getElementById('what-is')?.scrollIntoView({ behavior: 'smooth' })}>
|
||||||
浏览应用市场
|
了解平台
|
||||||
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M6 9l6 6 6-6"/></svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div className="hero-stats">
|
{/* Stats */}
|
||||||
<div className="hero-stat">
|
<div className="hero-stats-v2">
|
||||||
<span className="stat-number">3,500+</span>
|
<div className="hero-stat-item">
|
||||||
<span className="stat-label">活跃用户</span>
|
<span className="hero-stat-num">100+</span>
|
||||||
|
<span className="hero-stat-label">AI 技能</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="hero-stat">
|
<div className="hero-stat-divider" />
|
||||||
<span className="stat-number">120+</span>
|
<div className="hero-stat-item">
|
||||||
<span className="stat-label">应用/Skills</span>
|
<span className="hero-stat-num">50+</span>
|
||||||
|
<span className="hero-stat-label">大模型接入</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="hero-stat">
|
<div className="hero-stat-divider" />
|
||||||
<span className="stat-number">99.8%</span>
|
<div className="hero-stat-item">
|
||||||
<span className="stat-label">服务可用率</span>
|
<span className="hero-stat-num">6</span>
|
||||||
|
<span className="hero-stat-label">IM 平台</span>
|
||||||
|
</div>
|
||||||
|
<div className="hero-stat-divider" />
|
||||||
|
<div className="hero-stat-item">
|
||||||
|
<span className="hero-stat-num">99.9%</span>
|
||||||
|
<span className="hero-stat-label">可用性</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Carousel Section */}
|
{/* What is Qihu-AIFlow — Platform Introduction */}
|
||||||
|
<section id="what-is" className="whatis-section-v2">
|
||||||
|
<div className="section-header-v2">
|
||||||
|
<span className="section-badge-v2">平台介绍</span>
|
||||||
|
<h2>Qihu-AIFlow 是什么?</h2>
|
||||||
|
<p>一个面向 AI 爱好者和从业者的个人 AI 能力集成平台</p>
|
||||||
|
</div>
|
||||||
|
<div className="whatis-cards-v2">
|
||||||
|
<div className="whatis-card">
|
||||||
|
<div className="whatis-card-icon">🎯</div>
|
||||||
|
<h3>能力聚合</h3>
|
||||||
|
<p>将大模型对话、知识库、技能编排、自动化、IM Bot 等能力整合在一个平台,告别工具碎片化</p>
|
||||||
|
</div>
|
||||||
|
<div className="whatis-card">
|
||||||
|
<div className="whatis-card-icon">⚡</div>
|
||||||
|
<h3>开箱即用</h3>
|
||||||
|
<p>预设 100+ AI 技能模板,50+ 大模型即配即用,无需从零搭建,注册即可上手</p>
|
||||||
|
</div>
|
||||||
|
<div className="whatis-card">
|
||||||
|
<div className="whatis-card-icon">🔌</div>
|
||||||
|
<h3>开放扩展</h3>
|
||||||
|
<p>支持 MCP 协议、Skill 插件、Agent 编排、API 开放,你可以自由扩展和定制</p>
|
||||||
|
</div>
|
||||||
|
<div className="whatis-card">
|
||||||
|
<div className="whatis-card-icon">🚀</div>
|
||||||
|
<h3>持续进化</h3>
|
||||||
|
<p>AI 自进化引擎从使用中持续学习,知识库自动更新,模型热切换,你的工作台越来越强</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Platform Architecture */}
|
||||||
|
<section id="architecture" className="architecture-section-v2">
|
||||||
|
<div className="section-header-v2">
|
||||||
|
<span className="section-badge-v2">平台架构</span>
|
||||||
|
<h2>四层架构 · 层层赋能</h2>
|
||||||
|
<p>从基础设施到上层应用,理解 Qihu-AIFlow 的技术全貌</p>
|
||||||
|
</div>
|
||||||
|
<div className="arch-layers-v2">
|
||||||
|
{archLayers.map((layer, idx) => (
|
||||||
|
<div key={idx} className="arch-layer" style={{ '--layer-color': layer.color } as React.CSSProperties}>
|
||||||
|
<div className="arch-layer-header">
|
||||||
|
<div className="arch-layer-dot" style={{ background: layer.color }} />
|
||||||
|
<span className="arch-layer-label">{layer.label}</span>
|
||||||
|
<div className="arch-layer-line" />
|
||||||
|
</div>
|
||||||
|
<div className="arch-layer-items">
|
||||||
|
{layer.items.map((item, i) => (
|
||||||
|
<span key={i} className="arch-layer-chip">{item}</span>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
{/* Downward arrows between layers */}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Banner Carousel */}
|
||||||
{banners.length > 0 && (
|
{banners.length > 0 && (
|
||||||
<section className="landing-banners">
|
<section className="banner-section-v2">
|
||||||
<div className="landing-section-inner">
|
|
||||||
<h2 className="section-title">推荐应用</h2>
|
|
||||||
<div
|
<div
|
||||||
className="carousel-container"
|
className="banner-carousel-v2"
|
||||||
onMouseEnter={() => setIsPaused(true)}
|
onMouseEnter={() => setIsPaused(true)}
|
||||||
onMouseLeave={() => setIsPaused(false)}
|
onMouseLeave={() => setIsPaused(false)}
|
||||||
>
|
>
|
||||||
<div className="carousel-track" style={{ transform: `translateX(-${currentSlide * 100}%)` }}>
|
<div className="banner-track-v2" style={{ transform: `translateX(-${currentSlide * 100}%)` }}>
|
||||||
{banners.map(banner => (
|
{banners.map((banner, idx) => (
|
||||||
<div key={banner.id} className="carousel-slide">
|
<div key={idx} className="banner-slide-v2">
|
||||||
<div className="carousel-card" style={{ background: banner.linkAppId ? getGradient({ id: banner.linkAppId } as MarketApp) : 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)' }}>
|
<div className="banner-content-v2">
|
||||||
<div className="carousel-card-content">
|
<span className="banner-tag">AI 精选</span>
|
||||||
<div className="carousel-badge">推荐</div>
|
<h2>{banner.title}</h2>
|
||||||
<h3 className="carousel-title">{banner.title}</h3>
|
<p>{banner.title}</p>
|
||||||
{banner.linkAppName && (
|
|
||||||
<p className="carousel-subtitle">立即体验 {banner.linkAppName}</p>
|
|
||||||
)}
|
|
||||||
<button
|
|
||||||
className="carousel-cta"
|
|
||||||
onClick={() => navigate('/login')}
|
|
||||||
>
|
|
||||||
查看详情
|
|
||||||
<SVGIcon size={14}><polyline points="9 18 15 12 9 6"/></SVGIcon>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div className="carousel-card-visual">
|
|
||||||
<div className="visual-circle c1"/>
|
|
||||||
<div className="visual-circle c2"/>
|
|
||||||
<div className="visual-circle c3"/>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div className="banner-visual-v2">
|
||||||
|
<div className="banner-shape" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
{/* Dots */}
|
<div className="banner-dots-v2">
|
||||||
{banners.length > 1 && (
|
|
||||||
<div className="carousel-dots">
|
|
||||||
{banners.map((_, idx) => (
|
{banners.map((_, idx) => (
|
||||||
<button
|
<button
|
||||||
key={idx}
|
key={idx}
|
||||||
className={`carousel-dot ${idx === currentSlide ? 'active' : ''}`}
|
className={`banner-dot ${idx === currentSlide ? 'active' : ''}`}
|
||||||
onClick={() => goToSlide(idx)}
|
onClick={() => goToSlide(idx)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
)}
|
|
||||||
{/* Arrows */}
|
|
||||||
{banners.length > 1 && (
|
|
||||||
<>
|
|
||||||
<button
|
|
||||||
className="carousel-arrow carousel-arrow-left"
|
|
||||||
onClick={() => setCurrentSlide(prev => (prev - 1 + banners.length) % banners.length)}
|
|
||||||
>
|
|
||||||
<SVGIcon size={20}><polyline points="15 18 9 12 15 6"/></SVGIcon>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
className="carousel-arrow carousel-arrow-right"
|
|
||||||
onClick={() => nextSlide()}
|
|
||||||
>
|
|
||||||
<SVGIcon size={20}><polyline points="9 18 15 12 9 6"/></SVGIcon>
|
|
||||||
</button>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Market Preview Section */}
|
{/* Capabilities Section */}
|
||||||
<section className="landing-market" id="market">
|
<section id="capabilities" className="capabilities-section-v2">
|
||||||
<div className="landing-section-inner">
|
<div className="section-header-v2">
|
||||||
<div className="section-header">
|
<span className="section-badge-v2">能力体系</span>
|
||||||
<h2 className="section-title">应用市场</h2>
|
<h2>六大核心能力</h2>
|
||||||
<p className="section-desc">丰富的 Skills、Agent、MCP 应用,一键接入你的工作流</p>
|
<p>从对话到自动化,覆盖 AI 从业者的全部工作流</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="capabilities-grid-v2">
|
||||||
{/* Type Filter */}
|
{capabilities.map((c, idx) => (
|
||||||
<div className="market-filter-tabs">
|
<div key={idx} className="capability-card-v2">
|
||||||
<button
|
<div className="capability-icon-v2">{c.icon}</div>
|
||||||
className={`filter-tab ${appTypeFilter === '' ? 'active' : ''}`}
|
<h3>{c.title}</h3>
|
||||||
onClick={() => setAppTypeFilter('')}
|
<p>{c.desc}</p>
|
||||||
>全部</button>
|
|
||||||
<button
|
|
||||||
className={`filter-tab ${appTypeFilter === 'skill' ? 'active' : ''}`}
|
|
||||||
onClick={() => setAppTypeFilter('skill')}
|
|
||||||
>Skills</button>
|
|
||||||
<button
|
|
||||||
className={`filter-tab ${appTypeFilter === 'agent' ? 'active' : ''}`}
|
|
||||||
onClick={() => setAppTypeFilter('agent')}
|
|
||||||
>Agent</button>
|
|
||||||
<button
|
|
||||||
className={`filter-tab ${appTypeFilter === 'mcp' ? 'active' : ''}`}
|
|
||||||
onClick={() => setAppTypeFilter('mcp')}
|
|
||||||
>MCP</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
{/* App Grid */}
|
{/* Scenarios Section */}
|
||||||
<div className="market-app-grid">
|
<section id="scenarios" className="scenarios-section-v2">
|
||||||
{filteredApps.map(app => (
|
<div className="section-header-v2">
|
||||||
<div key={app.id} className="market-app-card" onClick={() => handleAppClick(app.name)}>
|
<span className="section-badge-v2">应用场景</span>
|
||||||
<div className="app-card-cover" style={{ background: getGradient(app) }}>
|
<h2>每个 AI 创作者都用得上</h2>
|
||||||
<span className="app-card-type-badge" style={{ background: typeColors[app.type] }}>
|
<p>无论你是学习者、开发者、还是内容创作者,都能找到属于你的打开方式</p>
|
||||||
|
</div>
|
||||||
|
<div className="scenarios-grid-v2">
|
||||||
|
{scenarios.map((s, idx) => (
|
||||||
|
<div key={idx} className="scenario-card-v2">
|
||||||
|
<div className="scenario-emoji">{s.icon}</div>
|
||||||
|
<h3>{s.title}</h3>
|
||||||
|
<p>{s.desc}</p>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{/* Market Preview */}
|
||||||
|
<section id="market" className="market-section-v2">
|
||||||
|
<div className="section-header-v2">
|
||||||
|
<span className="section-badge-v2">技能生态</span>
|
||||||
|
<h2>丰富的 AI 技能生态</h2>
|
||||||
|
<p>Skills、Agent、MCP 工具一键安装,持续扩展你的 AI 能力边界</p>
|
||||||
|
<div className="market-filter-v2">
|
||||||
|
{(['', 'skill', 'agent', 'mcp'] as const).map(t => (
|
||||||
|
<button
|
||||||
|
key={t || 'all'}
|
||||||
|
className={`filter-chip ${appTypeFilter === t ? 'active' : ''}`}
|
||||||
|
onClick={() => setAppTypeFilter(t)}
|
||||||
|
>
|
||||||
|
{t === '' ? '全部' : typeLabels[t]}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="market-grid-v2">
|
||||||
|
{filteredApps.slice(0, 6).map(app => (
|
||||||
|
<div key={app.id} className="market-card-v2" onClick={() => handleAppClick(app.name)}>
|
||||||
|
<div className="market-card-icon-v2" style={{ background: getGradient(app) }}>
|
||||||
|
{app.name.charAt(0)}
|
||||||
|
</div>
|
||||||
|
<div className="market-card-body-v2">
|
||||||
|
<div className="market-card-header-v2">
|
||||||
|
<h4>{app.name}</h4>
|
||||||
|
<span className="type-badge" style={{ background: typeColors[app.type], color: '#fff' }}>
|
||||||
{typeLabels[app.type]}
|
{typeLabels[app.type]}
|
||||||
</span>
|
</span>
|
||||||
{app.price > 0 && (
|
|
||||||
<span className="app-card-price">{app.price} 元</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
<div className="app-card-body">
|
<p className="market-card-desc-v2">{app.description}</p>
|
||||||
<h4 className="app-card-name">{app.name}</h4>
|
<div className="market-card-meta-v2">
|
||||||
<p className="app-card-desc">{app.description}</p>
|
<span>⭐ 4.8</span>
|
||||||
<div className="app-card-meta">
|
<span>📥 1.2k</span>
|
||||||
<span className="app-card-rating">
|
<span>{app.price === 0 ? '免费' : `¥${app.price}`}</span>
|
||||||
<SVGIcon size={12}><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></SVGIcon>
|
|
||||||
{app.ratingAvg > 0 ? app.ratingAvg : '-'}
|
|
||||||
</span>
|
|
||||||
<span className="app-card-installs">{app.installCount.toLocaleString()} 次安装</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="market-more">
|
|
||||||
<button className="landing-btn landing-btn-outline" onClick={() => navigate('/login')}>
|
|
||||||
登录查看更多应用
|
|
||||||
<SVGIcon size={14}><polyline points="9 18 15 12 9 6"/></SVGIcon>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Features Section */}
|
{/* CTA */}
|
||||||
<section className="landing-features" id="features">
|
<section className="cta-section-v2">
|
||||||
<div className="landing-section-inner">
|
<div className="cta-bg-glow" />
|
||||||
<div className="section-header">
|
<h2>准备好开始你的 AI 之旅了吗?</h2>
|
||||||
<h2 className="section-title">平台核心能力</h2>
|
<p>免费注册,即刻拥有属于你自己的 AI 超级工作台</p>
|
||||||
<p className="section-desc">从对话到自动化,Qihu-AIFlow 为你提供完整的 AI 工作流解决方案</p>
|
<button className="btn-hero-primary" onClick={() => navigate('/login')}>
|
||||||
</div>
|
免费注册
|
||||||
<div className="features-grid">
|
<SVGIcon size={18}><path d="M5 12h14"/><path d="M12 5l7 7-7 7"/></SVGIcon>
|
||||||
<div className="feature-card">
|
|
||||||
<div className="feature-icon">
|
|
||||||
<SVGIcon size={28}><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></SVGIcon>
|
|
||||||
</div>
|
|
||||||
<h3 className="feature-title">多模型AI对话</h3>
|
|
||||||
<p className="feature-desc">支持GPT-4o、DeepSeek-R1、Qwen-Max等多种大模型自由切换,按需使用最优模型</p>
|
|
||||||
</div>
|
|
||||||
<div className="feature-card">
|
|
||||||
<div className="feature-icon">
|
|
||||||
<SVGIcon size={28}><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></SVGIcon>
|
|
||||||
</div>
|
|
||||||
<h3 className="feature-title">私有知识库</h3>
|
|
||||||
<p className="feature-desc">上传文档构建专属知识库,AI回答基于你的内容,更精准可靠</p>
|
|
||||||
</div>
|
|
||||||
<div className="feature-card">
|
|
||||||
<div className="feature-icon">
|
|
||||||
<SVGIcon size={28}><rect x="3" y="3" width="7" height="7" rx="1.2"/><rect x="14" y="3" width="7" height="7" rx="1.2"/><rect x="3" y="14" width="7" height="7" rx="1.2"/><rect x="14" y="14" width="7" height="7" rx="1.2"/></SVGIcon>
|
|
||||||
</div>
|
|
||||||
<h3 className="feature-title">应用市场</h3>
|
|
||||||
<p className="feature-desc">丰富的Skills、Agent、MCP应用,一站式接入工作流,即装即用</p>
|
|
||||||
</div>
|
|
||||||
<div className="feature-card">
|
|
||||||
<div className="feature-icon">
|
|
||||||
<SVGIcon size={28}><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></SVGIcon>
|
|
||||||
</div>
|
|
||||||
<h3 className="feature-title">Token驾驶舱</h3>
|
|
||||||
<p className="feature-desc">实时监控Token消耗,费用透明可控,每一笔都有据可查</p>
|
|
||||||
</div>
|
|
||||||
<div className="feature-card">
|
|
||||||
<div className="feature-icon">
|
|
||||||
<SVGIcon size={28}><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></SVGIcon>
|
|
||||||
</div>
|
|
||||||
<h3 className="feature-title">IM频道绑定</h3>
|
|
||||||
<p className="feature-desc">支持飞书、钉钉、微信等多平台绑定,AI助手融入日常工作流</p>
|
|
||||||
</div>
|
|
||||||
<div className="feature-card">
|
|
||||||
<div className="feature-icon">
|
|
||||||
<SVGIcon size={28}><polyline points="16 3 21 3 21 8"/><line x1="4" y1="20" x2="21" y2="3"/><polyline points="21 16 21 21 16 21"/><line x1="15" y1="15" x2="21" y2="21"/><line x1="4" y1="4" x2="9" y2="9"/></SVGIcon>
|
|
||||||
</div>
|
|
||||||
<h3 className="feature-title">自动化任务编排</h3>
|
|
||||||
<p className="feature-desc">创建关键词触发、定时执行等自动化任务,让AI按你的节奏工作</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{/* CTA Section */}
|
|
||||||
<section className="landing-cta">
|
|
||||||
<div className="landing-section-inner">
|
|
||||||
<h2 className="cta-title">准备好开始了吗?</h2>
|
|
||||||
<p className="cta-desc">免费注册即可体验全部功能,无需任何技术背景</p>
|
|
||||||
<button className="landing-btn landing-btn-primary landing-btn-lg" onClick={() => navigate('/login')}>
|
|
||||||
免费注册,立即体验
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Footer */}
|
{/* Footer */}
|
||||||
<footer className="landing-footer">
|
<footer className="landing-footer-v2">
|
||||||
<div className="landing-section-inner">
|
<div className="footer-inner-v2">
|
||||||
<div className="footer-content">
|
<div className="footer-brand-v2">
|
||||||
<div className="footer-brand">
|
|
||||||
<div className="landing-brand">
|
|
||||||
<svg width="28" height="28" viewBox="0 0 32 32" fill="none">
|
<svg width="28" height="28" viewBox="0 0 32 32" fill="none">
|
||||||
<rect width="32" height="32" rx="8" fill="#5B5FED"/>
|
<rect width="32" height="32" rx="8" fill="#5B5FED"/>
|
||||||
<path d="M8 20V12l4 4 4-4v8" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" fill="none"/>
|
<path d="M8 20V12l4 4 4-4v8" stroke="white" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" fill="none"/>
|
||||||
|
<path d="M6 22h20" stroke="white" strokeWidth="1.5" strokeLinecap="round" opacity="0.5"/>
|
||||||
</svg>
|
</svg>
|
||||||
<span className="brand-name" style={{ color: 'var(--color-text-primary)' }}>Qihu-AIFlow</span>
|
<span>Qihu-AIFlow</span>
|
||||||
</div>
|
</div>
|
||||||
<p style={{ color: 'var(--color-text-tertiary)', fontSize: 'var(--text-sm)', marginTop: 'var(--space-md)' }}>
|
<div className="footer-links-v2">
|
||||||
AI智能自动化PaaS平台
|
<div className="footer-col-v2">
|
||||||
</p>
|
<h4>平台</h4>
|
||||||
|
<a href="#what-is">平台介绍</a>
|
||||||
|
<a href="#architecture">平台架构</a>
|
||||||
|
<a href="#capabilities">能力体系</a>
|
||||||
</div>
|
</div>
|
||||||
<div className="footer-links">
|
<div className="footer-col-v2">
|
||||||
<div className="footer-col">
|
<h4>资源</h4>
|
||||||
<h4>产品</h4>
|
<a href="#">API 文档</a>
|
||||||
<a>AI聊天</a>
|
<a href="#">开发者指南</a>
|
||||||
<a>知识库</a>
|
<a href="#">更新日志</a>
|
||||||
<a>应用市场</a>
|
|
||||||
</div>
|
</div>
|
||||||
<div className="footer-col">
|
<div className="footer-col-v2">
|
||||||
<h4>支持</h4>
|
<h4>支持</h4>
|
||||||
<a>帮助文档</a>
|
<a href="#">帮助中心</a>
|
||||||
<a>API参考</a>
|
<a href="#">联系我们</a>
|
||||||
<a>联系我们</a>
|
<a href="#">社区论坛</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="footer-bottom">
|
<div className="footer-bottom-v2">
|
||||||
<span>Qihu-AIFlow 2026. All rights reserved.</span>
|
<p>© 2026 Qihu-AIFlow. All rights reserved.</p>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in new issue
Block a user