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.
 
 

702 lines
23 KiB

<template>
<div
class="exhibition-content tw-grid tw-grid-cols-1 tw-gap-[30px] tw-mt-[20px] tw-mb-[60px] md:tw-px-[30px] md:tw-mt-[30px] xl:tw-px-[60px] xl:tw-max-w-screen-xl xl:tw-mx-auto xl:tw-grid-cols-[auto_364px]">
{{ relatedservicelist.category }}
<mobileFixTopBar ref="stickySwiper" :fixBar="fixBar" :currStep="currStep" :list="fixBarList"></mobileFixTopBar>
<section class="section1 tw-px-[30px] md:tw-px-0 xl:tw-w-full xl:tw-col-span-2">
<ExhibitionBannerArea :exhibition="exhibition"></ExhibitionBannerArea>
</section>
<section class="section2 tw-px-[30px] md:tw-px-0 xl:tw-pr-[30px] xl:tw-col-start-1 xl:tw-row-start-2">
<Breadcrumbs class="tw-px-0 md:tw-mb-[22px]"></Breadcrumbs>
<div class="tw-hidden md:tw-block">
<div class="md:tw-h-[48px] md:tw-grid md:tw-grid-cols-3 md:tw-gap-[12px]">
<a :href="exhibition.website" :target="exhibition.website == '#' ? '_self' : '_blank'">
<div
class="tw-bg-[#F6F6F6] tw-w-full tw-text-neutrals-800 elevation-0 tw-px-[34px] tw-py-[12px] tw-float-left tw-text-[16px]">
<unicon name="globe" class="float-left mr-3" />
<span>{{ $t("Official Website") }}</span>
</div>
</a>
<a :href="
'https://www.facebook.com/share.php?u=' +
this.currentDomain +
this.$route.fullPath
" target="_blank">
<div
class="tw-bg-[#F6F6F6] tw-w-full tw-text-neutrals-800 elevation-0 tw-px-[34px] tw-py-[12px] tw-float-left tw-text-[16px]">
<unicon name="facebook-f" class="float-left mr-3" />
<span class="mt-n2">{{ $t("Share with friends") }}</span>
</div>
</a>
<div @click="toggleFavorite"
class="tw-bg-[#F6F6F6] tw-w-full tw-text-neutrals-800 elevation-0 tw-px-[34px] tw-py-[12px] tw-float-left tw-text-[16px]">
<v-icon class="mr-2" color="neutrals darken-5">{{ saved? "mdi-heart": "mdi-heart-outline" }}
</v-icon>
<span>{{ $t("Follow Event") }}</span>
</div>
</div>
</div>
</section>
<section class="step section3 tw-px-[30px] md:tw-px-0 xl:tw-pr-[30px] xl:tw-col-start-1 xl:tw-row-start-3">
<ExhibitionIntro class="d-block" :exhibition="exhibition"></ExhibitionIntro>
</section>
<section class="section4 tw-ml-[12px] md:tw-ml-0 md:tw-px-0 xl:tw-col-start-1 xl:tw-row-start-4">
<ExhibitionAD v-if="ads" :items="ads"></ExhibitionAD>
</section>
<section class="section5 tw-px-[30px] md:tw-px-0 xl:tw-col-start-1 xl:tw-row-start-5">
<div v-if="relatedserviceShow">
<h3 ref="relatedServices" id="relatedServices" data-step="relatedServices" class="step md:tw-text-[20px]">
<two-dots class="tw-mr-7" />{{ $t("Related Services") }}
</h3>
<RelatedServicesSwiper :getCategory="getCategory" class="tw-mb-[30px] xl:tw-max-w-[822px]"
@categoryid="getCategoryId" @getAllServiceList="getAllService" @test="testtest"></RelatedServicesSwiper>
<template v-for="(item, index) in relatedservicelist">
<RelatedServices v-if="index <= 2" :key="index" :relatedservice="item"
:relatedservicelist="relatedservicelist" class="tw-mb-[20px] md:tw-mb-[30px]">
</RelatedServices>
</template>
<button
class="tw-body-3 tw-text-primary-1 tw-w-full tw-py-[10px] tw-justify-center tw-flex tw-flex-row tw-items-center">
<nuxt-link v-if="getcategoryid" :to="localePath(getcategoryid)" target="_blank"
class="tw-mr-[16px] hover:tw-text-primary-1">
{{ $t('See more') }}
</nuxt-link>
<nuxt-link v-else :to="localePath('/service')" target="_blank" class="tw-mr-[16px] hover:tw-text-primary-1">
{{ $t('See more') }}
</nuxt-link>
<img src="~/assets/svg/seeMore.svg" alt="" />
</button>
</div>
<div ref="photoGallery" id="photoGallery" data-step="photoGallery"
v-show="exhibition.gallery.length > 0 || exhibition.videos.length > 0" :class="['tw-mb-10 step']">
<h3 class="md:tw-text-[20px]">
<two-dots class="mr-7" />{{ $t("Photo & Video Gallery") }}
</h3>
<ExhibitionPhotoVideoGallery class="mt-lg-13 px-n7 mt-7"
v-if="exhibition.gallery.length > 0 || exhibition.videos.length > 0" :exhibition="exhibition" />
</div>
<div ref="venue" id="venue" data-step="venue" v-show="exhibition.venues && exhibition.venues.length > 0"
:class="['tw-mb-10 step']">
<h3 class="md:tw-text-[20px]">
<two-dots class="mr-7" />{{ $t("Venue") }}
</h3>
<ExhibitionVenue class="mt-lg-13 mt-7" v-if="exhibition.venues && exhibition.venues.length > 0"
:exhibition="exhibition" />
</div>
<div ref="exhibitProfile" id="exhibitProfile" data-step="exhibitProfile" v-show="exhibition.profile != ''"
:class="['tw-mb-10 step']">
<h3 class="md:tw-text-[20px]">
<two-dots class="mr-7" />{{ $t("Exhibit Profile") }}
</h3>
<ExhibitionExhibitProfile class="mt-lg-13 mt-7" :exhibition="exhibition" />
</div>
<div ref="detailedDescription" id="detailedDescription" data-step="detailedDescription" :class="['step']"
v-show="exhibition.description != ''">
<h3 class="md:tw-text-[20px]">
<two-dots class="mr-7" />{{ $t("Detailed Description") }}
</h3>
<ExhibitionDetailDescription class="mt-lg-13 mt-7" :exhibition="exhibition" />
</div>
</section>
<!-- <section class="section6 tw-px-[30px] md:tw-px-0 xl:tw-col-span-2 xl:tw-row-start-6">
<h3>
<two-dots class="step tw-mr-7" />{{ $t("You might like ...") }}
</h3>
<v-slide-group>
<template v-for="(item, i) in exhibition.recommended">
<v-slide-item v-if="exhibition.recommended" :key="i">
<nuxt-link :to="localePath('/exhibition/' + item.id)">
<ExhibitionYouMightLike class="float-left" :item="item" />
</nuxt-link>
</v-slide-item>
</template>
</v-slide-group>
</section> -->
<section class="section7 tw-hidden xl:tw-block xl:tw-row-start-2 xl:tw-row-end-6">
<sideBarMenu :fixBarList="fixBarList" :currStep="currStep"></sideBarMenu>
</section>
</div>
</template>
<script>
import ExhibitionBannerArea from "@/components/exhibition/ExhibitionBannerArea";
import ExhibitionIntro from "@/components/exhibition/ExhibitionIntro";
import ExhibitionReviews from "@/components/exhibition/ExhibitionReviews";
import ExhibitionPhotoVideoGallery from "@/components/exhibition/ExhibitionPhotoVideoGallery";
import Breadcrumbs from "@/components/Breadcrumbs";
import TwoDots from "@/components/TwoDots";
import ExhibitionAD from "@/components/exhibition/ExhibitionAD";
import ExhibitionYouMightLike from "@/components/exhibition/ExhibitionYouMightLike";
import { Swiper, SwiperSlide } from "vue-awesome-swiper";
import { scrollama } from "scrollama";
import SeeMoreDetailDescription from "@/components/exhibition/SeeMoreDetailDescription.vue";
import RelatedServices from "@/components/service/RelatedServicesCard.vue";
import RelatedServicesSwiper from "@/components/swiper/relatedService.vue";
import mobileFixTopBar from "@/components/swiper/mobileFixTopBar.vue";
import sideBarMenu from "@/components/service/content/sideBarMenu.vue";
import { CornerDownLeftIcon } from "vue-feather-icons";
export default {
auth: false,
name: "ExhibitionContent",
components: {
Breadcrumbs,
ExhibitionAD,
ExhibitionBannerArea,
ExhibitionIntro,
ExhibitionReviews,
ExhibitionPhotoVideoGallery,
ExhibitionYouMightLike,
Swiper,
SwiperSlide,
scrollama,
TwoDots,
SeeMoreDetailDescription,
RelatedServices,
RelatedServicesSwiper,
mobileFixTopBar,
sideBarMenu,
},
meta: {
pageName: "Exhibition content",
},
head() {
return {
title: this.exhibition.ExhibitionName,
meta: [
{
name: this.exhibition.ExhibitionName,
content: this.exhibition.description,
},
{ hid: "og:title", name: "og:title", content: this.exhibition.name },
{ hid: "og:image", name: "og:image", content: this.exhibition.logo },
{
hid: "og:url",
name: "og:url",
content: this.currentDomain + this.$route.fullPath,
},
{
hid: "og:description",
name: "og:description",
content: this.exhibition.description,
},
{ hid: "og:type", name: "og:type", content: "website" },
// other meta
],
};
},
data() {
return {
windowHeight: 0,
currentDomain: "https://www.showeasy.com",
apiUrl: process.env.SERVICE_CONSOLE,
list: [],
navControl: {
ad: true,
nav: false,
mobnav: false,
},
ads: [],
exhibitionID: "",
tab: "0",
saved: false,
Favorite: {},
favoriteSet: new Set(),
exhibition: {
id: null,
name: "",
enname: "",
subtitle: null,
region: {},
country: {},
city: {},
logo: "",
banner: null,
startdate: "",
enddate: "",
status: "",
website: "",
isRecommend: null,
isLiked: null,
rating: 0,
reviewCount: null,
exhibitors: "",
visitors: "",
internalexhibitors: null,
intVisitors: 0,
area: null,
showstatusid: 100,
about: "",
profile: "",
description: "",
shortName: null,
frequency: {},
online: {},
organizers: [],
videos: [],
gallery: {},
venues: [],
categories: [],
subcategories: [],
},
relatedserviceShow: false,
relatedservicelist: [],
getservicecategory: [],
seemore: false,
getCategory: [],
getcategoryid: "",
testcategory: "",
currStep: null,
fixBar: false,
fixBarList: [],
};
},
async created() {
this.getExhibitionCard();
this.getAdList();
this.getFavorite();
// await this.getServiceCategory();
// await this.getCategorySwiperList();
// await this.getRelatedServiceList();
// await this.checkRelatedService();
},
async beforeCreate() {
},
mounted() {
let vm = this;
vm.$nextTick(function () {
vm.list = [
/* {
url: "#ExhibitionHighlightReview",
name: "Highlight Review",
isShow:false,
},
{
url: "#ExhibitionRelatedServices",
name: "Related Services",
isShow:false,
},*/
{
url: "#ExhibitionPhotoVideoGallery",
name: "Photo & Video Gallery",
isShow:
this.exhibition.gallery.length > 0 ||
this.exhibition.videos.length > 0
? true
: false,
},
{
url: "#ExhibitionVenue",
name: "Venue",
isShow:
this.exhibition.venues && this.exhibition.venues.length > 0
? true
: false,
},
{
url: "#ExhibitionExhibitProfile",
name: "Exhibit Profile",
isShow: this.exhibition.profile ? true : false,
},
{
url: "#ExhibitionDetailDescription",
name: "Detailed Description",
isShow: this.exhibition.description ? true : false,
},
/*{
url: "#ExhibitionReviews",
name: "Reviews",
isShow:false,
},*/
];
// instantiate the scrollama
const scrollama = require("scrollama");
const scroller = scrollama();
// setup the instance, pass callback functions
scroller
.setup({
step: ".exhibition-content .step",
offset: 0.6,
})
.onStepEnter((response) => {
// { element, index, direction }
vm.currStep = response.element.id;
if (response.index > 3) {
vm.$refs.stickySwiper.slideTo(4);
} else {
vm.$refs.stickySwiper.slideTo(0);
}
if (response.index >= 1) {
vm.fixBar = true;
} else {
vm.fixBar = false;
}
})
.onStepExit((response) => {
// { element, index, direction }
vm.currStep = response.element.id;
if (response.index >= 1) {
vm.fixBar = true;
} else {
vm.fixBar = false;
}
});
});
},
watch: {
relatedservicelist: {
handler: function () {
if (this.relatedservicelist) {
this.relatedservicelist.forEach((item) => {
this.serviceListCategory = item.category;
if (this.getservicecategory) {
this.getservicecategory.forEach((category) => {
if (item.category == category.ids[0]) {
item.category = category.lang_text;
}
});
}
});
}
},
},
},
methods: {
getExhibitionCard() {
this.exhibitionID = this.$route.params.id;
this.$axios
.get(
`/trending/api/Exhibition/Exhibition?Lang=${this.$i18n.localeProperties["langQuery"]}` +
`&ExhibitionID=${this.exhibitionID}`
)
.then((result) => {
if (result.data.DATA.rel) {
let exhib = result.data.DATA.rel;
this.exhibition.id = exhib.ExhibitionID;
this.exhibition.name = exhib.ExhibitionName;
this.exhibition.enname = exhib.ExhibitionENName;
this.exhibition.subtitle = "";
this.exhibition.region.name = exhib.Region.RegionName;
this.exhibition.country.name = exhib.Country.CountryName;
this.exhibition.city.name = exhib.City.CityName;
this.exhibition.logo = exhib.Logo;
this.exhibition.banner = "";
this.exhibition.startdate = exhib.StartDate;
this.exhibition.enddate = exhib.EndDate;
this.exhibition.status = exhib.Status;
this.exhibition.website = exhib.Website;
this.exhibition.isRecommend = exhib.IsRecommend;
this.exhibition.isLiked = "";
this.exhibition.rating = "";
this.exhibition.reviewCount = "";
this.exhibition.exhibitors = exhib.ExhibitorCount;
this.exhibition.visitors = exhib.VisitorCount;
this.exhibition.internalexhibitors = exhib.IntVisitorCount;
this.exhibition.intVisitors = exhib.IntVisitorCount;
this.exhibition.area = exhib.ExhibSize;
this.exhibition.showstatusid = "";
this.exhibition.about = exhib.Intro;
this.exhibition.profile = exhib.Profile;
this.exhibition.description = exhib.Detail;
this.exhibition.shortName = exhib.AbbreviatedName;
this.exhibition.frequency = exhib.Frequency;
this.exhibition.online = exhib.IsVirtualEvent;
this.exhibition.organizers = exhib.Organizers;
this.exhibition.videos = exhib.Videos;
this.exhibition.gallery = exhib.Images;
this.exhibition.venues = exhib.Venues;
this.exhibition.categories = exhib.MainCategories;
this.exhibition.subcategories = exhib.SubCategories;
this.setSideBarList();
this.setFavorite();
}
})
.catch((err) => {
console.log(err);
});
},
getAdList() {
this.ads = [{
image: require('/assets/img/thems/Frame33.png')
}, {
image: require('/assets/img/thems/Frame33.png')
}, {
image: require('/assets/img/thems/Frame33.png')
}]
},
setSideBarList() {
if (this.relatedservicelist.length > 0) {
this.fixBarList.push({ id: "relatedServices", title: "Related Services", show: true });
}
if (this.exhibition.videos.length > 0 || this.exhibition.gallery.length > 0) {
this.fixBarList.push({ id: "photoGallery", title: "Photo & Video Gallery", show: true });
}
if (this.exhibition.venues.length > 0) {
this.fixBarList.push({ id: "venue", title: "Venue", show: true });
}
if (this.exhibition.profile) {
this.fixBarList.push({ id: "exhibitProfile", title: "Exhibit Profile", show: true });
}
if (this.exhibition.description) {
this.fixBarList.push({ id: "detailedDescription", title: "Detailed Description", show: true });
}
},
introCheck(entries, observer, isIntersecting) {
this.navControl.mobnav = !isIntersecting;
},
checkNavBlock(entries, observer, isIntersecting) {
this.navControl.ad = isIntersecting;
},
navfix(entries, observer, isIntersecting) {
this.navControl.nav = isIntersecting;
},
getFavorite() {
this.favoriteSet.clear();
if (this.$auth.loggedIn) {
this.$axios.get(`/trending/api/Favorite/Favorites?Type=Exhibition`)
.then((result) => {
if(result && result.data && result.data.DATA && result.data.DATA.rel){
let favoriteList = [];
favoriteList = result.data.DATA.rel;
favoriteList.forEach(item => {
this.favoriteSet.add(item.ParentID);
})
}
})
.catch((err) => {
console.log("getFavorite"+err);
});
}
},
setFavorite() {
if (this.favoriteSet.size > 0 && this.$auth.loggedIn) {
if (this.favoriteSet.has(this.exhibition.id)) {
this.saved = true;
}
}
},
toggleFavorite() {
if (this.saved) {
this.saved = false;
this.Favorite.IsFavorite = 'N';
} else {
this.saved = true;
this.Favorite.IsFavorite = 'Y';
}
this.Favorite.Type = 'Exhibition';
this.Favorite.ParentID = this.exhibition.id;
if (this.$auth.loggedIn) {
this.$axios
.post(
`/trending/api/Favorite/Favorite`, this.Favorite
)
.then((result) => {
})
.catch((err) => {
console.log(err);
});
} else {
this.$router.push(this.localePath("/user"));
}
},
async getCategorySwiperList() {
let langCode = this.$i18n.localeProperties["langQuery"];
await this.$axios
.get(
`/service/category?lang_code=${langCode}`
)
.then((res) => {
let categoryArray = [];
let result = res.data;
for (let i in result) {
let obj = {
ids: [result[i].id, result[i].service_category_id],
lang_text: result[i].language_text[0].text
}
categoryArray.push(obj);
}
this.getCategory = categoryArray;
})
.catch((error) => console.log(error));
},
async getRelatedServiceList() {
// &expo_id={this.$route.params.id}
let vm = this;
await this.$axios
.get(
`${this.apiUrl}/user-services/relative-services?counts=3&country=${this.exhibition.country.id}&city=${this.exhibition.city.id}&lang_code=${this.$i18n.localeProperties["langQuery"]}&expo_id=${this.$route.params.id}`
)
.then((res) => {
this.relatedservicelist = res.data;
})
.catch((error) => console.log(error));
},
async getServiceCategory() {
let langCode = this.$i18n.localeProperties["langQuery"];
await this.$axios
.get(
`/service/category?lang_code=${langCode}`
)
.then((res) => {
let categoryArray = [];
let result = res.data;
for (let i in result) {
let obj = {
ids: [result[i].id, result[i].service_category_id],
lang_text: result[i].language_text[0].text
}
categoryArray.push(obj);
}
this.getservicecategory = categoryArray;
})
.catch((error) => console.log(error));
},
getAllService() {
let vm = this;
this.$axios
.get(
`${this.apiUrl}/user-services/relative-services?counts=3&country=${this.exhibition.country.id}&city=${this.exhibition.city.id}&lang_code=${this.$i18n.localeProperties["langQuery"]}&expo_id=${this.$route.params.id}`
)
.then((res) => {
this.relatedservicelist = res.data;
})
.catch((error) => console.log(error));
},
getCategoryId(data) {
this.getcategoryid = data;
},
testtest(data) {
this.testcategory = data;
this.serviceList();
},
serviceList() {
this.$axios
.get(
`${this.apiUrl}/user-services/relative-services?counts=3&country=${this.exhibition.country.id}&city=${this.exhibition.city.id}&lang_code=${this.$i18n.localeProperties["langQuery"]}&service_category=${this.testcategory}&expo_id=${this.$route.params.id}`
)
.then((res) => {
this.relatedservicelist = res.data;
})
.catch((error) => console.log(error));
},
checkRelatedService() {
this.fixBarList = [
{ id: "highlightReview", title: "Highlight Review", show: false },
{ id: "relatedServices", title: "Related Services", show: false },
{
id: "photoGallery",
title: "Photo & Video Gallery",
show:
this.exhibition.gallery.length > 0 ||
this.exhibition.videos.length > 0
? true
: false,
},
{
id: "venue",
title: "Venue",
show: this.exhibition.venues.length > 0 ? true : false,
},
{
id: "exhibitProfile",
title: "Exhibit Profile",
show: this.exhibition.profile ? true : false,
},
{
id: "detailedDescription",
title: "Detailed Description",
show: this.exhibition.description ? true : false,
},
{ id: "reviews", title: "Reviews", show: false },
];
if (this.relatedservicelist.length > 0) {
this.relatedserviceShow = true;
this.fixBarList = [
{ id: "highlightReview", title: "Highlight Review", show: false },
{ id: "relatedServices", title: "Related Services", show: true },
{
id: "photoGallery",
title: "Photo & Video Gallery",
show:
this.exhibition.gallery.length > 0 ||
this.exhibition.videos.length > 0
? true
: false,
},
{
id: "venue",
title: "Venue",
show: this.exhibition.venues.length > 0 ? true : false,
},
{
id: "exhibitProfile",
title: "Exhibit Profile",
show: this.exhibition.profile ? true : false,
},
{
id: "detailedDescription",
title: "Detailed Description",
show: this.exhibition.description ? true : false,
},
{ id: "reviews", title: "Reviews", show: false },
];
}
}
},
};
</script>
<style lang="scss" scoped>
</style>