Files
FastGPT/document/app/[lang]/docs/[[...slug]]/page.tsx
2025-07-24 13:00:27 +08:00

67 lines
1.7 KiB
TypeScript

import { source } from '@/lib/source';
import { DocsPage, DocsBody, DocsDescription, DocsTitle } from 'fumadocs-ui/page';
import { notFound } from 'next/navigation';
import NotFound from '@/components/docs/not-found';
import { createRelativeLink } from 'fumadocs-ui/mdx';
import { getMDXComponents } from '@/mdx-components';
export default async function Page({
params
}: {
params: Promise<{ lang: string; slug?: string[] }>;
}) {
const { lang, slug } = await params;
const page = source.getPage(slug, lang);
// 如果页面不存在,调用 notFound()
if (!page || !page.data || !page.file) {
return <NotFound />;
}
const MDXContent = page.data.body;
return (
<DocsPage
toc={page.data.toc}
full={page.data.full}
tableOfContent={{
style: 'clerk'
}}
editOnGithub={{
owner: 'labring',
repo: 'FastGPT',
sha: 'main',
path: `document/content/docs/${page.file.path}`
}}
lastUpdate={page.data.lastModified ? new Date(page.data.lastModified) : undefined}
>
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
<DocsBody>
<MDXContent
components={getMDXComponents({
a: createRelativeLink(source, page)
})}
/>
</DocsBody>
</DocsPage>
);
}
export async function generateStaticParams() {
return source.generateParams();
}
export async function generateMetadata(props: {
params: Promise<{ lang: string; slug?: string[] }>;
}) {
const { lang, slug } = await props.params;
const page = source.getPage(slug, lang);
if (!page || !page.data) notFound();
return {
title: `${page.data.title} | FastGPT`,
description: page.data.description
};
}