minhnt-dev: only ssr
This commit is contained in:
@@ -1,9 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import _cloneDeep from 'lodash/cloneDeep';
|
||||
|
||||
import DynamicTemplate from "~/components/dynamic-page/page/templates/index.vue";
|
||||
import DynamicSection from "~/components/dynamic-page/page-section/templates/index.vue";
|
||||
|
||||
import { useDynamicPageStore } from '~/stores/dynamic-page';
|
||||
const { currentPage, sectionPublished, componentPublished } = storeToRefs(useDynamicPageStore());
|
||||
|
||||
@@ -12,29 +9,15 @@ const store = reactive({
|
||||
dynamicPage: useDynamicPageStore(),
|
||||
});
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
store.dynamicPage.fetchPageByCode(route.path.replace('/', ''));
|
||||
} catch (error) {
|
||||
console.error("Error fetching data:", error);
|
||||
}
|
||||
})();
|
||||
|
||||
watch(currentPage, () => {
|
||||
store.dynamicPage.setSectionPublished();
|
||||
store.dynamicPage.setComponentPublished();
|
||||
}, { deep: true })
|
||||
|
||||
await useAsyncData('index', () => store.dynamicPage.fetchPageByCode(route.path.replace('/', '')))
|
||||
useHead({
|
||||
title: () => currentPage.value.title || ''
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<main class="h-screen" v-if="currentPage">
|
||||
<DynamicTemplate :settings="currentPage.settings">
|
||||
<template v-if="sectionPublished && sectionPublished.length > 0">
|
||||
<DynamicSection
|
||||
v-for="(section, index) in sectionPublished"
|
||||
:key="index"
|
||||
@@ -42,7 +25,6 @@ useHead({
|
||||
:content="section.content ? JSON.parse(section.content) : null"
|
||||
:section="section"
|
||||
/>
|
||||
</template>
|
||||
</DynamicTemplate>
|
||||
</main>
|
||||
</template>
|
||||
+29
-54
@@ -5,8 +5,6 @@
|
||||
*/
|
||||
|
||||
<script setup lang="ts">
|
||||
import _cloneDeep from 'lodash/cloneDeep';
|
||||
|
||||
import DynamicTemplate from "~/components/dynamic-page/page/templates/index.vue";
|
||||
import DynamicSection from "~/components/dynamic-page/page-section/templates/index.vue";
|
||||
|
||||
@@ -22,64 +20,42 @@ const store = reactive({
|
||||
article: useArticleStore(),
|
||||
});
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
await store.article.getArticleBySlug(route.params.slug);
|
||||
const loadPage = async () => {
|
||||
const promises = [];
|
||||
promises.push(store.article.getArticleBySlug(route.params.slug));
|
||||
|
||||
// useHead({
|
||||
// title: currentArticle.value?.title.replace(/<\/?[^>]+(>|$)/g, ""),
|
||||
// })
|
||||
useSeoMeta({
|
||||
title: currentArticle.value?.title.replace(/<\/?[^>]+(>|$)/g, ""),
|
||||
ogTitle: currentArticle.value?.title.replace(/<\/?[^>]+(>|$)/g, ""),
|
||||
description: currentArticle.value?.intro.replace(/<\/?[^>]+(>|$)/g, ""),
|
||||
ogDescription: currentArticle.value?.intro.replace(/<\/?[^>]+(>|$)/g, ""),
|
||||
ogImage: currentArticle.value?.thumbnail,
|
||||
})
|
||||
} catch (error) {
|
||||
console.error("Error fetching data:", error);
|
||||
}
|
||||
})();
|
||||
|
||||
const loadPage = async (contentType: string | number) => {
|
||||
await store.dynamicPage.fetchPageByCode(contentType);
|
||||
store.dynamicPage.setSectionPublished();
|
||||
store.dynamicPage.setComponentPublished();
|
||||
}
|
||||
|
||||
watch(currentArticle, async () => {
|
||||
let isContentType : string = '';
|
||||
let isContentType = '';
|
||||
switch (currentArticle.value?.contentType) {
|
||||
case 1:
|
||||
isContentType = 'trang-chi-tiet-bai-viet-general'
|
||||
break;
|
||||
isContentType = 'trang-chi-tiet-bai-viet-general';
|
||||
break;
|
||||
case 2:
|
||||
isContentType = 'trang-chi-tiet-bai-viet-image'
|
||||
break;
|
||||
|
||||
isContentType = 'trang-chi-tiet-bai-viet-image';
|
||||
break;
|
||||
case 3:
|
||||
isContentType = 'trang-chi-tiet-podcast'
|
||||
break;
|
||||
|
||||
isContentType = 'trang-chi-tiet-podcast';
|
||||
break;
|
||||
case 4:
|
||||
isContentType = 'trang-chi-tiet-bai-viet-video'
|
||||
break;
|
||||
|
||||
isContentType = 'trang-chi-tiet-bai-viet-video';
|
||||
break;
|
||||
case 5:
|
||||
if (currentArticle.value?.layoutType === 4) {
|
||||
isContentType = 'trang-chi-tiet-bai-viet-emagazine'
|
||||
break;
|
||||
}
|
||||
if (currentArticle.value?.layoutType === 3) {
|
||||
isContentType = 'trang-chi-tiet-bai-viet-infographics'
|
||||
break;
|
||||
}
|
||||
default:
|
||||
isContentType = 'trang-chi-tiet-bai-viet-general'
|
||||
if (currentArticle.value?.layoutType === 4) {
|
||||
isContentType = 'trang-chi-tiet-bai-viet-emagazine';
|
||||
break;
|
||||
}
|
||||
if (currentArticle.value?.layoutType === 3) {
|
||||
isContentType = 'trang-chi-tiet-bai-viet-infographics';
|
||||
break;
|
||||
}
|
||||
default:
|
||||
isContentType = 'trang-chi-tiet-bai-viet-general';
|
||||
break;
|
||||
}
|
||||
await loadPage(isContentType);
|
||||
}, { deep: true })
|
||||
promises.push(store.dynamicPage.fetchPageByCode(isContentType));
|
||||
await Promise.all(promises);
|
||||
};
|
||||
|
||||
await useAsyncData('detail-article', () => loadPage());
|
||||
|
||||
useSeoMeta({
|
||||
title: () => currentArticle.value?.title?.replace(/<[^>]+>/g, ''),
|
||||
@@ -87,9 +63,8 @@ useSeoMeta({
|
||||
ogTitle: () => currentArticle.value?.title,
|
||||
ogImage: () => currentArticle.value?.thumbnail,
|
||||
ogDescription: () => currentArticle.value?.intro,
|
||||
twitterCard: 'summary_large_image',
|
||||
twitterCard: () => 'summary_large_image',
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -106,4 +81,4 @@ useSeoMeta({
|
||||
</template>
|
||||
</DynamicTemplate>
|
||||
</main>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
+1
-17
@@ -1,6 +1,4 @@
|
||||
<script setup lang="ts">
|
||||
import _cloneDeep from 'lodash/cloneDeep';
|
||||
|
||||
import DynamicTemplate from "~/components/dynamic-page/page/templates/index.vue";
|
||||
import DynamicSection from "~/components/dynamic-page/page-section/templates/index.vue";
|
||||
import { useDynamicPageStore } from '~/stores/dynamic-page';
|
||||
@@ -11,19 +9,7 @@ const store = reactive({
|
||||
dynamicPage: useDynamicPageStore(),
|
||||
});
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
store.dynamicPage.fetchPageByCode(route.path === '/' ? 'trang-chu' : route.path.replace('/', ''));
|
||||
} catch (error) {
|
||||
console.error("Error fetching data:", error);
|
||||
}
|
||||
})();
|
||||
|
||||
watch(currentPage, () => {
|
||||
store.dynamicPage.setSectionPublished();
|
||||
store.dynamicPage.setComponentPublished()
|
||||
}, { deep: true })
|
||||
|
||||
await useAsyncData('index', () => store.dynamicPage.fetchPageByCode(route.path === '/' ? 'trang-chu' : route.path.replace('/', '')))
|
||||
useHead({
|
||||
title: 'Trang chủ'
|
||||
})
|
||||
@@ -32,7 +18,6 @@ useHead({
|
||||
<template>
|
||||
<main class="h-screen" v-if="currentPage">
|
||||
<DynamicTemplate :settings="currentPage.settings">
|
||||
<template v-if="sectionPublished && sectionPublished.length > 0">
|
||||
<DynamicSection
|
||||
v-for="(section, index) in sectionPublished"
|
||||
:key="index"
|
||||
@@ -40,7 +25,6 @@ useHead({
|
||||
:content="section.content ? JSON.parse(section.content) : null"
|
||||
:section="section"
|
||||
/>
|
||||
</template>
|
||||
</DynamicTemplate>
|
||||
</main>
|
||||
</template>
|
||||
Reference in New Issue
Block a user