|
@@ -30,6 +30,44 @@
|
|
|
</q-carousel-slide>
|
|
|
</q-carousel>
|
|
|
</div>
|
|
|
+ <div class="q-pa-md" style="height: 40px"></div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-6 col-md-2 text-blue-6 text-h4 q-pl-md">Destinations</div>
|
|
|
+ <div class="col-md-8"></div>
|
|
|
+ <div class="col-6 col-md-2 text-blue-6 cursor-pointer">
|
|
|
+ More destinations >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="row">
|
|
|
+ <div class="text-h3 q-pl-md q-mt-md">Places to go in China!</div>
|
|
|
+ </div>
|
|
|
+ <div class="row justify-center">
|
|
|
+ <div
|
|
|
+ class="col-12 col-sm-4 col-md-2"
|
|
|
+ v-for="item in randDestinations"
|
|
|
+ :key="item.destinationId"
|
|
|
+ >
|
|
|
+ <div class="q-pa-md">
|
|
|
+ <q-card
|
|
|
+ class="rand-destination-card cursor-pointer"
|
|
|
+ @mouseenter="hoverFlag = true"
|
|
|
+ @mouseleave="hoverFlag = false"
|
|
|
+ >
|
|
|
+ <q-img
|
|
|
+ style="height: 100%"
|
|
|
+ :src="normalizeMultiImageUrl(item.destinationProfileImage)"
|
|
|
+ >
|
|
|
+ <div class="absolute-bottom" v-if="hoverFlag">
|
|
|
+ <div class="text-h6">{{ item.destinationName }}</div>
|
|
|
+ <div class="text-subtitle2">
|
|
|
+ {{ item.parentDestinationName }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </q-img>
|
|
|
+ </q-card>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</q-page>
|
|
|
</template>
|
|
|
|
|
@@ -42,18 +80,39 @@ export default defineComponent({
|
|
|
name: "IndexPage",
|
|
|
setup() {
|
|
|
const sliders = ref([]);
|
|
|
-
|
|
|
+ const randDestinations = ref([]);
|
|
|
+ const hoverFlag = ref(false);
|
|
|
function goToBlog(url) {
|
|
|
window.location.href = url;
|
|
|
}
|
|
|
|
|
|
+ function normalizeMultiImageUrl(input) {
|
|
|
+ if (input.indexOf(",") > -1) {
|
|
|
+ return input.split(",").shift();
|
|
|
+ } else if (input.indexOf(";") > -1) {
|
|
|
+ return input.split(";").shift();
|
|
|
+ }
|
|
|
+ return input;
|
|
|
+ }
|
|
|
+
|
|
|
+ function loadRand6Destinations() {
|
|
|
+ api
|
|
|
+ .get("/api/public/destination/rand6")
|
|
|
+ .then((response) => {
|
|
|
+ randDestinations.value = response.data.data;
|
|
|
+ console.log("randDestinations.value");
|
|
|
+ console.log(randDestinations.value);
|
|
|
+ })
|
|
|
+ .catch((e) => {
|
|
|
+ alert(e);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
function loadHomeSliders() {
|
|
|
api
|
|
|
.get("/api/public/pagecontent/homesliders")
|
|
|
.then((response) => {
|
|
|
sliders.value = response.data.data;
|
|
|
- console.log("sliders.value");
|
|
|
- console.log(sliders.value);
|
|
|
// loadBlogList();
|
|
|
})
|
|
|
.catch((e) => {
|
|
@@ -64,13 +123,17 @@ export default defineComponent({
|
|
|
onMounted(() => {
|
|
|
// we call "next()" method of our component
|
|
|
loadHomeSliders();
|
|
|
+ loadRand6Destinations();
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
slide: ref(1),
|
|
|
autoplay: ref(true),
|
|
|
sliders,
|
|
|
+ randDestinations,
|
|
|
+ hoverFlag,
|
|
|
goToBlog,
|
|
|
+ normalizeMultiImageUrl,
|
|
|
};
|
|
|
},
|
|
|
});
|
|
@@ -80,4 +143,9 @@ export default defineComponent({
|
|
|
text-align: left
|
|
|
padding: 12px
|
|
|
color: white
|
|
|
+
|
|
|
+.rand-destination-card
|
|
|
+ width: 100%
|
|
|
+ max-width: 350px
|
|
|
+ height: 300px
|
|
|
</style>
|