4
0
Fork 0

Compare commits

..

No commits in common. "bx-2502-qr" and "main" have entirely different histories.

8 changed files with 69 additions and 283 deletions

View File

@ -82,7 +82,7 @@ const changeDistance = (v = 1) => {
</div> </div>
</ClientOnly> </ClientOnly>
<div class="absolute bottom-4 left-1/2 -translate-x-1/2"> <div class="absolute bottom-4 left-1/2 -translate-x-1/2">
<button @click.prevent="openModal">Заказать</button> <button @click.prevent="openModal">Рассчитать</button>
</div> </div>
</div> </div>
</template> </template>

View File

@ -1,14 +0,0 @@
<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

@ -32,7 +32,7 @@ if (route.path !== '/404') {
<div class="col-span-full"> <div class="col-span-full">
<h1>Вы ищете страницу, которой не существует. Вернитесь на главную страницу сайта</h1> <h1>Вы ищете страницу, которой не существует. Вернитесь на главную страницу сайта</h1>
<p>Извините, но мы не можем найти запрашиваемую страницу. К сожалению, мы не можем помочь вам с <p>Извините, но мы не можем найти запрашиваемую страницу. К сожалению, мы не можем помочь вам с
покупкой скамейки здесь.</p> покупкой забора здесь.</p>
<p class="hidden"> <p class="hidden">
<code> <code>
{{ error?.message }} {{ error?.message }}

View File

@ -32,7 +32,7 @@ export default defineNuxtConfig({
runtimeConfig: { runtimeConfig: {
public: { public: {
apiPrefix: 'sk', apiPrefix: 'sk',
apiBase: process.env.mode == 'DEVELOPMENT' ? "http://mns.dev.kustarshina.ru" : "https://mns.kustarshina.ru", apiBase: process.env.mode == 'DEVELOPMENT' ? "http://mns.dev.kustarshina.ru/kp" : "https://mns.kustarshina.ru/kp",
imgBase: 'https://mns.kustarshina.ru', imgBase: 'https://mns.kustarshina.ru',
baseUrl: '', baseUrl: '',
yandexMetrika: { yandexMetrika: {

205
package-lock.json generated
View File

@ -24,7 +24,6 @@
"nuxt": "^3.11.2", "nuxt": "^3.11.2",
"nuxt-icon": "^0.6.10", "nuxt-icon": "^0.6.10",
"nuxt-svgo": "^4.0.1", "nuxt-svgo": "^4.0.1",
"qrcode": "^1.5.4",
"sass": "^1.77.4", "sass": "^1.77.4",
"sharp": "^0.33.5", "sharp": "^0.33.5",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",
@ -6181,15 +6180,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/camelcase-css": { "node_modules/camelcase-css": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@ -6916,15 +6906,6 @@
} }
} }
}, },
"node_modules/decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/decompress-response": { "node_modules/decompress-response": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
@ -7073,12 +7054,6 @@
"node": ">=0.3.1" "node": ">=0.3.1"
} }
}, },
"node_modules/dijkstrajs": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
"integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==",
"license": "MIT"
},
"node_modules/dlv": { "node_modules/dlv": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
@ -7598,19 +7573,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/foreground-child": { "node_modules/foreground-child": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
@ -9193,18 +9155,6 @@
"pathe": "^2.0.3" "pathe": "^2.0.3"
} }
}, },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/lodash": { "node_modules/lodash": {
"version": "4.17.21", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@ -10673,42 +10623,6 @@
"@oxc-parser/binding-win32-x64-msvc": "0.56.5" "@oxc-parser/binding-win32-x64-msvc": "0.56.5"
} }
}, },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/package-json-from-dist": { "node_modules/package-json-from-dist": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
@ -10795,15 +10709,6 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-is-absolute": { "node_modules/path-is-absolute": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@ -10936,15 +10841,6 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/pngjs": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
"license": "MIT",
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/portfinder": { "node_modules/portfinder": {
"version": "1.0.34", "version": "1.0.34",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.34.tgz", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.34.tgz",
@ -11801,89 +11697,6 @@
"once": "^1.3.1" "once": "^1.3.1"
} }
}, },
"node_modules/qrcode": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz",
"integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==",
"license": "MIT",
"dependencies": {
"dijkstrajs": "^1.0.1",
"pngjs": "^5.0.0",
"yargs": "^15.3.1"
},
"bin": {
"qrcode": "bin/qrcode"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/qrcode/node_modules/cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"node_modules/qrcode/node_modules/wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/qrcode/node_modules/y18n": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"license": "ISC"
},
"node_modules/qrcode/node_modules/yargs": {
"version": "15.4.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
},
"engines": {
"node": ">=8"
}
},
"node_modules/qrcode/node_modules/yargs-parser": {
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/quansync": { "node_modules/quansync": {
"version": "0.2.8", "version": "0.2.8",
"resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.8.tgz", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.8.tgz",
@ -12114,12 +11927,6 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"license": "ISC"
},
"node_modules/resolve": { "node_modules/resolve": {
"version": "1.22.8", "version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@ -12537,12 +12344,6 @@
"node": ">= 0.8" "node": ">= 0.8"
} }
}, },
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"license": "ISC"
},
"node_modules/setprototypeof": { "node_modules/setprototypeof": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@ -14697,12 +14498,6 @@
"node": "^18.17.0 || >=20.5.0" "node": "^18.17.0 || >=20.5.0"
} }
}, },
"node_modules/which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"license": "ISC"
},
"node_modules/which/node_modules/isexe": { "node_modules/which/node_modules/isexe": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",

View File

@ -27,7 +27,6 @@
"nuxt": "^3.11.2", "nuxt": "^3.11.2",
"nuxt-icon": "^0.6.10", "nuxt-icon": "^0.6.10",
"nuxt-svgo": "^4.0.1", "nuxt-svgo": "^4.0.1",
"qrcode": "^1.5.4",
"sass": "^1.77.4", "sass": "^1.77.4",
"sharp": "^0.33.5", "sharp": "^0.33.5",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",

View File

@ -5,10 +5,21 @@ 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)
@ -23,15 +34,14 @@ 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)
} }
</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">
@ -43,24 +53,42 @@ const setCalcData = (txt: string) => {
</div> </div>
</div> </div>
<div class="siteblock-image"> <div class="siteblock-image">
<NuxtImg :src="[imgBase, page.image].join('/')" :alt="page.title" title="" format="webp" /> <NuxtImg
: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 class="siteblock siteblock_imgbg bg-slate-500" :style="[ <div
{ backgroundImage: `url(${[imgBase, page.image].join('/')})` } class="siteblock siteblock_imgbg bg-slate-500"
]"> :style="[
<NuxtImg :src="[imgBase, page.image].join('/')" :alt="page.title" format="webp" loading="lazy" /> { backgroundImage: `url(${[imgBase, page.image].join('/')})` }
]"
>
<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 :src="[imgBase, item.image].join('/')" :alt="item.text" title="" format="webp" <NuxtImg
loading="lazy" /> :src="[imgBase, item.image].join('/')"
:alt="item.text"
title=""
format="webp"
loading="lazy"
/>
</div> </div>
<div class="review-content"> <div class="review-content">
{{ item.comment }} {{ item.comment }}
@ -86,10 +114,17 @@ const setCalcData = (txt: string) => {
</div> </div>
</template> </template>
<template v-if="page.slug == 'more'"> <template v-if="page.slug == 'more'">
<div class="siteblock siteblock_imgbg bg-slate-500" :style="[ <div
{ backgroundImage: `url(${[imgBase, page.image].join('/')})` } class="siteblock siteblock_imgbg bg-slate-500"
]"> :style="[
<NuxtImg :src="[imgBase, page.image].join('/')" format="webp" loading="lazy" /> { backgroundImage: `url(${[imgBase, page.image].join('/')})` }
]"
>
<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">
@ -103,12 +138,23 @@ const setCalcData = (txt: string) => {
</div> </div>
</template> </template>
<template v-if="page.slug == 'delivery'"> <template v-if="page.slug == 'delivery'">
<div class="siteblock siteblock_imgbg bg-slate-500" :style="[ <div
{ backgroundImage: `url(${[imgBase, page.image].join('/')})` } class="siteblock siteblock_imgbg bg-slate-500"
]"> :style="[
<NuxtImg :src="[imgBase, page.image].join('/')" format="webp" loading="lazy" /> { backgroundImage: `url(${[imgBase, page.image].join('/')})` }
]"
>
<NuxtImg
:src="[imgBase, page.image].join('/')"
format="webp"
loading="lazy"
/>
</div> </div>
<div class="siteblock bg-white siteblock_content" :id="page.slug" v-if="delivery"> <div
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

@ -1,40 +0,0 @@
<script setup>
import QRCode from 'qrcode';
// Реактивная переменная для хранения текста QR-кода
const qrText = ref('');
// Ссылка на элемент canvas для рендеринга QR-кода
const qrCanvas = ref(null);
// Генерация QR-кода
const generateQR = async () => {
try {
await QRCode.toCanvas(qrCanvas.value, qrText.value, {
width: 500,
});
} catch (error) {
console.error('Ошибка при генерации QR-кода:', error);
}
};
onMounted(() => {
const currentUrl = window.location.href;
qrText.value = currentUrl.startsWith('http') ? currentUrl : `https://${currentUrl}`;
generateQR();
});
</script>
<template>
<div>
<Seo />
<div class="siteblock">
<div class="container text-center">
<h1 class="siteblock-title">QR-КОД</h1>
<div class="col-span-full">
<canvas class="border mx-auto" ref="qrCanvas"></canvas>
</div>
</div>
</div>
</div>
</template>