forked from mns/mini-skamja
vue rerender
This commit is contained in:
parent
9e447e4c9a
commit
e92b07b842
|
@ -6,6 +6,7 @@ export function useApiFetch() {
|
||||||
const prefix = config.public.apiPrefix
|
const prefix = config.public.apiPrefix
|
||||||
|
|
||||||
const fetchData = <T>(path: string, global = false) => {
|
const fetchData = <T>(path: string, global = false) => {
|
||||||
|
console.log(`Fetching data for path: ${path}`);
|
||||||
const headers = new Headers()
|
const headers = new Headers()
|
||||||
headers.set('Referer', config.public.baseUrl)
|
headers.set('Referer', config.public.baseUrl)
|
||||||
|
|
||||||
|
|
24
error.vue
24
error.vue
|
@ -1,20 +1,19 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import '@/assets/main.scss'
|
import '@/assets/main.scss'
|
||||||
|
import type { NuxtError } from '#app'
|
||||||
|
|
||||||
const config = useRuntimeConfig()
|
const config = useRuntimeConfig()
|
||||||
const { fetchData } = useApiFetch()
|
const { fetchData } = useApiFetch()
|
||||||
|
|
||||||
import type { NuxtError } from '#app'
|
|
||||||
import og_img from '/og_img.png'
|
import og_img from '/og_img.png'
|
||||||
|
|
||||||
const { data: seoData } = await fetchData<Seo>(`kp/2/`)
|
const { data: seo } = await fetchData<Seo[]>(`seo/`)
|
||||||
|
|
||||||
useSeoMeta({
|
useSeoMeta({
|
||||||
title: seoData.value?.title,
|
title: seo.value && seo.value[0].title,
|
||||||
ogTitle: seoData.value?.title,
|
ogTitle: seo.value && seo.value[0].title,
|
||||||
description: seoData.value?.content,
|
description: seo.value && seo.value[0].content,
|
||||||
ogDescription: seoData.value?.content,
|
ogDescription: seo.value && seo.value[0].content,
|
||||||
ogImage: config.public.baseUrl + og_img,
|
ogImage: config.public.baseUrl + og_img,
|
||||||
// twitterCard: 'summary_large_image',
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -28,13 +27,13 @@ if(route.path !== '/404') {
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<Header />
|
<Header />
|
||||||
<div class="siteblock bg-white">
|
<div class="siteblock bg-white min-h-[calc(100vh-26.8rem)]">
|
||||||
<div class="container prose">
|
<div class="container prose">
|
||||||
<div class="col-span-full">
|
<div class="col-span-full">
|
||||||
<h1>Вы ищете страницу, которой не существует. Вернитесь на главную страницу сайта</h1>
|
<h1>Вы ищете страницу, которой не существует. Вернитесь на главную страницу сайта</h1>
|
||||||
<p>Извините, но мы не можем найти запрашиваемую страницу. К сожалению, мы не можем помочь вам с
|
<p>Извините, но мы не можем найти запрашиваемую страницу. К сожалению, мы не можем помочь вам с
|
||||||
покупкой забора здесь.</p>
|
покупкой забора здесь.</p>
|
||||||
<p>
|
<p class="hidden">
|
||||||
<code>
|
<code>
|
||||||
{{ error?.message }}
|
{{ error?.message }}
|
||||||
</code>
|
</code>
|
||||||
|
@ -43,11 +42,6 @@ if(route.path !== '/404') {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="siteblock siteblock_calc bg-white">
|
|
||||||
<Suspense>
|
|
||||||
<CalcModels />
|
|
||||||
</Suspense>
|
|
||||||
</div>
|
|
||||||
<Footer />
|
<Footer />
|
||||||
<Modal />
|
<Modal />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -52,7 +52,7 @@ export default defineNuxtConfig({
|
||||||
vite: {
|
vite: {
|
||||||
assetsInclude: ['**/*.glb', '**/*.gltf'],
|
assetsInclude: ['**/*.glb', '**/*.gltf'],
|
||||||
build: {
|
build: {
|
||||||
target: 'esnext'
|
target: 'esnext',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,9 @@ import { marked } from 'marked';
|
||||||
import og_img from '/og_img.png'
|
import og_img from '/og_img.png'
|
||||||
|
|
||||||
const { data: seo } = await fetchData<Seo[]>(`seo/`)
|
const { data: seo } = await fetchData<Seo[]>(`seo/`)
|
||||||
|
const { data: menu_raw, status: menu_status } = await fetchData<Menu[]>(`menu/`)
|
||||||
|
const { data: review } = await fetchData<Review[]>(`review/`)
|
||||||
|
|
||||||
useSeoMeta({
|
useSeoMeta({
|
||||||
title: seo.value && seo.value[0].title,
|
title: seo.value && seo.value[0].title,
|
||||||
ogTitle: seo.value && seo.value[0].title,
|
ogTitle: seo.value && seo.value[0].title,
|
||||||
|
@ -16,17 +19,16 @@ useSeoMeta({
|
||||||
ogImage: config.public.baseUrl + og_img,
|
ogImage: config.public.baseUrl + og_img,
|
||||||
})
|
})
|
||||||
|
|
||||||
const { data } = await fetchData<Menu[]>(`menu/`)
|
|
||||||
const pages = computed(() => {
|
const pages = computed(() => {
|
||||||
const menu = data.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)
|
||||||
})
|
})
|
||||||
const { data: review } = await fetchData<Review[]>(`review/`)
|
|
||||||
|
|
||||||
const delivery = computed(() => pages.value.find(el => el.slug == 'delivery')?.content.split('[col]').map(el => marked.parse(el || '')))
|
const delivery = computed(() => pages.value.find(el => el.slug == 'delivery')?.content.split('[col]').map(el => marked.parse(el || '')))
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<template v-for="page in pages">
|
<div>
|
||||||
|
<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">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
@ -49,7 +51,7 @@ const delivery = computed(() => pages.value.find(el => el.slug == 'delivery')?.c
|
||||||
<NuxtImg :src="[imgBase, page.image].join('/')" class="invisible" alt="отзыв" title="" format="webp"
|
<NuxtImg :src="[imgBase, page.image].join('/')" class="invisible" alt="отзыв" title="" format="webp"
|
||||||
loading="lazy" />
|
loading="lazy" />
|
||||||
</div>
|
</div>
|
||||||
<div class="container">
|
<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">
|
||||||
|
@ -97,4 +99,5 @@ const delivery = computed(() => pages.value.find(el => el.slug == 'delivery')?.c
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
Loading…
Reference in New Issue