Skip to content

Commit 436e5c4

Browse files
xqvvuFinleyGe
andauthored
feat: add price page (#105)
* feat: add price page * fix: svg and redirect href * fix(action): packageManager config in package.json * chore: internationlized; ajust layout * chore: improve feature list * chore: translate; improve layout * fix: header navbar --------- Co-authored-by: FinleyGe <[email protected]>
1 parent 79ae516 commit 436e5c4

File tree

28 files changed

+11710
-10067
lines changed

28 files changed

+11710
-10067
lines changed

.vscode/settings.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,8 @@
1212
"i18n-ally.keepFulfilled": true,
1313
"i18n-ally.sourceLanguage": "zh", // 根据此语言文件翻译其他语言文件的变量和内容
1414
"i18n-ally.displayLanguage": "en", // 显示语言
15-
}
15+
"[typescript][typescriptreact]": {
16+
"editor.formatOnSave": true,
17+
"editor.defaultFormatter": "esbenp.prettier-vscode"
18+
}
19+
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
"engines": {
2121
"node": ">=18.0.0"
2222
}
23-
}
23+
}

pnpm-lock.yaml

Lines changed: 9261 additions & 8429 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
1-
import Ability from '@/components/home/Ability';
2-
import CTA from '@/components/home/CTA';
3-
import FAQ from '@/components/home/FAQ';
4-
import Feature from '@/components/home/Feature';
5-
import Hero from '@/components/home/Hero';
6-
// import SocialProof from '@/components/home/SocialProof';
7-
import VideoPlayer from '@/components/home/Video';
8-
import { defaultLocale, getDictionary, localeNames } from '@/lib/i18n';
9-
import { getGitHubStars } from '@/lib/utils';
10-
11-
export default async function HomePage({ params: { lang } }: { params: { lang?: string } }) {
12-
const langName = lang || defaultLocale;
13-
const dict = await getDictionary(langName);
14-
15-
const stars = await getGitHubStars();
16-
17-
return (
18-
<>
19-
{/* Hero Section */}
20-
<Hero locale={dict.Hero} CTALocale={dict.CTAButton} stars={stars} />
21-
{/* <SocialProof locale={dict.SocialProof} /> */}
22-
{/* Can be used to display technology stack, partners, project honors, etc. */}
23-
{/*<ScrollingLogos />*/}
24-
<VideoPlayer locale={dict.Video} dict={dict} />
25-
26-
<Ability id="Ability" locale={dict.Ability} langName={langName} />
27-
28-
{/* USP (Unique Selling Proposition) */}
29-
<Feature id="Features" locale={dict.Feature} langName={langName} />
30-
31-
{/* Pricing */}
32-
{/* <Pricing id="Pricing" locale={dict.Pricing} langName={langName} /> */}
33-
34-
{/* FAQ (Frequently Asked Questions) */}
35-
<FAQ id="FAQ" locale={dict.FAQ} langName={langName} />
36-
37-
{/* CTA (Call to Action) Footer */}
38-
<CTA locale={dict.CTA} CTALocale={dict.CTAButton} stars={stars} />
39-
</>
40-
);
41-
}
42-
43-
export async function generateStaticParams() {
44-
return Object.keys(localeNames).map((lang) => ({ lang }));
45-
}
1+
import Ability from '@/components/home/Ability';
2+
import CTA from '@/components/home/CTA';
3+
import FAQ from '@/components/home/FAQ';
4+
import Feature from '@/components/home/Feature';
5+
import Hero from '@/components/home/Hero';
6+
// import SocialProof from '@/components/home/SocialProof';
7+
import VideoPlayer from '@/components/home/Video';
8+
import { defaultLocale, getDictionary, localeNames } from '@/lib/i18n';
9+
import { getGitHubStars } from '@/lib/utils';
10+
11+
export default async function HomePage({ params: { lang } }: { params: { lang?: string } }) {
12+
const langName = lang || defaultLocale;
13+
const dict = await getDictionary(langName);
14+
15+
const stars = await getGitHubStars();
16+
17+
return (
18+
<>
19+
{/* Hero Section */}
20+
<Hero locale={dict.Hero} CTALocale={dict.CTAButton} stars={stars} />
21+
{/* <SocialProof locale={dict.SocialProof} /> */}
22+
{/* Can be used to display technology stack, partners, project honors, etc. */}
23+
{/*<ScrollingLogos />*/}
24+
<VideoPlayer locale={dict.Video} dict={dict} />
25+
26+
<Ability id="Ability" locale={dict.Ability} langName={langName} />
27+
28+
{/* USP (Unique Selling Proposition) */}
29+
<Feature id="Features" locale={dict.Feature} langName={langName} />
30+
31+
{/* Pricing */}
32+
{/* <Pricing id="Pricing" locale={dict.Pricing} langName={langName} /> */}
33+
34+
{/* FAQ (Frequently Asked Questions) */}
35+
<FAQ id="FAQ" locale={dict.FAQ} langName={langName} />
36+
37+
{/* CTA (Call to Action) Footer */}
38+
<CTA locale={dict.CTA} CTALocale={dict.CTAButton} stars={stars} />
39+
</>
40+
);
41+
}
42+
43+
export async function generateStaticParams() {
44+
return Object.keys(localeNames).map((lang) => ({ lang }));
45+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import PFaq from '@/components/price/PFaq';
2+
import PPlan from '@/components/price/PPlan';
3+
import PTitle from '@/components/price/PTitle';
4+
import { defaultLocale, getDictionary, localeNames } from '@/lib/i18n';
5+
6+
export default async function Index({ params: { lang } }: { params: { lang?: string } }) {
7+
const langName = lang || defaultLocale;
8+
const dict = await getDictionary(langName);
9+
10+
return (
11+
<div className="flex flex-col items-center gap-10 pb-10">
12+
<PTitle locale={dict.Pricing} />
13+
14+
<PPlan langName={langName} locale={dict.Pricing} />
15+
16+
<PFaq langName={langName} />
17+
</div>
18+
);
19+
}
20+
21+
export async function generateStaticParams() {
22+
return Object.keys(localeNames).map((lang) => ({ lang }));
23+
}

projects/fastgpt/app/layout.tsx

Lines changed: 93 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,93 @@
1-
import BaiDuAnalytics from '@/app/BaiDuAnalytics';
2-
import ClarityAnalytics from '@/app/ClarityAnalytics';
3-
import RybbitAnalytics from '@/app/RybbitAnalytics';
4-
import GoogleAnalytics from '@/app/GoogleAnalytics';
5-
// import { TailwindIndicator } from '@/components/TailwindIndicator';
6-
import { ThemeProvider } from '@/components/ThemeProvider';
7-
import { siteConfig } from '@/config/site';
8-
import { defaultLocale } from '@/lib/i18n';
9-
import { cn } from '@/lib/utils';
10-
import '@/styles/globals.css';
11-
import '@/styles/loading.css';
12-
import '@/styles/plyr.css';
13-
import { Analytics } from '@vercel/analytics/react';
14-
import { Viewport } from 'next';
15-
import { Inter as FontSans } from 'next/font/google';
16-
import Script from 'next/script';
17-
18-
const fontSans = FontSans({
19-
subsets: ['latin'],
20-
variable: '--font-sans'
21-
});
22-
23-
export const metadata = {
24-
title: siteConfig.name,
25-
description: siteConfig.description,
26-
keywords: siteConfig.keywords,
27-
authors: siteConfig.authors,
28-
creator: siteConfig.creator,
29-
icons: siteConfig.icons,
30-
metadataBase: siteConfig.metadataBase,
31-
openGraph: siteConfig.openGraph,
32-
twitter: siteConfig.twitter,
33-
other: {
34-
'baidu-site-verification': process.env.NEXT_PUBLIC_BAIDU_KEY
35-
? process.env.NEXT_PUBLIC_BAIDU_KEY
36-
: ''
37-
}
38-
};
39-
export const viewport: Viewport = {
40-
themeColor: siteConfig.themeColors
41-
};
42-
43-
export default async function RootLayout({
44-
children,
45-
params: { lang }
46-
}: {
47-
children: React.ReactNode;
48-
params: { lang: string[] | undefined };
49-
}) {
50-
const isChineseDomain = process.env.NEXT_PUBLIC_USER_URL?.includes('.cn')
51-
52-
return (
53-
<html lang={(lang && lang[0]) || defaultLocale} suppressHydrationWarning>
54-
<head>
55-
{!isChineseDomain && (
56-
<Script
57-
id="gtm-script"
58-
strategy="afterInteractive"
59-
dangerouslySetInnerHTML={{
60-
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
61-
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
62-
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
63-
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
64-
})(window,document,'script','dataLayer','GTM-W9HPZZ22');`
65-
}}
66-
/>
67-
)}
68-
</head>
69-
<body className={cn('min-h-screen font-sans antialiased', fontSans.variable)}>
70-
{!isChineseDomain && (
71-
<noscript>
72-
<iframe
73-
src="https://www.googletagmanager.com/ns.html?id=GTM-W9HPZZ22"
74-
height="0"
75-
width="0"
76-
style={{ display: 'none', visibility: 'hidden' }}
77-
></iframe>
78-
</noscript>
79-
)}
80-
<ThemeProvider attribute="class" defaultTheme={siteConfig.nextThemeColor} enableSystem>
81-
{children}
82-
{/* <Footer /> */}
83-
<Analytics />
84-
{/* <TailwindIndicator /> */}
85-
</ThemeProvider>
86-
<GoogleAnalytics />
87-
<BaiDuAnalytics />
88-
<ClarityAnalytics />
89-
<RybbitAnalytics />
90-
</body>
91-
</html>
92-
);
93-
}
1+
import BaiDuAnalytics from '@/app/BaiDuAnalytics';
2+
import ClarityAnalytics from '@/app/ClarityAnalytics';
3+
import RybbitAnalytics from '@/app/RybbitAnalytics';
4+
import GoogleAnalytics from '@/app/GoogleAnalytics';
5+
// import { TailwindIndicator } from '@/components/TailwindIndicator';
6+
import { ThemeProvider } from '@/components/ThemeProvider';
7+
import { siteConfig } from '@/config/site';
8+
import { defaultLocale } from '@/lib/i18n';
9+
import { cn } from '@/lib/utils';
10+
import '@/styles/globals.css';
11+
import '@/styles/loading.css';
12+
import '@/styles/plyr.css';
13+
import { Analytics } from '@vercel/analytics/react';
14+
import { Viewport } from 'next';
15+
import { Inter as FontSans } from 'next/font/google';
16+
import Script from 'next/script';
17+
18+
const fontSans = FontSans({
19+
subsets: ['latin'],
20+
variable: '--font-sans'
21+
});
22+
23+
export const metadata = {
24+
title: siteConfig.name,
25+
description: siteConfig.description,
26+
keywords: siteConfig.keywords,
27+
authors: siteConfig.authors,
28+
creator: siteConfig.creator,
29+
icons: siteConfig.icons,
30+
metadataBase: siteConfig.metadataBase,
31+
openGraph: siteConfig.openGraph,
32+
twitter: siteConfig.twitter,
33+
other: {
34+
'baidu-site-verification': process.env.NEXT_PUBLIC_BAIDU_KEY
35+
? process.env.NEXT_PUBLIC_BAIDU_KEY
36+
: ''
37+
}
38+
};
39+
export const viewport: Viewport = {
40+
themeColor: siteConfig.themeColors
41+
};
42+
43+
export default async function RootLayout({
44+
children,
45+
params: { lang }
46+
}: {
47+
children: React.ReactNode;
48+
params: { lang: string[] | undefined };
49+
}) {
50+
const isChineseDomain = process.env.NEXT_PUBLIC_USER_URL?.includes('.cn')
51+
52+
return (
53+
<html lang={(lang && lang[0]) || defaultLocale} suppressHydrationWarning>
54+
<head>
55+
{!isChineseDomain && (
56+
<Script
57+
id="gtm-script"
58+
strategy="afterInteractive"
59+
dangerouslySetInnerHTML={{
60+
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
61+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
62+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
63+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
64+
})(window,document,'script','dataLayer','GTM-W9HPZZ22');`
65+
}}
66+
/>
67+
)}
68+
</head>
69+
<body className={cn('min-h-screen font-sans antialiased', fontSans.variable)}>
70+
{!isChineseDomain && (
71+
<noscript>
72+
<iframe
73+
src="https://www.googletagmanager.com/ns.html?id=GTM-W9HPZZ22"
74+
height="0"
75+
width="0"
76+
style={{ display: 'none', visibility: 'hidden' }}
77+
></iframe>
78+
</noscript>
79+
)}
80+
<ThemeProvider attribute="class" defaultTheme={siteConfig.nextThemeColor} enableSystem={false} forcedTheme="dark">
81+
{children}
82+
{/* <Footer /> */}
83+
<Analytics />
84+
{/* <TailwindIndicator /> */}
85+
</ThemeProvider>
86+
<GoogleAnalytics />
87+
<BaiDuAnalytics />
88+
<ClarityAnalytics />
89+
<RybbitAnalytics />
90+
</body>
91+
</html>
92+
);
93+
}

0 commit comments

Comments
 (0)