import { useSiteBranding } from '../hooks/useSiteBranding'; import { useMediaQuery } from '../hooks/useTheme'; import { Link } from 'react-router-dom'; import { useSitePages } from '../hooks/useSitePages'; import { pagePath } from '../utils/permalink'; import { useForumLimits } from '../hooks/useForumLimits'; function FooterSep() { return ·; } /** 站点页脚:版权、友链/展柜入口、单页、备案号(结构与 Go writeSSRFooter 对齐) */ export default function SiteFooter() { const { branding } = useSiteBranding(); const { footerPages } = useSitePages(); const { limits } = useForumLimits(); const year = new Date().getFullYear(); const icp = branding.icp_beian?.trim() || ''; const icpURL = branding.icp_beian_url?.trim() || 'https://beian.miit.gov.cn/'; const showFriendLinks = limits.footer_show_friend_links !== false; const showShowcase = !!limits.footer_show_showcase; const navItems: React.ReactNode[] = []; if (showFriendLinks) { navItems.push( 友情链接 , ); } if (showShowcase) { navItems.push( 开源展柜 , ); } for (const p of footerPages) { navItems.push( {p.title} , ); } if (icp) { navItems.push( {icp} , ); } return ( ); } /** * 手机端随内容滚动的页脚(放在 .page-wrap / .post-list-scroll 末尾)。 * 桌面端返回 null,由 MainLayout 壳层贴底页脚负责。 */ export function InFlowSiteFooter() { const isMobile = useMediaQuery('(max-width: 768px)'); if (!isMobile) return null; return ; }