Footer.vue 11 KB

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