|
|
@@ -2,170 +2,177 @@
|
|
|
Carrousel de la page d'accueil
|
|
|
-->
|
|
|
<template>
|
|
|
- <v-carousel
|
|
|
- ref="carousel"
|
|
|
- v-model="activeIndex"
|
|
|
- :show-arrows="false"
|
|
|
- :hide-delimiter-background="true"
|
|
|
- :show-delimiters="false"
|
|
|
- :touch="true"
|
|
|
- :height="lgAndUp ? 500 : 800"
|
|
|
- :interval="5000"
|
|
|
- >
|
|
|
- <v-carousel-item
|
|
|
- v-for="(item, index) in carouselItems"
|
|
|
- :key="index"
|
|
|
+ <div v-intersect="onIntersect">
|
|
|
+ <v-carousel
|
|
|
+ ref="carousel"
|
|
|
+ v-model="activeIndex"
|
|
|
+ :show-arrows="false"
|
|
|
+ :hide-delimiter-background="true"
|
|
|
+ :show-delimiters="false"
|
|
|
+ :touch="true"
|
|
|
+ :height="lgAndUp ? 500 : 800"
|
|
|
+ :interval="10000"
|
|
|
+ :cycle="true"
|
|
|
>
|
|
|
- <v-row>
|
|
|
- <!-- Partie description (logo, description, bouton 'en savoir plus') -->
|
|
|
- <v-col cols="12" lg="6" class="col presentation">
|
|
|
- <v-img
|
|
|
- :src="item.logo"
|
|
|
- :alt="item.alt"
|
|
|
- class="logo"
|
|
|
- />
|
|
|
-
|
|
|
- <p class="description" v-html="mdAndUp ? item.description : item.descriptionSm" />
|
|
|
-
|
|
|
- <v-row class="align-start pl-4">
|
|
|
+ <v-carousel-item v-for="(item, index) in carouselItems" :key="index">
|
|
|
+ <v-row>
|
|
|
+ <!-- Partie description (logo, description, bouton 'en savoir plus') -->
|
|
|
+ <v-col cols="12" lg="6" class="col presentation">
|
|
|
+ <nuxt-link :to="item.link">
|
|
|
+ <v-img :src="item.logo" :alt="item.logoAlt" class="logo" />
|
|
|
+ </nuxt-link>
|
|
|
+
|
|
|
+ <p
|
|
|
+ class="description"
|
|
|
+ v-html="mdAndUp ? item.description : item.descriptionSm"
|
|
|
+ />
|
|
|
+
|
|
|
<v-btn
|
|
|
:to="item.link"
|
|
|
append-icon="fas fa-arrow-right"
|
|
|
- :class="['learn-more-btn', item.buttonClass]"
|
|
|
+ :class="['mt-3 learn-more-btn', item.buttonClass]"
|
|
|
>
|
|
|
En savoir plus
|
|
|
</v-btn>
|
|
|
- </v-row>
|
|
|
- </v-col>
|
|
|
-
|
|
|
- <!-- Partie Illustration -->
|
|
|
- <v-col cols="12" lg="6" class="col illustration">
|
|
|
- <v-row>
|
|
|
- <div
|
|
|
- class="background-rectangle"
|
|
|
- :style="{ backgroundColor: item.color }"
|
|
|
- />
|
|
|
-
|
|
|
- <v-card class="card" elevation="5">
|
|
|
- <v-img
|
|
|
- class="profile-image"
|
|
|
- :src="item.avatar"
|
|
|
- alt="Profile Image"
|
|
|
- contain
|
|
|
- rounded
|
|
|
+ </v-col>
|
|
|
+
|
|
|
+ <!-- Partie Illustration -->
|
|
|
+ <v-col cols="12" lg="6" class="col illustration">
|
|
|
+ <v-row>
|
|
|
+ <div
|
|
|
+ class="background-rectangle"
|
|
|
+ :style="{ backgroundColor: item.color }"
|
|
|
/>
|
|
|
- <v-card-text>
|
|
|
- <v-card-title class="name">
|
|
|
- {{ item.name }}
|
|
|
|
|
|
- <p class="school">
|
|
|
- {{ item.school }}
|
|
|
+ <v-card class="card" elevation="5">
|
|
|
+ <v-img
|
|
|
+ class="profile-image"
|
|
|
+ :src="item.avatar"
|
|
|
+ :alt="item.avatarAlt"
|
|
|
+ contain
|
|
|
+ rounded
|
|
|
+ />
|
|
|
+ <v-card-text>
|
|
|
+ <v-card-title class="name">
|
|
|
+ {{ item.name }}
|
|
|
+
|
|
|
+ <p class="school">
|
|
|
+ {{ item.school }}
|
|
|
+ </p>
|
|
|
+ </v-card-title>
|
|
|
+
|
|
|
+ <p class="status">
|
|
|
+ {{ item.status }}
|
|
|
</p>
|
|
|
- </v-card-title>
|
|
|
-
|
|
|
- <p class="status">
|
|
|
- {{ item.status }}
|
|
|
- </p>
|
|
|
- </v-card-text>
|
|
|
- </v-card>
|
|
|
-
|
|
|
- <v-img
|
|
|
- :src="item.image"
|
|
|
- class="image"
|
|
|
- />
|
|
|
- </v-row>
|
|
|
- </v-col>
|
|
|
- </v-row>
|
|
|
- </v-carousel-item>
|
|
|
-
|
|
|
- <div class="custom-controls">
|
|
|
- <!--suppress JSUnusedLocalSymbols -->
|
|
|
- <div
|
|
|
- v-for="(_, index) in carouselItems"
|
|
|
- :key="index"
|
|
|
- :class="{ 'active-control': index === activeIndex }"
|
|
|
- @click="setActiveIndex(index)"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </v-carousel>
|
|
|
+ </v-card-text>
|
|
|
+ </v-card>
|
|
|
+
|
|
|
+ <v-img :src="item.image" :alt="item.imageAlt" class="image" />
|
|
|
+ </v-row>
|
|
|
+ </v-col>
|
|
|
+ </v-row>
|
|
|
+ </v-carousel-item>
|
|
|
+
|
|
|
+ <div class="custom-controls">
|
|
|
+ <!--suppress JSUnusedLocalSymbols -->
|
|
|
+ <div
|
|
|
+ v-for="(_, index) in carouselItems"
|
|
|
+ :key="index"
|
|
|
+ :class="{ 'active-control': index === activeIndex }"
|
|
|
+ @click="setActiveIndex(index)"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </v-carousel>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
+import { useDisplay } from 'vuetify'
|
|
|
+import type { Ref } from 'vue'
|
|
|
+import type { CarouselItem } from '~/types/interface'
|
|
|
+import { useLayoutStore } from '~/stores/layoutStore'
|
|
|
|
|
|
-import { useDisplay } from "vuetify";
|
|
|
-import type { CarouselItem } from "~/types/interface";
|
|
|
-const { smAndDown, mdAndDown, mdAndUp, lgAndUp } = useDisplay();
|
|
|
+const { mdAndUp, lgAndUp } = useDisplay()
|
|
|
|
|
|
// Index de la slide active
|
|
|
-let activeIndex: Ref<number> = ref(0);
|
|
|
+const activeIndex: Ref<number> = ref(0)
|
|
|
|
|
|
const setActiveIndex = (index: number) => {
|
|
|
- activeIndex.value = index;
|
|
|
-};
|
|
|
+ activeIndex.value = index
|
|
|
+}
|
|
|
|
|
|
const carouselItems: Ref<Array<CarouselItem>> = ref([
|
|
|
{
|
|
|
- logo: "/images/logo/logiciels/School-noir.png",
|
|
|
- logoAlt: "Logo Opentalent School - logiciel de gestion et de communication pour les établissements d’enseignement artistique",
|
|
|
+ logo: '/images/logos/opentalent/Logo_Opentalent_School-gris.png',
|
|
|
+ logoAlt:
|
|
|
+ 'Logo Opentalent School - logiciel de gestion et de communication pour les établissements d’enseignement artistique',
|
|
|
description:
|
|
|
"Pour les petits comme pour les GRANDS établissements d’enseignement artistique tels que les écoles de musique, de danse, de théâtre, d'art, de cirque et conservatoire.<br> Il permet la gestion au quotidien et en temps réel de votre établissement, de gérer vos élèves et vos professeurs, vos emplois du temps, le suivi pédagogique, vos salles, la facturation et les encaissements…",
|
|
|
descriptionSm:
|
|
|
"Pour les petits comme pour les GRANDS établissements d’enseignement artistique tels que les écoles de musique, de danse, de théâtre, d'art, de cirque et conservatoire.",
|
|
|
- buttonClass: "btn-school",
|
|
|
+ buttonClass: 'btn-school',
|
|
|
image:
|
|
|
- "/images/Home_logiciel/Logiciel_Opentalent_School-eleve-Conservatoire_de_Musique.png",
|
|
|
- imageAlt: "Jeune élève de batterie",
|
|
|
- color: "rgba(32, 147, 190, 0.4)",
|
|
|
- link: "/opentalent_school",
|
|
|
- name: "Cindy Blanchard",
|
|
|
- school: "Conservatoire de Musique",
|
|
|
- status: "élève",
|
|
|
- avatar: "/images/carousel/school/avatar.png",
|
|
|
- avatarAlt: "Photo de profil d’une jeune fille",
|
|
|
+ '/images/pages/home/carousel/Logiciel_Opentalent_School-eleve-Conservatoire_de_Musique.png',
|
|
|
+ imageAlt: 'Jeune élève de batterie',
|
|
|
+ color: 'rgba(32, 147, 190, 0.4)',
|
|
|
+ link: '/opentalent_school',
|
|
|
+ name: 'Cindy Blanchard',
|
|
|
+ school: 'Conservatoire de Musique',
|
|
|
+ status: 'élève',
|
|
|
+ avatar: '/images/pages/home/carousel/Photo_de_profil_d_une_jeune_fille.png',
|
|
|
+ avatarAlt: 'Photo de profil d’une jeune fille',
|
|
|
},
|
|
|
{
|
|
|
- logo: "/images/logo/logiciels/Artist-noir.png",
|
|
|
- logoAlt: "Logo Opentalent Artist - logiciel de gestion et de communication pour les orchestres, les chorales, les compagnies artistiques et troupes",
|
|
|
+ logo: '/images/logos/opentalent/Logo_Opentalent_Artist-gris.png',
|
|
|
+ logoAlt:
|
|
|
+ 'Logo Opentalent Artist - logiciel de gestion et de communication pour les orchestres, les chorales, les compagnies artistiques et troupes',
|
|
|
description:
|
|
|
- "Pour les structures culturelles pratiquantes telles que les orchestres, les chorales, les compagnies de danse, théâtre et cirque. <br> Gérez votre activité avec un logiciel de gestion et de communication au service de votre passion.",
|
|
|
+ 'Pour les structures culturelles pratiquantes telles que les orchestres, les chorales, les compagnies de danse, théâtre et cirque. <br> Gérez votre activité avec un logiciel de gestion et de communication au service de votre passion.',
|
|
|
descriptionSm:
|
|
|
- "Pour les structures culturelles pratiquantes telles que les orchestres, les chorales, les compagnies de danse, théâtre et cirque.",
|
|
|
- buttonClass: "btn-artist",
|
|
|
+ 'Pour les structures culturelles pratiquantes telles que les orchestres, les chorales, les compagnies de danse, théâtre et cirque.',
|
|
|
+ buttonClass: 'btn-artist',
|
|
|
image:
|
|
|
- "/images/Home_logiciel/Logiciel_Opentalent_Artist-administrateur-Orchestre_d_harmonie.png",
|
|
|
- imageAlt: "Homme jouant du banjo",
|
|
|
- color: "rgba(250, 194, 10, 0.4)",
|
|
|
- link: "opentalent_artist",
|
|
|
- name: "Thierry Dupont ",
|
|
|
- school: "Orchestre d’harmonie",
|
|
|
- status: "Admin",
|
|
|
- avatar: "/images/carousel/artist/avatar.png",
|
|
|
- avatarAlt: "Photo de profil d’un homme jouant du banjo",
|
|
|
+ '/images/pages/home/carousel/Logiciel_Opentalent_Artist-administrateur-Orchestre_d_harmonie.png',
|
|
|
+ imageAlt: 'Homme jouant du banjo',
|
|
|
+ color: 'rgba(250, 194, 10, 0.4)',
|
|
|
+ link: 'opentalent_artist',
|
|
|
+ name: 'Thierry Dupont ',
|
|
|
+ school: 'Orchestre d’harmonie',
|
|
|
+ status: 'Admin',
|
|
|
+ avatar:
|
|
|
+ '/images/pages/home/carousel/Photo_de_profil_d_un_homme_jouant_du_banjo.png',
|
|
|
+ avatarAlt: 'Photo de profil d’un homme jouant du banjo',
|
|
|
},
|
|
|
{
|
|
|
- logo: "/images/logo/logiciels/Manager-noir.png",
|
|
|
- logoAlt: "Logo Opentalent Manager - logiciel de gestion et de communication pour les fédérations, les confédérations et les collectivités",
|
|
|
+ logo: '/images/logos/opentalent/Logo_Opentalent_Manager-gris.png',
|
|
|
+ logoAlt:
|
|
|
+ 'Logo Opentalent Manager - logiciel de gestion et de communication pour les fédérations, les confédérations et les collectivités',
|
|
|
description:
|
|
|
- "La solution de mise en réseau des organisations culturelles.<br> Fédérations, confédérations et collectivités, utilisez une solution collaborative innovante et unique spécialement développée pour les réseaux culturels.",
|
|
|
+ 'La solution de mise en réseau des organisations culturelles.<br> Fédérations, confédérations et collectivités, utilisez une solution collaborative innovante et unique spécialement développée pour les réseaux culturels.',
|
|
|
descriptionSm:
|
|
|
- "La solution de mise en réseau des organisations culturelles, telles que les fédérations, confédérations et collectivités.",
|
|
|
- buttonClass: "btn-manager",
|
|
|
+ 'La solution de mise en réseau des organisations culturelles, telles que les fédérations, confédérations et collectivités.',
|
|
|
+ buttonClass: 'btn-manager',
|
|
|
image:
|
|
|
- "/images/Home_logiciel/Logiciel_Opentalent_Managerl-Administrateur_Federation.png",
|
|
|
- imageAlt: "Un homme en costard et une femme tailleur souriant",
|
|
|
- color: "rgba(216, 5, 11, 0.4)",
|
|
|
- link: "opentalent_manager",
|
|
|
- name: "Marie Voisin",
|
|
|
+ '/images/pages/home/carousel/Logiciel_Opentalent_Manager-Administrateur_Federation.png',
|
|
|
+ imageAlt: 'Un homme en costard et une femme tailleur souriant',
|
|
|
+ color: 'rgba(216, 5, 11, 0.4)',
|
|
|
+ link: 'opentalent_manager',
|
|
|
+ name: 'Marie Voisin',
|
|
|
school: "Réseau d'organisations culturelles ",
|
|
|
- status: "ADMIN",
|
|
|
- avatar: "/images/carousel/manager/avatar.png",
|
|
|
- avatarAlt: "Photo de profil d’une femme en tailleur",
|
|
|
+ status: 'ADMIN',
|
|
|
+ avatar:
|
|
|
+ '/images/pages/home/carousel/Photo_de_profil_d_une_femme_en_tailleur.png',
|
|
|
+ avatarAlt: 'Photo de profil d’une femme en tailleur',
|
|
|
},
|
|
|
-]);
|
|
|
+])
|
|
|
+
|
|
|
+const layoutStore = useLayoutStore()
|
|
|
+const onIntersect = (isIntersecting: boolean) => {
|
|
|
+ layoutStore.setIsBannerVisible(isIntersecting)
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
-
|
|
|
/* ============= CAROUSEL =============== */
|
|
|
:deep(.v-carousel__controls) {
|
|
|
display: none;
|
|
|
@@ -197,10 +204,15 @@ const carouselItems: Ref<Array<CarouselItem>> = ref([
|
|
|
|
|
|
/* ============= Colonne gauche - Description =============== */
|
|
|
.col.presentation {
|
|
|
+ padding-left: 7rem;
|
|
|
+
|
|
|
+ @media (max-width: 600px) {
|
|
|
+ padding-left: 0;
|
|
|
+ }
|
|
|
+
|
|
|
.logo {
|
|
|
width: 20rem;
|
|
|
margin-top: 10px;
|
|
|
- margin-left: 6rem;
|
|
|
|
|
|
@media (max-width: 600px) {
|
|
|
width: 15rem;
|
|
|
@@ -209,9 +221,7 @@ const carouselItems: Ref<Array<CarouselItem>> = ref([
|
|
|
}
|
|
|
|
|
|
.description {
|
|
|
- text-align: justify;
|
|
|
margin-top: 8px;
|
|
|
- margin-left: 7rem;
|
|
|
width: 25vw;
|
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
|
@@ -228,7 +238,6 @@ const carouselItems: Ref<Array<CarouselItem>> = ref([
|
|
|
line-height: 15px;
|
|
|
width: 10rem;
|
|
|
height: 2.5rem;
|
|
|
- margin-left: 7rem;
|
|
|
|
|
|
@media (max-width: 600px) {
|
|
|
width: 80%;
|
|
|
@@ -269,7 +278,7 @@ const carouselItems: Ref<Array<CarouselItem>> = ref([
|
|
|
.col.illustration {
|
|
|
.card {
|
|
|
position: relative;
|
|
|
- left: 10%;
|
|
|
+ left: 5%;
|
|
|
height: 100%;
|
|
|
width: 27%;
|
|
|
border-radius: 1rem;
|
|
|
@@ -288,7 +297,8 @@ const carouselItems: Ref<Array<CarouselItem>> = ref([
|
|
|
padding: 0 !important;
|
|
|
}
|
|
|
|
|
|
- .school, .status {
|
|
|
+ .school,
|
|
|
+ .status {
|
|
|
text-align: center;
|
|
|
white-space: normal;
|
|
|
}
|