39 lines
859 B
Vue
39 lines
859 B
Vue
<template>
|
|
<div class="min-h-screen bg-gray-50">
|
|
<router-view v-slot="{ Component }">
|
|
<transition name="fade" mode="out-in">
|
|
<component :is="Component" />
|
|
</transition>
|
|
</router-view>
|
|
</div>
|
|
</template>
|
|
|
|
<style>
|
|
.fade-enter-active,
|
|
.fade-leave-active {
|
|
transition: opacity 0.3s ease;
|
|
}
|
|
|
|
.fade-enter-from,
|
|
.fade-leave-to {
|
|
opacity: 0;
|
|
}
|
|
</style>
|
|
|
|
<script setup lang="ts">
|
|
import { watch } from 'vue'
|
|
import { useSettingsStore } from '@/stores/settings'
|
|
|
|
const settings = useSettingsStore()
|
|
|
|
watch(() => settings.siteDescription, (desc) => {
|
|
let meta = document.querySelector('meta[name="description"]')
|
|
if (!meta) {
|
|
meta = document.createElement('meta')
|
|
meta.setAttribute('name', 'description')
|
|
document.head.appendChild(meta)
|
|
}
|
|
meta.setAttribute('content', desc || '')
|
|
}, { immediate: true })
|
|
</script>
|