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.
 
 

269 lines
11 KiB

<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>