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.

1444 lines
49 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div
  3. class="NavBar tw-bg-white tw-sticky tw-top-0 tw-left-0 tw-w-full tw-border-0 tw-border-b tw-border-solid tw-border-neutral-200 tw-z-10"
  4. >
  5. <div
  6. class="tw-px-[20px] tw-py-[20px] md:tw-px-[30px] md:tw-py-[24px] xl:tw-px-[60px] xl:tw-pt-[22px] xl:tw-pb-[14px] xl:tw-max-w-[1366px] xl:tw-mx-auto"
  7. >
  8. <div class="tw-flex tw-justify-between tw-items-center xl:tw-h-[48px]">
  9. <div
  10. class="tw-flex tw-items-center tw-flex-grow xl:tw-grid xl:tw-grid-cols-[188px_auto] xl:tw-gap-[30px] xl:tw-basis-[70%]"
  11. >
  12. <img
  13. class="tw-mr-[20px] md:tw-mr-[40px] xl:tw-hidden"
  14. :src="require('@/assets/svg/menu.svg')"
  15. @click="clickMenu"
  16. />
  17. <nuxt-link
  18. :to="localePath('/')"
  19. class="tw-block tw-w-[146px] md:tw-w-[188px]"
  20. ><img
  21. :src="require('@/assets/svg/logo_v2.svg')"
  22. class="tw-w-full"
  23. alt=""
  24. />
  25. </nuxt-link>
  26. <!-- <v-card class="tw-hidden flex-row rounded-lg py-1 px-4 xl:tw-flex xl:tw-ml-[30px]" outlined
  27. v-if="showNavSearch" @click="bigSearch = true">
  28. <v-card flat color="transparent" :width="$vuetify.breakpoint.mdAndDown ? '70px' : '300px'"
  29. class="my-auto neutrals--text text--darken-3 text-size-14">
  30. {{
  31. this.$vuetify.breakpoint.mdAndDown
  32. ? $t("Looking ?")
  33. : $t("What are you looking for?")
  34. }}
  35. </v-card>
  36. <svg width="24" height="24" class="tw-my-auto" shape-rendering="geometricPrecision">
  37. <image xlink:href="@/assets/svg/icon-search-small.svg" src="@/assets/svg/icon-search-small.svg" width="24"
  38. height="24" />
  39. </svg>
  40. </v-card> -->
  41. <div v-if="showNavSearch" class="tw-w-full tw-hidden xl:tw-block">
  42. <Search
  43. v-if="showNavSearch"
  44. :exhibitionsCategories="exhibitionsCategories"
  45. :exhibitionsLocations="exhibitionsLocations"
  46. :exhibitionsSearchs="exhibitionsSearchs"
  47. :servicesLocations="servicesLocations"
  48. :servicesSearchs="servicesSearchs"
  49. @loaading="isPageLoading = $event"
  50. />
  51. </div>
  52. </div>
  53. <div
  54. class="tw-basis-[46%] md:tw-basis-[66%] xl:tw-basis-[43%] xl:tw-ml-[56px]"
  55. v-click-outside="clickOutSide"
  56. >
  57. <div class="tw-flex tw-justify-end xl:tw-hidden">
  58. <div class="tw-flex tw-justify-center tw-items-center">
  59. <v-img
  60. max-width="24"
  61. class="mr-4 float-left"
  62. contain
  63. :src="require('@/assets/svg/search-black.svg')"
  64. @click="clickSearch"
  65. ></v-img>
  66. </div>
  67. <!--v-img
  68. max-width="24"
  69. class="mr-4 hidden-md-and-up"
  70. contain
  71. :src="require('@/assets/svg/shopping-bag.svg')"
  72. ></v-img-->
  73. <span max-width="28px" v-if="$auth.$state.loggedIn">
  74. <v-menu
  75. offset-y
  76. bottom
  77. left
  78. nudge-bottom="20"
  79. class="neutrals darken-1 mt-4 on-top"
  80. >
  81. <template v-slot:activator="{ on, attrs }">
  82. <v-btn
  83. v-bind="attrs"
  84. v-on="on"
  85. @click="UserInfoPopup = true"
  86. v-if="$auth.$storage.getUniversal('userPicture')"
  87. icon
  88. width="28px"
  89. height="28px"
  90. class="ms-2"
  91. >
  92. <v-img
  93. :src="userPicture"
  94. max-width="28px"
  95. max-height="28px"
  96. class="rounded-circle"
  97. :key="userPicture"
  98. ></v-img>
  99. </v-btn>
  100. <v-btn
  101. v-bind="attrs"
  102. v-on="on"
  103. @click="UserInfoPopup = true"
  104. v-else-if="
  105. $auth.$storage.getUniversal('userLastName') != undefined
  106. "
  107. fab
  108. class="user-no-picture-border mx-2 tw-shadow-none"
  109. color="primary"
  110. width="28"
  111. height="28"
  112. >
  113. <span class="tw-text-[16px]">
  114. {{ $auth.$storage.getUniversal("userLastName") }}
  115. </span>
  116. </v-btn>
  117. <div
  118. v-else
  119. class="tw-bg-primary-default tw-cursor-pointer tw-rounded-[12px] tw-whitespace-nowrap tw-block tw-text-white tw-px-[16px] tw-py-[9px] tw-whitespace-nowrap tw-text-[10px] tw-font-medium tw-transition-all tw-duration-200 tw-ease-in-out hover:tw-bg-primary-light"
  120. @click="toUser"
  121. >
  122. {{ $t("Log in/Sign up") }}
  123. </div>
  124. </template>
  125. <div class="neutrals darken-1 tw-hidden xl:tw-block">
  126. <v-btn
  127. :to="
  128. localePath(
  129. $auth.$storage.getUniversal('authtoken')
  130. ? '/user'
  131. : ''
  132. )
  133. "
  134. class="neutrals darken-1 neutrals--text text--darken-5 no-text-transform elevation-0 text-size-14"
  135. >
  136. <unicon
  137. class="mr-3"
  138. name="user"
  139. height="20px"
  140. fill="neutrals-darken5"
  141. />{{ $t("Profile") }}
  142. </v-btn>
  143. <v-btn
  144. @click="logout"
  145. class="neutrals darken-1 warning--text no-text-transform elevation-0"
  146. >
  147. <unicon
  148. class="mr-3 text-size-14"
  149. name="signout"
  150. height="20px"
  151. fill="#EF5A5A"
  152. />{{ $t("Logout") }}
  153. </v-btn>
  154. </div>
  155. <!-- <v-list class="neutrals darken-1 tw-hidden xl:tw-block">
  156. <v-list-item>
  157. <v-btn :to="
  158. localePath(
  159. $auth.$storage.getUniversal('authtoken')
  160. ? `/user/${
  161. $auth.$storage.getUniversal('authtoken').user_id
  162. }`
  163. : ''
  164. )
  165. "
  166. class="neutrals darken-1 neutrals--text text--darken-5 no-text-transform elevation-0 text-size-14">
  167. <unicon class="mr-3" name="user" height="20px" fill="neutrals-darken5" />{{ $t("Profile") }}
  168. </v-btn>
  169. </v-list-item>
  170. <v-list-item>
  171. <v-btn @click="logout" class="neutrals darken-1 warning--text no-text-transform elevation-0">
  172. <unicon class="mr-3 text-size-14" name="signout" height="20px" fill="#EF5A5A" />{{ $t("Logout") }}
  173. </v-btn>
  174. </v-list-item>
  175. </v-list> -->
  176. </v-menu>
  177. </span>
  178. <span v-else>
  179. <nuxt-link :to="localePath('/user')">
  180. <img class="" :src="require('@/assets/svg/profile.svg')" />
  181. </nuxt-link>
  182. </span>
  183. </div>
  184. <div
  185. class="tw-hidden xl:tw-flex xl:tw-justify-end xl:tw-items-center"
  186. >
  187. <v-btn
  188. v-if="$i18n.locale == 'zh-tw'"
  189. depressed
  190. class="remove-upper tw-mx-0 tw-px-0 tw-bg-transparent tw-text-primary-default"
  191. href="https://medium.com/showeasy"
  192. target="_blank"
  193. >
  194. {{ $t("Blog") }}
  195. </v-btn>
  196. <v-btn
  197. v-else
  198. depressed
  199. class="remove-upper tw-mx-0 tw-px-0 tw-bg-transparent tw-text-primary-default"
  200. href="https://medium.com/showeasy-eng"
  201. target="_blank"
  202. >
  203. {{ $t("Blog") }}
  204. </v-btn>
  205. <div
  206. :class="[
  207. 'changeLang tw-relative tw-justify-center tw-items-center',
  208. disabled ? 'disabled' : '',
  209. disabled ? 'tw-text-neutrals-300' : 'tw-text-black',
  210. ]"
  211. >
  212. <div
  213. :class="[
  214. 'tw-flex tw-items-center tw-mx-[12px] tw-cursor-pointer tw-py-[8px] tw-rounded-[4px]',
  215. ]"
  216. >
  217. <div class="tw-body-3 tw-mr-[15px] t16 tw-font-normal">
  218. {{ $i18n.localeProperties["title"] }}
  219. </div>
  220. <img v-if="disabled" src="@/assets/svg/down-arrow-disabled.svg" />
  221. <img v-else src="@/assets/svg/down-arrow.svg" />
  222. </div>
  223. <transition name="lang">
  224. <div
  225. v-show="langShow"
  226. class="tw-rounded-[10px] tw-bg-white tw-px-[12px] tw-py-[8px] tw-absolute tw-top-[40px] tw-w-max tw-left-0 tw-z-10 tw-shadow-[0_2px_20px_rgba(0,0,0,0.15)]"
  227. >
  228. <!-- <button
  229. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[25px] tw-px-[12px] tw-py-[11px] tw-w-full tw-bg-white hover:tw-bg-primary-pale hover:tw-text-primary-1 hover:tw-rounded-[10px]"
  230. @click="Currencystatus('USD')"
  231. >
  232. <div class="tw-body-4 tw-font-bold" value="USD">USD</div>
  233. <div class="tw-body-4 tw-text-left">{{ $t("U.S. Dollar") }}</div>
  234. </button> -->
  235. <nuxt-link v-for="(lang, idx) in this.$i18n.locales" :key="idx"
  236. class="tw-rounded-[10px] text-decoration-none tw-body-3 tw-w-full"
  237. :to="switchLocalePath(lang.code)"
  238. >
  239. <div class="tw-px-[12px] tw-py-[11px] tw-w-full tw-bg-white tw-font-normal tw-text-black hover:tw-bg-primary-pale hover:tw-text-primary-1 hover:tw-rounded-[10px]">
  240. {{ lang.text }}
  241. </div>
  242. </nuxt-link>
  243. </div>
  244. </transition>
  245. </div>
  246. <!-- <v-menu offset-y class="on-top">
  247. <template v-slot:activator="{ on, attrs }">
  248. <v-btn
  249. v-bind="attrs"
  250. v-on="on"
  251. depressed
  252. class="white neutrals--text text--darken-5 no-text-transform tw-body-3 tw-font-normal"
  253. >
  254. {{ $i18n.localeProperties["title"] }}
  255. <img src="@/assets/svg/down-arrow.svg" alt="" class="ml-1" />
  256. </v-btn>
  257. </template>
  258. <v-list class="tw-shadow-[0_1px_6px_0_rgba(0,0,0,0.4)]">
  259. <v-list-item
  260. v-for="(lang, idx) in this.$i18n.locales"
  261. :key="idx"
  262. class="tw-mx-auto"
  263. >
  264. <nuxt-link
  265. :to="switchLocalePath(lang.code)"
  266. class="tw-rounded-[10px] tw-text-base-primary text-decoration-none tw-body-3 tw-font-normal tw-w-full tw-px-[12px] tw-py-[8px] hover:tw-bg-primary-3 hover:tw-text-primary-1"
  267. >
  268. {{ lang.text }}
  269. </nuxt-link>
  270. </v-list-item>
  271. </v-list>
  272. </v-menu> -->
  273. <changeCurrency></changeCurrency>
  274. <nuxt-link
  275. class="tw-px-[10px] tw-mr-[10px] hover:tw-bg-primary-3 active:tw-bg-primary-3"
  276. :to="localePath('/FAQ')"
  277. ><img src="~/assets/svg/faq.svg" alt=""
  278. /></nuxt-link>
  279. <!-- <v-btn
  280. depressed
  281. class="white tw-mr-[16px]"
  282. :to="localePath('/FAQ')"
  283. >
  284. <svg width="20" height="20">
  285. <image
  286. xlink:href="@/assets/svg/help-circle.svg"
  287. src="@/assets/svg/help-circle.svg"
  288. width="20"
  289. height="20"
  290. />
  291. </svg>
  292. </v-btn> -->
  293. <!-- <v-btn depressed class="white" small>
  294. <img src="@/assets/svg/shopping-bag.svg" alt="" />
  295. </v-btn> -->
  296. <div v-if="$auth.$state.loggedIn" class="tw-relative">
  297. <div @click="UserInfoPopup = true"
  298. v-if="$auth.$storage.getUniversal('userPicture')"
  299. class="ms-2 tw-bg-primary-default tw-w-[28px] tw-h-[28px] tw-rounded-[28px]">
  300. <v-img v-if="userPicture"
  301. :src="userPicture"
  302. class="tw-rounded-[28px] tw-w-[28px] tw-h-[28px] tw-flex tw-items-center tw-cursor-pointer"
  303. alt=""
  304. />
  305. </div>
  306. <v-btn
  307. @click="UserInfoPopup = true"
  308. v-else-if="
  309. $auth.$storage.getUniversal('userLastName') != undefined
  310. "
  311. fab
  312. :class="['mx-2 tw-shadow-none tw-bg-primary-default',($auth.$storage.getUniversal('userLastName')!=undefined && $auth.$storage.getUniversal('userLastName')
  313. && $auth.$storage.getUniversal('userLastName').length>1)?'tw-w-[40px] tw-rounded-[20px]':'tw-w-[28px] tw-rounded-[28px]']"
  314. color="primary"
  315. height="28"
  316. >
  317. <span :class="[($auth.$storage.getUniversal('isLetter')!=undefined && $auth.$storage.getUniversal('isLetter')==false)?'tw-text-[16px]':'tw-text-[12px]']">
  318. {{ $auth.$storage.getUniversal("userLastName") }}
  319. </span>
  320. </v-btn>
  321. <div
  322. v-else
  323. class="tw-bg-primary-default tw-cursor-pointer tw-rounded-[12px] tw-whitespace-nowrap tw-block tw-text-white tw-px-[16px] tw-py-[9px] tw-whitespace-nowrap tw-text-[10px] tw-font-medium tw-transition-all tw-duration-200 tw-ease-in-out hover:tw-bg-primary-light"
  324. @click="toUser"
  325. >
  326. {{ $t("Log in/Sign up") }}
  327. </div>
  328. <div
  329. :class="[
  330. 'tw-grid-cols-1 tw-gap-[14px] tw-px-[10px] tw-py-[8px] tw-bg-white tw-rounded-[10px] tw-w-max tw-absolute tw-right-0 tw-top-[40px] tw-z-50 tw-shadow-[0_1px_4px_0_rgba(0,0,0,0.3)]',
  331. UserInfoPopup && width >= 1366 ? 'tw-grid' : 'tw-hidden',
  332. ]"
  333. >
  334. <nuxt-link
  335. :to="
  336. localePath('/user/editPersonalInfo')"
  337. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  338. @click.native="UserInfoPopup = false"
  339. ><img src="~/assets/svg/profile.svg" alt="" />
  340. <div class="tw-head-body tw-text-base-primary">
  341. {{ $t("userProfile.profile") }}
  342. </div>
  343. </nuxt-link>
  344. <nuxt-link :to="localePath('/user/myBooking')"
  345. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  346. @click.native="UserInfoPopup = false"
  347. ><img src="~/assets/svg/bookings.svg" alt="" />
  348. <div class="tw-head-body tw-text-base-primary">
  349. {{ $t('My Bookings')}}
  350. </div>
  351. </nuxt-link>
  352. <nuxt-link
  353. :to="localePath('/user/saveExhibition')"
  354. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  355. @click.native="UserInfoPopup = false"
  356. ><img src="~/assets/svg/saveExhibition.svg" alt="" />
  357. <div class="tw-head-body tw-text-base-primary">
  358. {{ $t("userProfile.savedExhibitions") }}
  359. </div>
  360. </nuxt-link>
  361. <!-- <nuxt-link :to="localePath('/user/saveService')"
  362. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  363. @click.native="UserInfoPopup = false"><img src="~/assets/svg/saveService.svg" alt="" />
  364. <div class="tw-head-body tw-text-base-primary">
  365. {{ $t("userProfile.savedServices") }}
  366. </div>
  367. </nuxt-link> -->
  368. <nuxt-link
  369. :to="localePath('/user/companyInfo')"
  370. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  371. @click.native="UserInfoPopup = false"
  372. ><img src="~/assets/svg/companyInfo.svg" alt="" />
  373. <div class="tw-head-body tw-text-base-primary">
  374. {{ $t("userProfile.companyInfo") }}
  375. </div>
  376. </nuxt-link>
  377. <nuxt-link
  378. :to="localePath('/user/contactInfo')"
  379. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  380. @click.native="UserInfoPopup = false"
  381. ><img src="~/assets/svg/contactInfo.svg" alt="" />
  382. <div class="tw-head-body tw-text-base-primary">
  383. {{ $t("Contact Info") }}
  384. </div>
  385. </nuxt-link>
  386. <nuxt-link
  387. :to="localePath('/user/setting')"
  388. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  389. @click.native="UserInfoPopup = false"
  390. ><img src="~/assets/svg/profile_setting.svg" alt="" />
  391. <div class="tw-head-body tw-text-base-primary">
  392. {{ $t("userProfile.setting") }}
  393. </div>
  394. </nuxt-link>
  395. <div
  396. class="tw-border tw-border-t tw-border-solid tw-border-neutral-200"
  397. ></div>
  398. <button
  399. class="tw-grid tw-grid-cols-[20px_auto] tw-gap-[10px] tw-px-[10px] tw-py-[8px]"
  400. @click="logout"
  401. >
  402. <img src="~/assets/svg/logout.svg" alt="" />
  403. <div
  404. class="tw-flex tw-head-body tw-text-error-default tw-justify-start"
  405. >
  406. {{ $t("userProfile.logout") }}
  407. </div>
  408. </button>
  409. </div>
  410. </div>
  411. <div v-else>
  412. <div
  413. @click="toUser"
  414. class="tw-text-[14px] tw-cursor-pointer tw-whitespace-nowrap tw-text-white tw-bg-primary-default tw-px-[16px] tw-py-[9px] tw-rounded-[12px] hover:tw-bg-primary-light"
  415. >
  416. {{ $t("Log in/Sign up") }}</div
  417. >
  418. </div>
  419. </div>
  420. </div>
  421. </div>
  422. <div
  423. ref="dropdown"
  424. :class="[
  425. 'navBar-row2 tw-relative tw-hidden xl:tw-grid xl:tw-mt-[35px] tw-transition-all tw-duration-200 tw-delay-75 tw-ease-linear',
  426. ]"
  427. >
  428. <div
  429. class="customMenuLink tw-relative tw-flex tw-justify-start tw-items-center tw-z-3"
  430. @mouseleave="exhibitionActiveIndex = 0"
  431. >
  432. <a
  433. :href="localePath('/exhibition')"
  434. @click="isPageLoading = true"
  435. :class="[
  436. 'tw-text-black tw-body-3 tw-font-normal hover:tw-text-primary-default',
  437. $route.path.match('\/exhibition')
  438. ? 'tw-text-primary-default'
  439. : '',
  440. ]"
  441. >
  442. {{ $t("Exhibition") }}</a
  443. >
  444. <div v-if="exhibitionsCategoryList.length>0"
  445. class="customDropMenu exhibition tw-bg-white tw-p-[20px] tw-rounded-[10px] tw-w-max tw-absolute tw-top-[36px] tw-left-0 tw-mt-[10px] tw-overflow-hidden tw-shadow-[0_1px_6px_0_rgba(0,0,0,0.4)]"
  446. >
  447. <div
  448. class="tw-relative tw-grid tw-grid-cols-2 tw-max-w-[700px] tw-min-h-[110px] tw-overflow-hidden"
  449. >
  450. <div
  451. class="tw-list-none tw-overflow-x-hidden tw-overflow-y-auto tw-h-auto tw-break-inside-avoid tw-grid tw-grid-cols-1 tw-gap-[10px]"
  452. >
  453. <div
  454. class="tw-list-none tw-mr-[20px]"
  455. v-for="(item, index) in exhibitionsCategoryList"
  456. :key="index"
  457. @mouseover="exhibitionActiveIndex = index"
  458. >
  459. <div
  460. :class="[
  461. 'exhibitionDropdownLink tw-grid tw-grid-cols-[30px_auto] tw-gap-[10px] tw-body-4 tw-font-normal hover:tw-text-primary-default',
  462. exhibitionActiveIndex == index
  463. ? 'tw-text-primary-default active'
  464. : 'tw-text-neutrals-900',
  465. ]"
  466. >
  467. <img
  468. v-if="exhibitionListIcon[index] !== undefined"
  469. :src="
  470. require(`@/assets/img/CategoryIcon/${exhibitionListIcon[index]}.png`)
  471. "
  472. /><span class="tw-flex tw-items-center tw-min-w-[322px]">{{
  473. $t(item.CategoryName)
  474. }}</span>
  475. </div>
  476. </div>
  477. </div>
  478. <div class="tw-w-full tw-overflow-x-hidden tw-overflow-y-auto" v-if="exhibitionsCategoryList.length>0">
  479. <ul
  480. class="tw-list-none tw-grid tw-grid-cols-1 tw-gap-[20px] tw-px-[20px]"
  481. >
  482. <li class="tw-list-none">
  483. <a
  484. :href="
  485. localePath(
  486. `/exhibition?category=${exhibitionsCategoryList[exhibitionActiveIndex].CategoryID}`
  487. )
  488. "
  489. class="tw-block tw-body-4 tw-font-normal tw-text-neutral-800 hover:tw-text-primary-default"
  490. >{{ $t("All") }}</a
  491. >
  492. </li>
  493. <template v-if="exhibitionsCategoryList[
  494. exhibitionActiveIndex
  495. ].SubCategoryList && exhibitionsCategoryList[
  496. exhibitionActiveIndex
  497. ].SubCategoryList.length>0">
  498. <li
  499. v-for="(sub, index) in exhibitionsCategoryList[
  500. exhibitionActiveIndex
  501. ].SubCategoryList"
  502. :key="index"
  503. class="tw-list-none"
  504. >
  505. <a
  506. :href="localePath(`/exhibition?subcategory=${sub.CategoryID}`)"
  507. class="tw-block tw-min-h-[30px] tw-body-4 tw-font-normal tw-min-w-[230px] tw-text-neutral-800 hover:tw-text-primary-default"
  508. >{{ sub.CategoryName }}</a
  509. >
  510. </li></template>
  511. </ul>
  512. </div>
  513. </div>
  514. </div>
  515. </div>
  516. <span class="vertical-line"></span>
  517. <div
  518. class="customMenuLink tw-relative tw-flex tw-justify-start tw-items-center tw-z-3"
  519. >
  520. <a
  521. :href="localePath(`/service`)"
  522. :class="[
  523. 'tw-text-black tw-body-3 tw-font-normal hover:tw-text-primary-default',
  524. $route.path.match('\/service') ? 'tw-text-primary-default' : '',
  525. ]"
  526. >
  527. {{ $t("All Services") }}</a
  528. >
  529. <div v-if="serviceCategoryList.length>0"
  530. class="customDropMenu services tw-bg-white tw-p-[20px] tw-rounded-[10px] tw-w-max tw-absolute tw-top-[36px] tw-left-0 tw-mt-[10px] -tw-mb-[60px] tw-shadow-[0_1px_6px_0_rgba(0,0,0,0.4)]"
  531. >
  532. <ul
  533. v-for="(item, index) in serviceCategoryList"
  534. :key="item.CategoryID"
  535. class="tw-list-none tw-mb-0 tw-mr-[40px] tw-h-auto tw-break-inside-avoid"
  536. >
  537. <li class="tw-list-none">
  538. <a
  539. :href="localePath(`/service?category=${item.CategoryID}`)"
  540. class="tw-block tw-mb-[16px] tw-grid tw-grid-cols-[16px_auto] tw-gap-[10px] tw-body-4 tw-font-normal tw-text-primary-default hover:tw-text-primary-default"
  541. >
  542. <svg
  543. width="16"
  544. height="16"
  545. class="tw-my-auto"
  546. shape-rendering="geometricPrecision"
  547. v-if="serviceListIcon[index] !== undefined"
  548. >
  549. <image
  550. :xlink:href="
  551. require(`@/assets/svg/${serviceListIcon[index]}.svg`)
  552. "
  553. :src="
  554. require(`@/assets/svg/${serviceListIcon[index]}.svg`)
  555. "
  556. width="16"
  557. height="16"
  558. />
  559. </svg>
  560. <div v-else></div>
  561. <span>{{ item.CategoryName }}</span>
  562. </a>
  563. <ul
  564. class="tw-list-none tw-grid tw-grid-cols-1 tw-gap-[16px] tw-p-0"
  565. >
  566. <li
  567. v-for="(sub, index) in item.SubCategoryList"
  568. :key="index"
  569. class="tw-list-none"
  570. >
  571. <a
  572. :href="localePath(`/service?subcatg=${sub.CategoryID}`)"
  573. class="tw-block tw-body-4 tw-font-normal tw-text-neutral-800 hover:tw-text-primary-default"
  574. >{{ sub.CategoryName }}</a
  575. >
  576. </li>
  577. </ul>
  578. </li>
  579. <div class="tw-h-[60px]"></div>
  580. </ul>
  581. </div>
  582. </div>
  583. <div
  584. ref="headerSwiper"
  585. class="swiper-container headerService tw-w-full tw-overflow-hidden tw-relative tw-max-w-[1008px] tw-ml-[25px] tw-transition-all tw-duration-200 tw-delay-75 tw-ease-in"
  586. >
  587. <div class="swiper-wrapper">
  588. <div
  589. class="swiper-slide customMenuLink tw-relative tw-justify-start tw-items-center tw-w-auto"
  590. v-for="item in serviceList"
  591. :key="item.id"
  592. >
  593. <a
  594. :href="localePath(`/service?taiwan=${item.id}`)"
  595. class="tw-text-black tw-body-3 tw-font-normal hover:tw-text-primary-default tw-whitespace-nowrap"
  596. >{{ $t(item.name) }}</a
  597. >
  598. <ul v-if="item.SubServiceList && item.SubServiceList.length>0"
  599. class="customDropMenu oneType tw-grid-cols-1 tw-gap-[16px] tw-bg-white tw-p-[20px] tw-rounded-[10px] tw-w-max tw-absolute tw-top-[36px] tw-left-0 tw-mt-[10px] tw-shadow-[0_1px_6px_0_rgba(0,0,0,0.4)]"
  600. >
  601. <li
  602. v-for="(sub, index) in item.SubServiceList"
  603. :key="index"
  604. class="tw-list-none"
  605. >
  606. <a
  607. :href="localePath(`/service?subcatg=${sub.id}`)"
  608. class="tw-block tw-body-4 tw-font-normal tw-text-black hover:tw-text-primary-default"
  609. >{{ sub.name }}</a
  610. >
  611. </li>
  612. </ul>
  613. </div>
  614. </div>
  615. <div
  616. :class="[
  617. 'swiper-button-prev headerService tw-text-black tw-hidden',
  618. headerServiceSwiper
  619. ? 'xl:tw-flex xl:tw-justify-center xl:tw-items-center'
  620. : '',
  621. ]"
  622. ></div>
  623. <div
  624. :class="[
  625. 'swiper-button-next headerService tw-text-black tw-hidden',
  626. headerServiceSwiper
  627. ? 'xl:tw-flex xl:tw-justify-center xl:tw-items-center'
  628. : '',
  629. ]"
  630. ></div>
  631. </div>
  632. </div>
  633. </div>
  634. <Drawer
  635. :serviceCategory.sync="serviceCategoryList"
  636. :exhibitionsCategory.sync="exhibitionsCategoryList"
  637. :serviceListIcon="serviceListIcon"
  638. :exhibitionListIcon="exhibitionListIcon"
  639. @changeLang="changeLang()"
  640. />
  641. <SearchDialog
  642. ref="searchDialog"
  643. :exhibitionsCategoryList="exhibitionsCategoryList"
  644. :exhibitionsLocations="exhibitionsLocations"
  645. :exhibitionListIcon="exhibitionListIcon"
  646. :exhibitionsCategories="exhibitionsCategories"
  647. :servicesLocations="servicesLocations"
  648. :servicesSearchs="servicesSearchs"
  649. :populars="populars"
  650. />
  651. <mobileUserInfoPopup
  652. v-show="width < 1366"
  653. :show="UserInfoPopup"
  654. :width="width"
  655. @popup="UserInfoPopup = $event"
  656. >
  657. </mobileUserInfoPopup>
  658. <loading :isLoading="isPageLoading"></loading>
  659. </div>
  660. </template>
  661. <script>
  662. import Search from "@/components/home/headerInlineSearch";
  663. import Drawer from "@/components/newDrawer";
  664. import SearchDialog from "@/components/SearchDialog";
  665. import mobileUserInfoPopup from "@/components/mobileUserInfoPopup.vue";
  666. import { SettingsIcon } from "vue-feather-icons";
  667. // import jwt_decode from "authtoken-decode";
  668. import loading from "@/components/newComponent/loading/loading.vue";
  669. import changeCurrency from "@/components/dropdown/changeCurrencyWeb.vue";
  670. import Swiper from "swiper/bundle";
  671. // import { getCurrentTime } from "~/utils/assist";
  672. import { getFirstName } from "~/utils/common";
  673. // import { handler } from "@tailwindcss/line-clamp";
  674. export default {
  675. components: {
  676. Drawer,
  677. Search,
  678. SettingsIcon,
  679. SearchDialog,
  680. mobileUserInfoPopup,
  681. loading,
  682. changeCurrency,
  683. Swiper,
  684. },
  685. data() {
  686. return {
  687. disabled: true,
  688. langShow: false,
  689. show: false,
  690. bigSearch: false,
  691. userPicture: "",
  692. showNavSearch: true,
  693. servicesSearchs: [],
  694. servicesLocations: [],
  695. serviceCategoryList: [],
  696. serviceList: [{
  697. id: 'taiwan',
  698. name: 'Onsite Service',
  699. SubServiceList: []
  700. }],
  701. serviceListIcon: [
  702. "Booth",
  703. "Exhibit",
  704. "event",
  705. "Marketing",
  706. "journey",
  707. "human",
  708. "service_others",
  709. ],
  710. exhibitionsCategoryList: [],
  711. exhibitionsSearchs: [],
  712. exhibitionsLocations: [],
  713. exhibitionsCategories: [],
  714. exhibitionListIcon: [
  715. "rawMaterial",
  716. "aeroSpace",
  717. "energy",
  718. "autoMobile",
  719. "electronics",
  720. "contrucstion",
  721. "security",
  722. "Machinary",
  723. "Medical",
  724. "education",
  725. "textile",
  726. "food",
  727. "entertainment",
  728. "consumer",
  729. "others",
  730. ],
  731. populars: {},
  732. exhibitionActiveIndex: 0,
  733. width: undefined,
  734. drawer: false,
  735. group: null,
  736. isPageLoading: false,
  737. UserInfoPopup: false,
  738. headerServiceSwiper: null,
  739. offsetLeft: 0,
  740. top: 0,
  741. TAIWAN_ID: 18,
  742. JAPAN_ID: 16,
  743. ITALY_ID: 31,
  744. };
  745. },
  746. async created() {
  747. if (process.client) {
  748. this.width = window.innerWidth;
  749. }
  750. if (!this.$route) return;
  751. if (!this.$route.name) return;
  752. const [path, lang] = this.$route.name.split("___");
  753. if (path == "index") {
  754. this.showNavSearch = false;
  755. } else {
  756. this.showNavSearch = true;
  757. }
  758. if (this.$auth.loggedIn) {
  759. this.$auth.$storage.setUniversal('userPicture',"/");
  760. }
  761. await this.fetchUser();
  762. // this.socialRegister();
  763. // this.getServiceCategory();
  764. // this.getExhibitionsCategory();
  765. // this.getServiceHistory();
  766. // this.getExhibitionsHistory();
  767. // this.getServiceLocations();
  768. // this.getExhibitionsLocations();
  769. await this.getExhibitionsCategories();
  770. await this.getAllServiceCategories();
  771. await this.getLocations();
  772. // this.getExhibitionsCollections();
  773. // this.getPopulars();
  774. },
  775. mounted() {
  776. let vm = this;
  777. vm.$nextTick(function () {
  778. window.addEventListener("resize", this.onResize);
  779. vm.initSwiper();
  780. });
  781. },
  782. beforeDestroy() {
  783. window.removeEventListener("resize", this.onResize);
  784. },
  785. computed: {
  786. windowWidth() {
  787. if (process.client) {
  788. this.width = window.innerWidth;
  789. }
  790. return this.width;
  791. },
  792. pictureStatus() {
  793. return this.$store.getters.getPictureStatus;
  794. },
  795. registerStatus() {
  796. return this.$store.getters.getRegisterStatus;
  797. },
  798. lang() {
  799. return this.$i18n.localeProperties["langQuery"];
  800. },
  801. },
  802. watch: {
  803. group: {
  804. handler: function () {
  805. this.drawer = false;
  806. },
  807. },
  808. $route: {
  809. handler: function (to, from) {
  810. if (!to) return;
  811. if (!to.name) return;
  812. const [path, lang] = to.name.split("___");
  813. if (path == "index") {
  814. this.showNavSearch = false;
  815. } else {
  816. this.showNavSearch = true;
  817. }
  818. if (path === "exhibition") {
  819. this.isPageLoading = false;
  820. }
  821. if (path === "service") {
  822. this.isPageLoading = false;
  823. }
  824. if (to != from) {
  825. this.bigSearch = false;
  826. }
  827. },
  828. },
  829. pictureStatus: {
  830. handler: async function (newVal, oldVal) {
  831. await this.fetchUser();
  832. this.$forceUpdate();
  833. },
  834. },
  835. registerStatus: {
  836. handler: function (newVal, oldVal) {
  837. // this.socialRegister();
  838. },
  839. },
  840. lang: {
  841. handler: async function (newVal, oldVal) {
  842. if (newVal != oldVal) {
  843. this.$refs.dropdown.style.opacity = 0;
  844. // this.getServiceCategory();
  845. // this.getExhibitionsCategory();
  846. // this.getServiceHistory();
  847. // this.getExhibitionsHistory();
  848. // this.getServiceLocations();
  849. // this.getExhibitionsLocations();
  850. await this.getExhibitionsCategories();
  851. await this.getAllServiceCategories();
  852. await this.getLocations();
  853. // this.getExhibitionsCollections();
  854. this.initSwiper();
  855. }
  856. },
  857. },
  858. },
  859. methods: {
  860. Search(str) {
  861. console.log(str)
  862. const currentVal = this.$route.query.q;
  863. if(currentVal === str){
  864. this.isPageLoading = false
  865. }else{
  866. this.isPageLoading = true
  867. }
  868. // setTimeout(()=> {
  869. // this.isPageLoading = false
  870. // },3000);
  871. },
  872. clickOutSide() {
  873. this.show = false;
  874. this.UserInfoPopup = false;
  875. },
  876. onResize() {
  877. if (process.client) {
  878. this.width = window.innerWidth;
  879. }
  880. },
  881. clickMenu() {
  882. if (this.windowWidth < 1366) {
  883. this.$store.dispatch("toggleDrawer", true);
  884. }
  885. },
  886. clickSearch() {
  887. this.$store.dispatch("toggleSearchDialog", true);
  888. },
  889. initSwiper() {
  890. let vm = this;
  891. vm.$nextTick(function () {
  892. vm.headerServiceSwiper = new Swiper(".swiper-container.headerService", {
  893. direction: "horizontal",
  894. initialSlide: 0,
  895. observer: true,
  896. observeParents: true,
  897. rebuildOnUpdate: true,
  898. slidesPerView: "auto",
  899. spaceBetween: 25,
  900. watchSlidesVisibility: true,
  901. slideVisibleClass: "swiper-slide-visible",
  902. allowTouchMove: false,
  903. navigation: {
  904. nextEl: ".swiper-button-next.headerService",
  905. prevEl: ".swiper-button-prev.headerService",
  906. },
  907. });
  908. vm.headerServiceSwiper.init();
  909. vm.headerServiceSwiper.update();
  910. // this.$refs.headerSwiper.style.opacity = 1;
  911. vm.$refs.dropdown.style.opacity = 1;
  912. });
  913. },
  914. async fetchUser() {
  915. if (this.$auth.loggedIn) {
  916. await this.$axios
  917. .get(`/trending/api/members/info`)
  918. .then((response) => {
  919. if(response && response.data && response.data.DATA && response.data.DATA.rel){
  920. let data = response.data.DATA.rel
  921. if(data){
  922. if(data.MemberPicture){
  923. this.userPicture = data.MemberPicture;
  924. this.$auth.$storage.setUniversal("userPicture", data.MemberPicture);
  925. }else{
  926. this.userPicture = "";
  927. this.$auth.$storage.removeUniversal("userPicture");
  928. }
  929. if(data.LastName){
  930. let arr = getFirstName(data.LastName,this.$i18n.localeProperties["langQuery"]);
  931. let name = arr[0];
  932. let isLetter = arr[1];
  933. this.$auth.$storage.setUniversal("userLastName", name);
  934. this.$auth.$storage.setUniversal("isLetter", isLetter);
  935. }else{
  936. this.$auth.$storage.removeUniversal("isLetter");
  937. this.$auth.$storage.removeUniversal("userLastName");
  938. }
  939. }
  940. }
  941. })
  942. .catch((error) => {
  943. console.log(error)
  944. });
  945. }
  946. },
  947. async getAllServiceCategories() {
  948. await this.$axios
  949. .get(`/trending/api/Onsite/Categories?Lang=${this.$i18n.localeProperties["langQuery"]}`)
  950. .then((response) => {
  951. if(response && response.data && response.data.DATA && response.data.DATA.rel){
  952. let data = response.data.DATA.rel
  953. if(data.length>0){
  954. this.serviceCategoryList = data;
  955. }
  956. }
  957. })
  958. .catch((error) =>
  959. console.log(error)
  960. );
  961. },
  962. // getExhibitionsCategory() {
  963. // this.$axios
  964. // .get(
  965. // `/t/exhibitions/categories?lang=${this.$i18n.localeProperties["langQuery"]}&sort=true`
  966. // )
  967. // .then((result) => {
  968. // this.exhibitionsCategoryList = result.data.sort_results;
  969. // this.exhibitionsCategoryList = this.exhibitionsCategoryList.map(
  970. // (item) => {
  971. // item.subcategories_list = item.subcategories_list.map(
  972. // (children) => {
  973. // return {
  974. // id: children.subcategory_id,
  975. // title: children.subcategory_name,
  976. // key: children.subcategory_name,
  977. // type: "subcategory",
  978. // };
  979. // }
  980. // );
  981. // return {
  982. // id: item.categories_id,
  983. // title: item.category_name,
  984. // key: item.category_name,
  985. // type: "category",
  986. // subcategory: item.subcategories_list,
  987. // };
  988. // }
  989. // );
  990. // })
  991. // .catch((err) => {
  992. // console.log(err);
  993. // });
  994. // },
  995. // getServiceHistory() {
  996. // this.$axios
  997. // .get(
  998. // `/trending/services/search/history?lang=${this.$i18n.localeProperties["langQuery"]}`
  999. // )
  1000. // .then((response) => {
  1001. // this.servicesSearchs = response.data.searches;
  1002. // })
  1003. // .catch((error) => console.log(error));
  1004. // },
  1005. // getExhibitionsHistory() {
  1006. // this.$axios
  1007. // .get(
  1008. // `/trending/exhibitions/search/history?lang=${this.$i18n.localeProperties["langQuery"]}`
  1009. // )
  1010. // .then((response) => {
  1011. // this.exhibitionsSearchs = response.data.searches;
  1012. // })
  1013. // .catch((error) => console.log(error));
  1014. // },
  1015. // getServiceLocations() {
  1016. // this.$axios
  1017. // .get(
  1018. // `/trending/services/locations?lang=${this.$i18n.localeProperties["langQuery"]}`
  1019. // )
  1020. // .then((response) => {
  1021. // this.servicesLocations = response.data.locations;
  1022. // })
  1023. // .catch((error) => console.log(error));
  1024. // },
  1025. // getExhibitionsLocations() {
  1026. // this.$axios
  1027. // .get(
  1028. // `/trending/exhibitions/locations?lang=${this.$i18n.localeProperties["langQuery"]}`
  1029. // )
  1030. // .then((response) => {
  1031. // this.exhibitionsLocations = response.data.locations;
  1032. // })
  1033. // .catch((error) => console.log(error));
  1034. // },
  1035. async getExhibitionsCategories() {
  1036. await this.$axios
  1037. .get(`/trending/api/Exhibition/Categories?Lang=${this.$i18n.localeProperties["langQuery"]}`)
  1038. .then((response) => {
  1039. if(response && response.data && response.data.DATA && response.data.DATA.rel){
  1040. let data = response.data.DATA.rel
  1041. if(data.length>0){
  1042. this.exhibitionsCategoryList = data;
  1043. this.exhibitionsCategories = data;
  1044. }
  1045. }
  1046. })
  1047. .catch((error) =>
  1048. console.log(error)
  1049. );
  1050. },
  1051. getLocations() {
  1052. this.$axios
  1053. .get(`/trending/api/Exhibition/Locations?Lang=${this.$i18n.localeProperties["langQuery"]}`)
  1054. .then((response) => {
  1055. if(response && response.data && response.data.DATA && response.data.DATA.rel){
  1056. let data = response.data.DATA.rel
  1057. if(data){
  1058. this.exhibitionsLocations = data;
  1059. }
  1060. }
  1061. })
  1062. .catch((error) =>
  1063. console.log(error)
  1064. );
  1065. },
  1066. // getExhibitionsCollections() {
  1067. // this.$axios
  1068. // .get(
  1069. // `/trending/exhibitions/collections?lang=${this.$i18n.localeProperties["langQuery"]}`
  1070. // )
  1071. // .then((response) => {
  1072. // this.collections = response.data.collections;
  1073. // })
  1074. // .catch((error) => console.log(error));
  1075. // },
  1076. async changeLang() {
  1077. // this.getServiceCategory();
  1078. // this.getExhibitionsCategory();
  1079. // this.getServiceHistory();
  1080. // this.getExhibitionsHistory();
  1081. // this.getServiceLocations();
  1082. // this.getExhibitionsLocations();
  1083. await this.getExhibitionsCategories();
  1084. // this.getExhibitionsCollections();
  1085. },
  1086. async getPopulars() {
  1087. await this.$axios
  1088. .get(
  1089. `/trending/search/popular?lang=${this.$i18n.localeProperties["langQuery"]}`
  1090. )
  1091. .then((response) => {
  1092. this.populars = response.data;
  1093. })
  1094. .catch((error) => console.log(error));
  1095. },
  1096. logout() {
  1097. this.$auth.$storage.removeUniversal("authtoken");
  1098. this.$auth.$storage.removeUniversal("userPicture");
  1099. this.$auth.$storage.removeUniversal("userLastName");
  1100. this.$auth.$storage.removeUniversal("userBeforePath");
  1101. if (this.width < 1024) {
  1102. this.$router.push(this.localePath("/"));
  1103. } else {
  1104. this.$router.push(this.localePath("/user"));
  1105. }
  1106. this.$auth.logout();
  1107. this.$nuxt.refresh();
  1108. this.UserInfoPopup = false;
  1109. },
  1110. toUser(){
  1111. this.$auth.$storage.removeUniversal("authtoken");
  1112. this.$auth.$storage.removeUniversal("userPicture");
  1113. this.$auth.$storage.removeUniversal("userLastName");
  1114. this.$auth.$storage.removeUniversal("userBeforePath");
  1115. this.$router.push(this.localePath("/user"));
  1116. this.$auth.logout();
  1117. this.$nuxt.refresh();
  1118. this.UserInfoPopup = false;
  1119. },
  1120. langClickOutSide() {
  1121. this.langShow = false;
  1122. },
  1123. // socialRegister() {
  1124. // if (this.$auth.loggedIn) {
  1125. // const jsonPayload =
  1126. // this.$auth.$storage.getUniversal("authtoken") &&
  1127. // this.$auth.$storage.getUniversal("authtoken").token != undefined
  1128. // ? jwt_decode(this.$auth.$storage.getUniversal("authtoken").token)
  1129. // : { ueid: "" };
  1130. // if (
  1131. // this.$auth.$state.strategy === "google" ||
  1132. // this.$auth.$state.strategy === "facebook"
  1133. // )
  1134. // {
  1135. // const userData = {
  1136. // social_id:
  1137. // this.$auth.$state.strategy === "google"
  1138. // ? this.$auth.$state.user.sub
  1139. // : this.$auth.$state.user.id,
  1140. // first_name:
  1141. // this.$auth.$state.strategy === "google"
  1142. // ? this.$auth.$state.user.given_name
  1143. // : this.$auth.$state.user.first_name,
  1144. // last_name:
  1145. // this.$auth.$state.strategy === "google"
  1146. // ? this.$auth.$state.user.family_name
  1147. // : this.$auth.$state.user.last_name,
  1148. // email: this.$auth.$state.user.email,
  1149. // picture:
  1150. // this.$auth.$state.strategy === "google"
  1151. // ? this.$auth.$state.user.picture
  1152. // : this.$auth.$state.user.picture.data.url,
  1153. // social_schema: this.$auth.$state.strategy,
  1154. // };
  1155. // jsonPayload.ueid != ""
  1156. // ? (userData.user_id = JSON.parse(jsonPayload.ueid))
  1157. // : "";
  1158. // this.$axios
  1159. // .post("/member/users/social", userData)
  1160. // .then((result) => {
  1161. // this.$auth.$storage.setUniversal("authtoken", result.data, true);
  1162. // this.$store.dispatch("updatePicture");
  1163. // })
  1164. // .catch((err) => {
  1165. // console.log(err);
  1166. // });
  1167. // }
  1168. // this.$store.dispatch("updatePicture");
  1169. // }
  1170. // },
  1171. // toShowList(countryId) {
  1172. // if (countryId > 0) {
  1173. // this.$router.push(this.localePath(`/exhibition?country=${countryId}`));
  1174. // } else {
  1175. // this.$router.push(this.localePath(`/exhibition`));
  1176. // }
  1177. // this.isPageLoading = true;
  1178. // },
  1179. },
  1180. };
  1181. </script>
  1182. <style lang="scss" scoped>
  1183. .v-menu__content {
  1184. box-shadow: none;
  1185. min-width: 186px;
  1186. border-radius: 10px;
  1187. }
  1188. .v-list-item {
  1189. padding-left: 12px;
  1190. padding-right: 12px;
  1191. color: #232323 !important;
  1192. }
  1193. .navBar-row2 {
  1194. opacity: 0;
  1195. grid-template-columns: fit-content(70px) 50px fit-content(90px) auto;
  1196. }
  1197. .navBar-row2 {
  1198. opacity: 0;
  1199. grid-template-columns: fit-content(70px) 50px fit-content(90px) auto;
  1200. }
  1201. .vertical-line {
  1202. display: inline-block;
  1203. border-left: 1.5px solid;
  1204. margin: 5px 20px 5px 20px;
  1205. height: 15px;
  1206. }
  1207. :deep(.v-toolbar__content) {
  1208. max-width: 1366px;
  1209. width: 1366px;
  1210. }
  1211. .user-picture-container {
  1212. width: 28px;
  1213. height: 28px;
  1214. }
  1215. .user-picture-border {
  1216. border: 1px solid #f5cda8;
  1217. }
  1218. .user-no-picture-border {
  1219. border: 2px solid #f5cda8;
  1220. }
  1221. .user-no-picture-font {
  1222. font-family: "DM Sans";
  1223. font-style: normal;
  1224. font-weight: 400;
  1225. font-size: 16px;
  1226. line-height: 21px;
  1227. }
  1228. .v-btn:before {
  1229. background-color: rgba(238, 149, 70, 0.6) !important;
  1230. font-color: #ee9546;
  1231. }
  1232. .on-top {
  1233. z-index: 500;
  1234. }
  1235. .customMenuLink {
  1236. &::after {
  1237. content: "";
  1238. display: block;
  1239. width: 150%;
  1240. height: 40px;
  1241. position: absolute;
  1242. top: 20px;
  1243. left: 0;
  1244. }
  1245. &:hover {
  1246. .customDropMenu {
  1247. display: block;
  1248. &.oneType {
  1249. display: grid;
  1250. }
  1251. }
  1252. }
  1253. }
  1254. .customDropMenu {
  1255. column-count: 4;
  1256. display: none;
  1257. &.exhibition {
  1258. column-count: initial;
  1259. column-gap: initial;
  1260. }
  1261. &.services {
  1262. column-count: 3;
  1263. column-gap: 30px;
  1264. }
  1265. &.oneType {
  1266. column-count: 1;
  1267. column-gap: 30px;
  1268. }
  1269. > ul {
  1270. &:last-of-type {
  1271. > div {
  1272. display: none !important;
  1273. }
  1274. }
  1275. }
  1276. }
  1277. .swiper-button {
  1278. &-prev {
  1279. left: 0;
  1280. &::before {
  1281. content: "";
  1282. display: block;
  1283. width: 60px;
  1284. height: 100%;
  1285. background-image: url("~/assets/svg/swiper_linear.svg");
  1286. // background-image: linear-gradient(to left, transparent, #fff);
  1287. position: absolute;
  1288. left: -6px;
  1289. top: 0;
  1290. z-index: -1;
  1291. transform: rotate(180deg);
  1292. }
  1293. &:after {
  1294. content: "";
  1295. display: block;
  1296. position: absolute;
  1297. right: 10px;
  1298. background-image: url("~/assets/svg/left-arrow-default.svg");
  1299. background-position: center;
  1300. background-repeat: no-repeat;
  1301. background-size: 7px 13px;
  1302. width: 24px;
  1303. height: 24px;
  1304. }
  1305. }
  1306. &-next {
  1307. right: 0;
  1308. &::before {
  1309. content: "";
  1310. display: block;
  1311. width: 60px;
  1312. height: 100%;
  1313. background-image: url("~/assets/svg/swiper_linear.svg");
  1314. // background-image: linear-gradient(to right, transparent, #fff);
  1315. position: absolute;
  1316. right: -6px;
  1317. top: 0;
  1318. z-index: -1;
  1319. }
  1320. &:after {
  1321. content: "";
  1322. display: block;
  1323. position: absolute;
  1324. left: 10px;
  1325. background-image: url("~/assets/svg/right-arrow-default.svg");
  1326. background-position: center;
  1327. background-repeat: no-repeat;
  1328. background-size: 7px 13px;
  1329. width: 24px;
  1330. height: 24px;
  1331. }
  1332. }
  1333. }
  1334. :deep(.swiper-container) {
  1335. .swiper-slide {
  1336. opacity: 0;
  1337. display: flex;
  1338. &.swiper-slide-visible {
  1339. opacity: 1;
  1340. }
  1341. }
  1342. [aria-disabled="true"] {
  1343. opacity: 0;
  1344. &::before {
  1345. display: none;
  1346. }
  1347. &::after {
  1348. display: none;
  1349. }
  1350. }
  1351. }
  1352. :deep(.theme--light.v-list){
  1353. box-shadow: 10px 10px 5px #888888 !important;
  1354. }
  1355. .exhibitionDropdownLink {
  1356. &.active {
  1357. background-image: url("@/assets/svg/icon-arrow.svg");
  1358. background-position: right center;
  1359. background-size: 16px;
  1360. background-repeat: no-repeat;
  1361. }
  1362. }
  1363. .changeLang > div {
  1364. border-radius: 4px;
  1365. &:hover {
  1366. &::before {
  1367. opacity: 0.08;
  1368. // background-color: rgba(238, 149, 70, 0.6);
  1369. bottom: 0;
  1370. content: " ";
  1371. display: block;
  1372. left: 0;
  1373. pointer-events: none;
  1374. position: absolute;
  1375. right: 0;
  1376. top: 0;
  1377. width: 100%;
  1378. height: 100%;
  1379. }
  1380. }
  1381. }
  1382. .changeLang > div.show {
  1383. &::before {
  1384. opacity: 0.24;
  1385. background-color: rgba(238, 149, 70, 0.6);
  1386. bottom: 0;
  1387. content: " ";
  1388. display: block;
  1389. left: 0;
  1390. pointer-events: none;
  1391. position: absolute;
  1392. right: 0;
  1393. top: 0;
  1394. width: 100%;
  1395. height: 100%;
  1396. }
  1397. }
  1398. </style>