feat: 官网代码全量更新 (2026-04-18)

这个提交包含在:
wx
2026-04-18 15:13:28 +08:00
父节点 fcac8f88db
当前提交 f91ecbb093
共修改 135 个文件,包含 10307 行新增和 3349 行删除
+11 -10
查看文件
@@ -17,7 +17,7 @@
<!-- 风景大图 -->
<div class="scenic-banner">
<img src="/images/seasons/autumn-hero.jpg" alt="秋季大兴安岭金色白桦林" loading="eager" />
<img :src="'/images/seasons/autumn-hero.jpg'" alt="秋季大兴安岭金色白桦林" loading="eager" />
</div>
<!-- 产品设计理念 -->
@@ -26,7 +26,7 @@
<!-- 秋季亮点 -->
<section v-if="autumnData" class="section reveal">
<div class="container">
<CommonSectionTitle title="秋季呼伦贝尔 · 不可错过的风景" subtitle="每年9月中旬-10月中旬" />
<CommonSectionTitle :title="st('productsAutumn.highlights', '秋季呼伦贝尔 · 不可错过的风景')" :subtitle="st('productsAutumn.highlights', '每年9月中旬-10月中旬', 'subtitle')" />
<div class="highlights-grid">
<div v-for="h in autumnData.highlights" :key="h.title" class="highlight-card">
<h3 class="highlight-title">{{ h.title }}</h3>
@@ -39,7 +39,7 @@
<!-- 南线产品卡片 -->
<section class="section reveal">
<div class="container">
<CommonSectionTitle title="南线 · 呼伦贝尔+阿尔山" subtitle="草原秋色与火山天池" />
<CommonSectionTitle :title="st('productsAutumn.southLine', '南线 · 呼伦贝尔+阿尔山')" :subtitle="st('productsAutumn.southLine', '草原秋色与火山天池', 'subtitle')" />
<div class="products-grid">
<AutumnProductCard v-for="p in southVersions" :key="p.id" :product="p" />
</div>
@@ -49,7 +49,7 @@
<!-- 南线特色体验 -->
<section v-if="autumnData" class="section section--warm reveal">
<div class="container">
<CommonSectionTitle title="南线独有体验" subtitle="阿尔山专属" />
<CommonSectionTitle :title="st('productsAutumn.southHighlights', '南线独有体验')" :subtitle="st('productsAutumn.southHighlights', '阿尔山专属', 'subtitle')" />
<div class="highlights-grid highlights-grid--small">
<div v-for="h in autumnData.southHighlights" :key="h.title" class="highlight-card">
<h3 class="highlight-title">{{ h.title }}</h3>
@@ -62,14 +62,14 @@
<!-- 中间转化入口 -->
<CommonSectionCTA
title="不确定选南线还是北线?"
description="联系定制师,根据您的假期和偏好推荐最适合的行程"
description="联系定制师,根据您的假期和偏好推荐合适的行程"
:links="[{ to: '/contact', text: '联系定制师' }]"
/>
<!-- 北线产品卡片 -->
<section class="section reveal">
<div class="container">
<CommonSectionTitle title="北线 · 呼伦贝尔+大兴安岭" subtitle="深入大兴安岭腹地赏秋" />
<CommonSectionTitle :title="st('productsAutumn.northLine', '北线 · 呼伦贝尔+大兴安岭')" :subtitle="st('productsAutumn.northLine', '深入大兴安岭腹地赏秋', 'subtitle')" />
<div class="products-grid">
<AutumnProductCard v-for="p in northVersions" :key="p.id" :product="p" />
</div>
@@ -79,7 +79,7 @@
<!-- 北线特色体验 -->
<section v-if="autumnData" class="section section--warm reveal">
<div class="container">
<CommonSectionTitle title="北线独有体验" subtitle="大兴安岭专属" />
<CommonSectionTitle :title="st('productsAutumn.northHighlights', '北线独有体验')" :subtitle="st('productsAutumn.northHighlights', '大兴安岭专属', 'subtitle')" />
<div class="highlights-grid highlights-grid--small">
<div v-for="h in autumnData.northHighlights" :key="h.title" class="highlight-card">
<h3 class="highlight-title">{{ h.title }}</h3>
@@ -92,7 +92,7 @@
<!-- 选择指南 -->
<section v-if="autumnData?.selectionGuide" id="guide" class="section section--gray reveal">
<div class="container">
<CommonSectionTitle title="不知道选哪个?" subtitle="按假期长度推荐" />
<CommonSectionTitle :title="st('productsAutumn.selection', '不知道选哪个?')" :subtitle="st('productsAutumn.selection', '按假期长度推荐', 'subtitle')" />
<div class="guide-items">
<div v-for="item in autumnData.selectionGuide.byVacationLength" :key="item.condition" class="guide-item">
<div class="guide-item-top">
@@ -127,10 +127,11 @@
import { useBreadcrumbSchema } from '~/composables/useJsonLd'
const { data: autumnData } = await usePublicApi('autumn-products')
const st = await useSectionTitles()
const seo = useSEO('products-autumn', {
title: '游牧的森林V3 - 呼伦贝尔秋季定制游 - 呼籁旅行',
description: '呼籁旅行呼伦贝尔秋季定制游产品「游牧的森林」V3系列,南线呼伦贝尔+阿尔山、北线呼伦贝尔+大兴安岭,4-7天6个版本可选。独立成团不拼团,一家一单一车。',
title: '游牧的森林V3 - 呼伦贝尔秋季定制游·4-8天7版本可选 - 呼籁旅行',
description: '呼籁旅行呼伦贝尔秋季定制游产品「游牧的森林」V3系列,南线呼伦贝尔+阿尔山、北线呼伦贝尔+大兴安岭、南北8天7晚全景版,4-8天共7个版本可选。独立成团不拼团,一家一单一车。',
h1: '游牧的森林 · 呼伦贝尔秋季定制游',
})
+8 -6
查看文件
@@ -2,7 +2,7 @@
<div class="page-products">
<LayoutPageHero
:title="seo.h1"
subtitle="独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景"
:subtitle="heroes?.products || '独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景'"
:breadcrumbs="[{ text: '产品线', to: '/products' }, { text: '额吉的故乡' }]"
/>
@@ -17,7 +17,7 @@
<!-- 风景大图 -->
<div class="scenic-banner">
<img src="/images/seasons/summer-hero.jpg" alt="夏季呼伦贝尔莫日格勒河草原全景" loading="eager" />
<img :src="'/images/seasons/summer-hero.jpg'" alt="夏季呼伦贝尔莫日格勒河草原全景" loading="eager" />
</div>
<!-- 产品设计理念 -->
@@ -26,7 +26,7 @@
<!-- 产品卡片 -->
<section v-if="products" class="section reveal">
<div class="container">
<CommonSectionTitle title="额吉的故乡V9系列" subtitle="5-7天多版本行程" />
<CommonSectionTitle :title="st('products.v9Series', '额吉的故乡V9系列')" :subtitle="st('products.v9Series', '5-7天多版本行程', 'subtitle')" />
<div class="products-grid">
<ProductsProductCard v-for="p in products.versions" :key="p.id" :product="p" />
</div>
@@ -35,14 +35,14 @@
<!-- 夏季风景 -->
<div class="scenic-duo reveal">
<img src="/images/seasons/summer-river.jpg" alt="夏季草原蒙古包莫日格勒河全景" loading="lazy" />
<img src="/images/seasons/summer-car.jpg" alt="呼伦贝尔一单一车草原越野" loading="lazy" />
<img :src="'/images/seasons/summer-river.jpg'" alt="夏季草原蒙古包莫日格勒河全景" loading="lazy" />
<img :src="'/images/seasons/summer-car.jpg'" alt="呼伦贝尔一单一车草原越野" loading="lazy" />
</div>
<!-- 中间转化入口 -->
<CommonSectionCTA
title="不确定选哪个版本?"
description="5个问题,1分钟,找到最适合你家庭的行程版本"
description="5个问题,1分钟,找到适合你家庭的行程版本"
:links="[{ to: '/selector', text: '使用选版工具' }, { to: '/contact', text: '联系定制师' }]"
/>
@@ -92,7 +92,9 @@
import { useProductsListSchema, useBreadcrumbSchema } from '~/composables/useJsonLd'
const { data: products } = await usePublicApi('products')
const { data: heroes } = await usePublicApi('heroes')
const { data: versions } = await usePublicApi('versions')
const st = await useSectionTitles()
const seo = useSEO('products')
useScrollReveal()
+7 -5
查看文件
@@ -2,7 +2,7 @@
<div class="page-winter">
<LayoutPageHero
:title="seo.h1"
subtitle="独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景"
:subtitle="heroes?.['products-winter'] || '独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景'"
:breadcrumbs="[{ text: '产品线', to: '/products' }, { text: '嗨冰雪' }]"
background-image="/images/seasons/winter-hero.jpg"
/>
@@ -22,7 +22,7 @@
<!-- 产品卡片 -->
<section v-if="winterData" class="section reveal">
<div class="container">
<CommonSectionTitle title="嗨冰雪V3系列" subtitle="5-7天南北两线,专属私家团" />
<CommonSectionTitle :title="st('productsWinter.versions', '嗨冰雪V3系列')" :subtitle="st('productsWinter.versions', '5-7天南北两线,专属私家团', 'subtitle')" />
<div class="products-grid">
<WinterProductCard v-for="p in winterData.versions" :key="p.id" :product="p" />
</div>
@@ -39,7 +39,7 @@
<!-- 共同亮点 -->
<section v-if="winterData" class="section reveal">
<div class="container">
<CommonSectionTitle title="冬季行程亮点" subtitle="每一条线路都会体验到" />
<CommonSectionTitle :title="st('productsWinter.highlights', '冬季行程亮点')" :subtitle="st('productsWinter.highlights', '每一条线路都会体验到', 'subtitle')" />
<div class="highlights-grid">
<div v-for="(h, i) in winterData.highlights" :key="i" class="highlight-card">
<h3 class="highlight-title">{{ h.title }}</h3>
@@ -52,7 +52,7 @@
<!-- 南线特色 -->
<section v-if="winterData" class="section section--warm reveal">
<div class="container">
<CommonSectionTitle title="南线特色 · 呼伦贝尔+阿尔山" subtitle="大雪原与童话小城的碰撞" />
<CommonSectionTitle :title="st('productsWinter.south', '南线特色 · 呼伦贝尔+阿尔山')" :subtitle="st('productsWinter.south', '大雪原与童话小城的碰撞', 'subtitle')" />
<div class="highlights-grid">
<div v-for="(h, i) in winterData.southHighlights" :key="i" class="highlight-card">
<h3 class="highlight-title">{{ h.title }}</h3>
@@ -65,7 +65,7 @@
<!-- 北线特色 -->
<section v-if="winterData" class="section reveal">
<div class="container">
<CommonSectionTitle title="北线特色 · 呼伦贝尔+大兴安岭" subtitle="边境风情与驯鹿部落的秘境" />
<CommonSectionTitle :title="st('productsWinter.north', '北线特色 · 呼伦贝尔+大兴安岭')" :subtitle="st('productsWinter.north', '边境风情与驯鹿部落的秘境', 'subtitle')" />
<div class="highlights-grid">
<div v-for="(h, i) in winterData.northHighlights" :key="i" class="highlight-card">
<h3 class="highlight-title">{{ h.title }}</h3>
@@ -88,6 +88,8 @@
import { useBreadcrumbSchema } from '~/composables/useJsonLd'
const { data: winterData } = await usePublicApi('winter-products')
const { data: heroes } = await usePublicApi('heroes')
const st = await useSectionTitles()
const seo = useSEO('products-winter', {
title: '嗨冰雪 - 呼伦贝尔冬季定制游 · 南北两线5-7天 - 呼籁旅行',