website/pages/blog/index.vue

54 lines
1.4 KiB
Vue

<script setup lang="ts">
import type { BlogPost } from '~/types'
const { data: page } = await useAsyncData('blog', () => queryContent('/blog').findOne())
if (!page.value) {
throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true })
}
const { data: posts } = await useAsyncData('posts', () => queryContent<BlogPost>('/blog')
.where({ _extension: 'md' })
.sort({ date: -1 })
.find())
useSeoMeta({
title: page.value.title,
ogTitle: page.value.title,
description: page.value.description,
ogDescription: page.value.description
})
defineOgImage({
component: 'Saas',
title: page.value.title,
description: page.value.description
})
</script>
<template>
<UContainer>
<UPageHeader v-bind="page" class="py-[50px]" />
<UPageBody>
<UBlogList>
<UBlogPost
v-for="(post, index) in posts"
:key="index"
:to="post._path"
:title="post.title"
:description="post.description"
:image="post.image"
:date="new Date(post.date).toLocaleDateString('en', { year: 'numeric', month: 'short', day: 'numeric' })"
:authors="post.authors"
:badge="post.badge"
:orientation="index === 0 ? 'horizontal' : 'vertical'"
:class="[index === 0 && 'col-span-full']"
:ui="{
description: 'line-clamp-2'
}"
/>
</UBlogList>
</UPageBody>
</UContainer>
</template>