feat: 关于本站对齐站点公告,增加全部与管理入口
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
import type { Metadata } from "next";
|
||||
import { cookies } from "next/headers";
|
||||
import { notFound } from "next/navigation";
|
||||
import { Megaphone } from "lucide-react";
|
||||
import { fetchSitePageBySlug, fetchOverview } from "@/lib/api";
|
||||
import { getPublicSettingsCached } from "@/lib/serverData";
|
||||
import { authCookieHeader } from "@/lib/cookies";
|
||||
import { getMeCached, getPublicSettingsCached } from "@/lib/serverData";
|
||||
import { isAdminOrAbove } from "@/lib/roles";
|
||||
import { extractToc, estimateReadingMinutes, markdownHeadingToc } from "@/lib/toc";
|
||||
import MarkdownBody from "@/components/MarkdownBody";
|
||||
import PostToc from "@/components/PostToc";
|
||||
@@ -38,16 +41,19 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata>
|
||||
|
||||
export default async function SitePagePublic({ params }: PageProps) {
|
||||
const { slug } = await params;
|
||||
const [data, overview, settings] = await Promise.all([
|
||||
const cookie = authCookieHeader(await cookies());
|
||||
const [data, overview, settings, me] = await Promise.all([
|
||||
fetchSitePageBySlug(slug).catch(() => null),
|
||||
fetchOverview().catch(() => null),
|
||||
getPublicSettingsCached(),
|
||||
getMeCached(cookie || undefined),
|
||||
]);
|
||||
if (!data) notFound();
|
||||
|
||||
const p = data.page;
|
||||
const sidebarPages = overview?.sidebar_pages ?? [];
|
||||
const announcements = overview?.announcements ?? [];
|
||||
const canManagePages = !!me.user && isAdminOrAbove(me.user.role);
|
||||
const siteLead = settings.site_description?.trim() || undefined;
|
||||
const toc = extractToc(p.content);
|
||||
const headingToc = markdownHeadingToc(toc);
|
||||
@@ -76,7 +82,11 @@ export default async function SitePagePublic({ params }: PageProps) {
|
||||
const left = (
|
||||
<>
|
||||
<SiteDocIdentity kind="about" lead={siteLead} />
|
||||
<SiteDocPageNav pages={sidebarPages} currentSlug={slug} />
|
||||
<SiteDocPageNav
|
||||
pages={sidebarPages}
|
||||
currentSlug={slug}
|
||||
canManage={canManagePages}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -101,7 +111,7 @@ export default async function SitePagePublic({ params }: PageProps) {
|
||||
<SiteDocBreadcrumb
|
||||
items={[
|
||||
{ href: "/", label: "首页" },
|
||||
{ label: "关于本站" },
|
||||
{ href: "/about", label: "关于本站" },
|
||||
{ label: p.title },
|
||||
]}
|
||||
/>
|
||||
@@ -109,7 +119,12 @@ export default async function SitePagePublic({ params }: PageProps) {
|
||||
mobileExtras={
|
||||
<>
|
||||
{toc.length > 0 ? <PostToc items={toc} /> : null}
|
||||
<SiteDocPageNav pages={sidebarPages} currentSlug={slug} title="文档目录" />
|
||||
<SiteDocPageNav
|
||||
pages={sidebarPages}
|
||||
currentSlug={slug}
|
||||
title="文档目录"
|
||||
canManage={canManagePages}
|
||||
/>
|
||||
{toc.length === 0 && announcements.length > 0 ? (
|
||||
<SiteDocAnnoNav items={announcements} />
|
||||
) : null}
|
||||
|
||||
Reference in New Issue
Block a user