30 lines
714 B
TypeScript
30 lines
714 B
TypeScript
|
|
import { ReactNode } from 'react';
|
|||
|
|
import { Header } from '@/components/front/Header';
|
|||
|
|
import { Footer } from '@/components/front/Footer';
|
|||
|
|
import { publicApi } from '@/lib/services';
|
|||
|
|
|
|||
|
|
export const revalidate = 60; // ISR:60 秒重新生成
|
|||
|
|
|
|||
|
|
async function getConfig() {
|
|||
|
|
try {
|
|||
|
|
return await publicApi.getSiteConfig();
|
|||
|
|
} catch {
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export default async function FrontLayout({
|
|||
|
|
children,
|
|||
|
|
}: {
|
|||
|
|
children: ReactNode;
|
|||
|
|
}) {
|
|||
|
|
const config = await getConfig();
|
|||
|
|
return (
|
|||
|
|
<div className="flex min-h-screen flex-col">
|
|||
|
|
<Header siteName={config?.siteName ?? '企业官方网站'} />
|
|||
|
|
<main className="flex-1">{children}</main>
|
|||
|
|
<Footer config={config} />
|
|||
|
|
</div>
|
|||
|
|
);
|
|||
|
|
}
|