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
9.6 KiB
269 lines
9.6 KiB
<template>
|
|
<div class="tw-mb-[20px]">
|
|
<nuxt-link class="tw-text-black" :to="localePath('/exhibition/' + item.ExhibitionID)">
|
|
<div
|
|
class="exhib-card tw-grid xl:tw-grid-cols-[auto_28px] tw-bg-white tw-border-solid tw-border tw-border-neutrals-200 tw-rounded-[20px] md:tw-p-[20px]">
|
|
<div class="tw-grid tw-grid-cols-[102px_auto] tw-gap-[10px] tw-p-[10px] md:tw-grid-cols-[160px_auto]">
|
|
<div class="tw-bg-primary-brigh">
|
|
<img src="~/assets/svg/bookmark_outline.svg" class="tw-mb-[30px] md:tw-hidden" alt="" />
|
|
|
|
<!-- exhibition status -->
|
|
<div v-if="item.ExhibStatus != null && item.ExhibStatus != ''">
|
|
<div v-if="item.ExhibStatus == 'Upcoming'"
|
|
class="tw-hidden tw-w-fit tw-body-5 tw-bg-white tw-border tw-border-solid tw-border-primary-1 tw-text-primary-1 tw-rounded-[8px] tw-px-[10px] tw-py-[4px] md:tw-block md:tw-mb-[10px] md:tw-text-[14px]">
|
|
{{ $t('exhibition.'+ item.ExhibStatus) }}
|
|
</div>
|
|
<div v-else-if="item.ExhibStatus == 'Ongoing'"
|
|
class="tw-hidden tw-w-fit tw-body-5 tw-bg-white tw-border tw-border-solid tw-border-complementary-1 tw-text-complementary-1 tw-rounded-[8px] tw-px-[10px] tw-py-[4px] md:tw-block md:tw-mb-[10px] md:tw-text-[14px]">
|
|
{{ $t('exhibition.'+ item.ExhibStatus) }}
|
|
</div>
|
|
<div v-else-if="item.ExhibStatus == 'Finished'"
|
|
class="tw-hidden tw-w-fit tw-body-5 tw-bg-white tw-border tw-border-solid tw-border-neutrals-500 tw-text-neutrals-500 tw-rounded-[8px] tw-px-[10px] tw-py-[4px] md:tw-block md:tw-mb-[10px] md:tw-text-[14px]">
|
|
{{ $t('exhibition.'+ item.ExhibStatus) }}
|
|
</div>
|
|
<div v-else-if="item.ExhibStatus == 'Cancelled'"
|
|
class="tw-hidden tw-w-fit tw-body-5 tw-bg-white tw-border tw-border-solid tw-border-error-default tw-text-error-default tw-rounded-[8px] tw-px-[10px] tw-py-[4px] md:tw-block md:tw-mb-[10px] md:tw-text-[14px]">
|
|
{{ $t('exhibition.'+ item.ExhibStatus) }}
|
|
</div>
|
|
<div v-else-if="item.ExhibStatus == 'Postponed'"
|
|
class="tw-hidden tw-w-fit tw-body-5 tw-bg-error-default tw-border tw-border-solid tw-border-error-default tw-text-white tw-rounded-[8px] tw-px-[10px] tw-py-[4px] md:tw-block md:tw-mb-[10px] md:tw-text-[14px]">
|
|
{{ $t('exhibition.'+ item.ExhibStatus) }}
|
|
</div>
|
|
<div v-else
|
|
class="tw-hidden tw-w-fit tw-body-5 tw-bg-white tw-border tw-border-solid tw-text-white tw-rounded-[8px] tw-px-[10px] tw-py-[4px] md:tw-block md:tw-mb-[10px] md:tw-text-[14px]">
|
|
{{ $t('exhibition.'+ item.ExhibStatus) }}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- exhibition logo -->
|
|
<nuxt-link v-if="item.Logo === '' " :to="localePath('/exhibition/' + item.ExhibitionID)"><img src="~/assets/svg/noLogo.svg" class="md:tw-w-[160px] md:tw-p-[10px]" alt="" />
|
|
</nuxt-link>
|
|
<nuxt-link v-else :to="localePath('/exhibition/' + item.ExhibitionID)"><img :src="item.Logo"
|
|
class="tw-p-[10px]" alt="" />
|
|
</nuxt-link>
|
|
|
|
</div>
|
|
<div>
|
|
<div>
|
|
<div class="tw-flex tw-mb-[10px]">
|
|
<div v-if="item.IsRecommend === 'Y'"
|
|
class="tw-w-fit tw-mr-[5px] tw-grid tw-grid-cols-[12px_auto] tw-gap-[5px] tw-rounded-[8px] tw-items-center tw-border tw-border-solid tw-border-primary-light tw-bg-primary-1 tw-py-[4px] tw-px-[10px]">
|
|
<img src="~/assets/svg/recommend.svg" alt="" />
|
|
<div class="tw-body-5 tw-text-white md:tw-text-[14px] tw-whitespace-nowrap">{{
|
|
$t("exhibition.Recommended")
|
|
}}</div>
|
|
</div>
|
|
<div
|
|
class="tw-w-fit tw-body-5 tw-bg-white tw-whitespace-nowrap tw-border tw-border-solid tw-justify-between tw-border-complementary-1 tw-rounded-[8px] tw-text-complementary-1 tw-py-[4px] tw-px-[10px] md:tw-hidden">
|
|
{{ $t(item.ExhibStatus) }}
|
|
</div>
|
|
<!-- <img src="~/assets/svg/bookmark_outline.svg" class="tw-hidden md:tw-block" alt="" /> -->
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div class="tw-body-4 tw-font-bold tw-mb-[10px] md:tw-text-[18px]">
|
|
<!-- {{ item.ExhibitionName }} -->
|
|
<!-- <nuxt-link class="tw-text-black" :to="localePath('/exhibition/' + item.ExhibitionID)"> -->
|
|
{{ item.ExhibitionName }}
|
|
<!-- </nuxt-link> -->
|
|
</div>
|
|
|
|
|
|
<div class="tw-flex tw-mb-[10px]">
|
|
<div v-if="item.RegionName != ''" class="tw-text-neutrals-800 tw-body-3">
|
|
{{ item.RegionName == null ? "" : item.RegionName + "." }}
|
|
</div>
|
|
<div v-if="item.CountryName != ''" class="tw-text-neutrals-800 tw-body-3">
|
|
{{ item.CountryName == null ? "" : item.CountryName + "." }}
|
|
</div>
|
|
<div v-if="item.RegionName != ''" class="tw-text-neutrals-800 tw-body-3">
|
|
{{ item.CityName == null ? "" : item.CityName }}
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- star and review-->
|
|
<!-- <div class="tw-hidden md:tw-block md:tw-mb-[8px]">
|
|
<div class="tw-flex">
|
|
<div class="tw-flex tw-items-center tw-mr-[10px]">
|
|
<div class="tw-text-primary-1 tw-text-[14px] tw-mr-[5px]">4.6</div>
|
|
<img src="~/assets/svg/star.svg" class="tw-w-[15px]" alt="">
|
|
</div>
|
|
<div class="tw-text-neutrals-600 tw-text-[14px]">
|
|
(344 reviews)
|
|
</div>
|
|
</div>
|
|
</div> -->
|
|
|
|
<!-- <div v-if="item.MainCategoryList.length > 0"
|
|
class="tw-w-fit tw-p-[5px] tw-body-5 tw-rounded-[10px] tw-bg-[#f6f6f6] tw-text-hint tw-mb-[8px] md:tw-text-[14px] md:tw-px-[10px] md:tw-py-[6px]">
|
|
|
|
<div v-for="(Category, index) in item.MainCategoryList">
|
|
{{ Category.CategoryName }}
|
|
</div>
|
|
|
|
</div> -->
|
|
|
|
|
|
<div>
|
|
<div v-if="item.MainCategoryList != null"
|
|
class="md:tw-flex md:tw-flex-row md:tw-items-center tw-mb-[14px]">
|
|
<div v-for="(item, index) in item.MainCategoryList" v-show="index < 1" :key="index"
|
|
class="tw-bg-[#f6f6f6] tw-w-fit tw-rounded-[10px] tw-px-[10px] tw-py-[5px] tw-text-[14px] tw-mr-[10px]">
|
|
<div class="tw-text-neutrals-800">
|
|
{{ item.CategoryName }}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tw-text-[12px] tw-text-complementary-1" v-if="item.MainCategoryList.length > 1">
|
|
More +
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tw-hidden xl:tw-block xl:tw-line-clamp-2 tw-text-[14px] xl:tw-mb-[14px]"
|
|
v-if="!!item.Intro">
|
|
<div class="tw-text-neutrals-600" v-html="item.Intro"></div>
|
|
</div>
|
|
<div class="tw-body-3 tw-text-black md:tw-text-[18px]">
|
|
{{ formatDate(item.StartDate) + " - " + formatDate(item.EndDate) }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- 電腦版save exhibition -->
|
|
<div class="tw-hidden md:tw-cursor-pointer md:tw-block" @click.prevent="onToggleFavorite(item)">
|
|
<div v-if="item.IsFavorite === 'Y'">
|
|
<img src="~/assets/svg/bookmark.svg" class="tw-w-[24px] md:tw-w-[28px]" alt="" />
|
|
</div>
|
|
<div v-else>
|
|
<img src="~/assets/svg/bookmark_outline.svg" class="tw-w-[24px] md:tw-w-[28px]" alt="" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</nuxt-link>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import CardStatus from "~/components/exhibition/CardStatus.vue";
|
|
import { formatDate, dateCountDown } from "~/utils/assist";
|
|
import { ExhibitCardStatus, needLeftTagStatus } from "~/utils/constant";
|
|
|
|
export default {
|
|
name: "ExhibitionListCard",
|
|
props: {
|
|
item: {
|
|
type: Object,
|
|
default: () => ({}),
|
|
},
|
|
},
|
|
components: {
|
|
CardStatus,
|
|
},
|
|
data: () => ({
|
|
StatusMap: ExhibitCardStatus,
|
|
Favorite: {
|
|
Type: "",
|
|
ParentID: "",
|
|
IsFavorite: "",
|
|
Memo: ""
|
|
}
|
|
}),
|
|
methods: {
|
|
formatDate,
|
|
dateCountDown,
|
|
needLeftTagStatus,
|
|
onToggleFavorite(item) {
|
|
|
|
if (item.IsFavorite === 'Y') {
|
|
item.IsFavorite = 'N';
|
|
} else {
|
|
item.IsFavorite = 'Y';
|
|
}
|
|
|
|
this.Favorite.IsFavorite = item.IsFavorite;
|
|
this.Favorite.Type = 'Exhibition';
|
|
this.Favorite.ParentID = item.ExhibitionID;
|
|
|
|
if (this.$auth.loggedIn) {
|
|
this.$axios
|
|
.post(
|
|
`/trending/api/Favorite/Favorite`, this.Favorite
|
|
)
|
|
.then((result) => {
|
|
|
|
this.$emit('toggle-favorite');
|
|
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
});
|
|
} else {
|
|
this.$router.push(this.localePath("/user"));
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.exhib-card {
|
|
&:hover {
|
|
box-shadow: 10px 10px 10px rgba(155, 155, 155, 0.25);
|
|
}
|
|
}
|
|
.exhibit-card {
|
|
max-width: 836px;
|
|
|
|
&.disabled .card__right {
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
.exhibit-title {
|
|
position: relative;
|
|
font-weight: bold;
|
|
color: #232323;
|
|
word-break: break-word;
|
|
|
|
.bookmark-tag {
|
|
position: absolute;
|
|
color: $primary-light-orange;
|
|
right: 0;
|
|
top: 0.5em;
|
|
}
|
|
}
|
|
|
|
.status-tag {
|
|
position: absolute;
|
|
top: 16px;
|
|
left: 20px;
|
|
}
|
|
|
|
.recommend-tag {
|
|
border: 1px solid $primary-light-orange;
|
|
max-width: 108px !important;
|
|
|
|
img {
|
|
width: 11px;
|
|
height: 12px;
|
|
}
|
|
}
|
|
|
|
.category-tag {
|
|
border: 1px solid #f7ede4;
|
|
height: 16px;
|
|
}
|
|
|
|
.last-dates {
|
|
color: #ef5a5a;
|
|
}
|
|
|
|
a {
|
|
text-decoration: none;
|
|
}
|
|
</style>
|