feat(app): 添加多模板关于我们页面及相关路由和404页面

- 新增404页面,优化未找到页面体验,避免被搜索引擎索引
- 增加文件代理接口,隐藏真实文件服务器地址,支持文件请求代理
- 实现/article、/case、/product及/page动态路由兼容列表与详情展示
- 添加动态CMS页面兼容入口处理旧式路径,统一路由与SEO设置
- 新增模板1、模板7、模板2、模板3关于我们页面,实现多模板支持
- 模板增强支持CMS单页内容加载及SEO信息动态设置
- 配置环境变量及Git忽略文件规则辅助开发和构建环境管理
This commit is contained in:
2026-09-08 12:13:44 +08:00
commit 2b69686795
381 changed files with 59891 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
import { $fetch } from 'ofetch'
import { createError, defineEventHandler, getQuery } from 'h3'
import { useRuntimeConfig } from '#imports'
import { getTenantFromContext } from '../../utils/tenant'
import { getTemplateCodeById } from '../../utils/template-map'
/**
* 获取站点信息
* GET /api/site/info
* 代理到 CMS: /cms/cms-website/getSiteInfo
* 返回站点基础信息 + 导航(topNavs/bottomNavs) + config + setting
*/
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const ctx = getTenantFromContext(event, config)
const query = getQuery(event)
const modulesApiBase = config.public.modulesApiBase as string
try {
const res = await $fetch('/cms/cms-website/getSiteInfo', {
baseURL: modulesApiBase,
headers: {
TenantId: ctx.tenantId
},
query
})
// 回填模板标识 templateCode(与 SSR 中间件 tenant.ts 保持一致的口径):
// 上游只返回 templateId 主键,而主键存在跳号错位风险,前端需按 code 解析模板目录。
const payload = (res as { data?: Record<string, unknown> })?.data ?? (res as Record<string, unknown>)
if (payload && typeof payload === 'object' && !payload.templateCode && payload.templateId) {
const code = await getTemplateCodeById(payload.templateId as number, config)
if (code) payload.templateCode = code
}
return res
} catch (error: any) {
throw createError({
statusCode: error?.statusCode || error?.response?.status || 502,
statusMessage: error?.statusMessage || 'Failed to fetch site info'
})
}
})