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.

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