"use client"; import { type ReactNode, useEffect, useState } from "react"; import { usePathname } from "next/navigation"; import { useTranslations } from "next-intl"; import { Separator } from "@/components/ui/separator"; import { SidebarTrigger } from "@/components/ui/sidebar"; import { useCurrentUser } from "@/hooks/use-current-user"; import { api } from "@/lib/api"; import { cn } from "@/lib/utils"; import { AccountSwitcher } from "./sidebar/account-switcher"; import { LayoutControls } from "./sidebar/layout-controls"; import { SearchDialog } from "./sidebar/search-dialog"; import { ThemeSwitcher } from "./sidebar/theme-switcher"; import { UpdateBadge } from "./update-badge"; // 任务详情页保持原样:它自带头部/Tabs 与内边距,这里不再叠加全局头部和 padding。 function isFullBleed(pathname: string) { const p = (() => { try { return decodeURIComponent(pathname); } catch { return pathname; } })(); // 静态导出开了 trailingSlash,列表页自身的 pathname 是 "/function/tasks/", // 先去掉尾斜杠再判前缀,否则列表页会被误判成详情页而丢掉全局头部。 const normalized = p.replace(/\/+$/, ""); return normalized.startsWith("/function/tasks/"); } export function MainContent({ children }: { children: ReactNode }) { const currentUser = useCurrentUser(); const pathname = usePathname(); const t = useTranslations("header"); const [version, setVersion] = useState(""); useEffect(() => { api .health() .then((h) => setVersion((h.version ?? "").replace(/^v(?=\d)/, ""))) .catch(() => setVersion("")); }, []); if (isFullBleed(pathname)) { return <>{children}; } return ( <>
{version && ( {t("version", { version })} )}
{children}
); }