37 lines
681 B
Vue
37 lines
681 B
Vue
|
|
<template>
|
||
|
|
<div class="min-h-screen bg-gray-50 flex flex-col">
|
||
|
|
<Header />
|
||
|
|
<main class="pt-16 flex-1">
|
||
|
|
<slot />
|
||
|
|
</main>
|
||
|
|
<Footer />
|
||
|
|
</div>
|
||
|
|
</template>
|
||
|
|
|
||
|
|
<script setup>
|
||
|
|
import Header from '~/components/Header.vue'
|
||
|
|
import Footer from '~/components/Footer.vue'
|
||
|
|
import { useI18n } from 'vue-i18n'
|
||
|
|
|
||
|
|
|
||
|
|
const { t, locale } = useI18n()
|
||
|
|
|
||
|
|
useSeoMeta({
|
||
|
|
title: () => t('seo.title'),
|
||
|
|
ogTitle: () => t('seo.title'),
|
||
|
|
description: () => t('seo.description'),
|
||
|
|
ogDescription: () => t('seo.description'),
|
||
|
|
keywords: () => t('seo.keywords'),
|
||
|
|
ogImage: '/logo.svg',
|
||
|
|
twitterCard: 'summary_large_image'
|
||
|
|
})
|
||
|
|
|
||
|
|
useHead({
|
||
|
|
htmlAttrs: {
|
||
|
|
lang: locale
|
||
|
|
}
|
||
|
|
})
|
||
|
|
</script>
|
||
|
|
|
||
|
|
|