Footer.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <template>
  2. <!--suppress VueUnrecognizedDirective -->
  3. <footer v-intersect="onIntersect">
  4. <LayoutContainer>
  5. <div>
  6. <v-row>
  7. <!-- Première section : Logo Opentalent -->
  8. <v-col cols="12" lg="3" class="logo">
  9. <nuxt-link to="/">
  10. <v-img src="/images/logo/footer-logo.png" />
  11. </nuxt-link>
  12. </v-col>
  13. <!-- Deuxième section : liens agenda culturel (écrans larges seulement) -->
  14. <v-col v-if="mdAndUp" cols="2" >
  15. <v-row>
  16. <h5>
  17. Agenda culturel
  18. </h5>
  19. </v-row>
  20. <v-row>
  21. <AgendaLink href="/annuaire">
  22. Annuaire
  23. </AgendaLink>
  24. </v-row>
  25. <v-row>
  26. <AgendaLink to="/actualites">
  27. Actualités
  28. </AgendaLink>
  29. </v-row>
  30. <v-row>
  31. <AgendaLink to="/annonces">
  32. Annonces
  33. </AgendaLink>
  34. </v-row>
  35. </v-col>
  36. <!-- Troisième section : liens logiciels culturels (écrans larges seulement) -->
  37. <v-col v-if="mdAndUp" cols="2">
  38. <v-row>
  39. <h5>
  40. Logiciels culturels
  41. </h5>
  42. </v-row>
  43. <v-row>
  44. <nuxt-link to="/opentalent_artist">
  45. Opentalent Artist
  46. </nuxt-link>
  47. </v-row>
  48. <v-row>
  49. <nuxt-link to="/opentalent_school">
  50. Opentalent School
  51. </nuxt-link
  52. >
  53. </v-row>
  54. <v-row>
  55. <nuxt-link to="/opentalent_manager">
  56. Opentalent Manager
  57. </nuxt-link>
  58. </v-row>
  59. </v-col>
  60. <!-- Quatrième section : liens espace client (écrans larges seulement) -->
  61. <v-col v-if="mdAndUp" cols="2">
  62. <v-row>
  63. <h5>
  64. Espace client
  65. </h5>
  66. </v-row>
  67. <v-row>
  68. <nuxt-link href="https://ressources.opentalent.fr/display/FAQ/Accueil">
  69. Foire Aux Questions
  70. </nuxt-link>
  71. </v-row>
  72. <v-row>
  73. <nuxt-link href="https://ressources.opentalent.fr/" target="_blank">
  74. Support en ligne
  75. </nuxt-link>
  76. </v-row>
  77. <v-row>
  78. <nuxt-link to="/nous-contacter" target="_blank" >
  79. Nous contacter
  80. </nuxt-link>
  81. </v-row>
  82. </v-col>
  83. <!-- Cinquième section : liens réseaux sociaux (écrans larges seulement) -->
  84. <v-col v-if="mdAndUp" cols="2">
  85. <v-row class="justify-center">
  86. <h5>
  87. Suivez-nous
  88. </h5>
  89. </v-row>
  90. <v-row class="justify-center social-networks">
  91. <v-col cols="2">
  92. <nuxt-link
  93. href="https://www.facebook.com/opentalent"
  94. target="_blank"
  95. class="fab fa-square-facebook"
  96. />
  97. </v-col>
  98. <v-col cols="2">
  99. <nuxt-link
  100. href="https://twitter.com/Opentalent_FRA"
  101. target="_blank"
  102. class="fa-brands fa-square-twitter"
  103. />
  104. </v-col>
  105. <v-col cols="2">
  106. <nuxt-link
  107. href="https://www.linkedin.com/company/2iopenservice"
  108. target="_blank"
  109. class="fab fa-linkedin"
  110. />
  111. </v-col>
  112. <v-col cols="2">
  113. <nuxt-link
  114. href="https://www.youtube.com/@Opentalent74300"
  115. target="_blank"
  116. class="fab fa-square-youtube"
  117. />
  118. </v-col>
  119. </v-row>
  120. </v-col>
  121. </v-row>
  122. <!-- Deuxième section alt : version petits écrans -->
  123. <v-row
  124. v-if="mdAndDown"
  125. class="justify-center social-networks"
  126. >
  127. <!-- TODO: voir si faisable de fusionner avec la section précédente -->
  128. <v-col cols="12" class="text-center">
  129. <nuxt-link
  130. href="https://www.facebook.com/opentalent"
  131. target="_blank"
  132. class="fab fa-square-facebook"
  133. />
  134. <nuxt-link
  135. href="https://twitter.com/Opentalent_FRA"
  136. target="_blank"
  137. class="fa-brands fa-square-x-twitter"
  138. />
  139. <nuxt-link
  140. href="https://www.linkedin.com/company/2iopenservice"
  141. target="_blank"
  142. class="fab fa-linkedin"
  143. />
  144. <nuxt-link
  145. href="https://www.youtube.com/@Opentalent74300"
  146. target="_blank"
  147. class="fab fa-square-youtube"
  148. />
  149. </v-col>
  150. </v-row>
  151. </div>
  152. <!-- Troisième section alt : version petits écrans -->
  153. <v-row v-if="mdAndDown">
  154. <v-col cols="12" >
  155. <div v-for="(item, index) in footerLinks" :key="index">
  156. <v-container>
  157. <div class="section" @click="toggleSection(index)">
  158. <div class="d-flex flex-row justify-space-between">
  159. {{ item.label }}
  160. <v-icon
  161. :icon="isActive(index) ? 'fas fa-chevron-up' : 'fas fa-chevron-down'"
  162. />
  163. </div>
  164. <div
  165. v-show="isActive(index)"
  166. v-for="(sublink, sublinkIndex) in item.sublink"
  167. :key="sublinkIndex"
  168. class="mt-3"
  169. >
  170. <nuxt-link :to="sublink.link">
  171. {{ sublink.label }}
  172. </nuxt-link>
  173. </div>
  174. </div>
  175. </v-container>
  176. </div>
  177. </v-col>
  178. </v-row>
  179. <div class="footnotes">
  180. <v-row justify="center">
  181. <p class="mt-6">
  182. <a href="/mentions-legales" target="_blank">
  183. Mentions légales
  184. </a>
  185. -
  186. <a href="/politique-de-confidentialite-et-protection-des-donnees-personnelles" target="_blank">
  187. Politiques de cookies
  188. </a>
  189. -
  190. <a href="/CGV" target="_blank">
  191. Conditions Générales de Ventes
  192. </a>
  193. </p>
  194. </v-row>
  195. <v-row class="mb-6" justify="center">
  196. <p>
  197. 2024 &copy; Tous droits réservés par Opentalent
  198. </p>
  199. </v-row>
  200. </div>
  201. </LayoutContainer>
  202. </footer>
  203. </template>
  204. <script setup>
  205. import { useDisplay } from "vuetify";
  206. import { useLayoutStore } from "~/stores/layoutStore";
  207. import AgendaLink from "~/components/Common/AgendaLink.vue";
  208. const { mdAndDown, mdAndUp } = useDisplay();
  209. const footerLinks = ref([
  210. {
  211. label: "AGENDA CULTUREL",
  212. sublink: [
  213. {
  214. label: "Annuaire",
  215. link: "/annuaire",
  216. },
  217. {
  218. label: "Actualités",
  219. link: "/actualites",
  220. },
  221. {
  222. label: "Annonces",
  223. link: "/annonces",
  224. },
  225. ],
  226. },
  227. {
  228. label: "LOGICIELS CULTURELS ",
  229. sublink: [
  230. {
  231. label: "Opentalent Artist",
  232. link: "/opentalent_artist)",
  233. },
  234. {
  235. label: "Opentalent School",
  236. link: "/opentalent_school",
  237. },
  238. {
  239. label: "Opentalent Manager",
  240. link: "/opentalent_manager",
  241. },
  242. ],
  243. },
  244. {
  245. label: "À PROPOS ",
  246. sublink: [
  247. {
  248. label: "Qui sommes-nous",
  249. link: "/qui-sommes-nous)",
  250. },
  251. {
  252. label: "Nous rejoindre",
  253. link: "/nous-rejoindre",
  254. },
  255. {
  256. label: "Nous contacter",
  257. link: "/nous-contacter",
  258. },
  259. ],
  260. },
  261. {
  262. label: "ESPACE CLIENT ",
  263. sublink: [
  264. {
  265. label: "Foire Aux Questions ",
  266. link: "/ https://ressources.opentalent.fr/)",
  267. },
  268. {
  269. label: "Support en ligne ",
  270. link: "/https://ressources.opentalent.fr/?contact",
  271. },
  272. {
  273. label: "Nous contacter ",
  274. link: "/nous-contacter",
  275. },
  276. ],
  277. },
  278. ]);
  279. const activeIndex = ref(-1);
  280. function toggleSection(index) {
  281. activeIndex.value = activeIndex.value === index ? -1 : index;
  282. }
  283. function isActive(index) {
  284. return activeIndex.value === index;
  285. }
  286. const layoutStore = useLayoutStore()
  287. const onIntersect = (isIntersecting) => {
  288. layoutStore.setIsFooterVisible(isIntersecting)
  289. }
  290. </script>
  291. <style scoped lang="scss">
  292. .container {
  293. background: var(--primary-color);
  294. color: var(--on-primary-color);
  295. }
  296. .logo .v-img {
  297. margin-bottom: 3rem;
  298. width: 300px;
  299. height: 100px;
  300. }
  301. .v-col {
  302. padding: 12px;
  303. }
  304. .container {
  305. padding-top: 32px;
  306. }
  307. h5 {
  308. font-weight: 500;
  309. line-height: 20px;
  310. margin-top: 20px;
  311. margin-bottom: 1rem;
  312. font-size: 1.1rem;
  313. letter-spacing: 1.2px;
  314. text-transform: uppercase;
  315. }
  316. a {
  317. font-weight: 300;
  318. font-size: 0.9rem;
  319. line-height: 20px;
  320. color: var(--on-primary-color);
  321. text-decoration: none !important;
  322. margin-bottom: 0.5rem;
  323. }
  324. .social-networks {
  325. a {
  326. color: var(--on-primary-color);
  327. font-size: 1.9rem;
  328. text-decoration: none !important;
  329. }
  330. }
  331. .footnotes {
  332. border-top: 0.4px solid var(--neutral-color-alt-strong);
  333. box-shadow: 0 3px 24px rgba(0, 0, 0, 0.07);
  334. a, p {
  335. text-decoration: none;
  336. color: var(--on-primary-color);
  337. font-size: 0.8rem;
  338. }
  339. }
  340. @media (max-width: 960px) {
  341. .logo {
  342. display: flex;
  343. justify-content: center;
  344. align-items: center;
  345. height: 140px;
  346. }
  347. .logo .v-img {
  348. width: 18rem;
  349. }
  350. .social-networks {
  351. a {
  352. font-size: 3rem;
  353. margin: 0 1rem;
  354. }
  355. }
  356. .section {
  357. display: flex;
  358. flex-direction: column;
  359. justify-content: space-between;
  360. text-align: left;
  361. font-weight: 700;
  362. font-size: 1.5rem;
  363. cursor: pointer;
  364. >div:first-child {
  365. border-bottom: 1px solid var(--on-secondary-color);
  366. padding-bottom: 6px;
  367. text-transform: uppercase;
  368. }
  369. a {
  370. font-weight: 300;
  371. font-size: 1.3rem;
  372. line-height: 20px;
  373. color: var(--on-primary-color);
  374. text-decoration: none !important;
  375. text-align: left;
  376. }
  377. }
  378. .footnotes {
  379. border: none;
  380. }
  381. }
  382. </style>