完善站点运营设置:分路由管理、登录可见评论、邮件模板内联与关闭注册 SSR。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import pkg from "../package.json";
|
||||
import type { FooterLink } from "@/lib/brand";
|
||||
import type { FooterLink, FooterLinksAlign } from "@/lib/brand";
|
||||
import FooterTiming from "./FooterTiming";
|
||||
|
||||
// 官方镜像构建会写入 NEXT_PUBLIC_APP_VERSION(可与脚手架 0.1.0 相同)。
|
||||
@@ -10,7 +10,29 @@ function realVersion(pkgVersion: string): string {
|
||||
return !pkgVersion || pkgVersion === "0.0.0" || pkgVersion === "0.1.0" ? "" : pkgVersion;
|
||||
}
|
||||
|
||||
// 极简页脚:左侧版权 / 版本 / 耗时,右侧备案等链接
|
||||
function zoneLinks(links: FooterLink[], align: FooterLinksAlign): FooterLink[] {
|
||||
return links.filter((item) => (item.align || "right") === align);
|
||||
}
|
||||
|
||||
function LinkGroup({ items }: { items: FooterLink[] }) {
|
||||
if (items.length === 0) return null;
|
||||
return (
|
||||
<div className="site-footer-links">
|
||||
{items.map((item) => (
|
||||
<a
|
||||
key={`${item.align}-${item.label}-${item.url}`}
|
||||
href={item.url}
|
||||
className="meta text-[12px] hover:underline"
|
||||
{...(item.new_tab ? { target: "_blank", rel: "noopener noreferrer" } : {})}
|
||||
>
|
||||
{item.label}
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// 极简页脚:版权 / 版本 / 耗时 + 左 / 中 / 右三栏链接
|
||||
export default function Footer({
|
||||
siteName = "姜十三社区",
|
||||
links = [],
|
||||
@@ -20,34 +42,33 @@ export default function Footer({
|
||||
}) {
|
||||
const year = new Date().getFullYear();
|
||||
const brand = siteName.trim() || "姜十三社区";
|
||||
const visibleLinks = links.filter((item) => item.label.trim() && item.url.trim());
|
||||
const visible = links.filter((item) => item.label.trim() && item.url.trim());
|
||||
const left = zoneLinks(visible, "left");
|
||||
const center = zoneLinks(visible, "center");
|
||||
const right = zoneLinks(visible, "right");
|
||||
|
||||
return (
|
||||
<footer
|
||||
className="site-footer"
|
||||
style={{
|
||||
borderTop: "1px solid var(--line)",
|
||||
background: "var(--panel)",
|
||||
}}
|
||||
>
|
||||
<div className="max-w-[1440px] mx-auto px-4 sm:px-6 py-4 flex items-center justify-between gap-x-4 gap-y-2 flex-wrap">
|
||||
<div className="flex items-center gap-x-3 gap-y-1 flex-wrap min-w-0">
|
||||
<span className="meta text-[12px] whitespace-nowrap">© {year} {brand}</span>
|
||||
<FooterTiming version={realVersion(pkg.version)} />
|
||||
<div className="site-footer-inner max-w-[1440px] mx-auto px-4 sm:px-6 py-4">
|
||||
<div className="site-footer-zone site-footer-zone-left">
|
||||
<div className="site-footer-meta">
|
||||
<span className="meta text-[12px] whitespace-nowrap">© {year} {brand}</span>
|
||||
<FooterTiming version={realVersion(pkg.version)} />
|
||||
</div>
|
||||
<LinkGroup items={left} />
|
||||
</div>
|
||||
<div className="site-footer-zone site-footer-zone-center">
|
||||
<LinkGroup items={center} />
|
||||
</div>
|
||||
<div className="site-footer-zone site-footer-zone-right">
|
||||
<LinkGroup items={right} />
|
||||
</div>
|
||||
{visibleLinks.length > 0 ? (
|
||||
<nav aria-label="页脚链接" className="flex flex-wrap items-center justify-end gap-x-3 gap-y-1 min-w-0 ml-auto">
|
||||
{visibleLinks.map((item) => (
|
||||
<a
|
||||
key={`${item.label}-${item.url}`}
|
||||
href={item.url}
|
||||
className="meta text-[12px] hover:underline"
|
||||
{...(item.new_tab ? { target: "_blank", rel: "noopener noreferrer" } : {})}
|
||||
>
|
||||
{item.label}
|
||||
</a>
|
||||
))}
|
||||
</nav>
|
||||
) : null}
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user