Files
NSG_PORTAL_V2/pages/bai-viet/[slug].vue
T

105 lines
3.2 KiB
Vue
Raw Normal View History

2024-05-31 00:46:43 +07:00
/*
- LayoutType: None=0 | Normal=1 | Short=2 | Long=3 | Page=4 | Other=5
- ContentType: None=0 | Normal=1 | Photo=2 | Video=3 | Graphic=4 | Document=5 | Reaction=6 (Poll,Quiz) | Other=7
- Type: None=0 | Editorial=1 | General=2 | Reportage=3 | Interview=4 | Survey=5 | Tutorial=6 | Podcast=7 | Broadcast=8 | TalkShow=9 | LiveStream=10 | Translation=11 | Promotion=12 | Other=13
*/
<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";
const route = useRoute();
import { useDynamicPageStore } from '~/stores/dynamic-page';
import { useArticleStore } from '~/stores/articles';
const { currentPage, sectionPublished, componentPublished } = storeToRefs(useDynamicPageStore());
const { currentArticle } = storeToRefs(useArticleStore());
2024-06-03 10:24:28 +07:00
2024-05-31 00:46:43 +07:00
const store = reactive({
dynamicPage: useDynamicPageStore(),
article: useArticleStore(),
});
2024-05-31 12:39:53 +07:00
2024-05-31 00:46:43 +07:00
(async () => {
try {
2024-05-31 15:31:05 +07:00
await store.article.getArticleBySlug(route.params.slug);
2024-05-31 00:46:43 +07:00
} catch (error) {
console.error("Error fetching data:", error);
}
})();
const loadPage = async (contentType: string | number) => {
2024-05-31 12:39:53 +07:00
await store.dynamicPage.fetchPageByCode(contentType);
2024-05-31 00:46:43 +07:00
store.dynamicPage.setSectionPublished();
store.dynamicPage.setComponentPublished();
}
watch(currentArticle, async () => {
let isContentType : string = '';
switch (currentArticle.value?.contentType) {
case 1:
2024-05-31 15:31:05 +07:00
isContentType = 'trang-doi-song'
break;
2024-05-31 00:46:43 +07:00
case 2:
isContentType = 'ArticleLayoutImage'
2024-05-31 15:31:05 +07:00
break;
2024-05-31 00:46:43 +07:00
case 3:
2024-05-31 16:38:12 +07:00
isContentType = 'trang-chi-tiet-podcast'
2024-05-31 15:31:05 +07:00
break;
2024-05-31 00:46:43 +07:00
case 4:
2024-06-03 12:27:22 +07:00
isContentType = 'trang-chi-tiet-video-clip'
2024-05-31 15:31:05 +07:00
break;
2024-05-31 00:46:43 +07:00
case 5:
2024-06-03 12:27:58 +07:00
if (currentArticle.value?.layoutType === 4) {
2024-05-31 15:31:05 +07:00
isContentType = 'trang-chi-tiet-emagazine'
break;
}
2024-06-03 12:27:58 +07:00
if (currentArticle.value?.layoutType === 3) {
isContentType = 'trang-chi-tiet-infographics'
2024-05-31 15:31:05 +07:00
break;
}
2024-06-03 12:27:58 +07:00
// else {
// isContentType = 'trang-chi-tiet-emagazine'
// break;
// }
2024-05-31 00:46:43 +07:00
default:
2024-05-31 13:49:36 +07:00
isContentType = 'trang-chi-tiet-emagazine'
2024-05-31 15:31:05 +07:00
break;
2024-05-31 00:46:43 +07:00
}
2024-06-03 10:24:28 +07:00
await loadPage(isContentType);
2024-05-31 00:46:43 +07:00
}, { deep: true })
useSeoMeta({
2024-06-03 10:24:28 +07:00
title: () => currentArticle.value?.title?.replace(/<[^>]+>/g, ''),
description: () => currentArticle.value?.intro,
ogTitle: () => currentArticle.value?.title,
ogImage: () => currentArticle.value?.thumbnail,
ogDescription: () => currentArticle.value?.intro,
twitterCard: 'summary_large_image',
2024-05-31 00:46:43 +07:00
})
2024-06-06 13:29:22 +07:00
onMounted(() => {
console.log(document.querySelectorAll('document'), '12')
})
2024-05-31 00:46:43 +07:00
</script>
<template>
2024-05-31 12:39:53 +07:00
<main class="h-screen" v-if="currentPage && currentPage.settings">
2024-05-31 00:46:43 +07:00
<DynamicTemplate :settings="currentPage.settings">
<template v-if="sectionPublished && sectionPublished.length > 0">
<DynamicSection
v-for="(section, index) in sectionPublished"
:key="index"
:settings="section.settings"
:content="section.content ? JSON.parse(section.content) : null"
:section="section"
/>
</template>
</DynamicTemplate>
</main>
</template>