TopHeader.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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 class="header-button">
  153. <NuxtLink
  154. to="https://voovmeeting.com/download-center.html"
  155. target="_blank"
  156. class="theme-btn"
  157. >
  158. <span>
  159. {{ t('dowloadWeMeet') }}
  160. <img src="/public/picture/dowload.svg" alt="" />
  161. </span>
  162. </NuxtLink>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </header>
  169. </template>
  170. <style lang="css" scoped>
  171. .zindex {
  172. position: relative;
  173. z-index: 100;
  174. }
  175. select {
  176. outline: none;
  177. }
  178. option {
  179. outline: none;
  180. }
  181. .language {
  182. width: 160px;
  183. border-radius: 8px;
  184. border: 1px solid rgba(92, 112, 126, 0.3);
  185. padding: 10px 16px;
  186. position: relative;
  187. z-index: 99;
  188. }
  189. .suLangangbmenu {
  190. position: absolute;
  191. top: 100%;
  192. z-index: 11;
  193. width: 100%;
  194. background: var(--white);
  195. position: absolute;
  196. color: var(--header);
  197. box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  198. -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  199. -moz-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  200. inset-inline-start: 0;
  201. transform-origin: top center;
  202. transform: translateY(10px);
  203. transition: all 0.4sease-in-out;
  204. }
  205. .suLangangbmenu {
  206. position: absolute;
  207. top: 100%;
  208. z-index: 11;
  209. width: 100%;
  210. background: var(--white);
  211. position: absolute;
  212. color: var(--header);
  213. box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  214. -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  215. -moz-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
  216. inset-inline-start: 0;
  217. transform-origin: top center;
  218. transform: translateY(10px);
  219. transition: all 0.4sease-in-out;
  220. }
  221. .suLangangbmenu li {
  222. width: 100%;
  223. box-sizing: border-box;
  224. }
  225. .suLangangbmenu li {
  226. font-size: 16px;
  227. font-weight: 600;
  228. color: var(--header);
  229. padding: 6px 25px;
  230. width: 100%;
  231. }
  232. .suLangangbmenu li:hover {
  233. background: var(--theme);
  234. color: var(--white) !important;
  235. }
  236. .liactive {
  237. background: var(--theme);
  238. color: var(--white) !important;
  239. }
  240. </style>