Footer.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  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. <nuxt-link to="/annuaire">
  22. Annuaire
  23. </nuxt-link>
  24. </v-row>
  25. <v-row>
  26. <nuxt-link to="/actualites">
  27. Actualités
  28. </nuxt-link>
  29. </v-row>
  30. <v-row>
  31. <nuxt-link to="/annonces">
  32. Annonces
  33. </nuxt-link>
  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="3">
  85. <v-row>
  86. <h5>
  87. Suivez-nous
  88. </h5>
  89. </v-row>
  90. <v-row class="social-networks">
  91. <v-col cols="2">
  92. <nuxt-link
  93. href="https://www.facebook.com/opentalent"
  94. target="_blank"
  95. class="fab fa-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-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-facebook"
  133. />
  134. <nuxt-link
  135. href="https://twitter.com/Opentalent_FRA"
  136. target="_blank"
  137. class="fa-brands fa-square-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-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="/politiques-de-cookies" 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. const { mdAndDown, mdAndUp } = useDisplay();
  208. const footerLinks = ref([
  209. {
  210. label: "AGENDA CULTUREL",
  211. sublink: [
  212. {
  213. label: "Annuaire",
  214. link: "/annuaire",
  215. },
  216. {
  217. label: "Actualités",
  218. link: "/actualites",
  219. },
  220. {
  221. label: "Annonces",
  222. link: "/annonces",
  223. },
  224. ],
  225. },
  226. {
  227. label: "LOGICIELS CULTURELS ",
  228. sublink: [
  229. {
  230. label: "Opentalent Artist",
  231. link: "/opentalent_artist)",
  232. },
  233. {
  234. label: "Opentalent School",
  235. link: "/opentalent_school",
  236. },
  237. {
  238. label: "Opentalent Manager",
  239. link: "/opentalent_manager",
  240. },
  241. ],
  242. },
  243. {
  244. label: "À PROPOS ",
  245. sublink: [
  246. {
  247. label: "Qui sommes-nous",
  248. link: "/qui-sommes-nous)",
  249. },
  250. {
  251. label: "Nous rejoindre",
  252. link: "/nous-rejoindre",
  253. },
  254. {
  255. label: "Nous contacter",
  256. link: "/nous-contacter",
  257. },
  258. ],
  259. },
  260. {
  261. label: "ESPACE CLIENT ",
  262. sublink: [
  263. {
  264. label: "Foire Aux Questions ",
  265. link: "/ https://ressources.opentalent.fr/)",
  266. },
  267. {
  268. label: "Support en ligne ",
  269. link: "/https://ressources.opentalent.fr/?contact",
  270. },
  271. {
  272. label: "Nous contacter ",
  273. link: "/nous-contacter",
  274. },
  275. ],
  276. },
  277. ]);
  278. const activeIndex = ref(-1);
  279. function toggleSection(index) {
  280. activeIndex.value = activeIndex.value === index ? -1 : index;
  281. }
  282. function isActive(index) {
  283. return activeIndex.value === index;
  284. }
  285. const layoutStore = useLayoutStore()
  286. const onIntersect = (isIntersecting) => {
  287. layoutStore.setIsFooterVisible(isIntersecting)
  288. }
  289. </script>
  290. <style scoped lang="scss">
  291. .container {
  292. background: #091d20;
  293. color: aliceblue; // TODO: replace by primary color variable
  294. }
  295. .logo .v-img {
  296. margin-bottom: 3rem;
  297. width: 25rem;
  298. }
  299. .v-col {
  300. padding: 12px;
  301. }
  302. .container {
  303. font-family: "Barlow", serif;
  304. font-style: normal;
  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: #ffffff;
  321. text-decoration: none !important;
  322. margin-bottom: 0.5rem;
  323. }
  324. .social-networks {
  325. a {
  326. color: #ecfbfc;
  327. font-size: 1.9rem;
  328. text-decoration: none !important;
  329. }
  330. }
  331. .footnotes {
  332. margin-top: 2rem;
  333. border-top: 0.4px solid rgba(255, 255, 255, 0.3);
  334. box-shadow: 0 3px 24px rgba(0, 0, 0, 0.07);
  335. a, p {
  336. text-decoration: none;
  337. color: #ffffff;
  338. font-size: 0.8rem;
  339. }
  340. }
  341. @media (max-width: 960px) {
  342. .logo {
  343. display: flex;
  344. justify-content: center;
  345. align-items: center;
  346. height: 140px;
  347. }
  348. .logo .v-img {
  349. width: 18rem;
  350. }
  351. .social-networks {
  352. a {
  353. font-size: 3rem;
  354. margin: 0 1rem;
  355. }
  356. }
  357. .section {
  358. display: flex;
  359. flex-direction: column;
  360. justify-content: space-between;
  361. text-align: left;
  362. font-family: "Barlow", serif;
  363. font-style: normal;
  364. font-weight: 700;
  365. font-size: 1.5rem;
  366. cursor: pointer;
  367. >div:first-child {
  368. border-bottom: 1px solid rgba(255, 255, 255, 0.3);
  369. padding-bottom: 6px;
  370. text-transform: uppercase;
  371. }
  372. a {
  373. font-family: "Barlow", serif;
  374. font-style: normal;
  375. font-weight: 300;
  376. font-size: 1.3rem;
  377. line-height: 20px;
  378. color: #ffffff;
  379. text-decoration: none !important;
  380. text-align: left;
  381. }
  382. }
  383. .footnotes {
  384. border: none;
  385. }
  386. }
  387. </style>