TopHeader.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <script setup>
  2. const porps = defineProps({
  3. headerClass: {
  4. type: String,
  5. default: 'header-1'
  6. }
  7. })
  8. const { t, locale, setLocale } = useI18n()
  9. const { $$t } = useStoreI18n()
  10. const showLang = ref(false)
  11. const langList = ref([
  12. { label: $$t('chinese'), value: 'zh' },
  13. { label: $$t('english'), value: 'en' }
  14. ])
  15. const switchLanguage = (lang) => {
  16. setLocale(lang)
  17. showLang.value = !showLang.value
  18. }
  19. const langLabel = computed(() => {
  20. return langList.value.find((item) => item.value == locale.value)?.label
  21. })
  22. </script>
  23. <template>
  24. <header id="header-sticky" :class="headerClass">
  25. <div class="container-fluid">
  26. <div class="mega-menu-wrapper">
  27. <div class="header-main style-2">
  28. <div class="header-left zindex">
  29. <div class="logo">
  30. <NuxtLink to="/" class="header-logo">
  31. <img src="/picture/logo.svg" alt="logo-img" />
  32. </NuxtLink>
  33. </div>
  34. <div class="language d-flex justify-content-start align-items-center">
  35. <img src="/picture/grid.svg" alt="img" class="me-2" />
  36. <div class="w-100 d-flex justify-content-between align-items-center">
  37. {{ langLabel }}
  38. <i
  39. :class="`fas cursor-pointer ${showLang ? 'fa-angle-up' : 'fa-angle-down'}`"
  40. @click="showLang = !showLang"
  41. ></i>
  42. </div>
  43. <ul v-show="showLang" style="position: absolute" class="suLangangbmenu">
  44. <li
  45. v-for="(item, index) in langList"
  46. :key="item.value"
  47. :class="`${locale == item.value ? 'liactive' : ''}`"
  48. @click="switchLanguage(item.value)"
  49. >
  50. {{ item.label }}
  51. </li>
  52. </ul>
  53. </div>
  54. </div>
  55. <div class="header-right d-flex justify-content-end align-items-center">
  56. <div class="mean__menu-wrapper">
  57. <div class="main-menu">
  58. <nav id="mobile-menu">
  59. <ul>
  60. <li class="has-dropdown active menu-thumb">
  61. <a href="/">
  62. {{ t('home') }}
  63. <!-- <i class="fas fa-angle-down"></i> -->
  64. </a>
  65. <!-- <ul class="submenu has-homemenu">
  66. <li>
  67. <div class="homemenu-items">
  68. <div class="homemenu">
  69. <div class="homemenu-thumb">
  70. <img src="/picture/home-1.jpg" alt="img" />
  71. <div class="demo-button">
  72. <a href="/" class="theme-btn">
  73. <span>{{ t('multiPage') }}</span>
  74. </a>
  75. <a href="/index-one" class="theme-btn">
  76. <span>{{ t('onePage') }}</span>
  77. </a>
  78. </div>
  79. </div>
  80. <div class="homemenu-content text-center">
  81. <h4 class="homemenu-title">{{ t('home01') }}</h4>
  82. </div>
  83. </div>
  84. <div class="homemenu">
  85. <div class="homemenu-thumb mb-15">
  86. <img src="/picture/home-2.jpg" alt="img" />
  87. <div class="demo-button">
  88. <a href="/index-2" class="theme-btn">
  89. <span>{{ t('multiPage') }}</span>
  90. </a>
  91. <a href="/index-two" class="theme-btn">
  92. <span>{{ t('onePage') }}</span>
  93. </a>
  94. </div>
  95. </div>
  96. <div class="homemenu-content text-center">
  97. <h4 class="homemenu-title">{{ t('home02') }}</h4>
  98. </div>
  99. </div>
  100. <div class="homemenu">
  101. <div class="homemenu-thumb mb-15">
  102. <img src="/picture/home-3.jpg" alt="img" />
  103. <div class="demo-button">
  104. <a href="/index-3" class="theme-btn">
  105. <span>{{ t('multiPage') }}</span>
  106. </a>
  107. <a href="/index-three" class="theme-btn">
  108. <span>{{ t('onePage') }}</span>
  109. </a>
  110. </div>
  111. </div>
  112. <div class="homemenu-content text-center">
  113. <h4 class="homemenu-title">{{ t('home03') }}</h4>
  114. </div>
  115. </div>
  116. <div class="homemenu">
  117. <div class="homemenu-thumb mb-15">
  118. <img src="/picture/home-4.jpg" alt="img" />
  119. <div class="demo-button">
  120. <a href="/index-4" class="theme-btn">
  121. <span>{{ t('multiPage') }}</span>
  122. </a>
  123. <a href="/index-four" class="theme-btn">
  124. <span>{{ t('onePage') }}</span>
  125. </a>
  126. </div>
  127. </div>
  128. <div class="homemenu-content text-center">
  129. <h4 class="homemenu-title">{{ t('home04') }}</h4>
  130. </div>
  131. </div>
  132. </div>
  133. </li>
  134. </ul> -->
  135. </li>
  136. <!-- <li>
  137. <a href="/about">{{ t('aboutUs') }}</a>
  138. <a href="javascript:(0)">{{ t('aboutUs') }}</a>
  139. </li>
  140. <li>
  141. <a href="/program/carousel">{{ t('programs') }}</a>
  142. <a href="javascript:(0)">{{ t('programs') }}</a>
  143. </li> -->
  144. <li>
  145. <a href="/contact">{{ t('contactUs') }}</a>
  146. <!-- <a href="javascript:(0)">{{ t('contactUs') }}</a> -->
  147. </li>
  148. </ul>
  149. </nav>
  150. </div>
  151. </div>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. </header>
  157. </template>
  158. <style lang="css" scoped>
  159. .zindex {
  160. position: relative;
  161. z-index: 100;
  162. }
  163. select {
  164. outline: none;
  165. }
  166. option {
  167. outline: none;
  168. }
  169. .language {
  170. width: 160px;
  171. border-radius: 8px;
  172. border: 1px solid rgba(92, 112, 126, 0.3);
  173. padding: 10px 16px;
  174. position: relative;
  175. z-index: 99;
  176. }
  177. .suLangangbmenu {
  178. position: absolute;
  179. top: 100%;
  180. z-index: 11;
  181. width: 100%;
  182. background: var(--white);
  183. position: absolute;
  184. color: var(--header);
  185. box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  186. -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  187. -moz-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  188. inset-inline-start: 0;
  189. transform-origin: top center;
  190. transform: translateY(10px);
  191. transition: all 0.4sease-in-out;
  192. }
  193. .suLangangbmenu {
  194. position: absolute;
  195. top: 100%;
  196. z-index: 11;
  197. width: 100%;
  198. background: var(--white);
  199. position: absolute;
  200. color: var(--header);
  201. box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  202. -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  203. -moz-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  204. inset-inline-start: 0;
  205. transform-origin: top center;
  206. transform: translateY(10px);
  207. transition: all 0.4sease-in-out;
  208. }
  209. .suLangangbmenu li {
  210. width: 100%;
  211. box-sizing: border-box;
  212. }
  213. .suLangangbmenu li {
  214. font-size: 16px;
  215. font-weight: 600;
  216. color: var(--header);
  217. padding: 6px 25px;
  218. width: 100%;
  219. }
  220. .suLangangbmenu li:hover {
  221. background: var(--theme);
  222. color: var(--white) !important;
  223. }
  224. .liactive {
  225. background: var(--theme);
  226. color: var(--white) !important;
  227. }
  228. </style>