|  | @@ -0,0 +1,193 @@
 | 
											
												
													
														|  | 
 |  | +<template>
 | 
											
												
													
														|  | 
 |  | +  <q-page>
 | 
											
												
													
														|  | 
 |  | +    <div
 | 
											
												
													
														|  | 
 |  | +      class="row justify-center text-h4 text-weight-bold text-blue-6 q-mt-md"
 | 
											
												
													
														|  | 
 |  | +    >
 | 
											
												
													
														|  | 
 |  | +      Blogs of The Week
 | 
											
												
													
														|  | 
 |  | +    </div>
 | 
											
												
													
														|  | 
 |  | +    <div class="q-pa-md">
 | 
											
												
													
														|  | 
 |  | +      <q-carousel
 | 
											
												
													
														|  | 
 |  | +        animated
 | 
											
												
													
														|  | 
 |  | +        v-model="slide"
 | 
											
												
													
														|  | 
 |  | +        navigation
 | 
											
												
													
														|  | 
 |  | +        infinite
 | 
											
												
													
														|  | 
 |  | +        height="540px"
 | 
											
												
													
														|  | 
 |  | +        :autoplay="autoplay"
 | 
											
												
													
														|  | 
 |  | +        arrows
 | 
											
												
													
														|  | 
 |  | +        transition-prev="slide-right"
 | 
											
												
													
														|  | 
 |  | +        transition-next="slide-left"
 | 
											
												
													
														|  | 
 |  | +        @mouseenter="autoplay = false"
 | 
											
												
													
														|  | 
 |  | +        @mouseleave="autoplay = 2000"
 | 
											
												
													
														|  | 
 |  | +      >
 | 
											
												
													
														|  | 
 |  | +        <q-carousel-slide
 | 
											
												
													
														|  | 
 |  | +          v-for="(item, index) in sliders"
 | 
											
												
													
														|  | 
 |  | +          :key="index"
 | 
											
												
													
														|  | 
 |  | +          :name="index"
 | 
											
												
													
														|  | 
 |  | +          :img-src="item.imageUrl"
 | 
											
												
													
														|  | 
 |  | +          class="cursor-pointer"
 | 
											
												
													
														|  | 
 |  | +          @click="gotoUrl(item.linkToBlog)"
 | 
											
												
													
														|  | 
 |  | +        >
 | 
											
												
													
														|  | 
 |  | +          <div class="q-mt-xl q-ml-xl absolute-left custom-caption">
 | 
											
												
													
														|  | 
 |  | +            <div style="height: 100px"></div>
 | 
											
												
													
														|  | 
 |  | +            <div class="text-h1 text-white text-weight-bolder">
 | 
											
												
													
														|  | 
 |  | +              {{ item.title }}
 | 
											
												
													
														|  | 
 |  | +            </div>
 | 
											
												
													
														|  | 
 |  | +            <div class="text-h5 text-white text-weight-medium">
 | 
											
												
													
														|  | 
 |  | +              {{ item.subTitle }}
 | 
											
												
													
														|  | 
 |  | +            </div>
 | 
											
												
													
														|  | 
 |  | +          </div>
 | 
											
												
													
														|  | 
 |  | +        </q-carousel-slide>
 | 
											
												
													
														|  | 
 |  | +      </q-carousel>
 | 
											
												
													
														|  | 
 |  | +    </div>
 | 
											
												
													
														|  | 
 |  | +    <div class="row justify-center q-pa-md">
 | 
											
												
													
														|  | 
 |  | +      <q-btn rounded color="primary" size="xl" label="Write your blog" />
 | 
											
												
													
														|  | 
 |  | +    </div>
 | 
											
												
													
														|  | 
 |  | +    <div class="row q-pa-md">
 | 
											
												
													
														|  | 
 |  | +      <div class="q-gutter-y-md col-12 col-md-8">
 | 
											
												
													
														|  | 
 |  | +        <q-tabs v-model="tab" dense align="justify" class="text-primary">
 | 
											
												
													
														|  | 
 |  | +          <q-tab :ripple="false" name="lb" label="Latest Blogs" />
 | 
											
												
													
														|  | 
 |  | +          <q-tab :ripple="false" name="mvm" label="Most Viewed in a Month" />
 | 
											
												
													
														|  | 
 |  | +          <q-tab :ripple="false" name="bfl" label="Bloggers I'm following" />
 | 
											
												
													
														|  | 
 |  | +        </q-tabs>
 | 
											
												
													
														|  | 
 |  | +      </div>
 | 
											
												
													
														|  | 
 |  | +    </div>
 | 
											
												
													
														|  | 
 |  | +    <div class="row justify-left">
 | 
											
												
													
														|  | 
 |  | +      <div
 | 
											
												
													
														|  | 
 |  | +        class="col-12 col-sm-4 col-md-2"
 | 
											
												
													
														|  | 
 |  | +        v-for="(item, index) in globalUnifiedItemList"
 | 
											
												
													
														|  | 
 |  | +        v-bind:key="index"
 | 
											
												
													
														|  | 
 |  | +      >
 | 
											
												
													
														|  | 
 |  | +        <div class="q-pa-md">
 | 
											
												
													
														|  | 
 |  | +          <q-card
 | 
											
												
													
														|  | 
 |  | +            v-if="item.type === 'blog'"
 | 
											
												
													
														|  | 
 |  | +            class="cursor-pointer"
 | 
											
												
													
														|  | 
 |  | +            flat
 | 
											
												
													
														|  | 
 |  | +            bordered
 | 
											
												
													
														|  | 
 |  | +          >
 | 
											
												
													
														|  | 
 |  | +            <q-img
 | 
											
												
													
														|  | 
 |  | +              :src="item.value.headImageUrl"
 | 
											
												
													
														|  | 
 |  | +              placeholder-src="https://photoprism.hichinatravel.com/api/v1/t/2bfc32550ae040956f7e861566d26c487c0143e7/32mcf2k4/tile_224"
 | 
											
												
													
														|  | 
 |  | +            />
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +            <q-card-section>
 | 
											
												
													
														|  | 
 |  | +              <div class="text-overline text-orange-9">
 | 
											
												
													
														|  | 
 |  | +                {{ item.value.createdTime }}
 | 
											
												
													
														|  | 
 |  | +              </div>
 | 
											
												
													
														|  | 
 |  | +              <div class="text-h5 q-mt-sm q-mb-xs">{{ item.value.title }}</div>
 | 
											
												
													
														|  | 
 |  | +              <div class="text-caption text-grey">
 | 
											
												
													
														|  | 
 |  | +                {{ item.value.content }}
 | 
											
												
													
														|  | 
 |  | +              </div>
 | 
											
												
													
														|  | 
 |  | +            </q-card-section>
 | 
											
												
													
														|  | 
 |  | +          </q-card>
 | 
											
												
													
														|  | 
 |  | +        </div>
 | 
											
												
													
														|  | 
 |  | +      </div>
 | 
											
												
													
														|  | 
 |  | +    </div>
 | 
											
												
													
														|  | 
 |  | +    <div class="row">
 | 
											
												
													
														|  | 
 |  | +      <div class="col-12">
 | 
											
												
													
														|  | 
 |  | +        <p class="text-center" style="background-color: #b4b4b4">
 | 
											
												
													
														|  | 
 |  | +          Scroll to load more
 | 
											
												
													
														|  | 
 |  | +        </p>
 | 
											
												
													
														|  | 
 |  | +      </div>
 | 
											
												
													
														|  | 
 |  | +    </div>
 | 
											
												
													
														|  | 
 |  | +  </q-page>
 | 
											
												
													
														|  | 
 |  | +</template>
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +<script>
 | 
											
												
													
														|  | 
 |  | +import { ref, onMounted } from "vue";
 | 
											
												
													
														|  | 
 |  | +import { api } from "boot/axios";
 | 
											
												
													
														|  | 
 |  | +import { debounce } from "lodash";
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +export default {
 | 
											
												
													
														|  | 
 |  | +  name: "BlogPage",
 | 
											
												
													
														|  | 
 |  | +  setup() {
 | 
											
												
													
														|  | 
 |  | +    const unifiedItemList = ref([]);
 | 
											
												
													
														|  | 
 |  | +    const blogPageSizePage = ref(20);
 | 
											
												
													
														|  | 
 |  | +    const currentPage = ref(1);
 | 
											
												
													
														|  | 
 |  | +    const bloglist = ref([]);
 | 
											
												
													
														|  | 
 |  | +    const sliders = ref([]);
 | 
											
												
													
														|  | 
 |  | +    const totalBlogCount = ref(0);
 | 
											
												
													
														|  | 
 |  | +    const globalUnifiedItemList = ref([]);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    function loadBlogList() {
 | 
											
												
													
														|  | 
 |  | +      unifiedItemList.value = [];
 | 
											
												
													
														|  | 
 |  | +      var params = {};
 | 
											
												
													
														|  | 
 |  | +      params.pageSize = blogPageSizePage.value;
 | 
											
												
													
														|  | 
 |  | +      params.query = "";
 | 
											
												
													
														|  | 
 |  | +      params.page = currentPage.value;
 | 
											
												
													
														|  | 
 |  | +      api
 | 
											
												
													
														|  | 
 |  | +        .get("/api/public/blog/list", { params: params })
 | 
											
												
													
														|  | 
 |  | +        .then(function (response) {
 | 
											
												
													
														|  | 
 |  | +          bloglist.value = response.data.data.data;
 | 
											
												
													
														|  | 
 |  | +          totalBlogCount.value = response.data.data.total;
 | 
											
												
													
														|  | 
 |  | +          for (var index in bloglist.value) {
 | 
											
												
													
														|  | 
 |  | +            var obj = {};
 | 
											
												
													
														|  | 
 |  | +            // obj.type=parseInt(Math.random() * 2)==0?'blog':'scaleblog';
 | 
											
												
													
														|  | 
 |  | +            obj.type = "blog";
 | 
											
												
													
														|  | 
 |  | +            obj.value = bloglist.value[index];
 | 
											
												
													
														|  | 
 |  | +            unifiedItemList.value.push(obj);
 | 
											
												
													
														|  | 
 |  | +          }
 | 
											
												
													
														|  | 
 |  | +          globalUnifiedItemList.value = globalUnifiedItemList.value.concat(
 | 
											
												
													
														|  | 
 |  | +            unifiedItemList.value
 | 
											
												
													
														|  | 
 |  | +          );
 | 
											
												
													
														|  | 
 |  | +        })
 | 
											
												
													
														|  | 
 |  | +        .catch(function (error) {
 | 
											
												
													
														|  | 
 |  | +          console.log(error);
 | 
											
												
													
														|  | 
 |  | +        });
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    function loadSliders() {
 | 
											
												
													
														|  | 
 |  | +      api
 | 
											
												
													
														|  | 
 |  | +        .get("/api/public/pagecontent/bloghomesliders")
 | 
											
												
													
														|  | 
 |  | +        .then(function (response) {
 | 
											
												
													
														|  | 
 |  | +          console.log("blog sliders:");
 | 
											
												
													
														|  | 
 |  | +          sliders.value = response.data.data;
 | 
											
												
													
														|  | 
 |  | +          console.log(sliders.value);
 | 
											
												
													
														|  | 
 |  | +          loadBlogList();
 | 
											
												
													
														|  | 
 |  | +        })
 | 
											
												
													
														|  | 
 |  | +        .catch(function (error) {
 | 
											
												
													
														|  | 
 |  | +          console.log(error);
 | 
											
												
													
														|  | 
 |  | +        });
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    function loadMore() {
 | 
											
												
													
														|  | 
 |  | +      currentPage.value += 1;
 | 
											
												
													
														|  | 
 |  | +      var maxPage = totalBlogCount.value / blogPageSizePage.value;
 | 
											
												
													
														|  | 
 |  | +      if (currentPage.value <= maxPage + 1) {
 | 
											
												
													
														|  | 
 |  | +        loadBlogList();
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    function getNextBatch() {
 | 
											
												
													
														|  | 
 |  | +      window.onscroll = debounce(function () {
 | 
											
												
													
														|  | 
 |  | +        let bottomOfWindow =
 | 
											
												
													
														|  | 
 |  | +          document.documentElement.scrollTop + window.innerHeight + 100 >
 | 
											
												
													
														|  | 
 |  | +          document.documentElement.scrollHeight;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if (bottomOfWindow) {
 | 
											
												
													
														|  | 
 |  | +          loadMore();
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +      }, 500);
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    onMounted(() => {
 | 
											
												
													
														|  | 
 |  | +      loadSliders();
 | 
											
												
													
														|  | 
 |  | +      getNextBatch();
 | 
											
												
													
														|  | 
 |  | +    });
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    return {
 | 
											
												
													
														|  | 
 |  | +      slide: ref(1),
 | 
											
												
													
														|  | 
 |  | +      autoplay: ref(true),
 | 
											
												
													
														|  | 
 |  | +      sliders,
 | 
											
												
													
														|  | 
 |  | +      tab: ref("lb"),
 | 
											
												
													
														|  | 
 |  | +      globalUnifiedItemList,
 | 
											
												
													
														|  | 
 |  | +    };
 | 
											
												
													
														|  | 
 |  | +  },
 | 
											
												
													
														|  | 
 |  | +};
 | 
											
												
													
														|  | 
 |  | +</script>
 | 
											
												
													
														|  | 
 |  | +<style lang="sass" scoped>
 | 
											
												
													
														|  | 
 |  | +.custom-caption
 | 
											
												
													
														|  | 
 |  | +  text-align: left
 | 
											
												
													
														|  | 
 |  | +  padding: 12px
 | 
											
												
													
														|  | 
 |  | +  color: white
 | 
											
												
													
														|  | 
 |  | +</style>
 | 
											
												
													
														|  | 
 |  | +
 |