|
|
- <script setup lang="ts">
- import { Icon } from '@iconify/vue';
- import { computed } from 'vue';
- import { useI18n } from 'vue-i18n';
-
- const { t } = useI18n();
-
- // 不再使用API返回的文本数据,全部使用i18n文本
-
- // 默认架构层级数据(当API数据不可用时使用)
- const defaultLayers = [
- {
- id: 'aggregation',
- icon: 'carbon:data-share',
- title: t('architecture.layers.aggregation.title'),
- description: t('architecture.layers.aggregation.description'),
- features: [
- t('architecture.layers.aggregation.features.indexing'),
- t('architecture.layers.aggregation.features.sync'),
- t('architecture.layers.aggregation.features.storage')
- ]
- },
- {
- id: 'crosschain',
- icon: 'carbon:connect',
- title: t('architecture.layers.crosschain.title'),
- description: t('architecture.layers.crosschain.description'),
- features: [
- t('architecture.layers.crosschain.features.atomic_swap'),
- t('architecture.layers.crosschain.features.messaging'),
- t('architecture.layers.crosschain.features.privacy')
- ]
- },
- {
- id: 'routing',
- icon: 'carbon:flow',
- title: t('architecture.layers.routing.title'),
- description: t('architecture.layers.routing.description'),
- features: [
- t('architecture.layers.routing.features.algorithm'),
- t('architecture.layers.routing.features.optimization'),
- t('architecture.layers.routing.features.monitoring')
- ]
- },
- {
- id: 'application',
- icon: 'carbon:application',
- title: t('architecture.layers.application.title'),
- description: t('architecture.layers.application.description'),
- features: [
- t('architecture.layers.application.features.sdk'),
- t('architecture.layers.application.features.tools'),
- t('architecture.layers.application.features.components')
- ]
- }
- ];
-
- // 最终使用的架构层级数据,全部使用i18n
- const architectureLayers = computed(() => {
- return defaultLayers;
- });
- </script>
-
- <template>
- <section class="py-16 px-6 md:px-12 lg:px-24">
- <div class="container mx-auto">
- <h2 class="text-2xl md:text-3xl font-bold text-text mb-6 text-center wow animate__animated animate__fadeInUp animate__duration-fast">
- {{ t('architecture.title') }}
- </h2>
-
- <p class="max-w-3xl mx-auto text-center text-text-secondary mb-12 wow animate__animated animate__fadeIn animate__delay-xs animate__duration-fast">
- {{ t('architecture.subtitle') }}
- </p>
-
- <!-- 架构图示 - 桌面端 -->
- <div class="hidden md:block mb-12 relative">
- <!-- 连接线条 -->
- <div class="absolute top-1/2 left-0 w-full h-1 bg-primary-light opacity-50 transform -translate-y-1/2 z-0"></div>
-
- <!-- 架构层级 -->
- <div class="flex justify-between relative z-10">
- <div
- v-for="(layer, index) in architectureLayers"
- :key="layer.id"
- class="w-1/4 px-4 wow animate__animated animate__fadeIn animate__duration-fast"
- :class="{
- 'animate__delay-xs': index === 1,
- 'animate__delay-sm': index === 2,
- 'animate__delay-md': index === 3
- }"
- >
- <div class="bg-background-light rounded-xl p-6 shadow-card hover:shadow-lg transition-all duration-300 h-full relative">
- <!-- 顶部装饰图标 -->
- <div class="absolute top-0 left-1/2 w-10 h-10 rounded-full bg-primary flex items-center justify-center transform -translate-x-1/2 -translate-y-1/2">
- <Icon :icon="layer.icon" width="20" height="20" class="text-white" />
- </div>
-
- <h3 class="text-xl font-bold text-text mb-4 text-center pt-2">{{ layer.title }}</h3>
- <p class="text-text-secondary text-center mb-4">{{ layer.description }}</p>
-
- <!-- 特点列表 -->
- <ul v-if="layer.features && layer.features.length > 0" class="space-y-2">
- <li
- v-for="(feature, featureIndex) in layer.features"
- :key="`${layer.id}-feature-${featureIndex}`"
- class="flex items-center"
- >
- <Icon icon="carbon:dot-mark" class="mr-2 text-primary-light" />
- <span>{{ feature }}</span>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
-
- <!-- 架构图示 - 移动端 -->
- <div class="md:hidden space-y-6">
- <div
- v-for="(layer, index) in architectureLayers"
- :key="`mobile-${layer.id}`"
- class="bg-background-light rounded-xl p-6 shadow-card wow animate__animated animate__fadeInUp animate__duration-fast"
- :class="{
- 'animate__delay-xs': index === 1,
- 'animate__delay-sm': index === 2,
- 'animate__delay-md': index === 3
- }"
- >
- <div class="flex items-center mb-4">
- <div class="w-10 h-10 rounded-full bg-primary flex items-center justify-center mr-4">
- <Icon :icon="layer.icon" width="20" height="20" class="text-white" />
- </div>
- <h3 class="text-xl font-bold text-text">{{ layer.title }}</h3>
- </div>
-
- <p class="text-text-secondary mb-4">{{ layer.description }}</p>
-
- <!-- 特点列表 -->
- <ul v-if="layer.features && layer.features.length > 0" class="space-y-2">
- <li
- v-for="(feature, featureIndex) in layer.features"
- :key="`${layer.id}-mobile-feature-${featureIndex}`"
- class="flex items-center"
- >
- <Icon icon="carbon:dot-mark" class="mr-2 text-primary-light" />
- <span>{{ feature }}</span>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </section>
- </template>
|