国外MOSE官网
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

411 lines
16 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. <script setup lang="ts">
  2. import { ref, computed } from 'vue';
  3. import { useI18n } from 'vue-i18n';
  4. const { t } = useI18n();
  5. // 当前选中的分类
  6. const selectedCategory = ref('all');
  7. // 分类列表
  8. const categories = [
  9. { id: 'all', name: t('ecosystem.categories.all') },
  10. { id: 'defi', name: t('ecosystem.categories.defi') },
  11. { id: 'nft', name: t('ecosystem.categories.nft') },
  12. { id: 'dao', name: t('ecosystem.categories.dao') },
  13. { id: 'gaming', name: t('ecosystem.categories.gaming') },
  14. { id: 'infrastructure', name: t('ecosystem.categories.infrastructure') },
  15. { id: 'social', name: t('ecosystem.categories.social') },
  16. ];
  17. // 项目数据
  18. const projects = [
  19. {
  20. id: 1,
  21. name: 'MOSE Swap',
  22. description: t('projects.mose_swap'),
  23. category: 'defi',
  24. image: '/public/images.png',
  25. url: 'https://moseswap.io',
  26. featured: true
  27. },
  28. {
  29. id: 2,
  30. name: 'MOSE NFT Marketplace',
  31. description: t('projects.mose_nft'),
  32. category: 'nft',
  33. image: '/public/images.png',
  34. url: 'https://mosenft.io',
  35. featured: true
  36. },
  37. {
  38. id: 3,
  39. name: 'MOSE DAO',
  40. description: t('projects.mose_dao'),
  41. category: 'dao',
  42. image: '/public/images.png',
  43. url: 'https://mosedao.io',
  44. featured: true
  45. },
  46. {
  47. id: 4,
  48. name: 'MOSE Gaming',
  49. description: t('projects.mose_gaming'),
  50. category: 'gaming',
  51. image: '/public/images.png',
  52. url: 'https://mosegaming.io',
  53. featured: false
  54. },
  55. {
  56. id: 5,
  57. name: 'MOSE Bridge',
  58. description: t('projects.mose_bridge'),
  59. category: 'infrastructure',
  60. image: '/public/images.png',
  61. url: 'https://mosebridge.io',
  62. featured: true
  63. },
  64. {
  65. id: 6,
  66. name: 'MOSE Social',
  67. description: t('projects.mose_social'),
  68. category: 'social',
  69. image: '/public/images.png',
  70. url: 'https://mosesocial.io',
  71. featured: false
  72. },
  73. {
  74. id: 7,
  75. name: 'MOSE Lending',
  76. description: t('projects.mose_lending'),
  77. category: 'defi',
  78. image: '/public/images.png',
  79. url: 'https://moselending.io',
  80. featured: false
  81. },
  82. {
  83. id: 8,
  84. name: 'MOSE Staking',
  85. description: t('projects.mose_staking'),
  86. category: 'defi',
  87. image: '/public/images.png',
  88. url: 'https://mosestaking.io',
  89. featured: false
  90. }
  91. ];
  92. // 合作伙伴数据
  93. const partners = [
  94. {
  95. id: 1,
  96. name: 'Partner 1',
  97. logo: '/public/images.png',
  98. url: 'https://partner1.com'
  99. },
  100. {
  101. id: 2,
  102. name: 'Partner 2',
  103. logo: '/public/images.png',
  104. url: 'https://partner2.com'
  105. },
  106. {
  107. id: 3,
  108. name: 'Partner 3',
  109. logo: '/public/images.png',
  110. url: 'https://partner3.com'
  111. },
  112. {
  113. id: 4,
  114. name: 'Partner 4',
  115. logo: '/public/images.png',
  116. url: 'https://partner4.com'
  117. },
  118. {
  119. id: 5,
  120. name: 'Partner 5',
  121. logo: '/public/images.png',
  122. url: 'https://partner5.com'
  123. },
  124. {
  125. id: 6,
  126. name: 'Partner 6',
  127. logo: '/public/images.png',
  128. url: 'https://partner6.com'
  129. }
  130. ];
  131. // 筛选项目
  132. const filteredProjects = computed(() => {
  133. if (selectedCategory.value === 'all') {
  134. return projects;
  135. } else {
  136. return projects.filter(project => project.category === selectedCategory.value);
  137. }
  138. });
  139. // 特色项目
  140. const featuredProjects = computed(() => {
  141. return projects.filter(project => project.featured);
  142. });
  143. // 选择分类
  144. const selectCategory = (category: string) => {
  145. selectedCategory.value = category;
  146. };
  147. </script>
  148. <template>
  149. <div class="bg-background min-h-screen">
  150. <!-- Hero Section -->
  151. <section class="relative py-24 px-6 md:px-12 lg:px-24 bg-background-dark overflow-hidden">
  152. <div class="container mx-auto relative z-10">
  153. <div class="max-w-3xl mx-auto text-center">
  154. <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-text mb-6 wow animate__animated animate__fadeInDown">
  155. {{ t('ecosystem.title') }}
  156. </h1>
  157. <p class="text-lg md:text-xl text-text-secondary mb-8 wow animate__animated animate__fadeIn animate__delay-0-5s">
  158. {{ t('ecosystem.subtitle') }}
  159. </p>
  160. </div>
  161. </div>
  162. <!-- Background Decoration -->
  163. <div class="absolute top-0 left-0 w-full h-full overflow-hidden opacity-10">
  164. <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>
  165. <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>
  166. <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>
  167. </div>
  168. </section>
  169. <!-- Featured Projects Section -->
  170. <section class="py-16 px-6 md:px-12 lg:px-24">
  171. <div class="container mx-auto">
  172. <div class="flex justify-between items-center mb-10">
  173. <h2 class="text-2xl md:text-3xl font-bold text-text wow animate__animated animate__fadeInUp">
  174. {{ t('ecosystem.projects.featured') }}
  175. </h2>
  176. <a href="#all-projects" class="text-primary-light hover:text-primary-dark transition-colors duration-200 wow animate__animated animate__fadeInUp">
  177. {{ t('ecosystem.projects.viewAll') }}
  178. </a>
  179. </div>
  180. <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
  181. <div
  182. v-for="(project, index) in featuredProjects"
  183. :key="project.id"
  184. class="bg-background-light rounded-xl overflow-hidden shadow-card hover:transform hover:scale-105 transition-all duration-300 wow animate__animated animate__fadeInUp"
  185. :class="{
  186. 'animate__delay-0-5s': index === 1,
  187. 'animate__delay-1s': index === 2
  188. }"
  189. >
  190. <img :src="project.image" :alt="project.name" class="w-full h-48 object-cover" />
  191. <div class="p-6">
  192. <h3 class="text-xl font-bold text-text mb-2">{{ project.name }}</h3>
  193. <p class="text-text-secondary mb-4">{{ project.description }}</p>
  194. <div class="flex justify-between items-center">
  195. <span class="px-3 py-1 bg-background text-primary-light text-xs rounded-full">
  196. {{ t(`ecosystem.categories.${project.category}`) }}
  197. </span>
  198. <a
  199. :href="project.url"
  200. target="_blank"
  201. rel="noopener noreferrer"
  202. class="text-primary-light hover:text-primary-dark transition-colors duration-200"
  203. >
  204. {{ t('ecosystem.projects.learnMore') }}
  205. </a>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. </div>
  211. </section>
  212. <!-- All Projects Section -->
  213. <section id="all-projects" class="py-16 px-6 md:px-12 lg:px-24 bg-background-light">
  214. <div class="container mx-auto">
  215. <h2 class="text-2xl md:text-3xl font-bold text-text mb-10 wow animate__animated animate__fadeInUp">
  216. {{ t('ecosystem.title') }}
  217. </h2>
  218. <!-- Categories Filter -->
  219. <div class="flex flex-wrap gap-2 mb-10 wow animate__animated animate__fadeInUp animate__delay-0-5s">
  220. <button
  221. v-for="category in categories"
  222. :key="category.id"
  223. @click="selectCategory(category.id)"
  224. class="px-4 py-2 rounded-full text-sm transition-colors duration-200"
  225. :class="selectedCategory === category.id
  226. ? 'bg-primary text-text'
  227. : 'bg-background-dark text-text-secondary hover:bg-background hover:text-text'"
  228. >
  229. {{ category.name }}
  230. </button>
  231. </div>
  232. <!-- Projects Grid -->
  233. <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
  234. <div
  235. v-for="(project, index) in filteredProjects"
  236. :key="project.id"
  237. class="bg-background rounded-xl overflow-hidden shadow-card hover:shadow-lg transition-all duration-300 wow animate__animated animate__fadeIn"
  238. :class="{
  239. 'animate__delay-0-5s': index % 4 === 1,
  240. 'animate__delay-1s': index % 4 === 2,
  241. 'animate__delay-1-5s': index % 4 === 3
  242. }"
  243. >
  244. <img :src="project.image" :alt="project.name" class="w-full h-40 object-cover" />
  245. <div class="p-5">
  246. <h3 class="text-lg font-bold text-text mb-2">{{ project.name }}</h3>
  247. <p class="text-text-secondary text-sm mb-4">{{ project.description }}</p>
  248. <div class="flex justify-between items-center">
  249. <span class="px-3 py-1 bg-background-dark text-primary-light text-xs rounded-full">
  250. {{ t(`ecosystem.categories.${project.category}`) }}
  251. </span>
  252. <a
  253. :href="project.url"
  254. target="_blank"
  255. rel="noopener noreferrer"
  256. class="text-primary-light hover:text-primary-dark transition-colors duration-200 text-sm"
  257. >
  258. {{ t('ecosystem.projects.learnMore') }}
  259. </a>
  260. </div>
  261. </div>
  262. </div>
  263. </div>
  264. </div>
  265. </section>
  266. <!-- Partners Section -->
  267. <section class="py-16 px-6 md:px-12 lg:px-24">
  268. <div class="container mx-auto">
  269. <div class="text-center mb-12">
  270. <h2 class="text-2xl md:text-3xl font-bold text-text mb-4 wow animate__animated animate__fadeInUp">
  271. {{ t('ecosystem.partners.title') }}
  272. </h2>
  273. <p class="text-text-secondary max-w-2xl mx-auto wow animate__animated animate__fadeInUp animate__delay-0-5s">
  274. {{ t('ecosystem.partners.subtitle') }}
  275. </p>
  276. </div>
  277. <div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-8">
  278. <a
  279. v-for="(partner, index) in partners"
  280. :key="partner.id"
  281. :href="partner.url"
  282. target="_blank"
  283. rel="noopener noreferrer"
  284. 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"
  285. :class="{
  286. 'animate__delay-0-5s': index % 6 === 1,
  287. 'animate__delay-1s': index % 6 === 2,
  288. 'animate__delay-1-5s': index % 6 === 3,
  289. 'animate__delay-2s': index % 6 === 4,
  290. 'animate__delay-2-5s': index % 6 === 5
  291. }"
  292. >
  293. <img :src="partner.logo" :alt="partner.name" class="max-h-12 max-w-full" />
  294. </a>
  295. </div>
  296. </div>
  297. </section>
  298. <!-- Join Ecosystem CTA -->
  299. <section class="py-20 px-6 md:px-12 lg:px-24 bg-primary bg-opacity-10 relative overflow-hidden">
  300. <div class="container mx-auto relative z-10">
  301. <div class="max-w-3xl mx-auto text-center">
  302. <h2 class="text-2xl md:text-3xl font-bold text-text mb-4 wow animate__animated animate__fadeInUp">
  303. {{ t('ecosystem.join.title') }}
  304. </h2>
  305. <p class="text-text-secondary mb-8 wow animate__animated animate__fadeInUp animate__delay-0-5s">
  306. {{ t('ecosystem.join.subtitle') }}
  307. </p>
  308. <a
  309. href="#"
  310. 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"
  311. >
  312. {{ t('ecosystem.join.cta') }}
  313. </a>
  314. </div>
  315. </div>
  316. <!-- Background Decoration -->
  317. <div class="absolute top-0 left-0 w-full h-full overflow-hidden opacity-30">
  318. <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>
  319. <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>
  320. </div>
  321. </section>
  322. <!-- Developer Resources -->
  323. <section class="py-16 px-6 md:px-12 lg:px-24">
  324. <div class="container mx-auto">
  325. <h2 class="text-2xl md:text-3xl font-bold text-text mb-10 wow animate__animated animate__fadeInUp">
  326. {{ t('ecosystem.resources.title') }}
  327. </h2>
  328. <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
  329. <a
  330. href="#"
  331. 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"
  332. >
  333. <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">
  334. <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" />
  335. </svg>
  336. <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.docs') }}</h3>
  337. <p class="text-text-secondary text-sm">
  338. {{ t('ecosystem.resources.docs') }}
  339. </p>
  340. </a>
  341. <a
  342. href="#"
  343. 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"
  344. >
  345. <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">
  346. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
  347. </svg>
  348. <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.github') }}</h3>
  349. <p class="text-text-secondary text-sm">
  350. {{ t('ecosystem.resources.github') }}
  351. </p>
  352. </a>
  353. <a
  354. href="#"
  355. 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"
  356. >
  357. <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">
  358. <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" />
  359. </svg>
  360. <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.grants') }}</h3>
  361. <p class="text-text-secondary text-sm">
  362. {{ t('ecosystem.resources.grants') }}
  363. </p>
  364. </a>
  365. <a
  366. href="#"
  367. 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"
  368. >
  369. <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">
  370. <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" />
  371. </svg>
  372. <h3 class="text-lg font-bold text-text mb-2">{{ t('ecosystem.resources.community') }}</h3>
  373. <p class="text-text-secondary text-sm">
  374. {{ t('ecosystem.resources.community') }}
  375. </p>
  376. </a>
  377. </div>
  378. </div>
  379. </section>
  380. </div>
  381. </template>
  382. <style scoped>
  383. /* 添加一些额外的动画效果 */
  384. .hover\:transform:hover {
  385. transform: translateY(-5px);
  386. }
  387. </style>