floranet/src/pages/CategoryPage.vue

232 lines
5.9 KiB
Vue

<template>
<q-page class="category-container">
<section class="products-section">
<header class="products-section-header">
<container>
<div class="product-header-content">
<h3 class="product-header-title subtitle">Ramos para obsequiar</h3>
<p class="product-header-paragraph">
Descripción SEO: Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua.
</p>
</div>
<div class="product-header-filters">
<div class="product-left-filters">
<div class="filter-item availability-filter">
<p class="filter-paragraph availability">
Disponibilidad para:
<span class="green-text">25 Julio en 08005</span>
</p>
<button
class="btn filter-btn availability"
type="button"
@click="modalStore.openModal({ modal: 'availability' })"
>
<IconPencil />
</button>
</div>
</div>
<div class="product-right-filters">
<button
class="btn filter-item filters filter-btn"
type="button"
@click="modalStore.openModal({ modal: 'filters' })"
>
<p class="filter-paragraph remove-mob">Filtros</p>
<IconFilter />
</button>
<div class="filter-item order-filter">
<p class="filter-paragraph">
Ordenar por:
<span class="green-text">precio</span>
</p>
<button type="button" class="btn filter-btn price-order">
<IconArrowDownWhite />
</button>
</div>
</div>
</div>
</container>
</header>
<div class="products-section-body">
<container cardContainer>
<card
v-for="(
{ imgSrc, discount, isNew, title, value, id }, i
) in cardMock"
:productValue="value"
:productName="title"
:discount="discount"
:imgSrc="imgSrc"
:isNew="isNew"
:key="i"
:id="id"
/>
</container>
</div>
<footer class="products-section-footer">
<RouterLink class="btn rounded outlined" to="/">
Ver todos los diseños <IconArrowCircleFilledRight />
</RouterLink>
</footer>
</section>
<dudas-section />
<modal modalItem="isOpenAvailability" />
<modal modalItem="isOpenFilters" />
</q-page>
</template>
<script lang="ts">
import IconArrowCircleFilledRight from 'src/components/icons/IconArrowCircleFilledRight.vue';
import IconArrowDownWhite from 'src/components/icons/IconArrowDownWhite.vue';
import IconFilter from 'src/components/icons/IconFilter.vue';
import IconPencil from 'src/components/icons/IconPencil.vue';
import DudasSection from 'src/components/sections/DudasSection.vue';
import Card from 'src/components/ui/Card.vue';
import Container from 'src/components/ui/Container.vue';
import Modal from 'src/components/ui/Modal.vue';
import { cardMock } from 'src/mock/cards';
import { useModalStore } from 'src/stores/modalStore';
import { defineComponent } from 'vue';
export default defineComponent({
name: 'CategoryPage',
components: {
IconArrowCircleFilledRight,
IconArrowDownWhite,
IconPencil,
IconFilter,
Container,
Modal,
Card,
DudasSection,
},
setup() {
const modalStore = useModalStore();
return { cardMock, modalStore };
},
});
</script>
<style lang="scss" scoped>
.products-section {
display: flex;
flex-direction: column;
margin-bottom: 82px;
& .products-section-header {
& .product-header-content {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
gap: 25px;
margin-bottom: 93px;
}
& .product-header-filters {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
gap: 41px;
margin-bottom: 78px;
& .filter-paragraph {
font-size: $font-14;
color: $text-gray;
white-space: nowrap;
}
& .filter-item {
padding: 4px 0 4px 14px;
background-color: $secondary-10;
border-radius: 30px 0 0 30px;
display: flex;
align-items: center;
position: relative;
user-select: none;
&.availability-filter {
padding: 4px 30px 4px 14px;
}
&.order-filter {
padding: 4px 30px 4px 14px;
}
&.filters {
padding: 4px 15px 4px 10px;
border-radius: 30px;
}
&.filter-price-order {
}
}
& .filter-btn {
padding: 8px;
border-radius: 0 30px 30px 0;
&.availability,
&.price-order {
position: absolute;
}
&.availability {
right: -27px;
padding: 6.5px;
}
&.price-order {
right: -33px;
padding: 9.5px;
}
}
& .product-right-filters {
display: flex;
gap: 40px;
margin-right: 33px;
}
@media only screen and (max-width: $med-md) {
justify-content: center;
align-items: center;
& .filter-paragraph.remove-mob {
display: none;
}
& .filter-item.filters {
padding: 4px 8px;
}
& .product-left-filters {
flex: 1;
margin-right: 28px;
}
& .product-right-filters {
flex: 1;
justify-content: space-between;
}
}
}
}
& .products-section-body {
margin-bottom: 95px;
}
& .products-section-footer {
align-self: center;
}
}
</style>