diff --git a/src/App.tsx b/src/App.tsx index 257538e..93a02de 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,17 +1,38 @@ import { BrowserRouter as Router, Routes, Route } from 'react-router-dom' +import { SiteLayout } from './components/SiteLayout' import { Home } from './pages/Home' -import { PostDetail } from './pages/PostDetail' -import { CategoriesPage } from './pages/Categories' -import { CategoryDetail } from './pages/CategoryDetail' +import { Why } from './pages/Why' +import { How } from './pages/How' +import { System } from './pages/System' +import { Discovery } from './pages/Discovery' +import { Solutions } from './pages/Solutions' +import { Proof } from './pages/Proof' +import { Contact } from './pages/Contact' function App() { return ( - } /> - } /> - } /> - } /> + }> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + 页面不存在 + 请通过顶部导航回到主线内容。 + + } + /> + ) diff --git a/src/components/SectionShell.tsx b/src/components/SectionShell.tsx new file mode 100644 index 0000000..a1dcbd8 --- /dev/null +++ b/src/components/SectionShell.tsx @@ -0,0 +1,46 @@ +import React from 'react' + +type HeadingTag = 'h1' | 'h2' + +export type SectionShellProps = { + sectionKey: string + title: string + lead?: string + headingAs?: HeadingTag + notes?: string[] + children?: React.ReactNode +} + +export const SectionShell: React.FC = ({ + sectionKey, + title, + lead, + headingAs = 'h2', + notes, + children, +}) => { + const Heading = headingAs + + return ( + + + + + {title} + + {lead ? {lead} : null} + + {notes?.length ? ( + + {notes.map((note) => ( + {note} + ))} + + ) : null} + + {children ? {children} : null} + + + + ) +} diff --git a/src/components/SiteLayout.tsx b/src/components/SiteLayout.tsx new file mode 100644 index 0000000..e141d19 --- /dev/null +++ b/src/components/SiteLayout.tsx @@ -0,0 +1,17 @@ +import React from 'react' +import { Outlet, ScrollRestoration } from 'react-router-dom' +import { Header } from './Header' +import { Footer } from './Footer' + +export const SiteLayout: React.FC = () => { + return ( + + + + + + + + + ) +} diff --git a/src/pages/Contact.tsx b/src/pages/Contact.tsx new file mode 100644 index 0000000..65a053a --- /dev/null +++ b/src/pages/Contact.tsx @@ -0,0 +1,109 @@ +import React from 'react' +import { SectionShell } from '../components/SectionShell' + +const ConversationInvite: React.FC = () => { + return ( + + ) +} + +const ContactForm: React.FC = () => { + return ( + + e.preventDefault()} aria-label="联系表单"> + + + 姓名 + + + + + + + 公司 + + + + + + + 角色 + + + + + + + 邮箱 + + + + + + + 你正在面对的决策问题 + + + + + + + 提交(占位) + + V1 先占位,后续接入表单服务。 + + + + ) +} + +const AlternativeCTA: React.FC = () => { + return ( + + ) +} + +export const Contact: React.FC = () => { + return ( + + + + + + ) +} diff --git a/src/pages/Discovery.tsx b/src/pages/Discovery.tsx new file mode 100644 index 0000000..3416e17 --- /dev/null +++ b/src/pages/Discovery.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import { SectionShell } from '../components/SectionShell' + +const DiscoveryPositioning: React.FC = () => { + return ( + + ) +} + +const ContentTypes: React.FC = () => { + return ( + + ) +} + +const LatestInsights: React.FC = () => { + return ( + + ) +} + +const DecisionValue: React.FC = () => { + return ( + + ) +} + +export const Discovery: React.FC = () => { + return ( + + + + + + + ) +} diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index cea6ae3..74ab9c0 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,48 +1,122 @@ -import React, { useEffect, useState } from 'react' -import { Header } from '../components/Header' -import { Footer } from '../components/Footer' -import { PostCard } from '../components/PostCard' -import { PostCardSkeleton } from '../components/PostCardSkeleton' -import { Posts } from '../clientsdk/sdk.gen' -import { createClient } from '../clientsdk/client' -import { customQuerySerializer } from '../clientsdk/querySerializer' -import { TENANT_SLUG, TENANT_API_KEY, API_URL } from '../config' +import React from 'react' +import { SectionShell } from '../components/SectionShell' -const client = createClient({ - baseUrl: API_URL, - querySerializer: customQuerySerializer, - headers: { - 'X-Tenant-Slug': TENANT_SLUG, - 'X-API-Key': TENANT_API_KEY, - }, -}) +const HeroWorldView: React.FC = () => { + return ( + + ) +} + +const DecisionProblem: React.FC = () => { + return ( + + ) +} + +const CoreThesis: React.FC = () => { + return ( + + ) +} + +const Methodology: React.FC = () => { + return ( + + ) +} + +const SystemOverview: React.FC = () => { + return ( + + ) +} + +const DiscoveryIntro: React.FC = () => { + return ( + + ) +} + +const MeasurableOutcome: React.FC = () => { + return ( + + ) +} + +const TrustProof: React.FC = () => { + return ( + + ) +} + +const SoftCTA: React.FC = () => { + return ( + + ) +} export const Home: React.FC = () => { - const [posts, setPosts] = useState([]) - const [loading, setLoading] = useState(true) - const [error, setError] = useState(null) + return ( + + + + + + + + + + + + ) +} - useEffect(() => { - const fetchPosts = async () => { - try { - setLoading(true) - setError(null) - - const response = await Posts.listPosts({ - client, - query: { - limit: 10, - sort: '-createdAt', - }, - }) - - setPosts((response as any)?.data?.docs || []) - } catch (err) { - setError(err instanceof Error ? err.message : '加载失败') - console.error('获取文章失败:', err) - } finally { - setLoading(false) - } } fetchPosts() diff --git a/src/pages/How.tsx b/src/pages/How.tsx new file mode 100644 index 0000000..ce87e4d --- /dev/null +++ b/src/pages/How.tsx @@ -0,0 +1,70 @@ +import React from 'react' +import { SectionShell } from '../components/SectionShell' + +const MethodologyOrigin: React.FC = () => { + return ( + + ) +} + +const ComplianceAsGrowth: React.FC = () => { + return ( + + ) +} + +const WhyAgentSystem: React.FC = () => { + return ( + + ) +} + +const ExecutionModel: React.FC = () => { + return ( + + ) +} + +const Boundary: React.FC = () => { + return ( + + ) +} + +export const How: React.FC = () => { + return ( + + + + + + + + ) +} diff --git a/src/pages/Proof.tsx b/src/pages/Proof.tsx new file mode 100644 index 0000000..f238a51 --- /dev/null +++ b/src/pages/Proof.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import { SectionShell } from '../components/SectionShell' + +const ProofPhilosophy: React.FC = () => { + return ( + + ) +} + +const GovernmentCases: React.FC = () => { + return ( + + ) +} + +const EnterpriseCases: React.FC = () => { + return ( + + ) +} + +const CapabilitySummary: React.FC = () => { + return ( + + ) +} + +export const Proof: React.FC = () => { + return ( + + + + + + + ) +} diff --git a/src/pages/Solutions.tsx b/src/pages/Solutions.tsx new file mode 100644 index 0000000..a23fb10 --- /dev/null +++ b/src/pages/Solutions.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import { SectionShell } from '../components/SectionShell' + +const IndustryLogic: React.FC = () => { + return ( + + ) +} + +const IndustryList: React.FC = () => { + return ( + + ) +} + +const IndustryTemplate: React.FC = () => { + return ( + + ) +} + +const FitCriteria: React.FC = () => { + return ( + + ) +} + +export const Solutions: React.FC = () => { + return ( + + + + + + + ) +} diff --git a/src/pages/System.tsx b/src/pages/System.tsx new file mode 100644 index 0000000..0197f09 --- /dev/null +++ b/src/pages/System.tsx @@ -0,0 +1,70 @@ +import React from 'react' +import { SectionShell } from '../components/SectionShell' + +const SystemMap: React.FC = () => { + return ( + + ) +} + +const GComply: React.FC = () => { + return ( + + ) +} + +const GGrowth: React.FC = () => { + return ( + + ) +} + +const GBrain: React.FC = () => { + return ( + + ) +} + +const DiscoveryModule: React.FC = () => { + return ( + + ) +} + +export const System: React.FC = () => { + return ( + + + + + + + + ) +} diff --git a/src/pages/Why.tsx b/src/pages/Why.tsx new file mode 100644 index 0000000..6e86e85 --- /dev/null +++ b/src/pages/Why.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import { SectionShell } from '../components/SectionShell' + +const GlobalContext: React.FC = () => { + return ( + + ) +} + +const RealDecisionFear: React.FC = () => { + return ( + + ) +} + +const FalseSolutions: React.FC = () => { + return ( + + ) +} + +const ProblemReframe: React.FC = () => { + return ( + + ) +} + +export const Why: React.FC = () => { + return ( + + + + + + + ) +}
请通过顶部导航回到主线内容。
{lead}
V1 先占位,后续接入表单服务。