mns
/
urna
forked from mns/mini-skamja
4
0
Fork 0

seo to module

This commit is contained in:
Kseninia Mikhaylova 2025-03-19 09:23:03 +03:00
parent 562cd80636
commit baa47d3a9a
3 changed files with 42 additions and 71 deletions

14
components/seo.vue Normal file
View File

@ -0,0 +1,14 @@
<script setup lang="ts">
const { fetchData } = useApiFetch()
const config = useRuntimeConfig()
const { data: seo } = await fetchData<Seo[]>(`seo`)
import og_img from '/og_img.png'
useSeoMeta({
title: seo.value && seo.value[0].title,
ogTitle: seo.value && seo.value[0].title,
description: seo.value && seo.value[0].content,
ogDescription: seo.value && seo.value[0].content,
ogImage: config.public.baseUrl + og_img
})
</script>

View File

@ -5,21 +5,10 @@ const imgBase = config.public.imgBase
import { marked } from 'marked' import { marked } from 'marked'
import og_img from '/og_img.png'
const { data: seo } = await fetchData<Seo[]>(`seo`)
const { data: menu_raw, status: menu_status } = await fetchData<Menu[]>(`menu`) const { data: menu_raw, status: menu_status } = await fetchData<Menu[]>(`menu`)
const { data: review } = await fetchData<Review[]>(`review`) const { data: review } = await fetchData<Review[]>(`review`)
const { data: calc_data } = await fetchData<CalcItem[]>(`calculator`) const { data: calc_data } = await fetchData<CalcItem[]>(`calculator`)
useSeoMeta({
title: seo.value && seo.value[0].title,
ogTitle: seo.value && seo.value[0].title,
description: seo.value && seo.value[0].content,
ogDescription: seo.value && seo.value[0].content,
ogImage: config.public.baseUrl + og_img
})
const pages = computed(() => { const pages = computed(() => {
const menu = menu_raw.value?.find(el => el.type == 1) const menu = menu_raw.value?.find(el => el.type == 1)
return (menu?.pages || []).sort((a, b) => a.order - b.order) return (menu?.pages || []).sort((a, b) => a.order - b.order)
@ -34,7 +23,7 @@ const delivery = computed(() =>
const setCalcData = (txt: string) => { const setCalcData = (txt: string) => {
let c = txt let c = txt
;(calc_data.value || []).map(item => { ; (calc_data.value || []).map(item => {
c = c.replaceAll(`[${item.slug}]`, roubleSign.format(item.base)) c = c.replaceAll(`[${item.slug}]`, roubleSign.format(item.base))
}) })
return marked.parse(c) return marked.parse(c)
@ -42,6 +31,7 @@ const setCalcData = (txt: string) => {
</script> </script>
<template> <template>
<div> <div>
<Seo />
<template v-for="page in pages" :key="page.slug"> <template v-for="page in pages" :key="page.slug">
<template v-if="page.slug == 'about'"> <template v-if="page.slug == 'about'">
<div class="siteblock bg-white" :id="page.slug"> <div class="siteblock bg-white" :id="page.slug">
@ -53,42 +43,24 @@ const setCalcData = (txt: string) => {
</div> </div>
</div> </div>
<div class="siteblock-image"> <div class="siteblock-image">
<NuxtImg <NuxtImg :src="[imgBase, page.image].join('/')" :alt="page.title" title="" format="webp" />
:src="[imgBase, page.image].join('/')"
:alt="page.title"
title=""
format="webp"
/>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<template v-if="page.slug == 'review'"> <template v-if="page.slug == 'review'">
<div <div class="siteblock siteblock_imgbg bg-slate-500" :style="[
class="siteblock siteblock_imgbg bg-slate-500"
:style="[
{ backgroundImage: `url(${[imgBase, page.image].join('/')})` } { backgroundImage: `url(${[imgBase, page.image].join('/')})` }
]" ]">
> <NuxtImg :src="[imgBase, page.image].join('/')" :alt="page.title" format="webp" loading="lazy" />
<NuxtImg
:src="[imgBase, page.image].join('/')"
:alt="page.title"
format="webp"
loading="lazy"
/>
</div> </div>
<div class="siteblock bg-white"> <div class="siteblock bg-white">
<div class="container" :id="page.slug"> <div class="container" :id="page.slug">
<template v-for="item in review?.slice(0, 3)"> <template v-for="item in review?.slice(0, 3)">
<div class="review"> <div class="review">
<div class="review-image"> <div class="review-image">
<NuxtImg <NuxtImg :src="[imgBase, item.image].join('/')" :alt="item.text" title="" format="webp"
:src="[imgBase, item.image].join('/')" loading="lazy" />
:alt="item.text"
title=""
format="webp"
loading="lazy"
/>
</div> </div>
<div class="review-content"> <div class="review-content">
{{ item.comment }} {{ item.comment }}
@ -114,17 +86,10 @@ const setCalcData = (txt: string) => {
</div> </div>
</template> </template>
<template v-if="page.slug == 'more'"> <template v-if="page.slug == 'more'">
<div <div class="siteblock siteblock_imgbg bg-slate-500" :style="[
class="siteblock siteblock_imgbg bg-slate-500"
:style="[
{ backgroundImage: `url(${[imgBase, page.image].join('/')})` } { backgroundImage: `url(${[imgBase, page.image].join('/')})` }
]" ]">
> <NuxtImg :src="[imgBase, page.image].join('/')" format="webp" loading="lazy" />
<NuxtImg
:src="[imgBase, page.image].join('/')"
format="webp"
loading="lazy"
/>
</div> </div>
<div class="siteblock bg-white" :id="page.slug"> <div class="siteblock bg-white" :id="page.slug">
<div class="container gap-4"> <div class="container gap-4">
@ -138,23 +103,12 @@ const setCalcData = (txt: string) => {
</div> </div>
</template> </template>
<template v-if="page.slug == 'delivery'"> <template v-if="page.slug == 'delivery'">
<div <div class="siteblock siteblock_imgbg bg-slate-500" :style="[
class="siteblock siteblock_imgbg bg-slate-500"
:style="[
{ backgroundImage: `url(${[imgBase, page.image].join('/')})` } { backgroundImage: `url(${[imgBase, page.image].join('/')})` }
]" ]">
> <NuxtImg :src="[imgBase, page.image].join('/')" format="webp" loading="lazy" />
<NuxtImg
:src="[imgBase, page.image].join('/')"
format="webp"
loading="lazy"
/>
</div> </div>
<div <div class="siteblock bg-white siteblock_content" :id="page.slug" v-if="delivery">
class="siteblock bg-white siteblock_content"
:id="page.slug"
v-if="delivery"
>
<div class="container"> <div class="container">
<div class="prose col-span-12 xl:col-span-6"> <div class="prose col-span-12 xl:col-span-6">
<span v-html="delivery[0]"></span> <span v-html="delivery[0]"></span>

View File

@ -26,6 +26,8 @@ onMounted(() => {
</script> </script>
<template> <template>
<div>
<Seo />
<div class="siteblock"> <div class="siteblock">
<div class="container text-center"> <div class="container text-center">
<h1 class="siteblock-title">QR-КОД</h1> <h1 class="siteblock-title">QR-КОД</h1>
@ -34,4 +36,5 @@ onMounted(() => {
</div> </div>
</div> </div>
</div> </div>
</div>
</template> </template>