feat: 官网代码全量更新 (2026-04-18)
这个提交包含在:
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<section class="section section--warm">
|
||||
<div class="container">
|
||||
<CommonSectionTitle title="产品进化" subtitle="从V1到V9,每一次更新都是客户反馈驱动" />
|
||||
<CommonSectionTitle :title="st('products.evolutionStats', '产品进化')" :subtitle="st('products.evolutionStats', '从V1到V9,每一次更新都是客户反馈驱动', 'subtitle')" />
|
||||
<div class="evo-stats">
|
||||
<div class="evo-stat">
|
||||
<span class="evo-stat-num">{{ stats.iterations }}</span>
|
||||
@@ -25,6 +25,7 @@
|
||||
defineProps({
|
||||
stats: { type: Object, required: true }
|
||||
})
|
||||
const st = await useSectionTitles()
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<CommonSectionTitle title="关于价格" subtitle="透明、清晰、不套路" />
|
||||
<CommonSectionTitle :title="st('products.pricingPhilosophy', '关于价格')" :subtitle="st('products.pricingPhilosophy', '透明、清晰、不套路', 'subtitle')" />
|
||||
<div class="pricing-content">
|
||||
<p>{{ content }}</p>
|
||||
</div>
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
<script setup>
|
||||
defineProps({ content: { type: String, required: true } })
|
||||
const st = await useSectionTitles()
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<section id="guide" class="section section--gray">
|
||||
<div class="container">
|
||||
<CommonSectionTitle title="不知道选哪个?" subtitle="按您的情况推荐" />
|
||||
<CommonSectionTitle :title="st('products.selectionGuide', '不知道选哪个?')" :subtitle="st('products.selectionGuide', '按您的情况推荐', 'subtitle')" />
|
||||
<div class="guide-groups">
|
||||
<div v-for="group in guideGroups" :key="group.title" class="guide-group">
|
||||
<h3 class="guide-group-title">{{ group.title }}</h3>
|
||||
@@ -26,6 +26,7 @@ const props = defineProps({
|
||||
guide: { type: Object, required: true },
|
||||
versions: { type: Array, required: true },
|
||||
})
|
||||
const st = await useSectionTitles()
|
||||
|
||||
const guideGroups = computed(() => [
|
||||
{ title: '按假期长度', items: props.guide.byVacationLength },
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="camp-hero">
|
||||
<div class="camp-mascot">
|
||||
<img
|
||||
:src="images.mascot.xiaomengma"
|
||||
:src="mascotSrc"
|
||||
alt="小蒙马 - 小蒙马亲子游学营团宠,一只可爱的蒙古小马形象"
|
||||
width="200"
|
||||
height="200"
|
||||
@@ -33,8 +33,11 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import images from '~/data/images.json'
|
||||
defineProps({ camp: { type: Object, required: true } })
|
||||
|
||||
// 从 API 动态读取图片配置(admin 编辑后即时同步)
|
||||
const { data: images } = await usePublicApi('images')
|
||||
const mascotSrc = computed(() => images.value?.mascot?.xiaomengma || '/images/mascot/xiaomengma.png')
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<CommonSectionTitle title="V8 → V9 升级对比" subtitle="7项关键升级一目了然" />
|
||||
<CommonSectionTitle :title="st('products.compareV8V9', 'V8 → V9 升级对比')" :subtitle="st('products.compareV8V9', '7项关键升级一目了然', 'subtitle')" />
|
||||
<div class="compare-wrapper">
|
||||
<div class="compare-table">
|
||||
<div class="compare-head">
|
||||
@@ -22,6 +22,7 @@
|
||||
defineProps({
|
||||
compare: { type: Object, required: true }
|
||||
})
|
||||
const st = await useSectionTitles()
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<section class="section section--gray">
|
||||
<div class="container">
|
||||
<CommonSectionTitle title="更多V9亮点" subtitle="独家资源 · 自营服务 · 全程无忧" />
|
||||
<CommonSectionTitle :title="st('products.highlights', '更多V9亮点')" :subtitle="st('products.highlights', '专属资源 · 自营服务 · 全程无忧', 'subtitle')" />
|
||||
<div class="highlights-list">
|
||||
<div v-for="item in highlights" :key="item.text" class="highlight-item">
|
||||
<span class="highlight-label">{{ item.label }}</span>
|
||||
@@ -16,6 +16,7 @@
|
||||
defineProps({
|
||||
highlights: { type: Array, required: true }
|
||||
})
|
||||
const st = await useSectionTitles()
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<CommonSectionTitle title="9次迭代背后的产品哲学" subtitle="不是做加法,而是做取舍" />
|
||||
<CommonSectionTitle :title="st('products.philosophy', '9次迭代背后的产品哲学')" :subtitle="st('products.philosophy', '不是做加法,而是做取舍', 'subtitle')" />
|
||||
<div class="philosophy-wrapper">
|
||||
<div class="philosophy-list">
|
||||
<div v-for="item in philosophy" :key="item.label" class="philosophy-item">
|
||||
@@ -24,6 +24,7 @@ defineProps({
|
||||
philosophy: { type: Array, required: true },
|
||||
quote: { type: Object, required: true }
|
||||
})
|
||||
const st = await useSectionTitles()
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<CommonSectionTitle title="2026年核心升级" subtitle="基于客户反馈的三大重磅升级" />
|
||||
<CommonSectionTitle :title="st('products.upgrades', '2026年核心升级')" :subtitle="st('products.upgrades', '基于客户反馈的三大重磅升级', 'subtitle')" />
|
||||
<div class="upgrades-list">
|
||||
<div v-for="item in upgrades" :key="item.name" class="upgrade-item">
|
||||
<div class="upgrade-header">
|
||||
@@ -20,6 +20,7 @@
|
||||
defineProps({
|
||||
upgrades: { type: Array, required: true }
|
||||
})
|
||||
const st = await useSectionTitles()
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
||||
在新工单中引用
屏蔽一个用户