|
@@ -1,9 +1,157 @@
|
|
|
<template>
|
|
|
- <q-page> blog detail </q-page>
|
|
|
+ <q-page>
|
|
|
+ <div class="row justify-center">
|
|
|
+ <div class="col-12 col-md-9" style="min-height: 500px">
|
|
|
+ <div class="text-weight-bold text-h3 q-pa-xl">
|
|
|
+ {{ title }}
|
|
|
+ </div>
|
|
|
+ <div class="row col-12" style="min-height: 50px">
|
|
|
+ <div class="q-ml-xl">
|
|
|
+ <q-avatar size="86px">
|
|
|
+ <img :src="authorProfileImageUrl" />
|
|
|
+ </q-avatar>
|
|
|
+ </div>
|
|
|
+ <div class="col-8 q-ml-md">
|
|
|
+ <div class="text-weight-bold text-h6">{{ username }}</div>
|
|
|
+ <div><q-btn color="primary" icon="add" label="Follow" /></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="row q-px-xl q-py-md text-h5">
|
|
|
+ <div class="col-5">{{ createdTime }}</div>
|
|
|
+ <div class="col-3">
|
|
|
+ <q-icon color="blue" name="visibility" />{{ pageViewCnt }}
|
|
|
+ </div>
|
|
|
+ <div class="col-4">
|
|
|
+ Collect this<q-btn
|
|
|
+ class="q-ml-sm"
|
|
|
+ round
|
|
|
+ color="primary"
|
|
|
+ icon="bookmark"
|
|
|
+ size="xs"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class="q-px-xl q-pt-md"
|
|
|
+ style="border-top: 1px solid black"
|
|
|
+ v-html="content"
|
|
|
+ ></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </q-page>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import { ref, onMounted, getCurrentInstance, reactive } from "vue";
|
|
|
+import { api } from "boot/axios";
|
|
|
+import { useRoute } from "vue-router";
|
|
|
+import { useQuasar } from "quasar";
|
|
|
+import { useSeoMeta } from "unhead";
|
|
|
export default {
|
|
|
name: "BlogDetail",
|
|
|
+ setup() {
|
|
|
+ const route = useRoute();
|
|
|
+ const instance = getCurrentInstance();
|
|
|
+ const app = getCurrentInstance().appContext.app;
|
|
|
+ const gp = app.config.globalProperties;
|
|
|
+ const $q = useQuasar();
|
|
|
+
|
|
|
+ const pageViewCnt = ref(0);
|
|
|
+ const authorProfileImageUrl = ref("");
|
|
|
+ const title = ref("");
|
|
|
+ const username = ref("");
|
|
|
+ const content = ref("");
|
|
|
+ const createdTime = ref("");
|
|
|
+
|
|
|
+ const siteData = reactive({
|
|
|
+ title: "My Awesome Blog",
|
|
|
+ shortContent: "Hichina Travel Blog",
|
|
|
+ });
|
|
|
+
|
|
|
+ function logView() {
|
|
|
+ api
|
|
|
+ .post("/api/public/pagestats/view-blog/" + route.params.blogId)
|
|
|
+ .then((res) => {
|
|
|
+ console.log("view cnt of this blog:");
|
|
|
+ console.log(res.data);
|
|
|
+ pageViewCnt.value = res.data.data;
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.error("Error:", err);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ function getAuthorPrincipal() {
|
|
|
+ api
|
|
|
+ .get(
|
|
|
+ "/api/public/blog/blog-author-profile-image/" + route.params.blogId
|
|
|
+ )
|
|
|
+ .then(function (response) {
|
|
|
+ console.log("blog author profile image");
|
|
|
+ console.log(response.data);
|
|
|
+ if (response.data.ok == true) {
|
|
|
+ authorProfileImageUrl.value = response.data.data;
|
|
|
+ if (
|
|
|
+ authorProfileImageUrl.value == null ||
|
|
|
+ authorProfileImageUrl.value.length < 1
|
|
|
+ ) {
|
|
|
+ authorProfileImageUrl.value =
|
|
|
+ "https://photoprism.hichinatravel.com/api/v1/t/8623903789c65a160279faa0b33159413cb18af4/32mcf2k4/fit_2048";
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ gp.$generalNotify($q, false, response.data.message);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(function (error) {
|
|
|
+ console.log(error);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function loadBlogDetail() {
|
|
|
+ api
|
|
|
+ .get("/api/public/blog/" + route.params.blogId)
|
|
|
+ .then((response) => {
|
|
|
+ title.value = response.data.data.title;
|
|
|
+ username.value = response.data.data.authorName;
|
|
|
+ content.value = response.data.data.content;
|
|
|
+ createdTime.value = response.data.data.createdTime;
|
|
|
+
|
|
|
+ // set head meta for seo
|
|
|
+ // Set the title meta tag
|
|
|
+ siteData.title = title.value;
|
|
|
+ siteData.shortContent = gp
|
|
|
+ .$removeHtmlTag(content.value)
|
|
|
+ .substring(0, 50);
|
|
|
+
|
|
|
+ useSeoMeta({
|
|
|
+ title: siteData.title,
|
|
|
+ description: siteData.shortContent,
|
|
|
+ ogDescription: siteData.shortContent,
|
|
|
+ ogTitle: siteData.title,
|
|
|
+ ogImage:
|
|
|
+ "https://www.hichinatravel.com/static/png/name-67280b81.png",
|
|
|
+ twitterCard: "summary_large_image",
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch((e) => {
|
|
|
+ console.log("get blog detail err");
|
|
|
+ console.log(e);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ logView();
|
|
|
+ getAuthorPrincipal();
|
|
|
+ loadBlogDetail();
|
|
|
+ });
|
|
|
+
|
|
|
+ return {
|
|
|
+ title,
|
|
|
+ authorProfileImageUrl,
|
|
|
+ username,
|
|
|
+ createdTime,
|
|
|
+ pageViewCnt,
|
|
|
+ content,
|
|
|
+ };
|
|
|
+ },
|
|
|
};
|
|
|
</script>
|