fix data
This commit is contained in:
@ -6,9 +6,9 @@
|
|||||||
<div class="hidden h-[120px] w-full items-center gap-[145px] xl:flex">
|
<div class="hidden h-[120px] w-full items-center gap-[145px] xl:flex">
|
||||||
<ul class="flex items-center justify-between whitespace-nowrap w-full">
|
<ul class="flex items-center justify-between whitespace-nowrap w-full">
|
||||||
<li v-for="(item, index) in menuStore.menu" @click="menuStore.navigateToItem(item)" :key="index"
|
<li v-for="(item, index) in menuStore.menu" @click="menuStore.navigateToItem(item)" :key="index"
|
||||||
:class="['hover:text-accent-green-light dark:hover:text-accent-green-dark cursor-pointer text-lg transition-all text-inter', route.params.slug === item.link_rewrite && 'text-accent-green-light dark:text-accent-green-dark font-bold underline']">
|
:class="['hover:text-accent-green-light dark:hover:text-accent-green-dark cursor-pointer text-lg transition-all text-inter', route.params.slug === item.front_menu_lang[0].link_rewrite && 'text-accent-green-light dark:text-accent-green-dark font-bold underline']">
|
||||||
0{{ index + 1 }} <br />
|
0{{ index + 1 }} <br />
|
||||||
{{ item.name }}
|
{{ item.front_menu_lang[0].name }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ClientOnly v-if="!colorMode?.forced">
|
<ClientOnly v-if="!colorMode?.forced">
|
||||||
@ -60,16 +60,12 @@
|
|||||||
<template #content>
|
<template #content>
|
||||||
<div class="w-full border-border border-b pt-6 pb-8">
|
<div class="w-full border-border border-b pt-6 pb-8">
|
||||||
<UiContainer class="flex flex-col gap-[30px]">
|
<UiContainer class="flex flex-col gap-[30px]">
|
||||||
<div v-for="(item, index) in menuStore.menu" @click="
|
<div v-for="(item, index) in menuStore.menu" :key="index"
|
||||||
() => {
|
:class="['flex items-center justify-between transition-all hover:text-accent-green-light dark:hover:text-accent-green-dark cursor-pointer', route.params.slug === item.front_menu_lang[0].link_rewrite && 'text-accent-green-light dark:text-accent-green-dark font-bold underline']"
|
||||||
menuStore.navigateToItem(item);
|
@click="() => { menuStore.navigateToItem(item); open = false; }">
|
||||||
open = false;
|
|
||||||
}
|
|
||||||
" :key="index"
|
|
||||||
:class="['flex items-center justify-between transition-all hover:text-accent-green-light dark:hover:text-accent-green-dark cursor-pointer', route.params.slug === item.link_rewrite && 'text-accent-green-light dark:text-accent-green-dark font-bold underline']">
|
|
||||||
<div class="leading-[70%] text-inter">
|
<div class="leading-[70%] text-inter">
|
||||||
<span class="mr-4">0{{ index + 1 }}</span>
|
<span class="mr-4">0{{ index + 1 }}</span>
|
||||||
{{ item.name }}
|
{{ item.front_menu_lang[0].name }}
|
||||||
</div>
|
</div>
|
||||||
<!-- <i class="uil uil-arrow-up-right text-[35px]"></i> -->
|
<!-- <i class="uil uil-arrow-up-right text-[35px]"></i> -->
|
||||||
<svg class="" width="20" height="20" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg class="" width="20" height="20" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
<div class="space-25-55-75">
|
<div class="space-25-55-75">
|
||||||
<div class="grid sm:grid-cols-7 md:grid-cols-4 xl:grid-cols-2">
|
<div class="grid sm:grid-cols-7 md:grid-cols-4 xl:grid-cols-2">
|
||||||
<h2 class="sm:col-start-2 sm:col-end-8 md:col-end-5 xl:col-start-2 h2-bold-bounded">
|
<h2 class="sm:col-start-2 sm:col-end-8 md:col-end-5 xl:col-start-2 h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_1.title }}
|
{{ component.front_section_lang[0].data.section_1.title }}
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-[40px] sm:space-55-75">
|
<div class="space-y-[40px] sm:space-55-75">
|
||||||
<div v-for="(item, index) in component.section_lang_data.section_1
|
<div v-for="(item, index) in component.front_section_lang[0].data.section_1.text_blocks"
|
||||||
.text_blocks" :key="index" class="grid grid-cols-7 md:grid-cols-4 xl:grid-cols-2">
|
:key="index" class="grid grid-cols-7 md:grid-cols-4 xl:grid-cols-2">
|
||||||
<div class="flex gap-[200px]">
|
<div class="flex gap-[200px]">
|
||||||
<h4 class="h4-uppercase-bold-inter">0{{ index + 1 }}</h4>
|
<h4 class="h4-uppercase-bold-inter">0{{ index + 1 }}</h4>
|
||||||
<h4 class="hidden xl:block h4-uppercase-bold-inter w-full whitespace-nowrap">
|
<h4 class="hidden xl:block h4-uppercase-bold-inter w-full whitespace-nowrap">
|
||||||
@ -26,10 +26,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="space-25-55-75">
|
<div class="space-25-55-75">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_2.title }}
|
{{ component.front_section_lang[0].data.section_2.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="grid sm:grid-cols-2 xl:grid-cols-4 gap-[30px] auto-cols-fr auto-rows-fr">
|
<div class="grid sm:grid-cols-2 xl:grid-cols-4 gap-[30px] auto-cols-fr auto-rows-fr">
|
||||||
<div class="border border-border rounded-2xl p-8 flex flex-col justify-between gap-[55px]" v-for="(item, index) in component.section_lang_data.section_2
|
<div class="border border-border rounded-2xl p-8 flex flex-col justify-between gap-[55px]" v-for="(item, index) in component.front_section_lang[0].data.section_2
|
||||||
.text_blocks" :key="index">
|
.text_blocks" :key="index">
|
||||||
<div>
|
<div>
|
||||||
<h4 class="h4-uppercase-bold-inter">0{{ index + 1 }}</h4>
|
<h4 class="h4-uppercase-bold-inter">0{{ index + 1 }}</h4>
|
||||||
@ -40,12 +40,12 @@
|
|||||||
<div
|
<div
|
||||||
class="row-end-4 sm:row-end-3 col-start-1 col-end-2 xl:row-end-1 xl:col-start-3 xl:col-end-4 flex flex-col gap-[10px] md:gap-[30px]">
|
class="row-end-4 sm:row-end-3 col-start-1 col-end-2 xl:row-end-1 xl:col-start-3 xl:col-end-4 flex flex-col gap-[10px] md:gap-[30px]">
|
||||||
<div class="w-full h-full md:h-[211px] rounded-2xl" :style="{
|
<div class="w-full h-full md:h-[211px] rounded-2xl" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
<div class="w-full h-full md:h-[211px] rounded-2xl" :style="{
|
<div class="w-full h-full md:h-[211px] rounded-2xl" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
@ -54,10 +54,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="grid space-25-55 xl:grid-cols-2">
|
<div class="grid space-25-55 xl:grid-cols-2">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_3.title }}
|
{{ component.front_section_lang[0].data.section_3.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="flex flex-col space-25-55">
|
<div class="flex flex-col space-25-55">
|
||||||
<p v-for="(item, index) in component.section_lang_data.section_3
|
<p v-for="(item, index) in component.front_section_lang[0].data.section_3
|
||||||
.text_blocks" :key="index">
|
.text_blocks" :key="index">
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</p>
|
</p>
|
||||||
@ -66,27 +66,31 @@
|
|||||||
<div class="grid xl:space-25-55 grid-cols-1 xl:grid-cols-2 xl:gap-[30px]">
|
<div class="grid xl:space-25-55 grid-cols-1 xl:grid-cols-2 xl:gap-[30px]">
|
||||||
<div class="flex flex-col gap-[25px] sm:gap-[55px] md:gap-[75px] xl:justify-between">
|
<div class="flex flex-col gap-[25px] sm:gap-[55px] md:gap-[75px] xl:justify-between">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_4.title }}
|
{{ component.front_section_lang[0].data.section_4.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<p>{{ component.section_lang_data.section_4.description }}</p>
|
<p>{{ component.front_section_lang[0].data.section_4.description }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-[25px] mt-5 md:mb-[55px] xl:m-0 w-full h-[222px] sm:h-[371px] rounded-2xl" :style="{
|
<div class="mb-[25px] mt-5 md:mb-[55px] xl:m-0 w-full h-[222px] sm:h-[371px] rounded-2xl" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[2]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[2]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
<p class="xl:col-start-2 xl:col-end-3">{{ component.section_lang_data.section_4.description_second }}</p>
|
<p class="xl:col-start-2 xl:col-end-3">{{ component.front_section_lang[0].data.section_4.description_second }}</p>
|
||||||
</div>
|
</div>
|
||||||
</UiContainer>
|
</UiContainer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
|
is_no_lang: boolean
|
||||||
|
page_name: string
|
||||||
|
front_section_lang: {
|
||||||
|
data: {
|
||||||
section_1: {
|
section_1: {
|
||||||
title: string;
|
title: string;
|
||||||
text_blocks: [
|
text_blocks: [
|
||||||
@ -114,6 +118,11 @@ type Component = {
|
|||||||
description: string;
|
description: string;
|
||||||
description_second: string;
|
description_second: string;
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
};
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -6,27 +6,27 @@
|
|||||||
class="h-[240px] sm:h-[400px] md:h-[490px] bg-block p-[25px] sm:p-[50px] rounded-2xl flex flex-col justify-between">
|
class="h-[240px] sm:h-[400px] md:h-[490px] bg-block p-[25px] sm:p-[50px] rounded-2xl flex flex-col justify-between">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="h1-big text-accent-green-light mb-6 md:mb-10">
|
<h1 class="h1-big text-accent-green-light mb-6 md:mb-10">
|
||||||
{{ component.section_lang_data.title }}
|
{{ component.front_section_lang[0].data.title }}
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-text-light sm:text-xl md:text-2xl font-medium">{{
|
<p class="text-text-light sm:text-xl md:text-2xl font-medium">{{
|
||||||
component.section_lang_data.description }}</p>
|
component.front_section_lang[0].data.description }}</p>
|
||||||
</div>
|
</div>
|
||||||
<UiButtonArrow type="fill" :arrow="true">{{ $t('buy_gold') }}</UiButtonArrow>
|
<UiButtonArrow type="fill" :arrow="true">{{ $t('buy_gold') }}</UiButtonArrow>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-[10px] sm:gap-[30px]">
|
<div class="flex gap-[10px] sm:gap-[30px]">
|
||||||
<div class="rounded-2xl h-[155px] sm:h-[225px] md:h-[280px] w-full" :style="{
|
<div class="rounded-2xl h-[155px] sm:h-[225px] md:h-[280px] w-full" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
<div class="rounded-2xl h-[155px] sm:h-[225px] md:h-[280px] w-full" :style="{
|
<div class="rounded-2xl h-[155px] sm:h-[225px] md:h-[280px] w-full" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[2]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[2]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
<div class="hidden sm:block xl:hidden h-[225px] md:h-[280px] rounded-2xl w-full border border-block"
|
<div class="hidden sm:block xl:hidden h-[225px] md:h-[280px] rounded-2xl w-full border border-block"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
@ -34,37 +34,40 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="sm:hidden xl:block h-[326px] md:h-auto min-w-[40%] xl:min-w-[60%] rounded-2xl border border-block"
|
<div class="sm:hidden xl:block h-[326px] md:h-auto min-w-[40%] xl:min-w-[60%] rounded-2xl border border-block"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
</div>
|
</div>
|
||||||
<div class="grid md:grid-cols-1 xl:grid-cols-2 gap-[20px] md:auto-rows-fr sm:gap-[30px]">
|
<div class="grid md:grid-cols-1 xl:grid-cols-2 gap-[20px] md:auto-rows-fr sm:gap-[30px]">
|
||||||
<div class="space-25-55-75">
|
<div class="space-25-55-75">
|
||||||
<h2 class="h2-bold-bounded">{{ component.section_lang_data.section_2.title }}</h2>
|
<h2 class="h2-bold-bounded">{{ component.front_section_lang[0].data.section_2.title }}</h2>
|
||||||
<div class="space-y-[40px] sm:space-y-[50px]">
|
<div class="space-y-[40px] sm:space-y-[50px]">
|
||||||
<p v-for="(item, index) in component.section_lang_data.section_2.text_blocks" :key="index">{{ item
|
<p v-for="(item, index) in component.front_section_lang[0].data.section_2.text_blocks" :key="index">{{ item
|
||||||
}}</p>
|
}}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full md:h-full rounded-2xl h-[327px] sm:h-[550px]" :style="{
|
<div class="w-full md:h-full rounded-2xl h-[327px] sm:h-[550px]" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[3]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[3]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
</div>
|
</div>
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-y-[25px] sm:gap-y-[55px] xl:gap-y-0 gap-x-[30px]">
|
<div
|
||||||
<h2 class="h2-bold-bounded sm:col-start-1 sm:col-end-3">{{ component.section_lang_data.section_3.title }}</h2>
|
class="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-y-[25px] sm:gap-y-[55px] xl:gap-y-0 gap-x-[30px]">
|
||||||
<div v-for="(item, index) in component.section_lang_data.section_3.text_blocks" :key="index"
|
<h2 class="h2-bold-bounded sm:col-start-1 sm:col-end-3">{{ component.front_section_lang[0].data.section_3.title }}
|
||||||
|
</h2>
|
||||||
|
<div v-for="(item, index) in component.front_section_lang[0].data.section_3.text_blocks" :key="index"
|
||||||
class="flex flex-col justify-between space-25-55">
|
class="flex flex-col justify-between space-25-55">
|
||||||
<p class="md:px-4 xl:p-0">{{ item }}</p>
|
<p class="md:px-4 xl:p-0">{{ item }}</p>
|
||||||
<div class=" rounded-2xl h-[227px] sm:h-[281px]" :style="{
|
<div class=" rounded-2xl h-[227px] sm:h-[281px]" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[index + 4]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[index + 4]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
</div>
|
</div>
|
||||||
<div class="sm:col-start-1 sm:col-end-3 xl:col-start-3 xl:col-end-5 flex justify-center xl:items-end xl:justify-end">
|
<div
|
||||||
|
class="sm:col-start-1 sm:col-end-3 xl:col-start-3 xl:col-end-5 flex justify-center xl:items-end xl:justify-end">
|
||||||
<UiButtonArrow type="fill" :arrow="true">{{ $t('buy_gold') }}</UiButtonArrow>
|
<UiButtonArrow type="fill" :arrow="true">{{ $t('buy_gold') }}</UiButtonArrow>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -72,23 +75,31 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
title: string;
|
is_no_lang: boolean
|
||||||
description: string;
|
page_name: string
|
||||||
button_label: string;
|
front_section_lang: {
|
||||||
|
data: {
|
||||||
|
title: string
|
||||||
|
description: string
|
||||||
section_2: {
|
section_2: {
|
||||||
title: string;
|
title: string
|
||||||
text_blocks: []
|
text_blocks: string[]
|
||||||
},
|
|
||||||
section_3: {
|
|
||||||
title: string;
|
|
||||||
text_blocks: []
|
|
||||||
}
|
}
|
||||||
};
|
section_3: {
|
||||||
};
|
title: string
|
||||||
|
text_blocks: string[]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,44 +3,35 @@
|
|||||||
<div class="grid xl:grid-cols-2">
|
<div class="grid xl:grid-cols-2">
|
||||||
<div class="space-25-75 xl:col-start-2">
|
<div class="space-25-75 xl:col-start-2">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.title }}
|
{{ component.front_section_lang[0].data.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<p>{{ component.section_lang_data.description }}</p>
|
<p>{{ component.front_section_lang[0].data.description }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 grid-rows-5 md:grid-rows-3 xl:grid-rows-2 gap-8">
|
||||||
class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 grid-rows-5 md:grid-rows-3 xl:grid-rows-2 gap-8"
|
<div v-for="(item, index) in component.front_section_lang[0].data.feature_blocks" :key="index" :class="[
|
||||||
>
|
|
||||||
<div
|
|
||||||
v-for="(item, index) in component.section_lang_data.feature_blocks"
|
|
||||||
:key="index"
|
|
||||||
:class="[
|
|
||||||
'p-8 rounded-2xl border border-block flex flex-col justify-between gap-4',
|
'p-8 rounded-2xl border border-block flex flex-col justify-between gap-4',
|
||||||
index === 0 && 'bg-block dark:text-bg-dark',
|
index === 0 && 'bg-block dark:text-bg-dark',
|
||||||
index === 1 && 'xl:col-start-2 xl:col-end-3',
|
index === 1 && 'xl:col-start-2 xl:col-end-3',
|
||||||
index === 2 && 'xl:col-start-4 xl:col-end-5',
|
index === 2 && 'xl:col-start-4 xl:col-end-5',
|
||||||
index === 3 &&
|
index === 3 &&
|
||||||
'md:col-start-1 md:col-end-3 xl:col-start-2 xl:col-end-4',
|
'md:col-start-1 md:col-end-3 xl:col-start-2 xl:col-end-4',
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
<span>0{{ index + 1 }} <br /></span>{{ item.block_title }}
|
<span>0{{ index + 1 }} <br /></span>{{ item.block_title }}
|
||||||
</h4>
|
</h4>
|
||||||
<p>{{ item.block_description }}</p>
|
<p>{{ item.block_description }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="sm:text-white xl:row-start-2 md:col-start-1 md:col-end-3 xl:col-end-2 w-full md:h-full flex justify-center xl:items-end"
|
class="sm:text-white xl:row-start-2 md:col-start-1 md:col-end-3 xl:col-end-2 w-full md:h-full flex justify-center xl:items-end">
|
||||||
>
|
|
||||||
<UiButtonArrow :arrow="true" type="fill">Zakoupit zlato</UiButtonArrow>
|
<UiButtonArrow :arrow="true" type="fill">Zakoupit zlato</UiButtonArrow>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="rounded-2xl row-start-4 md:row-start-2 md:col-start-2 md:col-end-3 xl:col-start-4 xl:col-end-5"
|
||||||
class="rounded-2xl row-start-4 md:row-start-2 md:col-start-2 md:col-end-3 xl:col-start-4 xl:col-end-5"
|
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'top',
|
backgroundPosition: 'top',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</UiContainer>
|
</UiContainer>
|
||||||
</template>
|
</template>
|
||||||
@ -48,21 +39,28 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { UiButtonArrow } from "#components";
|
import { UiButtonArrow } from "#components";
|
||||||
|
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
title: string;
|
is_no_lang: boolean
|
||||||
description: string;
|
page_name: string
|
||||||
feature_blocks: [
|
front_section_lang: {
|
||||||
{
|
data: {
|
||||||
block_title: string;
|
title: string
|
||||||
block_description: string;
|
description: string
|
||||||
fill: boolean;
|
feature_blocks: {
|
||||||
|
block_title: string
|
||||||
|
block_description: string
|
||||||
|
fill?: boolean
|
||||||
|
}[]
|
||||||
}
|
}
|
||||||
];
|
id_front_section: number
|
||||||
};
|
id_lang: number
|
||||||
};
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -2,98 +2,79 @@
|
|||||||
<UiContainer class="space-55-75">
|
<UiContainer class="space-55-75">
|
||||||
<div class="space-25-55-75">
|
<div class="space-25-55-75">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_1.title }}
|
{{ component.front_section_lang[0].data.section_1.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="flex flex-col xl:flex-row gap-12">
|
<div class="flex flex-col xl:flex-row gap-12">
|
||||||
<div
|
<div class="rounded-2xl h-[255px] sm:h-[435px] md:h-[500px] w-full xl:min-w-[700px]" :style="{
|
||||||
class="rounded-2xl h-[255px] sm:h-[435px] md:h-[500px] w-full xl:min-w-[700px]"
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'bottom',
|
backgroundPosition: 'bottom',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
<div class="flex flex-col justify-between space-25-55">
|
<div class="flex flex-col justify-between space-25-55">
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.section_1.sub_title }}
|
{{ component.front_section_lang[0].data.section_1.sub_title }}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<p
|
<p v-for="(item, index) in component.front_section_lang[0].data.section_1.sub_description" :key="index">
|
||||||
v-for="item in component.section_lang_data.section_1
|
|
||||||
.sub_description"
|
|
||||||
>
|
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.section_1.sub_title_second }}
|
{{ component.front_section_lang[0].data.section_1.sub_title_second }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-25-55-75">
|
<div class="space-25-55-75">
|
||||||
<h2 class="h2-bold-bounded sm:text-center">
|
<h2 class="h2-bold-bounded sm:text-center">
|
||||||
{{ component.section_lang_data.section_2.title }}
|
{{ component.front_section_lang[0].data.section_2.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="space-25-55">
|
<div class="space-25-55">
|
||||||
<div class="flex flex-col w-full xl:w-[55%]">
|
<div class="flex flex-col w-full xl:w-[55%]">
|
||||||
<p v-for="item in component.section_lang_data.section_2.description">
|
<p v-for="(item, index) in component.front_section_lang[0].data.section_2.description" :key="index">
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full md:ml-10 xl:m-0 xl:grid xl:grid-cols-2">
|
<div class="w-full md:ml-10 xl:m-0 xl:grid xl:grid-cols-2">
|
||||||
<h4 class="col-start-2 col-end-3 h4-uppercase-bold-inter">
|
<h4 class="col-start-2 col-end-3 h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.section_3.title }}
|
{{ component.front_section_lang[0].data.section_3.title }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col xl:flex-row gap-12">
|
<div class="flex flex-col xl:flex-row gap-12">
|
||||||
<div class="flex flex-col sm:flex-row gap-3 min-w-[60%]">
|
<div class="flex flex-col sm:flex-row gap-3 min-w-[60%]">
|
||||||
<div
|
<div class="rounded-2xl h-[230px] sm:h-[300px] w-full xl:h-[770px]" :style="{
|
||||||
class="rounded-2xl h-[230px] sm:h-[300px] w-full xl:h-[770px]"
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=1200x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
<div class="rounded-2xl xl:hidden w-full h-[230px] sm:h-[300px] xl:w-full xl:h-[328px]" :style="{
|
||||||
<div
|
backgroundImage: `url('/api/public/file/${component.img[2]}_l.webp')`,
|
||||||
class="rounded-2xl xl:hidden w-full h-[230px] sm:h-[300px] xl:w-full xl:h-[328px]"
|
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[2]}?thumb=1200x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col justify-between space-25-55 xl:w-[70%]">
|
<div class="flex flex-col justify-between space-25-55 xl:w-[70%]">
|
||||||
<div
|
<div class="hidden xl:block rounded-2xl max-full min-h-[330px]" :style="{
|
||||||
class="hidden xl:block rounded-2xl max-full min-h-[330px]"
|
backgroundImage: `url('/api/public/file/${component.img[2]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[2]}?thumb=1200x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
<div class="h-full flex flex-col gap-5 xl:gap-0 justify-between">
|
<div class="h-full flex flex-col gap-5 xl:gap-0 justify-between">
|
||||||
<h4 class="col-start-2 col-end-3 h4-uppercase-bold-inter">
|
<h4 class="col-start-2 col-end-3 h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.section_4.title }}
|
{{ component.front_section_lang[0].data.section_4.title }}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<p
|
<p v-if="component.front_section_lang[0].data.section_4.description"
|
||||||
v-if="component.section_lang_data.section_4.description"
|
v-html="component.front_section_lang[0].data.section_4.description[0]"></p>
|
||||||
v-html="component.section_lang_data.section_4.description[0]"
|
|
||||||
></p>
|
|
||||||
<br />
|
<br />
|
||||||
<p
|
<p v-if="component.front_section_lang[0].data.section_4.description"
|
||||||
v-if="component.section_lang_data.section_4.description"
|
v-html="component.front_section_lang[0].data.section_4.description[1]"></p>
|
||||||
v-html="component.section_lang_data.section_4.description[1]"
|
|
||||||
></p>
|
|
||||||
</div>
|
</div>
|
||||||
<h4 class="col-start-2 col-end-3 h4-uppercase-bold-inter">
|
<h4 class="col-start-2 col-end-3 h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.section_5.title }}
|
{{ component.front_section_lang[0].data.section_5.title }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -103,24 +84,41 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
interface ContentSection {
|
component: {
|
||||||
title: string;
|
id: number
|
||||||
sub_title?: string;
|
name: string
|
||||||
sub_title_second?: string;
|
img: string[]
|
||||||
sub_description?: string[];
|
component_name: string
|
||||||
description?: string[];
|
is_no_lang: boolean
|
||||||
}
|
page_name: string
|
||||||
type Component = {
|
front_section_lang: {
|
||||||
image_collection: string;
|
data: {
|
||||||
section_id: string;
|
section_1: {
|
||||||
section_img: string;
|
title: string
|
||||||
section_lang_data: {
|
sub_title: string
|
||||||
section_1: ContentSection;
|
sub_description: string[]
|
||||||
section_2: ContentSection;
|
sub_title_second: string
|
||||||
section_3: ContentSection;
|
}
|
||||||
section_4: ContentSection;
|
section_2: {
|
||||||
section_5: ContentSection;
|
title: string
|
||||||
};
|
description: string[]
|
||||||
};
|
}
|
||||||
|
section_3: {
|
||||||
|
title: string
|
||||||
|
}
|
||||||
|
section_4: {
|
||||||
|
title: string
|
||||||
|
description: string[]
|
||||||
|
}
|
||||||
|
section_5: {
|
||||||
|
title: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -4,42 +4,37 @@
|
|||||||
<div class="flex flex-col justify-between w-full gap-4 xl:w-[45%]">
|
<div class="flex flex-col justify-between w-full gap-4 xl:w-[45%]">
|
||||||
<div class="space-y-[25px]">
|
<div class="space-y-[25px]">
|
||||||
<h1 class="h1-big text-accent-green-light dark:text-accent-green-dark">
|
<h1 class="h1-big text-accent-green-light dark:text-accent-green-dark">
|
||||||
{{ component.section_lang_data.main_title }}
|
{{ component.front_section_lang[0].data.main_title }}
|
||||||
</h1>
|
</h1>
|
||||||
<p>
|
<p>
|
||||||
{{ component.section_lang_data.main_description }}
|
{{ component.front_section_lang[0].data.main_description }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.main_subtitle }}
|
{{ component.front_section_lang[0].data.main_subtitle }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="rounded-2xl h-[340px] sm:h-[380px] md:min-w-[324px] xl:h-[800px] xl:min-w-[740px] m-0 sm:mx-10 md:m-0"
|
||||||
class="rounded-2xl h-[340px] sm:h-[380px] md:min-w-[324px] xl:h-[800px] xl:min-w-[740px] m-0 sm:mx-10 md:m-0"
|
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}"></div>
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="space-25-55-75">
|
<div class="space-25-55-75">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.story_title }}
|
{{ component.front_section_lang[0].data.story_title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="flex flex-col-reverse md:flex-row w-full gap-6">
|
<div class="flex flex-col-reverse md:flex-row w-full gap-6">
|
||||||
<div
|
<div class="rounded-2xl h-[390px] md:h-auto min-w-[40%] xl:min-w-[60%]" :style="{
|
||||||
class="rounded-2xl h-[390px] md:h-auto min-w-[40%] xl:min-w-[60%]"
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=1200x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<p v-for="(item, index) in component.section_lang_data.story_description">
|
<p v-for="(item, index) in component.front_section_lang[0].data.story_description" :key="index">
|
||||||
{{ item }}
|
{{ item }}
|
||||||
<div v-if="index < component.section_lang_data.story_description.length-1">
|
<div v-if="index < component.front_section_lang[0].data.story_description.length - 1">
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
</p>
|
</p>
|
||||||
@ -47,12 +42,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col w-full gap-6">
|
<div class="flex flex-col w-full gap-6">
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.story_subtitle }}
|
{{ component.front_section_lang[0].data.story_subtitle }}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="flex flex-col justify-between xl:max-w-[70%]">
|
<div class="flex flex-col justify-between xl:max-w-[70%]">
|
||||||
<p v-for="(el, indexEl) in component.section_lang_data.story_sub_description">
|
<p v-for="(el, indexEl) in component.front_section_lang[0].data.story_sub_description" :key="indexEl">
|
||||||
{{ el }}
|
{{ el }}
|
||||||
<div v-if="indexEl < component.section_lang_data.story_sub_description.length-1">
|
<div v-if="indexEl < component.front_section_lang[0].data.story_sub_description.length - 1">
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
</p>
|
</p>
|
||||||
@ -64,19 +59,28 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
main_title: string;
|
is_no_lang: boolean
|
||||||
main_description: string;
|
page_name: string
|
||||||
main_subtitle: string;
|
front_section_lang: {
|
||||||
story_title: string;
|
data: {
|
||||||
story_description: [];
|
main_title: string
|
||||||
story_subtitle: string;
|
main_description: string
|
||||||
story_sub_description: [];
|
main_subtitle: string
|
||||||
};
|
story_title: string
|
||||||
};
|
story_description: string[]
|
||||||
|
story_subtitle: string
|
||||||
|
story_sub_description: string[]
|
||||||
|
}
|
||||||
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -2,131 +2,117 @@
|
|||||||
<UiContainer class="space-y-[55px] md:space-y-[75px] xl:space-y-[100px]">
|
<UiContainer class="space-y-[55px] md:space-y-[75px] xl:space-y-[100px]">
|
||||||
<div class="space-y-10 sm:space-y-[55px] md:space-y-14">
|
<div class="space-y-10 sm:space-y-[55px] md:space-y-14">
|
||||||
<h1 class="h1 text-center">
|
<h1 class="h1 text-center">
|
||||||
<span
|
<span v-for="(item, index) in component.front_section_lang[0].data.title" :key="index" :class="[
|
||||||
v-for="(item, index) in component.section_lang_data.title"
|
|
||||||
:key="index"
|
|
||||||
:class="[
|
|
||||||
item.highlight
|
item.highlight
|
||||||
? 'text-accent-green-light dark:text-accent-green-dark'
|
? 'text-accent-green-light dark:text-accent-green-dark'
|
||||||
: '',
|
: '',
|
||||||
'inline',
|
'inline',
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
<span v-if="index !== component.section_lang_data.title.length - 1">
|
<span v-if="index !== component.front_section_lang[0].data.title.length - 1">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
<div
|
<div class="h-[180px] sm:h-[330px] md:h-[500px] rounded-2xl" :style="{
|
||||||
class="h-[180px] sm:h-[330px] md:h-[500px] rounded-2xl"
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=640x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
<div class="md:w-full xl:w-[70%] space-y-14">
|
<div class="md:w-full xl:w-[70%] space-y-14">
|
||||||
<p>{{ component.section_lang_data.main_description }}</p>
|
<p>{{ component.front_section_lang[0].data.main_description }}</p>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.secondary_description }}
|
{{ component.front_section_lang[0].data.secondary_description }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid space-25-75 xl:space-0 grid-cols-1 xl:grid-cols-2">
|
<div class="grid space-25-75 xl:space-0 grid-cols-1 xl:grid-cols-2">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_1_title }}
|
{{ component.front_section_lang[0].data.section_1_title }}
|
||||||
</h2>
|
</h2>
|
||||||
<p v-html="component.section_lang_data.section_1_description"></p>
|
<p v-html="component.front_section_lang[0].data.section_1_description"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid space-25-75 xl:space-0 grid-cols-1 xl:grid-cols-2">
|
<div class="grid space-25-75 xl:space-0 grid-cols-1 xl:grid-cols-2">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
<span
|
<span v-for="(item, index) in component.front_section_lang[0].data.section_2_title" :key="index" :class="[
|
||||||
v-for="(item, index) in component.section_lang_data.section_2_title"
|
|
||||||
:key="index"
|
|
||||||
:class="[
|
|
||||||
item.highlight
|
item.highlight
|
||||||
? 'text-accent-green-light dark:text-accent-green-dark'
|
? 'text-accent-green-light dark:text-accent-green-dark'
|
||||||
: '',
|
: '',
|
||||||
'inline',
|
'inline',
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
<span v-if="index !== component.section_lang_data.title.length - 1">
|
<span v-if="index !== component.front_section_lang[0].data.title.length - 1">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
<p v-html="component.section_lang_data.section_2_description"></p>
|
<p v-html="component.front_section_lang[0].data.section_2_description"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-25-75">
|
<div class="space-25-75">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_3_title }}
|
{{ component.front_section_lang[0].data.section_3_title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div class="grid grid-cols-1 space-25-55 md:space-0 xl:gap-2 md:grid-cols-2">
|
||||||
class="grid grid-cols-1 space-25-55 md:space-0 xl:gap-2 md:grid-cols-2"
|
|
||||||
>
|
|
||||||
<div class="space-y-[25px] sm:space-y-[45px]">
|
<div class="space-y-[25px] sm:space-y-[45px]">
|
||||||
<p>{{ component.section_lang_data.section_3_description }}</p>
|
<p>{{ component.front_section_lang[0].data.section_3_description }}</p>
|
||||||
<div class="">
|
<div class="">
|
||||||
<p
|
<p v-for="(item, index) in component.front_section_lang[0].data
|
||||||
v-for="(item, index) in component.section_lang_data
|
.section_3_items" :key="index">
|
||||||
.section_3_items"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
{{ index + 1 }}.
|
{{ index + 1 }}.
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="h-[315px] xl:h-full rounded-2xl" :style="{
|
||||||
class="h-[315px] xl:h-full rounded-2xl"
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=640x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid grid-cols-1 xl:grid-cols-2">
|
<div class="grid grid-cols-1 xl:grid-cols-2">
|
||||||
<div class="col-start-2 col-end-3 space-25-75 xl:space-0">
|
<div class="col-start-2 col-end-3 space-25-75 xl:space-0">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.section_4_title }}
|
{{ component.front_section_lang[0].data.section_4_title }}
|
||||||
</h2>
|
</h2>
|
||||||
<p v-html="component.section_lang_data.section_4_description"></p>
|
<p v-html="component.front_section_lang[0].data.section_4_description"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</UiContainer>
|
</UiContainer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
title: [
|
is_no_lang: boolean
|
||||||
{
|
page_name: string
|
||||||
text: string;
|
front_section_lang: {
|
||||||
highlight: boolean;
|
data: {
|
||||||
|
title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
main_description: string
|
||||||
|
secondary_description: string
|
||||||
|
section_1_title: string
|
||||||
|
section_1_description: string
|
||||||
|
section_2_title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
section_2_description: string
|
||||||
|
section_3_title: string
|
||||||
|
section_3_description: string
|
||||||
|
section_3_items: string[]
|
||||||
|
section_4_title: string
|
||||||
|
section_4_description: string
|
||||||
}
|
}
|
||||||
];
|
id_front_section: number
|
||||||
main_description: string;
|
id_lang: number
|
||||||
secondary_description: string;
|
}[]
|
||||||
section_1_title: string;
|
|
||||||
section_1_description: string;
|
|
||||||
section_2_title: [
|
|
||||||
{
|
|
||||||
text: string;
|
|
||||||
highlight: boolean;
|
|
||||||
}
|
}
|
||||||
];
|
}>();
|
||||||
section_2_description: string;
|
|
||||||
section_3_title: string;
|
|
||||||
section_3_description: string;
|
|
||||||
section_3_items: [];
|
|
||||||
section_4_title: string;
|
|
||||||
section_4_description: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
<UiContainer class="space-55-75 xl:!space-y-[100px]">
|
<UiContainer class="space-55-75 xl:!space-y-[100px]">
|
||||||
<div class="space-25-75">
|
<div class="space-25-75">
|
||||||
<h2 class="h2-bold-bounded max-w-[95%]">
|
<h2 class="h2-bold-bounded max-w-[95%]">
|
||||||
<span v-for="(item, index) in component.section_lang_data
|
<span v-for="(item, index) in component.front_section_lang[0].data.reasons_section_title" :key="index" :class="[
|
||||||
.reasons_section_title" :key="index" :class="[
|
|
||||||
item.highlight
|
item.highlight
|
||||||
? 'text-accent-green-light dark:text-accent-green-dark'
|
? 'text-accent-green-light dark:text-accent-green-dark'
|
||||||
: '',
|
: '',
|
||||||
@ -12,13 +11,13 @@
|
|||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
<span v-if="
|
<span v-if="
|
||||||
index !==
|
index !==
|
||||||
component.section_lang_data.reasons_section_title.length - 1
|
component.front_section_lang[0].data.reasons_section_title.length - 1
|
||||||
">
|
">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
<div class="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 md:px-10 xl:p-0 gap-8 auto-rows-fr">
|
<div class="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 md:px-10 xl:p-0 gap-8 auto-rows-fr">
|
||||||
<div v-for="(item, index) in component.section_lang_data.reason_blocks" :key="index" :class="[
|
<div v-for="(item, index) in component.front_section_lang[0].data.reason_blocks" :key="index" :class="[
|
||||||
'p-[25px] rounded-2xl border border-block flex flex-col justify-between gap-20',
|
'p-[25px] rounded-2xl border border-block flex flex-col justify-between gap-20',
|
||||||
index === 1 && 'xl:col-start-2 xl:col-end-3',
|
index === 1 && 'xl:col-start-2 xl:col-end-3',
|
||||||
index === 2 && 'xl:col-start-4 xl:col-end-5',
|
index === 2 && 'xl:col-start-4 xl:col-end-5',
|
||||||
@ -32,7 +31,7 @@
|
|||||||
|
|
||||||
<div class="row-end-7 sm:row-auto rounded-2xl flex items-center justify-center min-h-[200px]">
|
<div class="row-end-7 sm:row-auto rounded-2xl flex items-center justify-center min-h-[200px]">
|
||||||
<div class="w-full h-full rounded-2xl" :style="{
|
<div class="w-full h-full rounded-2xl" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'top',
|
backgroundPosition: 'top',
|
||||||
}" />
|
}" />
|
||||||
@ -43,31 +42,31 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="space-25-75">
|
<div class="space-25-75">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
{{ component.section_lang_data.cta_section_title }}
|
{{ component.front_section_lang[0].data.cta_section_title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="hidden xl:grid grid-cols-2 gap-6">
|
<div class="hidden xl:grid grid-cols-2 gap-6">
|
||||||
<div class="flex flex-col gap-20">
|
<div class="flex flex-col gap-20">
|
||||||
<p>{{ component.section_lang_data.cta_description_intro }}</p>
|
<p>{{ component.front_section_lang[0].data.cta_description_intro }}</p>
|
||||||
<p>{{ component.section_lang_data.cta_description_details }}</p>
|
<p>{{ component.front_section_lang[0].data.cta_description_details }}</p>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.main_call_to_action_statement }}
|
{{ component.front_section_lang[0].data.main_call_to_action_statement }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="xl:hidden space-25-55">
|
<div class="xl:hidden space-25-55">
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 md:gap-[55px] space-25-55">
|
<div class="grid grid-cols-1 md:grid-cols-2 md:gap-[55px] space-25-55">
|
||||||
<p>{{ component.section_lang_data.cta_description_intro }}</p>
|
<p>{{ component.front_section_lang[0].data.cta_description_intro }}</p>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.main_call_to_action_statement }}
|
{{ component.front_section_lang[0].data.main_call_to_action_statement }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
<p>{{ component.section_lang_data.cta_description_details }}</p>
|
<p>{{ component.front_section_lang[0].data.cta_description_details }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-[45px]">
|
<div class="space-y-[45px]">
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.form_section_title }}
|
{{ component.front_section_lang[0].data.form_section_title }}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="flex flex-col md:flex-row gap-8 md:gap-[30px] xl:gap-0">
|
<div class="flex flex-col md:flex-row gap-8 md:gap-[30px] xl:gap-0">
|
||||||
<div class="p-[25px] md:p-[50px] bg-block rounded-2xl space-y-[30px] xl:ml-40 xl:w-[65%]">
|
<div class="p-[25px] md:p-[50px] bg-block rounded-2xl space-y-[30px] xl:ml-40 xl:w-[65%]">
|
||||||
@ -114,14 +113,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col xl:flex-row xl:h-[130px] gap-[45px]">
|
<div class="flex flex-col xl:flex-row xl:h-[130px] gap-[45px]">
|
||||||
<div class="w-full xl:w-[560px] h-[130px] xl:h-full rounded-2xl" :style="{
|
<div class="w-full xl:w-[560px] h-[130px] xl:h-full rounded-2xl" :style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=640x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}" />
|
}" />
|
||||||
<div class="flex flex-col h-full justify-between items-stretch space-y-[25px] sm:space-y-[55px] xl:space-y-0">
|
<div class="flex flex-col h-full justify-between items-stretch space-y-[25px] sm:space-y-[55px] xl:space-y-0">
|
||||||
<p>{{ component.section_lang_data.closing_inspirational_block }}</p>
|
<p>{{ component.front_section_lang[0].data.closing_inspirational_block }}</p>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
<span v-for="(item, index) in component.section_lang_data.title" :key="index" :class="[
|
<span v-for="(item, index) in component.front_section_lang[0].data.title" :key="index" :class="[
|
||||||
item.highlight
|
item.highlight
|
||||||
? 'text-accent-green-light dark:text-accent-green-dark'
|
? 'text-accent-green-light dark:text-accent-green-dark'
|
||||||
: '',
|
: '',
|
||||||
@ -130,12 +129,12 @@
|
|||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
<span v-if="
|
<span v-if="
|
||||||
index !==
|
index !==
|
||||||
component.section_lang_data.reasons_section_title.length - 1
|
component.front_section_lang[0].data.reasons_section_title.length - 1
|
||||||
">
|
">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</h4>
|
</h4>
|
||||||
<p>{{ component.section_lang_data.final_tagline }}</p>
|
<p>{{ component.front_section_lang[0].data.final_tagline }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -143,39 +142,41 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
reasons_section_title: [
|
is_no_lang: boolean
|
||||||
{
|
page_name: string
|
||||||
text: string;
|
front_section_lang: {
|
||||||
highlight: boolean;
|
data: {
|
||||||
|
reasons_section_title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
reason_blocks: {
|
||||||
|
title: string
|
||||||
|
description: string
|
||||||
|
}[]
|
||||||
|
cta_section_title: string
|
||||||
|
cta_description_intro: string
|
||||||
|
cta_description_details: string
|
||||||
|
main_call_to_action_statement: string
|
||||||
|
form_section_title: string
|
||||||
|
closing_inspirational_block: string
|
||||||
|
title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
final_tagline: string
|
||||||
|
contact_info: string
|
||||||
}
|
}
|
||||||
];
|
id_front_section: number
|
||||||
reason_blocks: [
|
id_lang: number
|
||||||
{
|
}[]
|
||||||
title: string;
|
|
||||||
description: string;
|
|
||||||
}
|
}
|
||||||
];
|
}>();
|
||||||
|
|
||||||
cta_section_title: string;
|
|
||||||
cta_description_intro: string;
|
|
||||||
cta_description_details: string;
|
|
||||||
main_call_to_action_statement: string;
|
|
||||||
|
|
||||||
form_section_title: string;
|
|
||||||
closing_inspirational_block: string;
|
|
||||||
title: [
|
|
||||||
{
|
|
||||||
text: string;
|
|
||||||
highlight: boolean;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
final_tagline: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<UiContainer class="space-y-[45px]">
|
<UiContainer class="space-y-[45px]">
|
||||||
<div class="xl:w-[70%] space-y-[25px]">
|
<div class="xl:w-[70%] space-y-[25px]">
|
||||||
<h1 class="h1">{{ component.section_lang_data.title }}</h1>
|
<h1 class="h1">{{ component.front_section_lang[0].data.title }}</h1>
|
||||||
<p v-html="component.section_lang_data.description"></p>
|
<p v-html="component.front_section_lang[0].data.description"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col md:flex-row gap-8 md:gap-[30px] xl:gap-0">
|
<div class="flex flex-col md:flex-row gap-8 md:gap-[30px] xl:gap-0">
|
||||||
<div class="p-[25px] md:p-[50px] bg-block rounded-2xl space-y-[30px] xl:ml-40 xl:w-[65%]">
|
<div class="p-[25px] md:p-[50px] bg-block rounded-2xl space-y-[30px] xl:ml-40 xl:w-[65%]">
|
||||||
@ -50,14 +50,23 @@
|
|||||||
</UiContainer>
|
</UiContainer>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
|
is_no_lang: boolean
|
||||||
|
page_name: string
|
||||||
|
front_section_lang: {
|
||||||
|
data: {
|
||||||
title: string;
|
title: string;
|
||||||
description: string;
|
description: string;
|
||||||
};
|
}
|
||||||
};
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
@ -3,7 +3,7 @@
|
|||||||
<UiContainer class="flex flex-col gap-24">
|
<UiContainer class="flex flex-col gap-24">
|
||||||
<div
|
<div
|
||||||
class="grid grid-cols-1 md:grid-cols-2 gap-[75px] xl:gap-0 xl:grid-cols-none xl:grid-flow-col auto-cols-max justify-between">
|
class="grid grid-cols-1 md:grid-cols-2 gap-[75px] xl:gap-0 xl:grid-cols-none xl:grid-flow-col auto-cols-max justify-between">
|
||||||
<div v-for="(item, index) in component.section_lang_data" :key="index"
|
<div v-for="(item, index) in component.front_section_lang[0].data" :key="index"
|
||||||
class="flex flex-col gap-[25px] sm:gap-8 max-w-[280px]">
|
class="flex flex-col gap-[25px] sm:gap-8 max-w-[280px]">
|
||||||
<h3 class="h4-uppercase-bold-inter">{{ item.title }}</h3>
|
<h3 class="h4-uppercase-bold-inter">{{ item.title }}</h3>
|
||||||
<div class="cursor-pointer hover:text-text-light/80 dark:hover:text-text-dark/70 transition-all text-inter"
|
<div class="cursor-pointer hover:text-text-light/80 dark:hover:text-text-dark/70 transition-all text-inter"
|
||||||
@ -22,24 +22,29 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
title: string;
|
is_no_lang: boolean
|
||||||
|
page_name: string
|
||||||
|
front_section_lang: {
|
||||||
|
data: {
|
||||||
|
title: string
|
||||||
children: {
|
children: {
|
||||||
title: string;
|
title: string
|
||||||
value: 'email' | 'address' | 'certificate' | 'document' | 'form' | 'info';
|
value: 'email' | 'address' | 'certificate' | 'document' | 'form' | 'info'
|
||||||
link?: string;
|
link?: string
|
||||||
}[];
|
}[]
|
||||||
}[];
|
}[]
|
||||||
};
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
|
|
||||||
const store = useStore();
|
|
||||||
const open = ref(false);
|
|
||||||
const menuStore = useMenuStore();
|
const menuStore = useMenuStore();
|
||||||
const colorMode = useColorMode();
|
const colorMode = useColorMode();
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<UiContainer>
|
<UiContainer>
|
||||||
<div class="space-25-55">
|
<div class="space-25-55">
|
||||||
<h2 class="h2-bold-bounded">{{ component.section_lang_data.title }}</h2>
|
<h2 class="h2-bold-bounded">{{ component.front_section_lang[0].data.title }}</h2>
|
||||||
|
|
||||||
<div class="flex flex-col gap-10">
|
<div class="flex flex-col gap-10">
|
||||||
<div v-for="(item, index) in component.section_lang_data.faq" :key="index"
|
<div v-for="(item, index) in component.front_section_lang[0].data.faq" :key="index"
|
||||||
@click="active = active === index ? 0 : index"
|
@click="active = active === index ? 0 : index"
|
||||||
class="flex gap-8 sm:gap-20 md:gap-40 xl:gap-60 cursor-pointer">
|
class="flex gap-8 sm:gap-20 md:gap-40 xl:gap-60 cursor-pointer">
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
@ -41,7 +41,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="h4-uppercase-bold-inter sm:text-start md:text-center xl:text-start xl:ml-66">
|
<h4 class="h4-uppercase-bold-inter sm:text-start md:text-center xl:text-start xl:ml-66">
|
||||||
<span v-for="(item, index) in component.section_lang_data.sub_title" :key="index" :class="{
|
<span v-for="(item, index) in component.front_section_lang [0].data.sub_title" :key="index" :class="{
|
||||||
'text-accent-green-light dark:text-accent-green-dark':
|
'text-accent-green-light dark:text-accent-green-dark':
|
||||||
item.highlight,
|
item.highlight,
|
||||||
}">
|
}">
|
||||||
@ -53,12 +53,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
|
is_no_lang: boolean
|
||||||
|
page_name: string
|
||||||
|
front_section_lang: {
|
||||||
|
data: {
|
||||||
title: string;
|
title: string;
|
||||||
faq: [
|
faq: [
|
||||||
{
|
{
|
||||||
@ -72,8 +76,13 @@ type Component = {
|
|||||||
highlight: boolean;
|
highlight: boolean;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
}
|
||||||
};
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
|
|
||||||
const active = ref<number>(0);
|
const active = ref<number>(0);
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,63 +1,45 @@
|
|||||||
<template>
|
<template>
|
||||||
<UiContainer class="space-y-[30px] xl:space-y-[55px]">
|
<UiContainer class="space-y-[30px] xl:space-y-[55px]">
|
||||||
<div class="flex flex-col xl:flex-row items-stretch w-full h-full gap-5">
|
<div class="flex flex-col xl:flex-row items-stretch w-full h-full gap-5">
|
||||||
<div
|
<div class="flex flex-col justify-between items-center space-25-55 xl:gap-4 w-auto h-auto">
|
||||||
class="flex flex-col justify-between items-center space-25-55 xl:gap-4 w-auto h-auto"
|
|
||||||
>
|
|
||||||
<h1 class="h1">
|
<h1 class="h1">
|
||||||
<span
|
<span v-for="(item, index) in component.front_section_lang[0].data.title" :key="index" :class="[
|
||||||
v-for="(item, index) in component.section_lang_data.title"
|
|
||||||
:key="index"
|
|
||||||
:class="[
|
|
||||||
item.highlight
|
item.highlight
|
||||||
? 'text-accent-green-light dark:text-accent-green-dark'
|
? 'text-accent-green-light dark:text-accent-green-dark'
|
||||||
: '',
|
: '',
|
||||||
'inline',
|
'inline',
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
<span v-if="index !== component.section_lang_data.title.length - 1">
|
<span v-if="index !== component.front_section_lang[0].data.title.length - 1">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
<span
|
<span v-for="(item, index) in component.front_section_lang[0].data.sub_title" :key="index" :class="{
|
||||||
v-for="(item, index) in component.section_lang_data.sub_title"
|
|
||||||
:key="index"
|
|
||||||
:class="{
|
|
||||||
'text-accent-green-light dark:text-accent-green-dark':
|
'text-accent-green-light dark:text-accent-green-dark':
|
||||||
item.highlight,
|
item.highlight,
|
||||||
}"
|
}">
|
||||||
>
|
|
||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
</span>
|
</span>
|
||||||
</h4>
|
</h4>
|
||||||
<p>{{ component.section_lang_data.description }}</p>
|
<p>{{ component.front_section_lang[0].data.description }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="w-full xl:max-w-[570px] h-[390px] sm:h-[506px] block rounded-2xl" :style="{
|
||||||
class="w-full xl:max-w-[570px] h-[390px] sm:h-[506px] block rounded-2xl"
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=640x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col xl:flex-row items-stretch w-full h-full gap-5">
|
<div class="flex flex-col xl:flex-row items-stretch w-full h-full gap-5">
|
||||||
<div
|
<div class="w-full xl:max-w-[570px] h-[225px] block rounded-2xl" :style="{
|
||||||
class="w-full xl:max-w-[570px] h-[225px] block rounded-2xl"
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=640x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
<div class="flex flex-col justify-between items-center space-25-55 xl:gap-4 w-auto h-auto">
|
||||||
<div
|
<p>{{ component.front_section_lang[0].data.description_second }}</p>
|
||||||
class="flex flex-col justify-between items-center space-25-55 xl:gap-4 w-auto h-auto"
|
|
||||||
>
|
|
||||||
<p>{{ component.section_lang_data.description_second }}</p>
|
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.sub_title_second }}
|
{{ component.front_section_lang[0].data.sub_title_second }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -65,27 +47,31 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
title: [
|
is_no_lang: boolean
|
||||||
{
|
page_name: string
|
||||||
text: string;
|
front_section_lang: {
|
||||||
highlight: boolean;
|
data: {
|
||||||
|
title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
sub_title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
description: string
|
||||||
|
description_second: string
|
||||||
|
sub_title_second: string
|
||||||
}
|
}
|
||||||
];
|
id_front_section: number
|
||||||
sub_title: [
|
id_lang: number
|
||||||
{
|
}[]
|
||||||
text: string;
|
|
||||||
highlight: boolean;
|
|
||||||
}
|
}
|
||||||
];
|
}>();
|
||||||
description: string;
|
|
||||||
description_second: string;
|
|
||||||
sub_title_second: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,97 +3,80 @@
|
|||||||
<div class="space-25-55">
|
<div class="space-25-55">
|
||||||
<div class="space-25-75">
|
<div class="space-25-75">
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.main_title }}
|
{{ component.front_section_lang[0].data.main_title }}
|
||||||
</h4>
|
</h4>
|
||||||
<div
|
<div class="w-full h-full flex flex-col items-stretch gap-4 xl:flex-row space-25-55 xl:!space-y-0">
|
||||||
class="w-full h-full flex flex-col items-stretch gap-4 xl:flex-row space-25-55 xl:!space-y-0"
|
<div class="flex flex-col space-y-[55px] xl:space-y-0 xl:justify-between">
|
||||||
>
|
<p>{{ component.front_section_lang[0].data.main_description }}</p>
|
||||||
<div
|
<p>{{ component.front_section_lang[0].data.section_title }}</p>
|
||||||
class="flex flex-col space-y-[55px] xl:space-y-0 xl:justify-between"
|
|
||||||
>
|
|
||||||
<p>{{ component.section_lang_data.main_description }}</p>
|
|
||||||
<p>{{ component.section_lang_data.section_title }}</p>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li
|
<li class="" v-for="(item, index) in component.front_section_lang[0].data
|
||||||
class=""
|
.section_items" :key="index">
|
||||||
v-for="(item, index) in component.section_lang_data
|
|
||||||
.section_items"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<span>{{ index + 1 }}. </span>{{ item }}
|
<span>{{ index + 1 }}. </span>{{ item }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="w-full xl:max-w-[690px] h-[200px] sm:h-[390px] block rounded-2xl" :style="{
|
||||||
class="w-full xl:max-w-[690px] h-[200px] sm:h-[390px] block rounded-2xl"
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=640x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-center">
|
<div class="flex items-center justify-center">
|
||||||
<div
|
<div class="flex flex-col items-center p-3 sm:p-6 md:p-8 xl:p-11 border border-block rounded-2xl gap-5">
|
||||||
class="flex flex-col items-center p-3 sm:p-6 md:p-8 xl:p-11 border border-block rounded-2xl gap-5"
|
<h4 class="h4-uppercase-bold-inter text-accent-green-light dark:text-accent-green-dark">
|
||||||
>
|
|
||||||
<h4
|
|
||||||
class="h4-uppercase-bold-inter text-accent-green-light dark:text-accent-green-dark"
|
|
||||||
>
|
|
||||||
20 {{ $t("years") }}
|
20 {{ $t("years") }}
|
||||||
</h4>
|
</h4>
|
||||||
<img
|
<img class="dark:hidden"
|
||||||
class="dark:hidden"
|
:src="`/api/public/file/${component.img[2]}_l.webp`"
|
||||||
:src="`/api/files/${component.image_collection}/${component.section_id}/${component.section_img[2]}?thumb=640x0')`"
|
alt="" />
|
||||||
alt=""
|
<img class="hidden dark:block"
|
||||||
/>
|
:src="`/api/public/file/${component.img[3]}_l.webp`"
|
||||||
<img
|
alt="" />
|
||||||
class="hidden dark:block"
|
|
||||||
:src="`/api/files/${component.image_collection}/${component.section_id}/${component.section_img[3]}?thumb=640x0')`"
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col gap-4 xl:flex-row space-25-55">
|
<div class="flex flex-col gap-4 xl:flex-row space-25-55">
|
||||||
<div class="flex flex-col space-25-55 xl:justify-between">
|
<div class="flex flex-col space-25-55 xl:justify-between">
|
||||||
<p>{{ component.section_lang_data.info_description }}</p>
|
<p>{{ component.front_section_lang[0].data.info_description }}</p>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.info_title }}
|
{{ component.front_section_lang[0].data.info_title }}
|
||||||
</h4>
|
</h4>
|
||||||
<div
|
<div v-html="component.front_section_lang[0].data.info_description_second" class=""></div>
|
||||||
v-html="component.section_lang_data.info_description_second"
|
|
||||||
class=""
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="w-full xl:max-w-[690px] h-[170px] sm:h-[360px] block rounded-2xl" :style="{
|
||||||
class="w-full xl:max-w-[690px] h-[170px] sm:h-[360px] block rounded-2xl"
|
backgroundImage: `url('/api/public/file/${component.img[1]}_l.webp')`,
|
||||||
:style="{
|
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[1]}?thumb=640x0')`,
|
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}" />
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</UiContainer>
|
</UiContainer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
main_title: string;
|
is_no_lang: boolean
|
||||||
main_description: string;
|
page_name: string
|
||||||
section_title: string;
|
front_section_lang: {
|
||||||
section_items: [];
|
data: {
|
||||||
|
main_title: string
|
||||||
|
main_description: string
|
||||||
|
section_title: string
|
||||||
|
section_items: string[]
|
||||||
|
info_title: string
|
||||||
|
info_description: string
|
||||||
|
info_description_second: string
|
||||||
|
}
|
||||||
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
info_description: string;
|
|
||||||
info_title: string;
|
|
||||||
info_description_second: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -2,42 +2,45 @@
|
|||||||
<UiContainer>
|
<UiContainer>
|
||||||
<div class="space-25-55-75 max-w-[1000px] mx-auto">
|
<div class="space-25-55-75 max-w-[1000px] mx-auto">
|
||||||
<h1 class="h2-bold-bounded">
|
<h1 class="h2-bold-bounded">
|
||||||
<span
|
<span v-for="(item, index) in component.front_section_lang[0].data.title" :key="index" :class="[
|
||||||
v-for="(item, index) in component.section_lang_data.title"
|
|
||||||
:key="index"
|
|
||||||
:class="[
|
|
||||||
item.highlight
|
item.highlight
|
||||||
? 'text-accent-green-light dark:text-accent-green-dark'
|
? 'text-accent-green-light dark:text-accent-green-dark'
|
||||||
: '',
|
: '',
|
||||||
'inline',
|
'inline',
|
||||||
]"
|
]">
|
||||||
>
|
|
||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
<span v-if="index !== component.section_lang_data.title.length - 1">
|
<span v-if="index !== component.front_section_lang[0].data.title.length - 1">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.description }}
|
{{ component.front_section_lang[0].data.description }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</UiContainer>
|
</UiContainer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
title: [
|
is_no_lang: boolean
|
||||||
{
|
page_name: string
|
||||||
text: string;
|
front_section_lang: {
|
||||||
highlight: boolean;
|
data: {
|
||||||
|
title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
description: string
|
||||||
}
|
}
|
||||||
];
|
id_front_section: number
|
||||||
description: string;
|
id_lang: number
|
||||||
};
|
}[]
|
||||||
};
|
}
|
||||||
|
}>();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
<template>
|
<template>
|
||||||
<UiContainer class="space-25-75">
|
<UiContainer class="space-25-75">
|
||||||
<h2 class="h2-bold-bounded">
|
<h2 class="h2-bold-bounded">
|
||||||
<span v-for="(item, index) in component.section_lang_data.main_title" :key="index" :class="[
|
<span v-for="(item, index) in component.front_section_lang[0].data.main_title" :key="index" :class="[
|
||||||
item.highlight
|
item.highlight
|
||||||
? 'text-accent-green-light dark:text-accent-green-dark'
|
? 'text-accent-green-light dark:text-accent-green-dark'
|
||||||
: '',
|
: '',
|
||||||
'inline',
|
'inline',
|
||||||
]">
|
]">
|
||||||
{{ item.text }}
|
{{ item.text }}
|
||||||
<span v-if="index !== component.section_lang_data.main_title.length - 1">
|
<span v-if="index !== component.front_section_lang[0].data.main_title.length - 1">
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div class="space-25-55-75">
|
<div class="space-25-55-75">
|
||||||
<p>{{ component.section_lang_data.main_description }}</p>
|
<p>{{ component.front_section_lang[0].data.main_description }}</p>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.section_title }}
|
{{ component.front_section_lang[0].data.section_title }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -59,21 +59,21 @@
|
|||||||
<div class="flex flex-col xl:flex-row items-stretch gap-6 sm:gap-2 pt-5 sm:p-0 space-25-55">
|
<div class="flex flex-col xl:flex-row items-stretch gap-6 sm:gap-2 pt-5 sm:p-0 space-25-55">
|
||||||
<div class="flex flex-col space-y-[55px] sm:justify-between">
|
<div class="flex flex-col space-y-[55px] sm:justify-between">
|
||||||
<div class="space-25-55">
|
<div class="space-25-55">
|
||||||
<p>{{ component.section_lang_data.section_description }}</p>
|
<p>{{ component.front_section_lang[0].data.section_description }}</p>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.info_title }}
|
{{ component.front_section_lang[0].data.info_title }}
|
||||||
</h4>
|
</h4>
|
||||||
<p>{{ component.section_lang_data.info_description }}</p>
|
<p>{{ component.front_section_lang[0].data.info_description }}</p>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="h4-uppercase-bold-inter">
|
<h4 class="h4-uppercase-bold-inter">
|
||||||
{{ component.section_lang_data.cta_title }}
|
{{ component.front_section_lang[0].data.cta_title }}
|
||||||
</h4>
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- calculator -->
|
<!-- calculator -->
|
||||||
<div class="w-full md:min-w-[680px] p-[25px] md:p-[50px] border border-button rounded-2xl block">
|
<div class="w-full md:min-w-[680px] p-[25px] md:p-[50px] border border-button rounded-2xl block">
|
||||||
<h2 class="h2-bold-bounded text-center mb-10 sm:mb-20">
|
<h2 class="h2-bold-bounded text-center mb-10 sm:mb-20">
|
||||||
{{ component.section_lang_data.calculator_title }}
|
{{ component.front_section_lang[0].data.calculator_title }}
|
||||||
</h2>
|
</h2>
|
||||||
<div class="mb-14 flex flex-col gap-8 sm:gap-14">
|
<div class="mb-14 flex flex-col gap-8 sm:gap-14">
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
@ -106,7 +106,7 @@
|
|||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<UiButtonArrow :arrow="true" type="fill" class="mx-auto sm:m-0">{{
|
<UiButtonArrow :arrow="true" type="fill" class="mx-auto sm:m-0">{{
|
||||||
component.section_lang_data.button
|
component.front_section_lang[0].data.button
|
||||||
}}</UiButtonArrow>
|
}}</UiButtonArrow>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -115,28 +115,35 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
main_title: [
|
is_no_lang: boolean
|
||||||
{
|
page_name: string
|
||||||
text: string;
|
front_section_lang: {
|
||||||
highlight: boolean;
|
data: {
|
||||||
|
main_title: {
|
||||||
|
text: string
|
||||||
|
highlight: boolean
|
||||||
|
}[]
|
||||||
|
main_description: string
|
||||||
|
section_title: string
|
||||||
|
section_description: string
|
||||||
|
info_title: string
|
||||||
|
info_description: string
|
||||||
|
cta_title: string
|
||||||
|
calculator_title: string
|
||||||
|
button: string
|
||||||
}
|
}
|
||||||
];
|
id_front_section: number
|
||||||
main_description: string;
|
id_lang: number
|
||||||
section_title: string;
|
}[]
|
||||||
section_description: string;
|
}
|
||||||
info_title: string;
|
}>();
|
||||||
info_description: string;
|
|
||||||
cta_title: string;
|
|
||||||
calculator_title: string;
|
|
||||||
button: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const menuStore = useMenuStore();
|
const menuStore = useMenuStore();
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="w-full flex flex-col gap-[25px] xl:max-w-[48%] md:mx-10 xl:m-0"
|
class="w-full flex flex-col gap-[25px] xl:max-w-[48%] md:mx-10 xl:m-0"
|
||||||
v-for="(item, index) in component.section_lang_data"
|
v-for="(item, index) in component.front_section_lang[0].data"
|
||||||
:key="index"
|
:key="index"
|
||||||
>
|
>
|
||||||
<!-- xl -->
|
<!-- xl -->
|
||||||
@ -26,7 +26,7 @@
|
|||||||
<div
|
<div
|
||||||
class="h-[235px] sm:h-[350px] w-full rounded-[20px] bg-cover bg-center transition-transform duration-300 group-hover:scale-105 xl:block relative"
|
class="h-[235px] sm:h-[350px] w-full rounded-[20px] bg-cover bg-center transition-transform duration-300 group-hover:scale-105 xl:block relative"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[index]}?thumb=640x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[index]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}"
|
||||||
@ -66,17 +66,22 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
type Component = {
|
type Component = {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: [
|
component_name: string
|
||||||
{
|
is_no_lang: boolean
|
||||||
title: string;
|
page_name: string
|
||||||
description: string;
|
front_section_lang: {
|
||||||
sub_title: string;
|
data: {
|
||||||
}
|
title: string
|
||||||
];
|
description: string
|
||||||
};
|
sub_title: string
|
||||||
|
}[]
|
||||||
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
|
}
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
component: Component;
|
component: Component;
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
<UiContainer>
|
<UiContainer>
|
||||||
<div class="space-y-[30px] sm:space-y-[53px]">
|
<div class="space-y-[30px] sm:space-y-[53px]">
|
||||||
<h1 class="h1">
|
<h1 class="h1">
|
||||||
{{ component.section_lang_data.title }}
|
{{ component.front_section_lang[0].data.title }}
|
||||||
</h1>
|
</h1>
|
||||||
<div
|
<div
|
||||||
class="h-[465px] sm:h-[509px] xl:h-[509px] w-full rounded-[20px] bg-cover bg-center transition-transform duration-300 group-hover:scale-105 xl:block"
|
class="h-[465px] sm:h-[509px] xl:h-[509px] w-full rounded-[20px] bg-cover bg-center transition-transform duration-300 group-hover:scale-105 xl:block"
|
||||||
:style="{
|
:style="{
|
||||||
backgroundImage: `url('/api/files/${component.image_collection}/${component.section_id}/${component.section_img[0]}?thumb=1200x0')`,
|
backgroundImage: `url('/api/public/file/${component.img[0]}_l.webp')`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
}"
|
}"
|
||||||
@ -16,11 +16,11 @@
|
|||||||
class="flex flex-col items-center space-y-[30px] sm:flex-row sm:items-start md:space-y-0 xl:items-center"
|
class="flex flex-col items-center space-y-[30px] sm:flex-row sm:items-start md:space-y-0 xl:items-center"
|
||||||
>
|
>
|
||||||
<h3 class="h4-uppercase-bold-inter sm:min-w-[45%]">
|
<h3 class="h4-uppercase-bold-inter sm:min-w-[45%]">
|
||||||
{{ component.section_lang_data.title_second }}
|
{{ component.front_section_lang[0].data.title_second }}
|
||||||
</h3>
|
</h3>
|
||||||
<div class="flex w-full items-start justify-center sm:justify-end">
|
<div class="flex w-full items-start justify-center sm:justify-end">
|
||||||
<UiButtonArrow :arrow="true" type="fill">{{
|
<UiButtonArrow :arrow="true" type="fill">{{
|
||||||
component.section_lang_data.button
|
component.front_section_lang[0].data.button
|
||||||
}}</UiButtonArrow>
|
}}</UiButtonArrow>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -29,15 +29,22 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
const props = defineProps<{ component: Component }>();
|
defineProps<{ component: Component }>();
|
||||||
type Component = {
|
type Component = {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: {
|
component_name: string
|
||||||
title: string;
|
is_no_lang: boolean
|
||||||
title_second: string;
|
page_name: string
|
||||||
button: string;
|
front_section_lang: {
|
||||||
};
|
data: {
|
||||||
|
title: string
|
||||||
|
button: string
|
||||||
|
title_second: string
|
||||||
|
}
|
||||||
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}[]
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -43,19 +43,17 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, onMounted, onBeforeUnmount } from "vue";
|
import { ref, onMounted, onBeforeUnmount } from "vue";
|
||||||
|
|
||||||
defineProps<{ component: Component }>();
|
defineProps<{
|
||||||
type Component = {
|
component: {
|
||||||
image_collection: string;
|
id: number
|
||||||
section_id: string;
|
name: string
|
||||||
section_img: string;
|
img: string[]
|
||||||
section_lang_data: [
|
component_name: string
|
||||||
{
|
is_no_lang: boolean
|
||||||
title: string;
|
page_name: string
|
||||||
description: string;
|
|
||||||
sub_title: string;
|
|
||||||
}
|
}
|
||||||
];
|
}>();
|
||||||
};
|
|
||||||
|
|
||||||
const menuStore = useMenuStore()
|
const menuStore = useMenuStore()
|
||||||
const itemCount = ref(4);
|
const itemCount = ref(4);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { ofetch } from "ofetch";
|
import { ofetch } from "ofetch";
|
||||||
|
|
||||||
export interface RequestOptions<T> extends RequestInit {
|
export interface RequestOptions<T> extends RequestInit {
|
||||||
onErrorOccured?: (error: Error, statusCode: number) => Promise<void>;
|
onErrorOccured?: (error: Error, statusCode: number) => void;
|
||||||
onSuccess?: (data: T, statusCode: number) => void;
|
onSuccess?: (data: T, statusCode: number) => void;
|
||||||
onStart?: () => void;
|
onStart?: () => void;
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { useStore } from "@/stores/store";
|
// import { useStore } from "@/stores/store";
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
const menuStore = useMenuStore();
|
const menuStore = useMenuStore();
|
||||||
@ -20,7 +20,8 @@ onMounted(() => {
|
|||||||
menuStore.openMenu = false;
|
menuStore.openMenu = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
useHead(menuStore.headMeta);
|
// useHead(menuStore.headMeta);
|
||||||
|
|
||||||
|
const componentsList = await store.getComponents(route.params.id)
|
||||||
|
|
||||||
const componentsList = await store.getComponents(route.params.id);
|
|
||||||
</script>
|
</script>
|
@ -16,7 +16,7 @@ const menuStore = useMenuStore();
|
|||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
|
||||||
route.params.id = menuStore.defaultMenu.id_page;
|
route.params.id = menuStore.defaultMenu.id;
|
||||||
route.params.slug = menuStore.defaultMenu.link_rewrite;
|
route.params.slug = menuStore.defaultMenu.link_rewrite;
|
||||||
|
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
@ -26,6 +26,6 @@ onMounted(() => {
|
|||||||
menuStore.openMenu = false;
|
menuStore.openMenu = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
useHead(menuStore.headMeta);
|
// useHead(menuStore.headMeta);
|
||||||
const componentsList = await store.getComponents(route.params.id);
|
const componentsList = await store.getComponents(route.params.id);
|
||||||
</script>
|
</script>
|
||||||
|
22
stores/frontSection.ts
Normal file
22
stores/frontSection.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
export interface FrontPageSection {
|
||||||
|
id_front_page: number
|
||||||
|
id_position: number
|
||||||
|
id_section: number
|
||||||
|
front_section: FrontSection
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FrontSection {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
img: string[]
|
||||||
|
component_name: string
|
||||||
|
is_no_lang: boolean
|
||||||
|
page_name: string
|
||||||
|
front_section_lang: FrontSectionLang[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FrontSectionLang {
|
||||||
|
data: unknown
|
||||||
|
id_front_section: number
|
||||||
|
id_lang: number
|
||||||
|
}
|
@ -4,32 +4,39 @@ import type {
|
|||||||
Currencies,
|
Currencies,
|
||||||
Currency,
|
Currency,
|
||||||
FooterListResponse,
|
FooterListResponse,
|
||||||
|
FrontMenu,
|
||||||
GenericResponse,
|
GenericResponse,
|
||||||
GenericResponseItems,
|
GenericResponseItems,
|
||||||
MenuListResponse,
|
|
||||||
PBFooterItem,
|
PBFooterItem,
|
||||||
PBMenuItem,
|
UIFrontMenu,
|
||||||
UIMenuItem,
|
UIMenuItem,
|
||||||
} from "~/types";
|
} from "~/types";
|
||||||
import { useStore } from "./store";
|
import { useStore } from "./store";
|
||||||
import { ref, watch } from "vue";
|
import { ref, watch } from "vue";
|
||||||
import { useMyFetch } from "#imports";
|
import { useMyFetch } from "#imports";
|
||||||
|
|
||||||
function buildTreeRecursive(
|
// function buildTreeRecursive(
|
||||||
data: (PBMenuItem | UIMenuItem)[],
|
// data: (PBMenuItem | UIMenuItem)[],
|
||||||
parentId: string
|
// parentId: string
|
||||||
): UIMenuItem[] {
|
// ): UIMenuItem[] {
|
||||||
const children = data.filter(
|
// const children = data.filter(
|
||||||
(item): item is UIMenuItem =>
|
// (item): item is UIMenuItem =>
|
||||||
item.id_parent === parentId && !item.is_default
|
// item.id_parent === parentId && !item.is_default
|
||||||
);
|
// );
|
||||||
|
|
||||||
return children.map((item) => ({
|
// return children.map((item) => ({
|
||||||
...item,
|
// ...item,
|
||||||
children: buildTreeRecursive(data, item.id),
|
// children: buildTreeRecursive(data, item.id),
|
||||||
}));
|
// }));
|
||||||
|
// }
|
||||||
|
|
||||||
|
function buildTreeRecursive(data: (FrontMenu | UIFrontMenu)[], parentId: number): UIFrontMenu[] {
|
||||||
|
const children = data.filter((item): item is UIFrontMenu => item.id_parent === parentId && !item.is_default);
|
||||||
|
|
||||||
|
return children.map((item) => ({ ...item, children: buildTreeRecursive(data, item.id) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const useMenuStore = defineStore("menuStore", () => {
|
export const useMenuStore = defineStore("menuStore", () => {
|
||||||
const pb = usePB();
|
const pb = usePB();
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
@ -41,8 +48,11 @@ export const useMenuStore = defineStore("menuStore", () => {
|
|||||||
const openDropDown = ref(false);
|
const openDropDown = ref(false);
|
||||||
|
|
||||||
const defaultMenu = ref();
|
const defaultMenu = ref();
|
||||||
const menu = ref<UIMenuItem[]>([]);
|
// const menu = ref<UIMenuItem[]>([]);
|
||||||
const menuItems = ref<MenuListResponse>();
|
// const menuItems = ref<MenuListResponse>();
|
||||||
|
|
||||||
|
const menu = ref<UIFrontMenu[]>([]);
|
||||||
|
const menuItems = ref<FrontMenu[]>();
|
||||||
|
|
||||||
const footerItems = ref<FooterListResponse>();
|
const footerItems = ref<FooterListResponse>();
|
||||||
const countryList = ref<Country[]>();
|
const countryList = ref<Country[]>();
|
||||||
@ -55,23 +65,44 @@ export const useMenuStore = defineStore("menuStore", () => {
|
|||||||
|
|
||||||
const loadMenu = async () => {
|
const loadMenu = async () => {
|
||||||
try {
|
try {
|
||||||
menuItems.value = (await pb
|
// menuItems.value = (await pb
|
||||||
.collection("menu_view")
|
// .collection("menu_view")
|
||||||
.getList<PBMenuItem>(1, 50, {
|
// .getList<PBMenuItem>(1, 50, {
|
||||||
filter: `id_lang="${$i18n.locale.value}"&&active=true`,
|
// filter: `id_lang="${$i18n.locale.value}"&&active=true`,
|
||||||
sort: "position_id",
|
// sort: "position_id",
|
||||||
})) as MenuListResponse;
|
// })) as MenuListResponse;
|
||||||
|
|
||||||
const root = menuItems.value.items.find((item) => item.is_root);
|
const { data } = await useMyFetch<GenericResponse<FrontMenu[]>>(`/api/public/front/menu`, {
|
||||||
defaultMenu.value = menuItems.value.items.find((item) => item.is_default);
|
onErrorOccured: (err, status) => {
|
||||||
|
console.log(err, status);
|
||||||
|
},
|
||||||
|
// onSuccess(data) {
|
||||||
|
// console.log(data.data, "data");
|
||||||
|
|
||||||
|
// },
|
||||||
|
})
|
||||||
|
|
||||||
|
const root = data.find((item) => item.is_root) as UIFrontMenu;
|
||||||
|
defaultMenu.value = data.find((item) => item.is_default);
|
||||||
|
// console.log(menuNew, "data");
|
||||||
if (root) {
|
if (root) {
|
||||||
menu.value = buildTreeRecursive(menuItems.value.items, root.id);
|
menu.value = buildTreeRecursive(data, root.id);
|
||||||
store.currentPageID = menu.value[0]?.id_page || "";
|
|
||||||
} else {
|
} else {
|
||||||
console.warn("Root menu item not found");
|
console.warn("Root menu item not found");
|
||||||
menu.value = [];
|
menu.value = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// const root = menuItems.value.items.find((item) => item.is_root);
|
||||||
|
// defaultMenu.value = menuItems.value.items.find((item) => item.is_default);
|
||||||
|
|
||||||
|
// if (root) {
|
||||||
|
// menu.value = buildTreeRecursive(menuItems.value.items, root.id);
|
||||||
|
// store.currentPageID = menu.value[0]?.id_page || "";
|
||||||
|
// } else {
|
||||||
|
// console.warn("Root menu item not found");
|
||||||
|
// menu.value = [];
|
||||||
|
// }
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
}
|
}
|
||||||
@ -91,7 +122,7 @@ export const useMenuStore = defineStore("menuStore", () => {
|
|||||||
|
|
||||||
const getCountryList = async () => {
|
const getCountryList = async () => {
|
||||||
try {
|
try {
|
||||||
const {data} = await useMyFetch<GenericResponse<Country[]>>(
|
const { data } = await useMyFetch<GenericResponse<Country[]>>(
|
||||||
`/api/public/country/list`,
|
`/api/public/country/list`,
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
@ -116,7 +147,7 @@ export const useMenuStore = defineStore("menuStore", () => {
|
|||||||
|
|
||||||
const getCurrencies = async () => {
|
const getCurrencies = async () => {
|
||||||
try {
|
try {
|
||||||
const {data} = await useMyFetch<GenericResponseItems<Currency[]>>(
|
const { data } = await useMyFetch<GenericResponseItems<Currency[]>>(
|
||||||
`/api/public/currencies`,
|
`/api/public/currencies`,
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
@ -140,10 +171,10 @@ export const useMenuStore = defineStore("menuStore", () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const navigateToItem = (item?: UIMenuItem) => {
|
const navigateToItem = (item?: UIFrontMenu) => {
|
||||||
if (item) {
|
if (item) {
|
||||||
router.push({
|
router.push({
|
||||||
params: { slug: item.link_rewrite, id: item.id_page },
|
params: { slug: item.front_menu_lang[0].link_rewrite, id: item.id },
|
||||||
name: `id-slug___${$i18n.locale.value}`,
|
name: `id-slug___${$i18n.locale.value}`,
|
||||||
});
|
});
|
||||||
openDropDown.value = false;
|
openDropDown.value = false;
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
import { useMyFetch } from "#imports";
|
import { useMyFetch } from "#imports";
|
||||||
import { usePB } from "~/composables/usePB";
|
// import { usePB } from "~/composables/usePB";
|
||||||
import type {
|
import type {
|
||||||
componentsListType,
|
componentsListType,
|
||||||
GenericResponse,
|
GenericResponse,
|
||||||
PBPageItem,
|
|
||||||
PlanPrediction,
|
PlanPrediction,
|
||||||
} from "~/types";
|
} from "~/types";
|
||||||
// import { useI18n } from "vue-i18n";
|
// import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
export const useStore = defineStore("store", () => {
|
export const useStore = defineStore("store", () => {
|
||||||
const currentPageID = ref("");
|
const currentPageID = ref("");
|
||||||
const pb = usePB();
|
// const pb = usePB();
|
||||||
const { $i18n } = useNuxtApp();
|
// const { $i18n } = useNuxtApp();
|
||||||
|
|
||||||
// calculator
|
// calculator
|
||||||
const monthlySavings = ref(137);
|
const monthlySavings = ref(137);
|
||||||
@ -23,17 +22,41 @@ export const useStore = defineStore("store", () => {
|
|||||||
const email = ref();
|
const email = ref();
|
||||||
const password = ref();
|
const password = ref();
|
||||||
|
|
||||||
const components = ref({} as PBPageItem[]);
|
const components = ref({} as FrontPageSection[]);
|
||||||
|
// const getSections = async (id: string) => {
|
||||||
|
// pb.cancelRequest("menu_view");
|
||||||
|
// components.value = (
|
||||||
|
// await pb.collection<PBPageItem>("page_view").getList(1, 50, {
|
||||||
|
// filter: `id="${id}"&&(section_lang_id_lang="${
|
||||||
|
// $i18n.locale.value
|
||||||
|
// }"||section_is_no_lang=${true})`,
|
||||||
|
// sort: "page_section_id_position",
|
||||||
|
// })
|
||||||
|
// ).items as PBPageItem[];
|
||||||
|
// };
|
||||||
|
|
||||||
const getSections = async (id: string) => {
|
const getSections = async (id: string) => {
|
||||||
pb.cancelRequest("menu_view");
|
// if(!id){
|
||||||
components.value = (
|
// id = useMenuStore().defaultMenu.id
|
||||||
await pb.collection<PBPageItem>("page_view").getList(1, 50, {
|
// }
|
||||||
filter: `id="${id}"&&(section_lang_id_lang="${
|
// console.log(useMenuStore().defaultMenu);
|
||||||
$i18n.locale.value
|
|
||||||
}"||section_is_no_lang=${true})`,
|
const {data} = await useMyFetch<GenericResponse<FrontPageSection[]>>(
|
||||||
sort: "page_section_id_position",
|
`/api/public/front/sections/${id}`
|
||||||
})
|
)
|
||||||
).items as PBPageItem[];
|
// console.log(data, id, "data");
|
||||||
|
components.value = data
|
||||||
|
// return data
|
||||||
|
|
||||||
|
// pb.cancelRequest("menu_view");
|
||||||
|
// components.value = (
|
||||||
|
// await pb.collection<PBPageItem>("page_view").getList(1, 50, {
|
||||||
|
// filter: `id="${id}"&&(section_lang_id_lang="${
|
||||||
|
// $i18n.locale.value
|
||||||
|
// }"||section_is_no_lang=${true})`,
|
||||||
|
// sort: "page_section_id_position",
|
||||||
|
// })
|
||||||
|
// ).items as PBPageItem[];
|
||||||
};
|
};
|
||||||
|
|
||||||
async function getComponents(): Promise<componentsListType[]> {
|
async function getComponents(): Promise<componentsListType[]> {
|
||||||
@ -48,8 +71,8 @@ export const useStore = defineStore("store", () => {
|
|||||||
const componentsList = [] as componentsListType[];
|
const componentsList = [] as componentsListType[];
|
||||||
|
|
||||||
for (const child of children) {
|
for (const child of children) {
|
||||||
const componentName = child.component_name;
|
const componentName = child.front_section.component_name;
|
||||||
const pageName = child.page_name;
|
// const pageName = child.front_section.page_name;
|
||||||
if (!componentName) continue;
|
if (!componentName) continue;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -58,12 +81,12 @@ export const useStore = defineStore("store", () => {
|
|||||||
).default;
|
).default;
|
||||||
|
|
||||||
const nonReactiveComponent = markRaw(componentInstance);
|
const nonReactiveComponent = markRaw(componentInstance);
|
||||||
|
|
||||||
componentsList.push({
|
componentsList.push({
|
||||||
name: componentName,
|
name: componentName,
|
||||||
component: child,
|
component: child.front_section,
|
||||||
componentInstance: nonReactiveComponent,
|
componentInstance: nonReactiveComponent,
|
||||||
data: child.section_lang_data,
|
// data: child.front_section.front_section_lang[0].data || {} as unknown,
|
||||||
|
// data: {}
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Failed to load component ${componentName}`, error);
|
console.error(`Failed to load component ${componentName}`, error);
|
||||||
|
26
types/frontMenu.ts
Normal file
26
types/frontMenu.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
export interface FrontMenu {
|
||||||
|
id: number
|
||||||
|
id_parent: number
|
||||||
|
active: boolean
|
||||||
|
position_id: number
|
||||||
|
id_front_page: number
|
||||||
|
is_default: boolean
|
||||||
|
is_root: boolean
|
||||||
|
url: string
|
||||||
|
front_menu_lang: FrontMenuLang[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FrontMenuLang {
|
||||||
|
name: string
|
||||||
|
id_lang: number
|
||||||
|
id_menu: number
|
||||||
|
link_title: string
|
||||||
|
meta_title: string
|
||||||
|
meta_description: string
|
||||||
|
link_rewrite: string
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface UIFrontMenu extends FrontMenu {
|
||||||
|
children?: UIFrontMenu[];
|
||||||
|
}
|
@ -52,31 +52,31 @@ export interface PBFooterItem {
|
|||||||
}>;
|
}>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PBPageItem {
|
// export interface PBPageItem {
|
||||||
collectionId: string;
|
// collectionId: string;
|
||||||
collectionName: string;
|
// collectionName: string;
|
||||||
component_name: string;
|
// component_name: string;
|
||||||
id: string;
|
// id: string;
|
||||||
image_collection: string;
|
// image_collection: string;
|
||||||
page_created: string;
|
// page_created: string;
|
||||||
page_id: string;
|
// page_id: string;
|
||||||
page_name: string;
|
// page_name: string;
|
||||||
page_section_id_position: number;
|
// page_section_id_position: number;
|
||||||
page_updated: string;
|
// page_updated: string;
|
||||||
section_id: string;
|
// section_id: string;
|
||||||
section_img: string[];
|
// section_img: string[];
|
||||||
section_lang_created: string;
|
// section_lang_created: string;
|
||||||
section_lang_data: SectionLangData;
|
// section_lang_data: SectionLangData;
|
||||||
section_lang_id_lang: string;
|
// section_lang_id_lang: string;
|
||||||
section_name: string;
|
// section_name: string;
|
||||||
}
|
// }
|
||||||
|
|
||||||
export interface SectionLangData {
|
// export interface SectionLangData {
|
||||||
title: string;
|
// title: string;
|
||||||
description: string;
|
// description: string;
|
||||||
button: string;
|
// button: string;
|
||||||
button_call: string;
|
// button_call: string;
|
||||||
}
|
// }
|
||||||
|
|
||||||
export interface UIMenuItem extends PBMenuItem {
|
export interface UIMenuItem extends PBMenuItem {
|
||||||
children?: UIMenuItem[];
|
children?: UIMenuItem[];
|
||||||
@ -92,9 +92,9 @@ export interface FooterListResponse extends ListResponse {
|
|||||||
|
|
||||||
export type componentsListType = {
|
export type componentsListType = {
|
||||||
name: string;
|
name: string;
|
||||||
component: PBPageItem;
|
component: FrontSection;
|
||||||
componentInstance: DefineComponent;
|
componentInstance: DefineComponent;
|
||||||
data: SectionLangData;
|
// data: unknown;
|
||||||
};
|
};
|
||||||
|
|
||||||
// menuStore
|
// menuStore
|
||||||
@ -212,3 +212,4 @@ export type {
|
|||||||
PeriodToFirstPiece,
|
PeriodToFirstPiece,
|
||||||
} from "./planPrediction";
|
} from "./planPrediction";
|
||||||
export type { Product } from "./product";
|
export type { Product } from "./product";
|
||||||
|
export type { FrontMenu, FrontMenuLang, UIFrontMenu } from "./frontMenu";
|
Reference in New Issue
Block a user