import type { Metadata } from "next"; import { cookies } from "next/headers"; import { fetchFriendLinks, fetchSiteState, type FriendLink } from "@/lib/api"; import { authCookieHeader } from "@/lib/cookies"; import { brandAliasPath } from "@/lib/brand"; import { getMeCached, getPublicSettingsCached } from "@/lib/serverData"; import { hasPerm, PERMS } from "@/lib/roles"; import { requestCanonical } from "@/lib/canonicalMeta"; import { resolveSiteOrigin } from "@/lib/siteUrl"; import LinksBoard from "./LinksBoard"; export async function generateMetadata(): Promise { return { title: "友情链接", description: "本站友情链接收录与申请", ...(await requestCanonical("/links")), }; } export default async function FriendLinksPage() { const cookie = authCookieHeader(await cookies()); let links: FriendLink[] = []; let error = ""; try { const res = await fetchFriendLinks(cookie || undefined); links = res.links ?? []; } catch (e) { error = e instanceof Error ? e.message : "加载友情链接失败"; } const [settings, siteState, me] = await Promise.all([ getPublicSettingsCached(), fetchSiteState(), getMeCached(cookie || undefined), ]); const isLoggedIn = !!me.user; const canManage = !!me.user && hasPerm(me.user, PERMS.ANNOUNCEMENTS); // 站点 LOGO 用固定对外地址(换图不变链,对方收藏的地址永不失效),补全为绝对地址供申请人直接复制 const siteBase = siteState.site_url?.trim() || resolveSiteOrigin() || ""; const logoAlias = settings.logo_light_url ? brandAliasPath("logo_light") : settings.favicon_url ? brandAliasPath("favicon") : ""; const siteLogo = logoAlias && siteBase ? new URL(logoAlias, siteBase).toString() : ""; return (
{/* 标题 + 申请须知 */}

友情链接

{/* 搜索 + 卡片墙 + 我的申请 + 申请弹窗 */}
{error ? (

{error}

) : ( )}
); }