HomeView.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <template>
  2. <div class="min-h-screen bg-gray-50">
  3. <!-- Header Navigation -->
  4. <header class="bg-white border-b">
  5. <div class="flex items-center justify-between px-4 py-2">
  6. <a href="#/" class="flex items-center space-x-2">
  7. <div class="text-blue-600">
  8. <div class="w-8 h-8">
  9. <div class="w-full h-full" />
  10. </div>
  11. </div>
  12. <span class="text-xl font-medium">ProductName</span>
  13. </a>
  14. <div class="flex items-center space-x-4">
  15. <a href="#/about" class="text-gray-600 hover:text-blue-600">关于我们</a>
  16. <a href="#/services" class="text-gray-600 hover:text-blue-600">服务</a>
  17. <a href="#/contact" class="text-gray-600 hover:text-blue-600">联系我们</a>
  18. <a href="#/login" class="text-gray-600 hover:text-blue-600">登录/注册</a>
  19. </div>
  20. </div>
  21. </header>
  22. <!-- Carousel -->
  23. <div class="relative">
  24. <div class="carousel w-full h-96 overflow-hidden">
  25. <div class="carousel-item relative w-full">
  26. <img src="@/assets/img/upload_view.png" class="w-full h-full object-cover" alt="Image 1" />
  27. <div class="absolute inset-0 bg-black bg-opacity-50 flex items-center justify-center text-white">
  28. <p class="text-2xl font-bold">欢迎来到我们的平台</p>
  29. </div>
  30. </div>
  31. <div class="carousel-item relative w-full">
  32. <img src="@/assets/img/prompt_view.png" class="w-full h-full object-cover" alt="Image 2" />
  33. <div class="absolute inset-0 bg-black bg-opacity-50 flex items-center justify-center text-white">
  34. <p class="text-2xl font-bold">高效的服务体验</p>
  35. </div>
  36. </div>
  37. <div class="carousel-item relative w-full">
  38. <img src="@/assets/img/KT_view.png" class="w-full h-full object-cover" alt="Image 3" />
  39. <div class="absolute inset-0 bg-black bg-opacity-50 flex items-center justify-center text-white">
  40. <p class="text-2xl font-bold">优质的产品支持</p>
  41. </div>
  42. </div>
  43. </div>
  44. <button class="absolute left-0 top-1/2 transform -translate-y-1/2 bg-white rounded-full p-2" @click="prevSlide">
  45. <ChevronLeft class="w-6 h-6" />
  46. </button>
  47. <button class="absolute right-0 top-1/2 transform -translate-y-1/2 bg-white rounded-full p-2" @click="nextSlide">
  48. <ChevronRight class="w-6 h-6" />
  49. </button>
  50. </div>
  51. <!-- Featured Services -->
  52. <section class="py-12 bg-white">
  53. <div class="container mx-auto px-4">
  54. <h2 class="text-3xl font-bold text-center mb-8">特色服务</h2>
  55. <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
  56. <div class="bg-gray-100 rounded-lg p-6 text-center cursor-pointer" @click="goToServiceDetail">
  57. <ServiceIcon class="mx-auto mb-4" />
  58. <h3 class="text-xl font-medium">服务1</h3>
  59. <p class="text-gray-500">简短介绍服务1</p>
  60. </div>
  61. <div class="bg-gray-100 rounded-lg p-6 text-center cursor-pointer" @click="goToServiceDetail">
  62. <ServiceIcon class="mx-auto mb-4" />
  63. <h3 class="text-xl font-medium">服务2</h3>
  64. <p class="text-gray-500">简短介绍服务2</p>
  65. </div>
  66. <div class="bg-gray-100 rounded-lg p-6 text-center cursor-pointer" @click="goToServiceDetail">
  67. <ServiceIcon class="mx-auto mb-4" />
  68. <h3 class="text-xl font-medium">服务3</h3>
  69. <p class="text-gray-500">简短介绍服务3</p>
  70. </div>
  71. </div>
  72. </div>
  73. </section>
  74. <!-- Recommended Content -->
  75. <section class="py-12 bg-gray-100">
  76. <div class="container mx-auto px-4">
  77. <h2 class="text-3xl font-bold text-center mb-8">推荐内容</h2>
  78. <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
  79. <div class="bg-white rounded-lg p-6 shadow-sm cursor-pointer" @click="goToContentDetail">
  80. <img src="@/assets/img/applied_view.png" class="w-full h-48 object-cover mb-4" alt="Content 1" />
  81. <h3 class="text-xl font-medium">内容1</h3>
  82. <p class="text-gray-500">简短介绍内容1</p>
  83. </div>
  84. <div class="bg-white rounded-lg p-6 shadow-sm cursor-pointer" @click="goToContentDetail">
  85. <img src="@/assets/img/project_view.png" class="w-full h-48 object-cover mb-4" alt="Content 2" />
  86. <h3 class="text-xl font-medium">内容2</h3>
  87. <p class="text-gray-500">简短介绍内容2</p>
  88. </div>
  89. <div class="bg-white rounded-lg p-6 shadow-sm cursor-pointer" @click="goToContentDetail">
  90. <img src="@/assets/img/upload_view.png" class="w-full h-48 object-cover mb-4" alt="Content 3" />
  91. <h3 class="text-xl font-medium">内容3</h3>
  92. <p class="text-gray-500">简短介绍内容3</p>
  93. </div>
  94. </div>
  95. </div>
  96. </section>
  97. <!-- Footer -->
  98. <footer class="bg-gray-800 text-white py-8">
  99. <div class="container mx-auto px-4">
  100. <div class="grid grid-cols-1 md:grid-cols-3 gap-8">
  101. <div>
  102. <h3 class="text-xl font-bold mb-4">关于我们</h3>
  103. <p>我们是一家致力于提供优质服务的公司。</p>
  104. </div>
  105. <div>
  106. <h3 class="text-xl font-bold mb-4">联系我们</h3>
  107. <p>邮箱: info@example.com</p>
  108. <p>电话: +123 456 7890</p>
  109. </div>
  110. <div>
  111. <h3 class="text-xl font-bold mb-4">社交媒体</h3>
  112. <a href="#" class="block mb-2">Facebook</a>
  113. <a href="#" class="block mb-2">Twitter</a>
  114. <a href="#" class="block">LinkedIn</a>
  115. </div>
  116. </div>
  117. <div class="mt-8 text-center">
  118. <p>版权所有 &copy; {{ new Date().getFullYear() }} ProductName. 保留所有权利.</p>
  119. </div>
  120. </div>
  121. </footer>
  122. </div>
  123. </template>
  124. <script setup>
  125. import {
  126. ChevronLeft, ChevronRight, ServiceIcon
  127. } from 'lucide-vue-next'
  128. import { useRouter } from 'vue-router'
  129. const router = useRouter()
  130. let currentSlide = 0
  131. const slides = document.querySelectorAll('.carousel-item')
  132. function nextSlide() {
  133. slides[currentSlide].classList.remove('active')
  134. currentSlide = (currentSlide + 1) % slides.length
  135. slides[currentSlide].classList.add('active')
  136. }
  137. function prevSlide() {
  138. slides[currentSlide].classList.remove('active')
  139. currentSlide = (currentSlide - 1 + slides.length) % slides.length
  140. slides[currentSlide].classList.add('active')
  141. }
  142. function goToServiceDetail() {
  143. router.push('/service-detail')
  144. }
  145. function goToContentDetail() {
  146. router.push('/content-detail')
  147. }
  148. </script>
  149. <style scoped>
  150. .carousel-item {
  151. display: none;
  152. }
  153. .carousel-item.active {
  154. display: block;
  155. }
  156. </style>