import type { CmsSiteInfo } from '~/types' /** * 站点信息初始化(服务端) * * 在 SSR 首次渲染前,把中间件(tenant.ts)预取的 CMS 站点信息 * 注入到 useState('site-info'),从而随 SSR payload 序列化到客户端。 * * 为什么需要这个插件: * 模板解析 useTemplate().resolvedTemplateId 以「站点库(CMS site_info.templateId) * 优先」为准。而布局级组件 SiteHeader / SiteFooter 的 loadTemplate() 在页面 * fetchSiteInfo() 之前就执行——若此时 siteInfo 为空,siteTemplateId 拿不到值, * 会回退到 app_product / 环境默认值,导致「改数据库模板 ID 不生效」, * 甚至布局与页面渲染出两套模板。 * 本插件在渲染前注入 siteInfo,确保首屏 siteTemplateId 即可用。 */ export default defineNuxtPlugin(() => { const { siteInfo } = useSite() const event = useRequestEvent() const siteInfoFromContext = event?.context?.siteInfo as CmsSiteInfo | undefined if (siteInfoFromContext && !siteInfo.value) { siteInfo.value = siteInfoFromContext } })