2024-10-08 18:29:28 +02:00
|
|
|
<template>
|
|
|
|
|
<Dialog
|
|
|
|
|
id="add-images"
|
|
|
|
|
v-model:visible="isOpen"
|
|
|
|
|
modal
|
|
|
|
|
header="Ajouter des images"
|
|
|
|
|
class="bg-white | text-grey-800 | rounded-2xl | overflow-hidden | p-32"
|
|
|
|
|
>
|
|
|
|
|
<div class="with-sidebar | h-full">
|
|
|
|
|
<nav>
|
|
|
|
|
<ul>
|
2024-10-09 16:32:10 +02:00
|
|
|
<li
|
|
|
|
|
v-for="tab in tabs"
|
|
|
|
|
:class="{ active: activeTab.name === tab.name }"
|
|
|
|
|
@click="activeTab = tab"
|
|
|
|
|
>
|
|
|
|
|
{{ tab.name }}
|
|
|
|
|
</li>
|
2024-10-08 18:29:28 +02:00
|
|
|
</ul>
|
|
|
|
|
</nav>
|
2024-10-09 16:32:10 +02:00
|
|
|
<div
|
|
|
|
|
class="with-sidebar | h-full"
|
|
|
|
|
data-side="right"
|
|
|
|
|
style="--sidebar-width: 26rem; gap: var(--gap)"
|
|
|
|
|
>
|
2024-10-09 16:47:53 +02:00
|
|
|
<div class="bg-grey-50 | rounded-2xl | p-8 | overflow-y">
|
|
|
|
|
<component :is="activeTab.component" :params="activeTab.params" />
|
|
|
|
|
</div>
|
2024-10-09 16:32:10 +02:00
|
|
|
<ImagesEditPanel :images="images" />
|
2024-10-08 18:29:28 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</Dialog>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
import Dialog from "primevue/dialog";
|
2024-10-09 16:32:10 +02:00
|
|
|
import ImagesResources from "./ImagesResources.vue";
|
|
|
|
|
import ImagesEditPanel from "./ImagesEditPanel.vue";
|
|
|
|
|
import MyImages from "./MyImages.vue";
|
2024-10-08 18:29:28 +02:00
|
|
|
import { usePageStore } from "../../../stores/page";
|
|
|
|
|
import { ref, watch } from "vue";
|
|
|
|
|
|
2024-10-09 16:32:10 +02:00
|
|
|
const { isAddImagesModalOpen, images } = defineProps({
|
2024-10-08 18:29:28 +02:00
|
|
|
isAddImagesModalOpen: Boolean,
|
2024-10-09 16:32:10 +02:00
|
|
|
images: Array,
|
2024-10-08 18:29:28 +02:00
|
|
|
});
|
|
|
|
|
const emit = defineEmits(["update:isAddImagesModalOpen"]);
|
|
|
|
|
|
|
|
|
|
const isOpen = ref(isAddImagesModalOpen);
|
|
|
|
|
watch(isOpen, (newValue) => {
|
|
|
|
|
emit("close");
|
|
|
|
|
});
|
2024-10-09 16:08:37 +02:00
|
|
|
|
|
|
|
|
const tabs = [
|
|
|
|
|
{
|
2024-10-09 16:32:10 +02:00
|
|
|
name: "Mes images",
|
|
|
|
|
component: MyImages,
|
|
|
|
|
params: {
|
|
|
|
|
images,
|
|
|
|
|
},
|
2024-10-09 16:08:37 +02:00
|
|
|
},
|
|
|
|
|
{
|
2024-10-09 16:32:10 +02:00
|
|
|
name: "Matériauthèque",
|
|
|
|
|
component: ImagesResources,
|
|
|
|
|
params: {
|
|
|
|
|
targetPage: "materials",
|
|
|
|
|
},
|
2024-10-09 16:08:37 +02:00
|
|
|
},
|
|
|
|
|
{
|
2024-10-09 16:32:10 +02:00
|
|
|
name: "Réalisations",
|
|
|
|
|
component: ImagesResources,
|
|
|
|
|
params: {
|
|
|
|
|
targetPage: "materials",
|
|
|
|
|
},
|
2024-10-09 16:08:37 +02:00
|
|
|
},
|
|
|
|
|
{
|
2024-10-09 16:32:10 +02:00
|
|
|
name: "Inspirations",
|
|
|
|
|
component: ImagesResources,
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const activeTab = ref(tabs[0]);
|
2024-10-08 18:29:28 +02:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
#add-images {
|
|
|
|
|
--sidebar-width: 12.5rem;
|
|
|
|
|
counter-set: selected-images;
|
|
|
|
|
width: min(100vw - var(--gutter) * 2, 100rem);
|
|
|
|
|
height: min(100vh - var(--gutter) * 2, 60rem);
|
|
|
|
|
padding-top: var(--space-16);
|
|
|
|
|
row-gap: var(--space-32);
|
|
|
|
|
}
|
2024-10-09 16:54:19 +02:00
|
|
|
#add-images [data-pc-section="content"] {
|
|
|
|
|
height: calc(100% - 3.75rem);
|
|
|
|
|
}
|
2024-10-08 18:29:28 +02:00
|
|
|
#add-images nav li {
|
|
|
|
|
position: relative;
|
|
|
|
|
height: var(--space-48);
|
|
|
|
|
border-left: 1px solid var(--color-grey-400);
|
|
|
|
|
padding: var(--space-12) var(--space-16);
|
|
|
|
|
color: var(--color-grey-400);
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
}
|
|
|
|
|
#add-images nav li:hover,
|
|
|
|
|
#add-images nav li.active {
|
|
|
|
|
color: var(--color-grey-800);
|
|
|
|
|
border-left-color: var(--color-grey-800);
|
|
|
|
|
}
|
|
|
|
|
#add-images nav li.active::before {
|
|
|
|
|
content: "";
|
|
|
|
|
width: 2px;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: -1px;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
background: var(--color-grey-800);
|
|
|
|
|
}
|
|
|
|
|
#add-images [data-pc-name="fileupload"] button {
|
|
|
|
|
padding: 3rem;
|
|
|
|
|
aspect-ratio: 1/1;
|
|
|
|
|
}
|
|
|
|
|
#add-images .image {
|
|
|
|
|
counter-increment: selected-images;
|
|
|
|
|
aspect-ratio: 1/1;
|
|
|
|
|
border-radius: var(--rounded-xl);
|
|
|
|
|
}
|
|
|
|
|
#add-images .image::after {
|
|
|
|
|
content: counter(selected-images);
|
|
|
|
|
top: var(--space-12);
|
|
|
|
|
right: var(--space-12);
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
color: var(--color-white);
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
background: var(--color-grey-800);
|
|
|
|
|
mask: none;
|
|
|
|
|
display: grid;
|
|
|
|
|
place-items: center;
|
|
|
|
|
text-align: center;
|
|
|
|
|
width: 1.5rem;
|
|
|
|
|
height: 1.5rem;
|
|
|
|
|
}
|
2024-10-09 16:47:53 +02:00
|
|
|
#add-images .image img {
|
|
|
|
|
height: 100%;
|
|
|
|
|
width: 100%;
|
|
|
|
|
}
|
2024-10-09 16:08:37 +02:00
|
|
|
|
|
|
|
|
.with-sidebar[data-side="right"] > * {
|
|
|
|
|
height: 100%;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
}
|
2024-10-08 18:29:28 +02:00
|
|
|
</style>
|