añadir los banners y ajustes checkout
This commit is contained in:
parent
a91038f8b8
commit
7d035b0a57
|
@ -10,10 +10,10 @@ import { useVerticalCarouselImgs } from "src/hooks/useVerticalCarouselImgs";
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "vertical-carousel-imgs",
|
name: "vertical-carousel-imgs",
|
||||||
props: {
|
props: {
|
||||||
imgsArr: {
|
banners: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [""],
|
default: () => [""],
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
components: { IconSearch, Calendar, PostalCode },
|
components: { IconSearch, Calendar, PostalCode },
|
||||||
setup() {
|
setup() {
|
||||||
|
@ -45,65 +45,42 @@ export default defineComponent({
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div ref="target" class="vertical-carousel-container" style="min-height: 100dvh">
|
||||||
ref="target"
|
<q-carousel navigation-position="right" style="min-height: 100dvh" v-model="slide" navigation autoplay infinite
|
||||||
class="vertical-carousel-container"
|
animated v-if="!!banners.length" class="custom-carousel">
|
||||||
style="min-height: 100dvh"
|
<q-carousel-slide v-for="(item, i) in banners" :key="i" :name="item.title" :img-src="item.image">
|
||||||
>
|
<div class="vertical-carousel-content">
|
||||||
<q-carousel
|
<header class="carousel-content-header">
|
||||||
navigation-position="right"
|
<h1 class="carousel-header-title">
|
||||||
style="min-height: 100dvh"
|
{{ item.title }}
|
||||||
v-model="slide"
|
</h1>
|
||||||
navigation
|
</header>
|
||||||
autoplay
|
|
||||||
infinite
|
<form @submit="onSubmit" class="carousel-content-body">
|
||||||
animated
|
<div class="carousel-content-item">
|
||||||
v-if="!!imgsArr.length"
|
<PostalCode v-model="postalCode" v-bind:bindValue="postalCodeAttrs" :setFieldError="setFieldError" />
|
||||||
class="custom-carousel"
|
</div>
|
||||||
>
|
|
||||||
<q-carousel-slide
|
<div class="carousel-content-item">
|
||||||
v-for="(img, i) in imgsArr"
|
<Calendar v-model="calendar" v-bind:bindValue="calendarAttrs" :setValues="setValues" />
|
||||||
:key="i"
|
</div>
|
||||||
:name="img"
|
|
||||||
:img-src="img"
|
<q-btn type="submit" class="btn carousel-content-item">
|
||||||
/>
|
<IconSearch /> ver disponibilidad
|
||||||
|
</q-btn>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</q-carousel-slide>
|
||||||
</q-carousel>
|
</q-carousel>
|
||||||
|
|
||||||
<div class="vertical-carousel-content">
|
|
||||||
<header class="carousel-content-header">
|
|
||||||
<h1 class="carousel-header-title">
|
|
||||||
Regala un verano lleno de flores y plantas
|
|
||||||
</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<form @submit="onSubmit" class="carousel-content-body">
|
|
||||||
<div class="carousel-content-item">
|
|
||||||
<PostalCode
|
|
||||||
v-model="postalCode"
|
|
||||||
v-bind:bindValue="postalCodeAttrs"
|
|
||||||
:setFieldError="setFieldError"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="carousel-content-item">
|
|
||||||
<Calendar
|
|
||||||
v-model="calendar"
|
|
||||||
v-bind:bindValue="calendarAttrs"
|
|
||||||
:setValues="setValues"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<q-btn type="submit" class="btn carousel-content-item">
|
|
||||||
<IconSearch /> ver disponibilidad
|
|
||||||
</q-btn>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.vertical-carousel-container {
|
.vertical-carousel-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
& .custom-carousel {
|
& .custom-carousel {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
@ -116,6 +93,7 @@ export default defineComponent({
|
||||||
bottom: 110px;
|
bottom: 110px;
|
||||||
width: min(100%, 845px);
|
width: min(100%, 845px);
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
|
||||||
& .carousel-content-header {
|
& .carousel-content-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -123,6 +101,7 @@ export default defineComponent({
|
||||||
color: $white;
|
color: $white;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 27px;
|
margin-bottom: 27px;
|
||||||
|
|
||||||
& .carousel-header-title {
|
& .carousel-header-title {
|
||||||
font-size: $font-35;
|
font-size: $font-35;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
@ -161,6 +140,7 @@ export default defineComponent({
|
||||||
padding-inline: 53px 34px;
|
padding-inline: 53px 34px;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&:first-child::after {
|
&:first-child::after {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -170,11 +150,14 @@ export default defineComponent({
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 27px;
|
top: 27px;
|
||||||
bottom: 29px;
|
bottom: 29px;
|
||||||
|
|
||||||
@media only screen and (max-width: $med-md) {
|
@media only screen and (max-width: $med-md) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.btn {
|
&.btn {
|
||||||
|
|
||||||
&:focus,
|
&:focus,
|
||||||
&:focus-visible {
|
&:focus-visible {
|
||||||
outline: none;
|
outline: none;
|
||||||
|
@ -205,6 +188,7 @@ export default defineComponent({
|
||||||
& .carousel-content-header {
|
& .carousel-content-header {
|
||||||
gap: 15px;
|
gap: 15px;
|
||||||
margin-bottom: 49px;
|
margin-bottom: 49px;
|
||||||
|
|
||||||
& .carousel-header-title {
|
& .carousel-header-title {
|
||||||
font-size: $font-28;
|
font-size: $font-28;
|
||||||
line-height: 34px;
|
line-height: 34px;
|
||||||
|
@ -215,16 +199,20 @@ export default defineComponent({
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
& .carousel-content-body {
|
& .carousel-content-body {
|
||||||
margin-bottom: initial;
|
margin-bottom: initial;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: min(100%, 276px);
|
width: min(100%, 276px);
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
|
||||||
& .carousel-content-item {
|
& .carousel-content-item {
|
||||||
padding-block: 24px;
|
padding-block: 24px;
|
||||||
|
|
||||||
&:first-child {
|
&:first-child {
|
||||||
border-radius: 10px 10px 0px 0px;
|
border-radius: 10px 10px 0px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
border-radius: 0 0 10px 10px;
|
border-radius: 0 0 10px 10px;
|
||||||
}
|
}
|
||||||
|
@ -236,8 +224,7 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: $med-md) {
|
@media only screen and (max-width: $med-md) {}
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-height: 360px) {
|
@media only screen and (max-height: 360px) {
|
||||||
/* background-color: tomato; */
|
/* background-color: tomato; */
|
||||||
|
|
|
@ -241,7 +241,6 @@ export function useCheckoutForm() {
|
||||||
type: values.paymentMethod,
|
type: values.paymentMethod,
|
||||||
};
|
};
|
||||||
addItem("payment", values.paymentMethod);
|
addItem("payment", values.paymentMethod);
|
||||||
|
|
||||||
const typeObj = {
|
const typeObj = {
|
||||||
paypal: async () => {
|
paypal: async () => {
|
||||||
const {
|
const {
|
||||||
|
@ -254,8 +253,10 @@ export function useCheckoutForm() {
|
||||||
const {
|
const {
|
||||||
data: { data },
|
data: { data },
|
||||||
} = await apiBack.post("payment", productData);
|
} = await apiBack.post("payment", productData);
|
||||||
redsysData.value = data;
|
redsysData.value = await data;
|
||||||
|
document.querySelector("input[name='Ds_SignatureVersion']").value = redsysData.value.Ds_SignatureVersion;
|
||||||
|
document.querySelector("input[name='Ds_MerchantParameters']").value = redsysData.value.Ds_MerchantParameters;
|
||||||
|
document.querySelector("input[name='Ds_Signature']").value = redsysData.value.Ds_Signature;
|
||||||
redsysFormRef.value.click();
|
redsysFormRef.value.click();
|
||||||
},
|
},
|
||||||
default: () => {
|
default: () => {
|
||||||
|
|
|
@ -151,29 +151,19 @@ export default defineComponent({
|
||||||
|
|
||||||
<div class="checkout-container">
|
<div class="checkout-container">
|
||||||
<div class="checkout-steps">
|
<div class="checkout-steps">
|
||||||
<div
|
<div v-for="({ active, description, name, value }, i) in stepsFormated" class="step-item-container" :key="i">
|
||||||
v-for="({ active, description, name, value }, i) in stepsFormated"
|
|
||||||
class="step-item-container"
|
|
||||||
:key="i"
|
|
||||||
>
|
|
||||||
<div class="step-item">
|
<div class="step-item">
|
||||||
<div class="circle-step-container">
|
<div class="circle-step-container">
|
||||||
<span class="border-step" :class="[i == 0 && 'transparent']" />
|
<span class="border-step" :class="[i == 0 && 'transparent']" />
|
||||||
|
|
||||||
<div
|
<div class="circle-step" :class="[
|
||||||
class="circle-step"
|
(active || (meta.valid && i == 1) || !checkoutBlock) &&
|
||||||
:class="[
|
'active',
|
||||||
(active || (meta.valid && i == 1) || !checkoutBlock) &&
|
]">
|
||||||
'active',
|
|
||||||
]"
|
|
||||||
>
|
|
||||||
<span class="step-value">{{ value }}</span>
|
<span class="step-value">{{ value }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span
|
<span class="border-step" :class="[i == stepList['data'].length - 1 && 'transparent']" />
|
||||||
class="border-step"
|
|
||||||
:class="[i == stepList['data'].length - 1 && 'transparent']"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="step-content">
|
<div class="step-content">
|
||||||
|
@ -199,85 +189,37 @@ export default defineComponent({
|
||||||
|
|
||||||
<div class="checkout-fields">
|
<div class="checkout-fields">
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input placeholder="Nombre*" name="name" type="text" v-model="name" v-bind:="nameAttrs"
|
||||||
placeholder="Nombre*"
|
:error="!!errors.name" :error-message="errors.name" outlined />
|
||||||
name="name"
|
|
||||||
type="text"
|
|
||||||
v-model="name"
|
|
||||||
v-bind:="nameAttrs"
|
|
||||||
:error="!!errors.name"
|
|
||||||
:error-message="errors.name"
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input placeholder="Apellidos*" name="surname" type="text" v-model="surname"
|
||||||
placeholder="Apellidos*"
|
v-bind:="surnameAttrs" :error="!!errors.surname" :error-message="errors.surname" outlined />
|
||||||
name="surname"
|
|
||||||
type="text"
|
|
||||||
v-model="surname"
|
|
||||||
v-bind:="surnameAttrs"
|
|
||||||
:error="!!errors.surname"
|
|
||||||
:error-message="errors.surname"
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input placeholder="Dirección*" name="address" type="text" v-model="address"
|
||||||
placeholder="Dirección*"
|
v-bind:="addressAttrs" :error="!!errors.address" :error-message="errors.address" outlined />
|
||||||
name="address"
|
|
||||||
type="text"
|
|
||||||
v-model="address"
|
|
||||||
v-bind:="addressAttrs"
|
|
||||||
:error="!!errors.address"
|
|
||||||
:error-message="errors.address"
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input placeholder="Código postal*" name="postalCode" type="text" mask="#####"
|
||||||
placeholder="Código postal*"
|
v-model="postalCode" v-bind:="postalCodeAttrs" :error="!!errors.postalCode"
|
||||||
name="postalCode"
|
:error-message="errors.postalCode" ref="postalCodeRef" readonly outlined @mouseenter="showTooltip"
|
||||||
type="text"
|
@mouseleave="hideTooltip">
|
||||||
mask="#####"
|
|
||||||
v-model="postalCode"
|
|
||||||
v-bind:="postalCodeAttrs"
|
|
||||||
:error="!!errors.postalCode"
|
|
||||||
:error-message="errors.postalCode"
|
|
||||||
ref="postalCodeRef"
|
|
||||||
readonly
|
|
||||||
outlined
|
|
||||||
@mouseenter="showTooltip"
|
|
||||||
@mouseleave="hideTooltip"
|
|
||||||
>
|
|
||||||
<template #after>
|
<template #after>
|
||||||
<q-btn
|
<q-btn to="/" :style="'--clr: #ffffff'" class="btn custom-btn-input paragraph-sm"
|
||||||
to="/"
|
label="EDITAR" />
|
||||||
:style="'--clr: #ffffff'"
|
|
||||||
class="btn custom-btn-input paragraph-sm"
|
|
||||||
label="EDITAR"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</q-input>
|
</q-input>
|
||||||
|
|
||||||
<div
|
<div ref="postalCodeTooltip" :style="[floatingStyles, '--clr: #117564']"
|
||||||
ref="postalCodeTooltip"
|
:class="['tooltip ', isHidden && 'hidden']" @mouseenter="showTooltip" @mouseleave="hideTooltip">
|
||||||
:style="[floatingStyles, '--clr: #117564']"
|
|
||||||
:class="['tooltip ', isHidden && 'hidden']"
|
|
||||||
@mouseenter="showTooltip"
|
|
||||||
@mouseleave="hideTooltip"
|
|
||||||
>
|
|
||||||
<p class="paragraph-sm">
|
<p class="paragraph-sm">
|
||||||
No se puede editar este campo
|
No se puede editar este campo
|
||||||
<a
|
<a href="https://www.google.com/maps" rel="noreferrer noopener" target="_blank"
|
||||||
href="https://www.google.com/maps"
|
class="paragraph-sm link">
|
||||||
rel="noreferrer noopener"
|
|
||||||
target="_blank"
|
|
||||||
class="paragraph-sm link"
|
|
||||||
>
|
|
||||||
¿No conoce su código postal?
|
¿No conoce su código postal?
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
@ -285,49 +227,23 @@ export default defineComponent({
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-select">
|
<div class="field-control field-select">
|
||||||
<q-select
|
<q-select name="province" v-model="province" v-bind:="provinceAttrs" :error="!!errors.province"
|
||||||
name="province"
|
:error-message="errors.province" :options="provinceOptions" option-value="code"
|
||||||
v-model="province"
|
option-label="name" label="País*" stack-label map-options emit-value outlined />
|
||||||
v-bind:="provinceAttrs"
|
|
||||||
:error="!!errors.province"
|
|
||||||
:error-message="errors.province"
|
|
||||||
:options="provinceOptions"
|
|
||||||
option-value="code"
|
|
||||||
option-label="name"
|
|
||||||
label="País*"
|
|
||||||
stack-label
|
|
||||||
map-options
|
|
||||||
emit-value
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-select">
|
<div class="field-control field-select">
|
||||||
<q-input
|
<q-input placeholder="Ciudad*" name="city" type="text" v-model="city" v-bind:="cityAttrs"
|
||||||
placeholder="Ciudad*"
|
:error="!!errors.city" :error-message="errors.city" outlined />
|
||||||
name="city"
|
|
||||||
type="text"
|
|
||||||
v-model="city"
|
|
||||||
v-bind:="cityAttrs"
|
|
||||||
:error="!!errors.city"
|
|
||||||
:error-message="errors.city"
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-input telephone">
|
<div class="field-control field-input telephone">
|
||||||
<vue-tel-input
|
<vue-tel-input v-model="phone" v-bind="phoneAttrs" :styleClasses="[
|
||||||
v-model="phone"
|
'custom-input',
|
||||||
v-bind="phoneAttrs"
|
!!errors.phone && 'error',
|
||||||
:styleClasses="[
|
]" ref="phoneInputRef" :inputOptions="{
|
||||||
'custom-input',
|
placeholder: 'Teléfono*',
|
||||||
!!errors.phone && 'error',
|
}" />
|
||||||
]"
|
|
||||||
ref="phoneInputRef"
|
|
||||||
:inputOptions="{
|
|
||||||
placeholder: 'Teléfono*',
|
|
||||||
}"
|
|
||||||
/>
|
|
||||||
<p v-if="!!errors.phone" class="error">
|
<p v-if="!!errors.phone" class="error">
|
||||||
{{ errors.phone }}
|
{{ errors.phone }}
|
||||||
</p>
|
</p>
|
||||||
|
@ -342,57 +258,30 @@ export default defineComponent({
|
||||||
|
|
||||||
<div class="checkout-fields">
|
<div class="checkout-fields">
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input placeholder="Nombre y apellidos o nombre de empresa" name="senderName" type="text"
|
||||||
placeholder="Nombre y apellidos o nombre de empresa"
|
v-model="senderName" v-bind:="senderNameAttrs" :error="!!errors.senderName"
|
||||||
name="senderName"
|
:error-message="errors.senderName" outlined />
|
||||||
type="text"
|
|
||||||
v-model="senderName"
|
|
||||||
v-bind:="senderNameAttrs"
|
|
||||||
:error="!!errors.senderName"
|
|
||||||
:error-message="errors.senderName"
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input placeholder="CIF / NIF" name="senderCifNif" type="text" v-model="senderCifNif"
|
||||||
placeholder="CIF / NIF"
|
v-bind:="senderCifNifAttrs" :error="!!errors.senderCifNif" :error-message="errors.senderCifNif"
|
||||||
name="senderCifNif"
|
outlined />
|
||||||
type="text"
|
|
||||||
v-model="senderCifNif"
|
|
||||||
v-bind:="senderCifNifAttrs"
|
|
||||||
:error="!!errors.senderCifNif"
|
|
||||||
:error-message="errors.senderCifNif"
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input placeholder="Email" name="senderEmail" type="email" v-model="senderEmail"
|
||||||
placeholder="Email"
|
v-bind:="senderEmailAttrs" :error="!!errors.senderEmail" :error-message="errors.senderEmail"
|
||||||
name="senderEmail"
|
outlined />
|
||||||
type="email"
|
|
||||||
v-model="senderEmail"
|
|
||||||
v-bind:="senderEmailAttrs"
|
|
||||||
:error="!!errors.senderEmail"
|
|
||||||
:error-message="errors.senderEmail"
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field-control field-input telephone">
|
<div class="field-control field-input telephone">
|
||||||
<vue-tel-input
|
<vue-tel-input v-model="senderPhone" v-bind="senderPhoneAttrs" :styleClasses="[
|
||||||
v-model="senderPhone"
|
'custom-input',
|
||||||
v-bind="senderPhoneAttrs"
|
!!errors.senderPhone && 'error',
|
||||||
:styleClasses="[
|
]" ref="phoneSenderInputRef" :inputOptions="{
|
||||||
'custom-input',
|
placeholder: 'Teléfono*',
|
||||||
!!errors.senderPhone && 'error',
|
}" />
|
||||||
]"
|
|
||||||
ref="phoneSenderInputRef"
|
|
||||||
:inputOptions="{
|
|
||||||
placeholder: 'Teléfono*',
|
|
||||||
}"
|
|
||||||
/>
|
|
||||||
<p v-if="!!errors.senderPhone" class="error">
|
<p v-if="!!errors.senderPhone" class="error">
|
||||||
{{ errors.senderPhone }}
|
{{ errors.senderPhone }}
|
||||||
</p>
|
</p>
|
||||||
|
@ -401,43 +290,19 @@ export default defineComponent({
|
||||||
<div class="field-control field-input">
|
<div class="field-control field-input">
|
||||||
<q-input
|
<q-input
|
||||||
placeholder="Notas sobre tu pedido (Opcional), por ejemplo, notas especiales para la entrega"
|
placeholder="Notas sobre tu pedido (Opcional), por ejemplo, notas especiales para la entrega"
|
||||||
name="senderNotes"
|
name="senderNotes" type="textarea" v-model="senderNotes" v-bind:="senderNotesAttrs"
|
||||||
type="textarea"
|
:error="!!errors.senderNotes" :error-message="errors.senderNotes" class="message" autogrow
|
||||||
v-model="senderNotes"
|
outlined />
|
||||||
v-bind:="senderNotesAttrs"
|
|
||||||
:error="!!errors.senderNotes"
|
|
||||||
:error-message="errors.senderNotes"
|
|
||||||
class="message"
|
|
||||||
autogrow
|
|
||||||
outlined
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-form>
|
</q-form>
|
||||||
|
|
||||||
<form
|
<form v-if="paymentMethod === 'redsys' && meta.valid" name="from"
|
||||||
v-if="paymentMethod === 'redsys' && meta.valid"
|
action="https://sis-t.redsys.es:25443/sis/realizarPago" method="POST" class="hide">
|
||||||
name="from"
|
<input type="text" name="Ds_SignatureVersion" :value="redsysData.Ds_SignatureVersion" />
|
||||||
action="https://sis-t.redsys.es:25443/sis/realizarPago"
|
<input type="text" name="Ds_MerchantParameters" :value="redsysData.Ds_MerchantParameters" />
|
||||||
method="POST"
|
<input type="text" name="Ds_Signature" :value="redsysData.Ds_Signature" />
|
||||||
class="hide"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
name="Ds_SignatureVersion"
|
|
||||||
:value="redsysData.Ds_SignatureVersion"
|
|
||||||
/>
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
name="Ds_MerchantParameters"
|
|
||||||
:value="redsysData.Ds_MerchantParameters"
|
|
||||||
/>
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
name="Ds_Signature"
|
|
||||||
:value="redsysData.Ds_Signature"
|
|
||||||
/>
|
|
||||||
<input ref="redsysFormRef" type="submit" value="Go to pay" />
|
<input ref="redsysFormRef" type="submit" value="Go to pay" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
@ -462,11 +327,7 @@ export default defineComponent({
|
||||||
|
|
||||||
<div class="checkout-summary-body gray-bg">
|
<div class="checkout-summary-body gray-bg">
|
||||||
<ul class="checkout-summary-list">
|
<ul class="checkout-summary-list">
|
||||||
<li
|
<li class="checkout-summary-item" v-for="({ name, price }, index) in cart" :key="index">
|
||||||
class="checkout-summary-item"
|
|
||||||
v-for="({ name, price }, index) in cart"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<p>
|
<p>
|
||||||
{{ name }}
|
{{ name }}
|
||||||
<span>{{ price }}€</span>
|
<span>{{ price }}€</span>
|
||||||
|
@ -487,31 +348,18 @@ export default defineComponent({
|
||||||
|
|
||||||
<div class="checkout-payment-methods gray-bg">
|
<div class="checkout-payment-methods gray-bg">
|
||||||
<header class="checkout-aside-header">
|
<header class="checkout-aside-header">
|
||||||
<strong
|
<strong class="checkout-aside-title" :style="!!errors.paymentMethod && 'color: red'">
|
||||||
class="checkout-aside-title"
|
|
||||||
:style="!!errors.paymentMethod && 'color: red'"
|
|
||||||
>
|
|
||||||
Método de pago
|
Método de pago
|
||||||
</strong>
|
</strong>
|
||||||
<p v-if="!!errors.paymentMethod"></p>
|
<p v-if="!!errors.paymentMethod"></p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="checkout-payment-body">
|
<div class="checkout-payment-body">
|
||||||
<q-radio
|
<q-radio v-model="paymentMethod" v-bind="paymentMethodAttrs" val="paypal" color="primary">
|
||||||
v-model="paymentMethod"
|
|
||||||
v-bind="paymentMethodAttrs"
|
|
||||||
val="paypal"
|
|
||||||
color="primary"
|
|
||||||
>
|
|
||||||
<p>Paypal</p>
|
<p>Paypal</p>
|
||||||
</q-radio>
|
</q-radio>
|
||||||
|
|
||||||
<q-radio
|
<q-radio v-model="paymentMethod" v-bind="paymentMethodAttrs" val="redsys" color="primary">
|
||||||
v-model="paymentMethod"
|
|
||||||
v-bind="paymentMethodAttrs"
|
|
||||||
val="redsys"
|
|
||||||
color="primary"
|
|
||||||
>
|
|
||||||
<p>Redsys</p>
|
<p>Redsys</p>
|
||||||
</q-radio>
|
</q-radio>
|
||||||
</div>
|
</div>
|
||||||
|
@ -525,13 +373,7 @@ export default defineComponent({
|
||||||
</p>
|
</p>
|
||||||
</q-checkbox>
|
</q-checkbox>
|
||||||
|
|
||||||
<q-btn
|
<q-btn flat class="btn" type="submit" form="checkout-form" :loading="isLoadingSubmit">
|
||||||
flat
|
|
||||||
class="btn"
|
|
||||||
type="submit"
|
|
||||||
form="checkout-form"
|
|
||||||
:loading="isLoadingSubmit"
|
|
||||||
>
|
|
||||||
PROCEDER AL PAGO
|
PROCEDER AL PAGO
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
|
@ -585,13 +427,16 @@ export default defineComponent({
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
|
||||||
.step-value {
|
.step-value {
|
||||||
font-family: $font-questrial;
|
font-family: $font-questrial;
|
||||||
color: $primary-dark;
|
color: $primary-dark;
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
background-color: $primary-dark;
|
background-color: $primary-dark;
|
||||||
|
|
||||||
.step-value {
|
.step-value {
|
||||||
color: $white;
|
color: $white;
|
||||||
}
|
}
|
||||||
|
@ -603,6 +448,7 @@ export default defineComponent({
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
font-family: $font-questrial;
|
font-family: $font-questrial;
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
@ -611,6 +457,7 @@ export default defineComponent({
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 0.875rem;
|
font-size: 0.875rem;
|
||||||
color: $text-default;
|
color: $text-default;
|
||||||
|
@ -631,6 +478,7 @@ export default defineComponent({
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-bottom: 21px;
|
margin-bottom: 21px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
|
|
||||||
& h3 {
|
& h3 {
|
||||||
color: $text-default;
|
color: $text-default;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
@ -647,8 +495,10 @@ export default defineComponent({
|
||||||
& .checkout-form {
|
& .checkout-form {
|
||||||
flex: 1 0 min(100%, 795px);
|
flex: 1 0 min(100%, 795px);
|
||||||
}
|
}
|
||||||
|
|
||||||
& .checkout-aside {
|
& .checkout-aside {
|
||||||
flex: 1 0 min(100%, 329px);
|
flex: 1 0 min(100%, 329px);
|
||||||
|
|
||||||
& .checkout-delivery-date,
|
& .checkout-delivery-date,
|
||||||
& .checkout-summary,
|
& .checkout-summary,
|
||||||
& .checkout-payment-methods {
|
& .checkout-payment-methods {
|
||||||
|
@ -672,6 +522,7 @@ export default defineComponent({
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
height: 0;
|
height: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
height: min-content;
|
height: min-content;
|
||||||
padding-block: 16px 18px;
|
padding-block: 16px 18px;
|
||||||
|
@ -683,6 +534,7 @@ export default defineComponent({
|
||||||
|
|
||||||
& .checkout-summary {
|
& .checkout-summary {
|
||||||
margin-bottom: 33px;
|
margin-bottom: 33px;
|
||||||
|
|
||||||
& .checkout-aside-header,
|
& .checkout-aside-header,
|
||||||
& .checkout-summary-body,
|
& .checkout-summary-body,
|
||||||
& .checkout-summary-footer {
|
& .checkout-summary-footer {
|
||||||
|
@ -691,6 +543,7 @@ export default defineComponent({
|
||||||
|
|
||||||
& .checkout-aside-header {
|
& .checkout-aside-header {
|
||||||
padding-block: 16px 17px;
|
padding-block: 16px 17px;
|
||||||
|
|
||||||
& .checkout-aside-title {
|
& .checkout-aside-title {
|
||||||
font-family: $font-lora;
|
font-family: $font-lora;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
@ -701,6 +554,7 @@ export default defineComponent({
|
||||||
|
|
||||||
& .checkout-summary-body {
|
& .checkout-summary-body {
|
||||||
padding-bottom: 23px;
|
padding-bottom: 23px;
|
||||||
|
|
||||||
& p {
|
& p {
|
||||||
font-size: $font-12;
|
font-size: $font-12;
|
||||||
line-height: 21px;
|
line-height: 21px;
|
||||||
|
@ -713,12 +567,14 @@ export default defineComponent({
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
|
|
||||||
& .checkout-summary-item p {
|
& .checkout-summary-item p {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
& .checkout-summary-footer {
|
& .checkout-summary-footer {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
@ -737,19 +593,23 @@ export default defineComponent({
|
||||||
& .checkout-payment-methods {
|
& .checkout-payment-methods {
|
||||||
padding: 9px 16px 20px 21px;
|
padding: 9px 16px 20px 21px;
|
||||||
margin-bottom: 21px;
|
margin-bottom: 21px;
|
||||||
|
|
||||||
& .checkout-aside-header {
|
& .checkout-aside-header {
|
||||||
margin-bottom: 14px;
|
margin-bottom: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
& .checkout-payment-body {
|
& .checkout-payment-body {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
|
|
||||||
& p {
|
& p {
|
||||||
width: min(100%, 200px);
|
width: min(100%, 200px);
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
gap: 31px;
|
gap: 31px;
|
||||||
font-size: $font-12;
|
font-size: $font-12;
|
||||||
|
|
||||||
& .card-flags {
|
& .card-flags {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
@ -773,6 +633,7 @@ export default defineComponent({
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 23px;
|
gap: 23px;
|
||||||
|
|
||||||
& .terms p {
|
& .terms p {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
font-size: $font-12;
|
font-size: $font-12;
|
||||||
|
@ -799,29 +660,36 @@ export default defineComponent({
|
||||||
width: min(100%, 499px);
|
width: min(100%, 499px);
|
||||||
margin: 122px auto 0;
|
margin: 122px auto 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
& .checkout-success-title {
|
& .checkout-success-title {
|
||||||
margin-bottom: 26px;
|
margin-bottom: 26px;
|
||||||
}
|
}
|
||||||
|
|
||||||
& .checkout-success-body {
|
& .checkout-success-body {
|
||||||
& .checkout-success-content {
|
& .checkout-success-content {
|
||||||
background-color: $secondary-5;
|
background-color: $secondary-5;
|
||||||
padding: 30px 46px 42px 38px;
|
padding: 30px 46px 42px 38px;
|
||||||
border-radius: 5px 5px 0px 0px;
|
border-radius: 5px 5px 0px 0px;
|
||||||
|
|
||||||
& .checkout-success-list {
|
& .checkout-success-list {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 28px;
|
gap: 28px;
|
||||||
|
|
||||||
& .checkout-success-item {
|
& .checkout-success-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
& .checkout-item-content {
|
& .checkout-item-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-height: 61px;
|
min-height: 61px;
|
||||||
|
|
||||||
& .checkout-product-details {
|
& .checkout-product-details {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 14px;
|
gap: 14px;
|
||||||
|
|
||||||
& .checkout-product-img {
|
& .checkout-product-img {
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
width: 54px;
|
width: 54px;
|
||||||
|
@ -875,8 +743,9 @@ export default defineComponent({
|
||||||
& .form-fields-container {
|
& .form-fields-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
&.delivery {
|
|
||||||
}
|
&.delivery {}
|
||||||
|
|
||||||
&.sender {
|
&.sender {
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
}
|
}
|
||||||
|
@ -886,6 +755,7 @@ export default defineComponent({
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: 12px 9px;
|
gap: 12px 9px;
|
||||||
|
|
||||||
@media only screen and (max-width: $med-lg) {
|
@media only screen and (max-width: $med-lg) {
|
||||||
gap: 15px;
|
gap: 15px;
|
||||||
}
|
}
|
||||||
|
@ -896,6 +766,7 @@ export default defineComponent({
|
||||||
|
|
||||||
&.telephone {
|
&.telephone {
|
||||||
flex: 0 0 calc(50% - 5px);
|
flex: 0 0 calc(50% - 5px);
|
||||||
|
|
||||||
@media only screen and (max-width: $med-lg) {
|
@media only screen and (max-width: $med-lg) {
|
||||||
flex: 1 0 min(100%, 390px);
|
flex: 1 0 min(100%, 390px);
|
||||||
}
|
}
|
||||||
|
@ -905,10 +776,12 @@ export default defineComponent({
|
||||||
label {
|
label {
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
& .q-field__control {
|
& .q-field__control {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
border: 1px solid $primary-light;
|
border: 1px solid $primary-light;
|
||||||
|
|
||||||
& input {
|
& input {
|
||||||
padding: 0px 0px 0px 20px;
|
padding: 0px 0px 0px 20px;
|
||||||
font-family: $font-questrial;
|
font-family: $font-questrial;
|
||||||
|
@ -923,20 +796,24 @@ export default defineComponent({
|
||||||
&.text-negative {
|
&.text-negative {
|
||||||
border-color: $negative;
|
border-color: $negative;
|
||||||
}
|
}
|
||||||
|
|
||||||
&::after,
|
&::after,
|
||||||
&::before {
|
&::before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-field__marginal {
|
.q-field__marginal {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
padding-right: 30px;
|
padding-right: 30px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-field--error .q-field__bottom {
|
.q-field--error .q-field__bottom {
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
font-size: 0.675rem;
|
font-size: 0.675rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.field-select {
|
&.field-select {
|
||||||
.q-field__control {
|
.q-field__control {
|
||||||
min-height: initial;
|
min-height: initial;
|
||||||
|
@ -944,23 +821,28 @@ export default defineComponent({
|
||||||
height: 40px;
|
height: 40px;
|
||||||
padding: 0px 30px;
|
padding: 0px 30px;
|
||||||
border: 1px solid $primary-light;
|
border: 1px solid $primary-light;
|
||||||
|
|
||||||
.q-field__native span {
|
.q-field__native span {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-field__append {
|
.q-field__append {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-field__label {
|
.q-field__label {
|
||||||
font-family: $font-questrial;
|
font-family: $font-questrial;
|
||||||
color: $text-default !important;
|
color: $text-default !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-field__control-container {
|
.q-field__control-container {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
height: 36px;
|
height: 36px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: $med-lg) {
|
@media only screen and (max-width: $med-lg) {
|
||||||
&.sender {
|
&.sender {
|
||||||
margin-top: 45px;
|
margin-top: 45px;
|
||||||
|
@ -972,6 +854,7 @@ export default defineComponent({
|
||||||
padding: 10.5px 1px;
|
padding: 10.5px 1px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
transition: 200ms ease-in-out;
|
transition: 200ms ease-in-out;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: $black;
|
border-color: $black;
|
||||||
}
|
}
|
||||||
|
@ -1007,4 +890,4 @@ export default defineComponent({
|
||||||
font-family: "Roboto" !important;
|
font-family: "Roboto" !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -2,6 +2,7 @@
|
||||||
import { storeToRefs } from "pinia";
|
import { storeToRefs } from "pinia";
|
||||||
import { defineComponent, onBeforeMount, ref } from "vue";
|
import { defineComponent, onBeforeMount, ref } from "vue";
|
||||||
|
|
||||||
|
import { apiBack } from "src/boot/axios";
|
||||||
import VerticalCarouselImgs from "src/components/quasar-components/carousel/VerticalCarouselImgs.vue";
|
import VerticalCarouselImgs from "src/components/quasar-components/carousel/VerticalCarouselImgs.vue";
|
||||||
import Swiper from "src/components/swiper/Swiper.vue";
|
import Swiper from "src/components/swiper/Swiper.vue";
|
||||||
import Card from "src/components/ui/Card.vue";
|
import Card from "src/components/ui/Card.vue";
|
||||||
|
@ -18,6 +19,7 @@ export default defineComponent({
|
||||||
Card,
|
Card,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
|
const banners = ref()
|
||||||
const mobileStore = useMobileStore();
|
const mobileStore = useMobileStore();
|
||||||
const { isCarouselVisible, isOpenNav, screenWidth } =
|
const { isCarouselVisible, isOpenNav, screenWidth } =
|
||||||
storeToRefs(mobileStore);
|
storeToRefs(mobileStore);
|
||||||
|
@ -26,35 +28,24 @@ export default defineComponent({
|
||||||
const { getProducts } = cartStore;
|
const { getProducts } = cartStore;
|
||||||
const { products, homeSection } = storeToRefs(cartStore);
|
const { products, homeSection } = storeToRefs(cartStore);
|
||||||
|
|
||||||
|
async function getBanners() {
|
||||||
|
const { data: { data } } = await apiBack("/banners/")
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
onBeforeMount(async () => {
|
onBeforeMount(async () => {
|
||||||
await getProducts();
|
await getProducts();
|
||||||
});
|
banners.value = await getBanners();
|
||||||
|
|
||||||
const slidesContent = ref([]);
|
|
||||||
|
|
||||||
onBeforeMount(async () => {
|
|
||||||
const images = await new Promise((resolve) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
resolve([
|
|
||||||
"assets/1.jpg",
|
|
||||||
"assets/2.jpg",
|
|
||||||
"assets/3.jpg",
|
|
||||||
"assets/4.jpg",
|
|
||||||
"assets/5.jpg",
|
|
||||||
]);
|
|
||||||
}, 1000);
|
|
||||||
});
|
|
||||||
|
|
||||||
slidesContent.value = images;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
isCarouselVisible,
|
isCarouselVisible,
|
||||||
slidesContent,
|
|
||||||
screenWidth,
|
screenWidth,
|
||||||
homeSection,
|
homeSection,
|
||||||
isOpenNav,
|
isOpenNav,
|
||||||
products,
|
products,
|
||||||
|
banners
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -63,7 +54,7 @@ export default defineComponent({
|
||||||
<template>
|
<template>
|
||||||
<q-page>
|
<q-page>
|
||||||
<q-no-ssr>
|
<q-no-ssr>
|
||||||
<VerticalCarouselImgs :imgsArr="slidesContent" class="home-carousel" />
|
<VerticalCarouselImgs v-if="banners" :banners="banners" class="home-carousel" />
|
||||||
</q-no-ssr>
|
</q-no-ssr>
|
||||||
|
|
||||||
<section class="products-section" ref="homeSection">
|
<section class="products-section" ref="homeSection">
|
||||||
|
@ -77,25 +68,15 @@ export default defineComponent({
|
||||||
|
|
||||||
<div class="products-body">
|
<div class="products-body">
|
||||||
<Container cardContainer>
|
<Container cardContainer>
|
||||||
<template
|
<template v-for="({ id, name, price, image, isNew }, i) in products?.data" :key="id">
|
||||||
v-for="({ id, name, price, image, isNew }, i) in products?.data"
|
<Card v-if="i < 8" :id="id" :price="price" :title="name" :imgSrc="image" :isNew="isNew"
|
||||||
:key="id"
|
imgClass="list-products" size="md-card" />
|
||||||
>
|
|
||||||
<Card
|
|
||||||
v-if="i < 8"
|
|
||||||
:id="id"
|
|
||||||
:price="price"
|
|
||||||
:title="name"
|
|
||||||
:imgSrc="image"
|
|
||||||
:isNew="isNew"
|
|
||||||
imgClass="list-products"
|
|
||||||
size="md-card"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</Container>
|
</Container>
|
||||||
|
|
||||||
<RouterLink class="btn rounded outlined" to="/categoria/all">
|
<RouterLink class="btn rounded outlined" to="/categoria/all">
|
||||||
Ver todos los diseños <IconArrowCircleFilledRight />
|
Ver todos los diseños
|
||||||
|
<IconArrowCircleFilledRight />
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -112,20 +93,10 @@ export default defineComponent({
|
||||||
<div class="products-selection-body">
|
<div class="products-selection-body">
|
||||||
<q-no-ssr>
|
<q-no-ssr>
|
||||||
<Swiper>
|
<Swiper>
|
||||||
<template
|
<template v-for="({ id, isNew, price, name, image }, i) in products.data" :key="id">
|
||||||
v-for="({ id, isNew, price, name, image }, i) in products.data"
|
|
||||||
:key="id"
|
|
||||||
>
|
|
||||||
<swiper-slide class="swiper-slide" v-if="i < 10">
|
<swiper-slide class="swiper-slide" v-if="i < 10">
|
||||||
<Card
|
<Card :id="id" :price="price" :title="name" :imgSrc="image" :isNew="isNew" imgClass="carousel"
|
||||||
:id="id"
|
size="lg-card" />
|
||||||
:price="price"
|
|
||||||
:title="name"
|
|
||||||
:imgSrc="image"
|
|
||||||
:isNew="isNew"
|
|
||||||
imgClass="carousel"
|
|
||||||
size="lg-card"
|
|
||||||
/>
|
|
||||||
</swiper-slide>
|
</swiper-slide>
|
||||||
</template>
|
</template>
|
||||||
</Swiper>
|
</Swiper>
|
||||||
|
@ -134,7 +105,8 @@ export default defineComponent({
|
||||||
|
|
||||||
<footer class="products-selection-footer">
|
<footer class="products-selection-footer">
|
||||||
<RouterLink class="btn rounded outlined pd-icon" to="/">
|
<RouterLink class="btn rounded outlined pd-icon" to="/">
|
||||||
Ver todas las plantas <IconArrowCircleFilledRight />
|
Ver todas las plantas
|
||||||
|
<IconArrowCircleFilledRight />
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
</footer>
|
</footer>
|
||||||
</section>
|
</section>
|
||||||
|
@ -177,11 +149,9 @@ export default defineComponent({
|
||||||
scroll-margin: 30px;
|
scroll-margin: 30px;
|
||||||
|
|
||||||
& .products-section-header {
|
& .products-section-header {
|
||||||
& .products-header-title {
|
& .products-header-title {}
|
||||||
}
|
|
||||||
|
|
||||||
& .products-header-paragraph {
|
& .products-header-paragraph {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
& .products-body {
|
& .products-body {
|
||||||
|
@ -193,8 +163,7 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: $med-xmd) {
|
@media only screen and (max-width: $med-xmd) {
|
||||||
& .products-body {
|
& .products-body {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue