|
|
<template> <div class="saveExhibition xl:tw-max-w-[1246px] xl:tw-mx-auto"> <div class="xl:tw-flex xl:tw-justify-between xl:tw-items-start"> <userSidebar :userData="userData" :firstName="firstName" :lastName="lastName" class="tw-hidden xl:tw-block" > </userSidebar> <!-- <div class="xl:tw-hidden"></div> --> <div class="tw-bg-white xl:tw-p-[30px] xl:tw-rounded-[20px] xl:tw-min-w-[900px] xl:tw-max-w-[900px]" > <div class="tw-text-[20px] tw-font-bold tw-text-base-primary tw-mb-[20px] md:t24 md:tw-mb-[30px]" > <two-dots class="tw-mr-[30px]"></two-dots >{{ $t("userProfile.savedExhibitions") }} </div>
<div class="tw-text-[14px] tw-text-base-primary tw-mb-[10px]"> {{ $t("userProfile.savedExhibitionsFilter") }} </div> <div> <select v-model="countrySelect" class="tw-text-neutrals-500 tw-w-[196px] tw-border tw-border-solid tw-border-neutrals-200 tw-rounded-[10px] tw-px-[15px] tw-py-[9px] tw-head-body tw-outline-none focus:tw-border-primary-1 md:tw-text-[16px]" > <option v-for="(item, index) in countryOptions" :key="index" :value="item.id" > {{ item.name }} </option> </select> <!-- <select class="tw-text-neutrals-500 tw-border tw-border-solid tw-border-neutrals-200 tw-rounded-[10px] tw-px-[15px] tw-py-[9px] tw-head-body tw-outline-none focus:tw-border-primary-1 md:tw-text-[16px]" > <option v-for="(item, index) in statusOptions" :key="index"> {{ item.status }} </option> </select> --> </div> <div v-if="userVisibleSavedExhibitionList.length == 0" class="tw-mt-[80px] md:tw-mt-[90px]" > <img class="tw-flex tw-mx-auto tw-w-[160px]" src="~/assets/img/savedExhibitionEmpty.png" alt="" /> <div class="tw-text-[16px] tw-text-neutrals-800 tw-w-fit tw-mx-auto tw-mb-[50px] md:tw-mb-[60px]" > {{ $t("userProfile.noSavedExhibitions") }} </div> <nuxt-link :to="localePath('/')" class="tw-flex tw-text-[16px] tw-w-fit tw-bg-primary-1 tw-text-white tw-px-[16px] tw-py-[9px] tw-rounded-[12px] tw-mx-auto tw-mb-[37px] md:tw-mb-0" > {{ $t("Explore with ShowEasy") }} </nuxt-link> </div>
<div v-else class="tw-mt-[20px] md:tw-mt-[30px]"> <ExhibitionListCard v-for="(exhibition, index) in countryFilterList.slice( (this.page - 1) * 6, this.page * 6 )" :key="index" class="tw-mb-[20px]" :item="exhibition" @toggle-favorite="removeExhibitionRelation($event)" > </ExhibitionListCard> <v-pagination v-model="page" class="tw-mt-[28px]" :length="userSavedExhibitionPageLength" ></v-pagination> </div> </div> </div> </div> </template> <script> import TwoDots from "@/components/TwoDots"; import ExhibitionListCard from "~/components/exhibition/ExhibitionListCard.vue"; import userSidebar from "@/components/user/userSidebar.vue"; import elementSelect from "@/components/newComponent/form/ElementSelect.vue"; export default { name: "saveExhibition", layout: "profile",
components: { TwoDots, ExhibitionListCard, userSidebar, elementSelect, }, data() { return { firstName: "", lastName: "", userData: {}, userCompanyId: [], userCompanyList: [], userAddNewCompanyList: [], userSavedExhibitionList: [], userVisibleSavedExhibitionList: [], userSavedExhibitionPageLength: 0, savedExhibitionPerPage: 6, yearOptions: [], monthOptions: [], dayOptions: [], yearSelect: "", monthSelect: "", daySelect: "", languageSelect: { en: "", zhtw: "", }, phoneValid: false, countryOptions: [], countrySelect: 999, statusOptions: [], statusSelect: 100, page: 1, filterList: [], countryFilterList: [], }; }, async created() { // await this.fetchUserData();
// await this.fetchSavedExhibition();
// await this.$axios
// .get(`users/countries?lang=${this.$i18n.locale.replace("-", "")}`)
// .then((result) => {
// const initial = {
// name: this.$t("userProfile.allCountries"),
// id: 999,
// };
// this.countryOptions = result.data.result;
// this.countryOptions.splice(0, 0, initial);
// })
// .catch((err) => {
// console.log(err);
// });
// await this.$axios
// .get(`exhibitions/filters?lang=${this.$i18n.locale.replace("-", "")}`)
// .then((result) => {
// this.statusOptions = result.data.filters.statuses;
// })
// .catch((err) => {
// console.log(err);
// });
this.countryFilterList = this.userVisibleSavedExhibitionList; }, mounted() { this.yearOptions = Array.from(new Array(103), (val, index) => (index + 1920).toString() ); this.monthOptions = Array.from(new Array(13), (val, index) => { if (index < 10 && index > 0) { return "0" + index.toString(); } if (index >= 10) { return index.toString(); } }); this.dayOptions = Array.from(new Array(32), (val, index) => { if (index < 10 && index > 0) { return "0" + index.toString(); } if (index >= 10) { return index.toString(); } }); this.$nextTick(() => { window.addEventListener("resize", this.onResize); }); }, watch: { countrySelect: { handler: function () { if (this.countrySelect) { this.filterSavedExhibition(this.countrySelect); // this.fetchSavedExhibition();
} }, }, }, computed: {}, methods: { patchUserData() { if (this.width < 1366) { this.isEditInfoDialogActive = !this.isEditInfoDialogActive; } this.userData.prefer_country = JSON.stringify(this.languageSelect); if (this.$vuetify.breakpoint.name !== "xs") { this.userData.birth_date = this.yearSelect + "-" + this.monthSelect + "-" + this.daySelect; if (this.userData.birth_date.length < 10) { this.userData.birth_date = null; } } const patchData = JSON.parse(JSON.stringify(this.userData)); delete patchData.LoginLog; delete patchData.UserCompany; delete patchData.UserSocialRelation; delete patchData.UserExhibition; this.$axios .put( `/member/users/${this.$route.params.id}?jwt=${ this.$auth.$storage.getUniversal("jwt").token || "" }`,
patchData ) .then((res) => { this.successUpdate = !this.successUpdate; setTimeout(() => { this.successUpdate = !this.successUpdate; }, 1000); this.fetchUserData(); this.$auth.$storage.setUniversal("userPicture", patchData.picture); this.$auth.$storage.setUniversal("userLastName", patchData.last_name); this.$store.dispatch("updatePicture"); }) .catch((err) => { console.log(err); }); }, async fetchUserData() { await this.$axios .get( `/member/users/${ this.$auth.$storage.getUniversal("jwt").user_id }?jwt=${this.$auth.$storage.getUniversal("jwt").token}`
) .then((res) => { this.userData = res.data; console.log(this.userData.UserExhibition); this.userCompanyId = res.data.UserCompany; this.firstName = res.data.first_name; this.lastName = res.data.last_name; this.userData.phone ? (this.phoneValid = true) : (this.phoneValid = false); !this.userData.prefer_country && typeof this.userData.prefer_country === "object" ? this.userData.prefer_country : (this.languageSelect = JSON.parse(this.userData.prefer_country)); if ( !this.userData.birth_date && typeof this.userData.birth_date === "object" ) { this.yearSelect = ""; this.monthSelect = ""; this.daySelect = ""; } else { const date = this.userData.birth_date.split("-"); this.yearSelect = date[0]; this.monthSelect = date[1]; this.daySelect = date[2]; } }) .catch((err) => { console.log(err); }); }, handleImageUpdate(pictureURL) { this.userData.picture = pictureURL; this.patchUserData(); this.closeCropDialog(); },
logout() { this.$auth.$storage.removeUniversal("jwt"); this.$auth.$storage.removeUniversal("userPicture"); this.$auth.$storage.removeUniversal("userLastName"); this.$auth.$storage.removeUniversal("userBeforePath");
if (window.innerWidth < 1024) { this.$router.push(this.localePath("/")); } else { this.$router.push(this.localePath("/user")); } this.$auth.logout(); },
async fetchSavedExhibition() { // if (this.width < 1366) {
// this.isSavedExhibitionsDialogActive =
// !this.isSavedExhibitionsDialogActive;
// } else {
// this.tabs = "savedExhibitions";
// }
const exhibitionList = []; for (let i = 0; i < this.userData.UserExhibition.length; i++) { exhibitionList.push(this.userData.UserExhibition[i].exhibition_id); } if (exhibitionList.length > 0) { await this.$axios .get( `/member/exhibitions?lang=${this.$i18n.locale.replace( "-", "" )}&exhibition_id=${[...exhibitionList]}`
) .then((result) => { this.userSavedExhibitionList = result.data; console.log(this.userSavedExhibitionList); this.userSavedExhibitionPageLength = Math.ceil( this.userSavedExhibitionList.length / this.savedExhibitionPerPage );
this.userSavedExhibitionList = this.userSavedExhibitionList; for (let i = 0; i < this.userSavedExhibitionList.length; i++) { this.userSavedExhibitionList[i].saved = true; } this.userVisibleSavedExhibitionList = JSON.parse( JSON.stringify(this.userSavedExhibitionList) ); }) .catch((err) => { console.log(err); }); } }, filterSavedExhibition(countryId) { this.page = 1; if (countryId == "999") { this.countryFilterList = JSON.parse( JSON.stringify(this.userSavedExhibitionList) ); } else { this.countryFilterList = this.userVisibleSavedExhibitionList.filter( (item) => { return item.country.id == countryId; } ); } this.userSavedExhibitionPageLength = Math.ceil( this.countryFilterList.length / this.savedExhibitionPerPage ); },
async removeExhibitionRelation() { this.page = 1; await this.fetchUserData(); await this.fetchSavedExhibition(); this.countryFilterList = this.userVisibleSavedExhibitionList; if (this.countrySelect.toString() !== "999") { this.countrySelect = 999; } }, }, }; </script>
<style scoped lang="scss"> select { background-image: url("~/assets/svg/dropdownarrow.svg"); width: auto; height: auto; background-position: right 12px center; background-repeat: no-repeat; } </style>
|