|
|
- <script setup lang="ts">
- import { ref, computed } from 'vue';
- import { useI18n } from 'vue-i18n';
-
- const { t } = useI18n();
-
- // 当前选中的分类
- const selectedCategory = ref('all');
-
- // 分类列表
- const categories = [
- { id: 'all', name: t('ecosystem.categories.all') },
- { id: 'defi', name: t('ecosystem.categories.defi') },
- { id: 'nft', name: t('ecosystem.categories.nft') },
- { id: 'dao', name: t('ecosystem.categories.dao') },
- { id: 'gaming', name: t('ecosystem.categories.gaming') },
- { id: 'infrastructure', name: t('ecosystem.categories.infrastructure') },
- { id: 'social', name: t('ecosystem.categories.social') },
- ];
-
- // 项目数据
- const projects = [
- {
- id: 1,
- name: 'MOSE Swap',
- description: t('projects.mose_swap'),
- category: 'defi',
- image: '/public/images.png',
- url: 'https://moseswap.io',
- featured: true
- },
- {
- id: 2,
- name: 'MOSE NFT Marketplace',
- description: t('projects.mose_nft'),
- category: 'nft',
- image: '/public/images.png',
- url: 'https://mosenft.io',
- featured: true
- },
- {
- id: 3,
- name: 'MOSE DAO',
- description: t('projects.mose_dao'),
- category: 'dao',
- image: '/public/images.png',
- url: 'https://mosedao.io',
- featured: true
- },
- {
- id: 4,
- name: 'MOSE Gaming',
- description: t('projects.mose_gaming'),
- category: 'gaming',
- image: '/public/images.png',
- url: 'https://mosegaming.io',
- featured: false
- },
- {
- id: 5,
- name: 'MOSE Bridge',
- description: t('projects.mose_bridge'),
- category: 'infrastructure',
- image: '/public/images.png',
- url: 'https://mosebridge.io',
- featured: true
- },
- {
- id: 6,
- name: 'MOSE Social',
- description: t('projects.mose_social'),
- category: 'social',
- image: '/public/images.png',
- url: 'https://mosesocial.io',
- featured: false
- },
- {
- id: 7,
- name: 'MOSE Lending',
- description: t('projects.mose_lending'),
- category: 'defi',
- image: '/public/images.png',
- url: 'https://moselending.io',
- featured: false
- },
- {
- id: 8,
- name: 'MOSE Staking',
- description: t('projects.mose_staking'),
- category: 'defi',
- image: '/public/images.png',
- url: 'https://mosestaking.io',
- featured: false
- }
- ];
-
- // 合作伙伴数据
- const partners = [
- {
- id: 1,
- name: 'Partner 1',
- logo: '/public/images.png',
- url: 'https://partner1.com'
- },
- {
- id: 2,
- name: 'Partner 2',
- logo: '/public/images.png',
- url: 'https://partner2.com'
- },
- {
- id: 3,
- name: 'Partner 3',
- logo: '/public/images.png',
- url: 'https://partner3.com'
- },
- {
- id: 4,
- name: 'Partner 4',
- logo: '/public/images.png',
- url: 'https://partner4.com'
- },
- {
- id: 5,
- name: 'Partner 5',
- logo: '/public/images.png',
- url: 'https://partner5.com'
- },
- {
- id: 6,
- name: 'Partner 6',
- logo: '/public/images.png',
- url: 'https://partner6.com'
- }
- ];
-
- // 筛选项目
- const filteredProjects = computed(() => {
- if (selectedCategory.value === 'all') {
- return projects;
- } else {
- return projects.filter(project => project.category === selectedCategory.value);
- }
- });
-
- // 特色项目
- const featuredProjects = computed(() => {
- return projects.filter(project => project.featured);
- });
-
- // 选择分类
- const selectCategory = (category: string) => {
- selectedCategory.value = category;
- };
- </script>
-
- <template>
- <div class="bg-background min-h-screen">
- <!-- Hero Section -->
- <section class="relative py-24 px-6 md:px-12 lg:px-24 bg-background-dark overflow-hidden">
- <div class="container mx-auto relative z-10">
- <div class="max-w-3xl mx-auto text-center">
- <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-text mb-6 wow animate__animated animate__fadeInDown">
- {{ t('ecosystem.title') }}
- </h1>
- <p class="text-lg md:text-xl text-text-secondary mb-8 wow animate__animated animate__fadeIn animate__delay-0-5s">
- {{ t('ecosystem.subtitle') }}
- </p>
- </div>
- </div>
-
- <!-- Background Decoration -->
- <div class="absolute top-0 left-0 w-full h-full overflow-hidden opacity-10">
- <div class="absolute -top-24 -left-24 w-64 h-64 rounded-full bg-primary-light blur-3xl wow animate__animated animate__pulse animate__infinite"></div>
- <div class="absolute top-1/2 right-0 w-80 h-80 rounded-full bg-secondary blur-3xl wow animate__animated animate__pulse animate__infinite animate__delay-1s"></div>
- <div class="absolute -bottom-24 left-1/3 w-72 h-72 rounded-full bg-accent blur-3xl wow animate__animated animate__pulse animate__infinite animate__delay-2s"></div>
- </div>
- </section>
-
- <!-- Featured Projects Section -->
- <section class="py-16 px-6 md:px-12 lg:px-24">
- <div class="container mx-auto">
- <div class="flex justify-between items-center mb-10">
- <h2 class="text-2xl md:text-3xl font-bold text-text wow animate__animated animate__fadeInUp">
- {{ t('ecosystem.projects.featured') }}
- </h2>
- <a href="#all-projects" class="text-primary-light hover:text-primary-dark transition-colors duration-200 wow animate__animated animate__fadeInUp">
- {{ t('ecosystem.projects.viewAll') }}
- </a>
- </div>
-
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
- <div
- v-for="(project, index) in featuredProjects"
- :key="project.id"
- class="bg-background-light rounded-xl overflow-hidden shadow-card hover:transform hover:scale-105 transition-all duration-300 wow animate__animated animate__fadeInUp"
- :class="{
- 'animate__delay-0-5s': index === 1,
- 'animate__delay-1s': index === 2
- }"
- >
- <img :src="project.image" :alt="project.name" class="w-full h-48 object-cover" />
- <div class="p-6">
- <h3 class="text-xl font-bold text-text mb-2">{{ project.name }}</h3>
- <p class="text-text-secondary mb-4">{{ project.description }}</p>
- <div class="flex justify-between items-center">
- <span class="px-3 py-1 bg-background text-primary-light text-xs rounded-full">
- {{ t(`ecosystem.categories.${project.category}`) }}
- </span>
- <a
- :href="project.url"
- target="_blank"
- rel="noopener noreferrer"
- class="text-primary-light hover:text-primary-dark transition-colors duration-200"
- >
- {{ t('ecosystem.projects.learnMore') }}
- </a>
- </div>
- </div>
- </div>
- </div>
- </div>
- </section>
-
- <!-- All Projects Section -->
- <section id="all-projects" class="py-16 px-6 md:px-12 lg:px-24 bg-background-light">
- <div class="container mx-auto">
- <h2 class="text-2xl md:text-3xl font-bold text-text mb-10 wow animate__animated animate__fadeInUp">
- {{ t('ecosystem.title') }}
- </h2>
-
- <!-- Categories Filter -->
- <div class="flex flex-wrap gap-2 mb-10 wow animate__animated animate__fadeInUp animate__delay-0-5s">
- <button
- v-for="category in categories"
- :key="category.id"
- @click="selectCategory(category.id)"
- class="px-4 py-2 rounded-full text-sm transition-colors duration-200"
- :class="selectedCategory === category.id
- ? 'bg-primary text-text'
- : 'bg-background-dark text-text-secondary hover:bg-background hover:text-text'"
- >
- {{ category.name }}
- </button>
- </div>
-
- <!-- Projects Grid -->
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
- <div
- v-for="(project, index) in filteredProjects"
- :key="project.id"
- class="bg-background rounded-xl overflow-hidden shadow-card hover:shadow-lg transition-all duration-300 wow animate__animated animate__fadeIn"
- :class="{
- 'animate__delay-0-5s': index % 4 === 1,
- 'animate__delay-1s': index % 4 === 2,
- 'animate__delay-1-5s': index % 4 === 3
- }"
- >
- <img :src="project.image" :alt="project.name" class="w-full h-40 object-cover" />
- <div class="p-5">
- <h3 class="text-lg font-bold text-text mb-2">{{ project.name }}</h3>
- <p class="text-text-secondary text-sm mb-4">{{ project.description }}</p>
- <div class="flex justify-between items-center">
- <span class="px-3 py-1 bg-background-dark text-primary-light text-xs rounded-full">
- {{ t(`ecosystem.categories.${project.category}`) }}
- </span>
- <a
- :href="project.url"
- target="_blank"
- rel="noopener noreferrer"
- class="text-primary-light hover:text-primary-dark transition-colors duration-200 text-sm"
- >
- {{ t('ecosystem.projects.learnMore') }}
- </a>
- </div>
- </div>
- </div>
- </div>
- </div>
- </section>
-
- <!-- Partners Section -->
- <section class="py-16 px-6 md:px-12 lg:px-24">
- <div class="container mx-auto">
- <div class="text-center mb-12">
- <h2 class="text-2xl md:text-3xl font-bold text-text mb-4 wow animate__animated animate__fadeInUp">
- {{ t('ecosystem.partners.title') }}
- </h2>
- <p class="text-text-secondary max-w-2xl mx-auto wow animate__animated animate__fadeInUp animate__delay-0-5s">
- {{ t('ecosystem.partners.subtitle') }}
- </p>
- </div>
-
- <div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-8">
- <a
- v-for="(partner, index) in partners"
- :key="partner.id"
- :href="partner.url"
- target="_blank"
- rel="noopener noreferrer"
- class="flex items-center justify-center p-6 bg-background-light rounded-lg hover:bg-background-dark transition-colors duration-300 wow animate__animated animate__fadeIn"
- :class="{
- 'animate__delay-0-5s': index % 6 === 1,
- 'animate__delay-1s': index % 6 === 2,
- 'animate__delay-1-5s': index % 6 === 3,
- 'animate__delay-2s': index % 6 === 4,
- 'animate__delay-2-5s': index % 6 === 5
- }"
- >
- <img :src="partner.logo" :alt="partner.name" class="max-h-12 max-w-full" />
- </a>
- </div>
- </div>
- </section>
-
- <!-- Join Ecosystem CTA -->
- <section class="py-20 px-6 md:px-12 lg:px-24 bg-primary bg-opacity-10 relative overflow-hidden">
- <div class="container mx-auto relative z-10">
- <div class="max-w-3xl mx-auto text-center">
- <h2 class="text-2xl md:text-3xl font-bold text-text mb-4 wow animate__animated animate__fadeInUp">
- {{ t('ecosystem.join.title') }}
- </h2>
- <p class="text-text-secondary mb-8 wow animate__animated animate__fadeInUp animate__delay-0-5s">
- {{ t('ecosystem.join.subtitle') }}
- </p>
- <a
- href="#"
- class="inline-block px-8 py-3 bg-primary text-text rounded-lg hover:bg-primary-dark transition-colors duration-300 shadow-button wow animate__animated animate__fadeInUp animate__delay-1s"
- >
- {{ t('ecosystem.join.cta') }}
- </a>
- </div>
- </div>
-
- <!-- Background Decoration -->
- <div class="absolute top-0 left-0 w-full h-full overflow-hidden opacity-30">
- <div class="absolute top-0 right-0 w-64 h-64 rounded-full bg-primary blur-3xl wow animate__animated animate__pulse animate__infinite"></div>
- <div class="absolute bottom-0 left-0 w-80 h-80 rounded-full bg-primary blur-3xl wow animate__animated animate__pulse animate__infinite animate__delay-1s"></div>
- </div>
- </section>
-
- <!-- Developer Resources -->
- <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-10 wow animate__animated animate__fadeInUp">
- {{ t('ecosystem.resources.title') }}
- </h2>
-
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
- <a
- href="#"
- class="bg-background-light p-6 rounded-xl flex flex-col items-center text-center hover:bg-background-dark transition-colors duration-300 wow animate__animated animate__zoomIn"
- >
- <svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-primary-light mb-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" />
- </svg>
- <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.docs') }}</h3>
- <p class="text-text-secondary text-sm">
- {{ t('ecosystem.resources.docs') }}
- </p>
- </a>
-
- <a
- href="#"
- class="bg-background-light p-6 rounded-xl flex flex-col items-center text-center hover:bg-background-dark transition-colors duration-300 wow animate__animated animate__zoomIn animate__delay-0-5s"
- >
- <svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-primary-light mb-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
- </svg>
- <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.github') }}</h3>
- <p class="text-text-secondary text-sm">
- {{ t('ecosystem.resources.github') }}
- </p>
- </a>
-
- <a
- href="#"
- class="bg-background-light p-6 rounded-xl flex flex-col items-center text-center hover:bg-background-dark transition-colors duration-300 wow animate__animated animate__zoomIn animate__delay-1s"
- >
- <svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-primary-light mb-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
- </svg>
- <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.grants') }}</h3>
- <p class="text-text-secondary text-sm">
- {{ t('ecosystem.resources.grants') }}
- </p>
- </a>
-
- <a
- href="#"
- class="bg-background-light p-6 rounded-xl flex flex-col items-center text-center hover:bg-background-dark transition-colors duration-300 wow animate__animated animate__zoomIn animate__delay-1-5s"
- >
- <svg xmlns="http://www.w3.org/2000/svg" class="h-12 w-12 text-primary-light mb-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
- </svg>
- <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.community') }}</h3>
- <p class="text-text-secondary text-sm">
- {{ t('ecosystem.resources.community') }}
- </p>
- </a>
- </div>
- </div>
- </section>
- </div>
- </template>
-
- <style scoped>
- /* 添加一些额外的动画效果 */
- .hover\:transform:hover {
- transform: translateY(-5px);
- }
- </style>
|