|
|
<template> <div class="exhibitionBannerArea"> <div class="banner"> <div class="bannerfilter md:tw-px-[30px] md:tw-py-[40px] xl:tw-px-[40px] xl:tw-py-[60px]"> <div class="tw-grid tw-grid-cols-[102px_auto] tw-gap-[8px] tw-mb-[12px] md:tw-grid-cols-[160px_528px] xl:tw-grid-cols-[160px_976px] md:tw-gap-[20px] xl:tw-gap-[30px]"> <div> <div v-if="exhibition.logo == null"> <img src="~/assets/svg/noLogo.svg" class="tw-border-solid tw-border tw-rounded-[16px] tw-border-neutrals-200" alt="" /> </div> <div v-else> <img :src="exhibition.logo" class="tw-border-solid tw-border tw-rounded-[16px] tw-border-neutrals-200" alt="" /> </div>
<!-- <div class="tw-hidden md:tw-block md:tw-ml-[10px]"> <div class="tw-head-body tw-flex tw-flex-row tw-items-center tw-mt-[10px]"> <div class="tw-text-warning-default tw-mr-[11px] md:tw-text-[18px]"> {{ exhibition.rating }} </div> <div> <img src="~/assets/svg/star_border.svg" class="tw-mr-[6px]" alt="" /> <img src="~/assets/svg/star_border.svg" class="tw-mr-[6px]" alt="" /> <img src="~/assets/svg/star_border.svg" class="tw-mr-[6px]" alt="" /> <img src="~/assets/svg/star_border.svg" class="tw-mr-[6px]" alt="" /> <img src="~/assets/svg/star_border.svg" alt="" /> </div> </div> <div class="tw-text-warning-default tw-mt-[8px]"> ({{ exhibition.reviewCount == null ? "0" : exhibition.reviewCount }} reviews) </div> </div> --> </div> <div class="tw-justify-start md:tw-max-w-[528px] xl:tw-max-w-[976px]"> <div class="tw-flex tw-flex-row tw-mb-[8px] md:tw-mb-[12px]"> <div v-if="exhibition.isRecommend != null" class="tw-grid tw-grid-cols-[12px_auto] tw-gap-[4px] tw-items-center tw-border-solid tw-border tw-border-primary-2 tw-bg-primary-1 tw-rounded-[8px] tw-px-[10px] tw-py-[4px] tw-mr-[8px]"> <img src="~/assets/svg/recommend.svg" alt="" /> <div class="tw-text-white tw-text-[12px] md:tw-text-[14px]"> {{ $t("exhibition.Recommended") }} </div> </div> <div v-if="exhibition.status != null && exhibition.status != ''"> <div v-if="exhibition.status == 'Upcoming'" class="tw-border-solid tw-border tw-border-primary-1 tw-text-primary-1 tw-bg-white tw-rounded-[8px] tw-px-[10px] tw-py-[4px] tw-text-[12px] md:tw-text-[14px]"> {{ $t("exhibition.Upcoming") }} </div> <div v-else-if="exhibition.status == 'Ongoing'" class="tw-border-solid tw-border tw-border-complementary-1 tw-text-complementary-1 tw-bg-white tw-rounded-[8px] tw-px-[10px] tw-py-[4px] tw-text-[12px] md:tw-text-[14px]"> {{ exhibition.status }} </div> <div v-else-if="exhibition.status == 'Finished'" class="tw-border-solid tw-border tw-border-neutrals-500 tw-text-neutrals-500 tw-bg-white tw-rounded-[8px] tw-px-[10px] tw-py-[4px] tw-text-[12px] md:tw-text-[14px]"> {{ exhibition.status }} </div> <div v-else-if="exhibition.status == 'Cancelled'" class="tw-border-solid tw-border tw-border-error-default tw-text-error-default tw-bg-white tw-rounded-[8px] tw-px-[10px] tw-py-[4px] tw-text-[12px] md:tw-text-[14px]"> {{ exhibition.status }} </div> <div v-else class="tw-border-solid tw-border tw-bg-error-default tw-text-white tw-rounded-[8px] tw-px-[10px] tw-py-[4px] tw-text-[12px] md:tw-text-[14px]"> {{ exhibition.status }} </div> </div> </div> <div class="tw-hidden md:tw-block"> <div v-if="exhibition.categories != null" class="md:tw-flex md:tw-flex-row md:tw-items-center"> <div v-for="(item, index) in exhibition.categories" :key="index" class="tw-bg-[#f6f6f6] tw-w-fit tw-border-solid tw-border tw-border-neutrals-400 tw-text-neutrals-800 tw-rounded-[10px] tw-mb-[4px] tw-whitespace-nowrap tw-px-[10px] tw-py-[5px] tw-text-[12px] md:tw-text-[14px] md:tw-mr-[12px] md:tw-text-white md:tw-bg-neutrals-400 md:tw-bg-opacity-50"> {{ item.CategoryName }} </div> </div> </div> <div class="md:tw-hidden"> <div v-if="exhibition.categories != null" class="md:tw-flex md:tw-flex-row md:tw-items-center"> <template v-for="(item, index) in exhibition.categories"> <div :key="index" v-if=" show ? (index = exhibition.categories.length) : index <= 1 " class="tw-bg-[#f6f6f6] tw-w-full tw-flex tw-justify-center tw-px-[10px] tw-py-[5px] tw-text-neutrals-800 tw-rounded-[10px] tw-mb-[4px] tw-whitespace-nowrap tw-text-[12px] md:tw-text-[14px] md:tw-mr-[12px] md:tw-text-white md:tw-bg-neutrals-400 md:tw-bg-opacity-50"> {{ item.CategoryName }} </div> </template> <div v-if="exhibition.categories.length > 2"> <button v-if="showCategoryNum" class="tw-text-warning-default tw-text-[16px] tw-hidden md:tw-block md:tw-mr[12px]" @click="openCategoryList()"> {{ show ? exhibition.categories.length - 2 + "+" : exhibition.categories.length - 2 + "-" }} </button> </div>
<button v-if="exhibition.categories.length > 2" class="tw-grid tw-w-full tw-grid-cols-[auto_16px] tw-gap-[8px] tw-bg-white tw-items-center tw-justify-center tw-py-[4px]" @click="openCategoryList()"> <div :class="[ 'tw-text-primary-1 tw-text-[12px]', 'primary_arrow', show ? 'show' : '', ]"> {{ openCategoryText }} </div> </button> </div> </div>
<div class="tw-hidden md:tw-block">
<div v-if="`${this.$i18n.localeProperties['langQuery']}` != 'en-US'">
<div class="tw-body-3 tw-break-all tw-text-base-primary tw-w-full md:t24 md:tw-text-white md:tw-mt-[12px] xl:tw-text-[28px] xl:tw-font-bold"> {{ exhibition.name }} </div>
</div>
<div class="tw-body-3 tw-break-all tw-text-base-primary tw-w-full md:t24 md:tw-text-white md:tw-mt-[12px] xl:tw-text-[28px] xl:tw-font-bold"> {{ exhibition.shortName }}, {{ exhibition.enname }} </div>
<div class="tw-head-body tw-text-neutrals-500 tw-w-full md:tw-text-[20px] md:tw-font-medium md:tw-text-neutrals-0 md:tw-mt-[12px]"> {{ exhibition.region.name == null ? "" : exhibition.region.name + "." }} {{ exhibition.country.name == null ? "" : exhibition.country.name + "." }} {{ exhibition.city.name == null ? "" : exhibition.city.name }} </div> <div class="tw-head-body tw-text-primary-1 tw-w-full md:tw-text-[20px] md:tw-font-medium md:tw-text-white md:tw-mt-[12px]"> <!-- {{ exhibition.startdate }} - {{ exhibition.enddate }} --> {{ formatDate(exhibition.startdate) + " - " + formatDate(exhibition.enddate) }} </div> </div> </div> </div> <!-- phone --> <div class="tw-flex tw-flex-col tw-max-w-[354px] tw-gap-[12px] md:tw-hidden"> <div class="tw-body-3 tw-break-all"> {{ exhibition.name }} </div>
<div class="tw-head-body tw-text-neutrals-500 tw-w-full"> {{ exhibition.region.name == null ? "" : exhibition.region.name + "." }} {{ exhibition.country.name == null ? "" : exhibition.country.name + "." }} {{ exhibition.city.name == null ? "" : exhibition.city.name }} </div> <div class="tw-head-body tw-text-primary-1 tw-w-full"> <!-- {{ exhibition.startdate }} - {{ exhibition.enddate }} --> {{ formatDate(exhibition.startdate) + " - " + formatDate(exhibition.enddate) }} </div> <!-- <div class="tw-head-body tw-flex tw-flex-row tw-items-center"> <div class="tw-text-primary-1 tw-mr-[6px]"> {{ exhibition.rating }} </div> <img src="~/assets/svg/star.svg" class="tw-mr-[12px]" alt="" /> <div class="tw-text-neutrals-500"> ({{ exhibition.reviewCount == null ? "0" : exhibition.reviewCount }} reviews) </div> </div> --> </div> </div> </div> </div> </template>
<script> import VClamp from "vue-clamp"; import { formatDate, dateCountDown } from "~/utils/assist"; export default { name: "ExhibitionBannerArea", data() { return { show: false, showCategoryNum: true, }; },
props: { exhibition: { type: Object, default: () => ({ banner: "", logo: "", rating: "", reviewCount: 0, name: "", region: {}, country: {}, city: {}, startdate: "", enddate: "", categories: [], }), }, },
computed: { openCategoryText() { if (this.show == false) { return "Expand"; } else { return "Collapse"; } }, }, methods: { formatDate, dateCountDown, openCategoryList() { this.show = !this.show; }, }, }; </script>
<style lang="scss" scoped> .banner { @media screen and (min-width: 768px) { background-image: url("~/assets/img/ExhibitionBanner.jpeg"); background-repeat: no-repeat; background-position: center; background-size: cover; } }
.bannerfilter { @media screen and (min-width: 768px) { background-color: rgba(0, 0, 0, 0.5); } }
.primary_arrow { position: relative;
&::after { content: ""; display: inline-block; position: absolute; right: -21px; top: 6px; margin-top: auto; margin-bottom: auto; background-image: url("~/assets/svg/arrow-down-primary.svg"); background-size: 100%; background-position: right center; background-repeat: no-repeat; width: 7px; height: 4px; }
&.show { &::after { transform: rotate(180deg); } } } </style>
|