hulai-website/nuxt.config.js
Mimingguang ee078b61bc feat: 后台管理系统完整重构 + 前后台数据联通
- 后台全面引入 Naive UI 组件库,统一 UI 规范
- 前台 usePublicApi 切换到 API 调用(GET /api/content/[key])
- 前后台数据源统一(site_content 表)
- 产品线统一管理(tour/camp/course 三套编辑器)
- 产品数据归一化(itinerary/faq/pricing 格式统一)
- 表单提交 API 改写入 submissions 表
- 新增 submissions 标记已读 API
- site-content PUT 支持 upsert
- 修复前台 bug(stories 路由冲突、占位符警告、selector breadcrumb)
- 消除 PageHero 类型警告(useSEO reactive 修复)
- 25 个前台页面全部 HTTP 200,展示效果不变

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 17:48:02 +08:00

107 行
4.1 KiB
JavaScript

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
ssr: true,
nitro: {
// preset: 'static' 已移除——静态模式下 server/api/ 不可用。
// 部署时使用 `nuxt build` + Node.js 服务器(如 PM2
// 若必须静态部署,需将表单改为第三方服务(飞书/EmailJS 等)。
prerender: {
crawlLinks: true,
routes: [
'/', '/about', '/products', '/summer-camp', '/winter-camp', '/courses', '/guides', '/guide-custom', '/faq', '/reviews', '/contact', '/customize', '/pricing', '/selector', '/sitemap.xml',
'/products/v9-4d3n', '/products/v9-5d4n', '/products/v9-6d5n-family',
'/products/v9-6d5n-comfort', '/products/v9-7d6n-family', '/products/v9-7d6n-wild',
'/products/autumn', '/products/winter',
'/gallery',
'/gallery',
'/news', '/calendar',
'/stories',
'/blog',
'/blog/hulunbuir-travel-guide-2026',
'/blog/hulunbuir-family-travel-guide',
'/blog/hulunbuir-best-month-to-visit',
'/blog/hulunbuir-self-drive-vs-chartered-bus',
'/blog/hulunbuir-travel-cost-breakdown',
'/blog/hulunbuir-travel-with-toddlers-4-6',
'/blog/hulunbuir-travel-tips-avoid-pitfalls',
'/blog/grassland-photography-outfit-guide',
'/destinations',
'/destinations/moriguole', '/destinations/eergunashire', '/destinations/baihualin',
'/destinations/enhe-shiwei', '/destinations/heishantou', '/destinations/manzhouli',
'/destinations/hulunhu', '/destinations/aershan', '/destinations/shiwei',
'/destinations/daxinganling', '/destinations/aoluguya', '/destinations/genhe',
'/products/autumn', '/products/winter',
'/products/autumn', '/products/winter',
'/products/autumn', '/products/winter',
'/destinations',
'/destinations/moriguole', '/destinations/eergunashire', '/destinations/baihualin',
'/destinations/enhe-shiwei', '/destinations/heishantou', '/destinations/manzhouli',
'/destinations/hulunhu', '/destinations/aershan', '/destinations/shiwei',
'/destinations/daxinganling', '/destinations/aoluguya', '/destinations/genhe',
'/gallery',
'/news', '/calendar',
'/stories',
'/blog',
'/blog/hulunbuir-travel-guide-2026',
'/blog/hulunbuir-family-travel-guide',
'/blog/hulunbuir-best-month-to-visit',
'/blog/hulunbuir-self-drive-vs-chartered-bus',
'/blog/hulunbuir-travel-cost-breakdown',
'/blog/hulunbuir-travel-with-toddlers-4-6',
'/blog/hulunbuir-travel-tips-avoid-pitfalls',
'/blog/grassland-photography-outfit-guide',
],
},
},
css: ['~/assets/less/global.less'],
vite: {
css: {
preprocessorOptions: {
less: {
additionalData: `@import "~/assets/less/variables.less"; @import "~/assets/less/mixins.less";`,
},
},
},
},
app: {
head: {
htmlAttrs: { lang: 'zh-CN' },
charset: 'utf-8',
viewport: 'width=device-width, initial-scale=1',
link: [
{ rel: 'icon', href: '/favicon.ico' },
{ rel: 'apple-touch-icon', href: '/images/logo-square.png' },
{ rel: 'dns-prefetch', href: 'https://beian.miit.gov.cn' },
],
meta: [
{ name: 'applicable-device', content: 'pc,mobile' },
{ 'http-equiv': 'Cache-Control', content: 'no-transform' },
// 内容语言
{ 'http-equiv': 'content-language', content: 'zh-CN' },
// 品牌全局声明 - AI 大模型采集时的全局上下文
{ name: 'application-name', content: '呼籁旅行' },
{ name: 'theme-color', content: '#3a7d44' },
// 允许 AI 索引
{ key: 'robots', name: 'robots', content: 'index, follow, max-snippet:-1, max-image-preview:large' },
],
},
},
runtimeConfig: {
public: {
apiBase: process.env.API_BASE || 'http://localhost:8000',
},
},
build: {
transpile: ['naive-ui', 'vueuc', '@css-render/vue3-ssr', 'css-render'],
},
compatibilityDate: '2025-03-18',
})