| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 |
- <template>
- <div v-if="showPopup || show" class="cookie-consent-banner">
- <div class="continue-wrapper">
- <a class="continue" href="#" @click.prevent="continueWithoutAccepting">
- Continuer sans accepter
- </a>
- <v-icon size="20" class="fa-solid fa-arrow-right ml-6" @click="showPopup = false"></v-icon>
- </div>
- <v-row justify="center">
- <v-col cols="12">
- <img
- src="/images/logos/cookies/A_cute_and_beautiful_illustration_of_a_cookie_list-removebg-preview.png"
- alt="Cookie"
- class="cookie-image"
- />
- </v-col>
- </v-row>
- <v-row no-gutters>
- <v-col cols="12">
- <div class="text">
- <p>GESTION DES COOKIES ! !</p>
- </div>
- </v-col>
- </v-row>
- <p class="details-cookies" style="padding-left: 20px">
- Le site Opentalent.fr utilise des cookies fonctionnels nécessaires à la
- navigation du site et d'autres technologies similaire pour plusieurs
- objectifs : des cookies d'analyse de l'audience du site, des cookies de
- personnalisation de contenu et des cookies publicitaires. Pour plus de
- détail, veuillez consulter notre
- <NuxtLink to="/politique-de-confidentialite#cookie-policy">
- Politique de confidentialité</NuxtLink
- >. Vous pouvez ajuster vos préférences en matière de cookies à tout moment
- en cliquant sur le bouton "Gérer mes préférences"
- </p>
- <div class="horizontal-line"></div>
- <div class="actions">
- <button class="customize-button" @click="customizeCookies">
- Gérer mes préférences
- </button>
- <button class="accept-button" @click="acceptAllCookies">
- Tout accepter
- </button>
- <!-- <button class="decline-button" @click="declineCookies">Refuser</button> -->
- </div>
- </div>
- <v-dialog v-model="customizeDialog" persistent max-width="600px">
- <v-card>
- <v-row class="headline">
- <v-btn class="close-dialog" icon @click="closeCustomizeDialog"
- ><v-icon size="20" class="fas fa-times"></v-icon
- ></v-btn>
- <v-card-title>Gérer mes préferences</v-card-title>
- </v-row>
- <p class="gestion-preferences">
- Vous pouvez définir vos préférences sur la manière dont vous souhaitez
- que vos données soient utilisées en fonction des finalités et des
- entreprises tierces ci-dessous. Certains tiers peuvent traiter des
- données sur la base d'un intérêt légitime et vous pouvez choisir de vous
- désinscrire.
- </p>
- <v-container class="text-end">
- <button class="decline-button" @click="declineCookies">
- Tout refuser
- </button>
- <button class="accept-button" @click="acceptAllCookies">
- Tout accepter
- </button>
- </v-container>
- <v-card-text>
- <h4>Des cookies tiers permettant de réaliser des statistiques</h4>
- <v-row align="center">
- <v-col cols="auto">
- <v-switch
- v-model="tempCookiesOptions.googleAnalytics"
- label="Google Analytics"
- hide-details
- color="green"
- inset
- />
- </v-col>
- <v-col></v-col>
- </v-row>
- <p>
- Ces cookies nous permettent d'établir des statistiques, des volumes de
- fréquentation et d'utilisation des divers éléments de notre site, nous
- permettant d’optimiser son fonctionnement. Lien vers la Politique de
- protection des données de Google Analytics :
- <a href="https://policies.google.com/">
- https://policies.google.com/</a
- >
- </p>
- <h4 class="mt-6">Des cookies tiers à visée publicitaire</h4>
- <v-row align="center">
- <v-col cols="auto">
- <v-switch
- v-model="tempCookiesOptions.metaPixel"
- label="Meta Pixel"
- hide-details
- color="green"
- inset
- />
- </v-col>
- <v-col></v-col>
- </v-row>
- <p>
- Ces cookies sont installés par Facebook. Ce service nous permet
- d'établir des statistiques de consultation des publicités. Lien vers
- la Politique de protection des données de Facebook Pixel :
- <a
- href="https://www.facebook.com/privacy/policies/cookies/?entry_point=cookie_policy_redirect&entry=0"
- >
- https://www.facebook.com/privacy/policies/cookies/?entry_point=cookie_policy_redirect&entry=0
- </a>
- </p>
- </v-card-text>
- <v-card-actions>
- <v-btn color="secondary" @click="closeCustomizeDialog">Fermer</v-btn>
- <v-spacer></v-spacer>
- <button class="accept-button" @click="saveCookiesPreferences">
- Sauvegarder
- </button>
- </v-card-actions>
- </v-card>
- </v-dialog>
- <div v-if="showNotification" class="cookie-notification">
- Vous avez refusé nos cookies. Vous pouvez modifier votre décision
- <a href="#" @click="modifyDecision">ici</a>.
- </div>
- </template>
- <script setup lang="ts">
- import { ref, onMounted, watch, defineProps } from 'vue'
- import { useCookies } from 'vue3-cookies'
- import { useEventStore } from '~/stores/eventStore'
- const { cookies } = useCookies()
- const showPopup = ref(false)
- const customizeDialog = ref(false)
- const showNotification = ref(false)
- const eventStore = useEventStore()
- /**
- * Cookies options
- */
- const cookiesOptions = ref({
- googleAnalytics: true,
- metaPixel: true,
- })
- /**
- * Temporary cookies options
- */
- const tempCookiesOptions = ref({
- googleAnalytics: true,
- metaPixel: true,
- })
- /**
- * Continue without accepting cookies
- */
- const continueWithoutAccepting = () => {
- showPopup.value = false
- }
- /**
- * Accept all cookies
- */
- const acceptAllCookies = () => {
- cookies.set('cookie_consent', 'accepted', '365d')
- cookies.set('ga_consent', 'true', '365d')
- cookies.set('mp_consent', 'true', '365d')
- cookiesOptions.value.googleAnalytics = true
- cookiesOptions.value.metaPixel = true
- tempCookiesOptions.value.googleAnalytics = true
- tempCookiesOptions.value.metaPixel = true
- initializeAnalytics()
- showPopup.value = false
- customizeDialog.value = false
- }
- const removeCookie = (cookieName) => {
- cookies.remove(cookieName)
- }
- const closeCustomizeDialog = () => {
- customizeDialog.value = false
- showPopup.value = true
- }
- const declineCookies = () => {
- cookies.set('cookie_consent', 'declined', '7d')
- cookies.set('ga_consent', 'false', '7d')
- cookies.set('mp_consent', 'false', '7d')
- showPopup.value = false
- showNotification.value = true
- customizeDialog.value = false
- // Hide the notification after 1 minute
- setTimeout(() => {
- showNotification.value = false
- }, 60000)
- }
- const customizeCookies = () => {
- tempCookiesOptions.value = { ...cookiesOptions.value }
- customizeDialog.value = true
- showPopup.value = false
- }
- const saveCookiesPreferences = () => {
- console.log('Saving cookies preferences')
- cookies.set('cookie_consent', 'customized', '365d')
- cookies.set(
- 'ga_consent',
- tempCookiesOptions.value.googleAnalytics.toString(),
- '365d',
- )
- cookies.set('mp_consent', tempCookiesOptions.value.metaPixel.toString(), '365d')
- // Supprimer les cookies si les options sont désactivées
- if (!tempCookiesOptions.value.googleAnalytics) {
- removeCookie('ga_consent')
- }
- if (!tempCookiesOptions.value.metaPixel) {
- removeCookie('mp_consent')
- }
- // Stocker la preuve de consentement
- localStorage.setItem(
- 'cookie_consent',
- JSON.stringify({
- date: new Date(),
- consent: tempCookiesOptions.value,
- }),
- )
- cookiesOptions.value = { ...tempCookiesOptions.value }
- if (cookiesOptions.value.googleAnalytics) initializeAnalytics()
- customizeDialog.value = false
- showPopup.value = false
- }
- /**
- * Modify the decision
- */
- const modifyDecision = () => {
- showNotification.value = false
- showPopup.value = true
- }
- /**
- * Initialize Google Analytics and Meta Pixel
- */
- const initializeAnalytics = () => {
- if (cookiesOptions.value.googleAnalytics) {
- // Load Google Analytics script
- ;(function (i, s, o, g, r, a, m) {
- i['GoogleAnalyticsObject'] = r
- ;(i[r] =
- i[r] ||
- function () {
- ;(i[r].q = i[r].q || []).push(arguments)
- }),
- (i[r].l = 1 * new Date())
- ;(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0])
- a.async = 1
- a.src = g
- m.parentNode.insertBefore(a, m)
- })(
- window,
- document,
- 'script',
- 'https://www.googletagmanager.com/gtag/js?id=G-L8PZ9TEFNX',
- 'ga',
- )
- ga('create', 'UA-XXXXX-Y', 'auto')
- ga('send', 'pageview')
- }
- if (cookiesOptions.value.metaPixel) {
- // Load Meta Pixel script
- !(function (f, b, e, v, n, t, s) {
- if (f.fbq) return
- n = f.fbq = function () {
- n.callMethod
- ? n.callMethod.apply(n, arguments)
- : n.queue.push(arguments)
- }
- if (!f._fbq) f._fbq = n
- n.push = n
- n.loaded = !0
- n.version = '2.0'
- n.queue = []
- t = b.createElement(e)
- t.async = !0
- t.src = v
- s = b.getElementsByTagName(e)[0]
- s.parentNode.insertBefore(t, s)
- })(
- window,
- document,
- 'script',
- 'https://connect.facebook.net/en_US/fbevents.js',
- )
- fbq('init', '1045498113172655')
- fbq('track', 'PageView')
- }
- }
- /**
- * Check if the user has already accepted the cookies
- */
- onMounted(() => {
- const cookieConsent = cookies.get('cookie_consent')
- if (!cookieConsent) {
- showPopup.value = true
- }
- const gaConsent = cookies.get('ga_consent')
- const mpConsent = cookies.get('mp_consent')
- if (gaConsent !== undefined)
- cookiesOptions.value.googleAnalytics = gaConsent === 'false'
- if (mpConsent !== undefined)
- cookiesOptions.value.metaPixel = mpConsent === 'false'
- eventStore.on('openCustomizeDialog', customizeCookies)
- })
- </script>
- <style scoped>
- .gestion-preferences {
- font-size: 1.2rem;
- font-weight: 500;
- margin-bottom: 10px;
- padding: 20px;
- text-align: justify;
- }
- .headline {
- font-size: 1.5rem;
- font-weight: 500;
- margin-bottom: 10px;
- background-color: #9edbdd;
- text-transform: uppercase;
- padding: 15px;
- }
- .cookie-consent-banner {
- background: #fff;
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
- position: fixed;
- bottom: 10px;
- left: 15px;
- max-width: 550px;
- z-index: 1000 !important;
- display: flex;
- flex-direction: column;
- align-items: center;
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
- border-radius: 15px;
- padding: 20px;
- }
- .cookie-image {
- width: 150px;
- margin: 0;
- }
- .text {
- padding-top: 10px;
- padding-bottom: 0;
- font-family: 'Barlow';
- font-weight: 600;
- font-size: 1.3rem;
- text-align: center;
- }
- .details-cookies {
- font-family: 'Barlow';
- padding: 10px;
- text-align: center;
- text-align: justify;
- }
- .horizontal-line {
- width: 90%;
- height: 1px;
- background-color: #7e7d7d;
- margin-top: 10px;
- margin-bottom: 10px;
- }
- .actions {
- margin-top: 10px;
- margin-bottom: 10px;
- display: flex;
- justify-content: center;
- }
- .accept-button,
- .customize-button {
- background-color: var(--on-primary-color-alt);
- border: none;
- padding: 10px 20px;
- margin: 5px;
- cursor: pointer;
- }
- .decline-button {
- border: 1px solid var(--on-neutral-color);
- padding: 10px 20px;
- margin: 5px;
- cursor: pointer;
- }
- .accept-button:hover,
- .customize-button:hover {
- background-color: var(--on-primary-color-alt);
- }
- .cookie-notification {
- position: fixed;
- bottom: 20px;
- left: 20px;
- background-color: rgba(0, 0, 0, 0.8);
- color: white;
- padding: 15px;
- border-radius: 5px;
- z-index: 1100;
- }
- .cookie-description {
- margin: 0;
- font-size: 0.875rem;
- color: #555;
- }
- .custom-switch .v-input--selection-controls__ripple .v-ripple__container {
- background-color: var(--v-primary-base);
- }
- .custom-switch
- .v-input--selection-controls__ripple--active
- .v-ripple__container {
- background-color: var(--v-primary-darken4);
- }
- .custom-switch .v-input--selection-controls__input {
- --v-theme-primary: var(--v-primary-base);
- --v-theme-primary-lighten4: var(--v-primary-lighten4);
- --v-theme-primary-darken4: var(--v-primary-darken4);
- }
- .custom-switch
- .v-input--selection-controls__input
- input:checked
- + .v-input--selection-controls__ripple
- .v-ripple__container {
- background-color: var(--v-primary-darken4);
- }
- .custom-switch
- .v-input--selection-controls__input
- input:checked
- + .v-input--selection-controls__ripple
- .v-ripple__container
- .v-ripple__animation {
- background-color: var(--v-primary-darken4);
- }
- :deep().v-switch__track {
- background-color: red;
- }
- .close-dialog {
- background: none !important;
- box-shadow: none !important;
- }
- .continue{
- font-size: .9rem;
- font-weight: 500;
- text-decoration: underline;
- cursor: pointer;
- text-decoration: none !important;
- color: black ;
- }
- .continue-wrapper{
- display: flex;
- justify-content: end;
- align-items: center;
- margin-left: auto;
- }
- </style>
|