import type { Metadata } from "next"; import { Suspense } from "react"; import { cookies } from "next/headers"; import AnnouncementAdmin from "./AnnouncementAdmin"; import { authCookieHeader } from "@/lib/cookies"; import { fetchAdminAnnouncements, type Announcement } from "@/lib/api"; import { getMeCached } from "@/lib/serverData"; import { hasPerm, PERMS } from "@/lib/roles"; import Forbidden from "../Forbidden"; export const metadata: Metadata = { title: "站点公告管理", }; // 公告管理:管理员及以上角色自带;超管/站长亦可授予任意账号 export default async function AdminAnnouncementsPage() { const cookie = authCookieHeader(await cookies()); const me = await getMeCached(cookie || undefined); if (!me.user || !hasPerm(me.user, PERMS.ANNOUNCEMENTS)) { return ; } let initial: Announcement[] = []; let initError = ""; try { const res = await fetchAdminAnnouncements(cookie || undefined); initial = res.announcements ?? []; } catch (e) { initError = e instanceof Error ? e.message : "加载公告失败"; } return ( 加载公告列表…

}>
); }