BadgeSection.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <!--suppress TypeScriptValidateTypes -->
  2. <template>
  3. <v-container>
  4. <v-row>
  5. <v-col cols="4">
  6. <div
  7. v-for="item in col1"
  8. :key="item.title"
  9. class="badges-section"
  10. >
  11. <h4>{{ item.title }}</h4>
  12. <Badge
  13. v-for="badge in item.badges"
  14. :title="badge.title"
  15. :img="badge.logo"
  16. :subtitle="badge.subtitle"
  17. :details="badge.details"
  18. />
  19. </div>
  20. </v-col>
  21. <v-col cols="4">
  22. <div
  23. v-for="item in col2"
  24. :key="item.title"
  25. class="badges-section"
  26. >
  27. <h4>{{ item.title }}</h4>
  28. <Badge
  29. v-for="badge in item.badges"
  30. :title="badge.title"
  31. :img="badge.logo"
  32. :subtitle="badge.subtitle"
  33. :details="badge.details"
  34. />
  35. </div>
  36. </v-col>
  37. <v-col cols="4">
  38. <div
  39. v-for="item in col3"
  40. :key="item.title"
  41. class="badges-section"
  42. >
  43. <h4>{{ item.title }}</h4>
  44. <Badge
  45. v-for="badge in item.badges"
  46. :title="badge.title"
  47. :img="badge.logo"
  48. :subtitle="badge.subtitle"
  49. :details="badge.details"
  50. />
  51. </div>
  52. </v-col>
  53. </v-row>
  54. </v-container>
  55. <!-- <div class="badges-section">-->
  56. <!-- <h4>Languages</h4>-->
  57. <!-- <Badge title="English" img="" :subtitle="$t('good')" />-->
  58. <!-- <Badge title="French" img="" :subtitle="$t('native')" />-->
  59. <!-- <Badge title="Spanish" img="" :subtitle="$t('basic')" />-->
  60. <!-- </div>-->
  61. </template>
  62. <script setup lang="ts">
  63. import { useTheme } from 'vuetify'
  64. const theme = useTheme()
  65. const i18n = useI18n()
  66. // J'ai travaillé sur de très nombreux projets avec Python, depuis la version 2.7 jusqu'à la version 3.12: scripts variés, extensions QGis, projets web, librairies, utilitaires ou applications buraeautiques.
  67. const col1 = [
  68. {
  69. title: 'Languages',
  70. badges: [
  71. {
  72. title: 'Python',
  73. logo: '/images/logos/python.svg',
  74. subtitle: i18n.t('x_years', { years: 4 }),
  75. details: ''
  76. },
  77. {
  78. title: 'PHP',
  79. logo: '/images/logos/php.svg',
  80. subtitle: i18n.t('x_years', { years: 4 }),
  81. details: ''
  82. },
  83. {
  84. title:
  85. 'Node.js',
  86. logo: theme.global.name.value === 'light' ? '/images/logos/nodejs_light.svg' : '/images/logos/nodejs_dark.svg',
  87. subtitle: i18n.t('x_years', { years: 5 }),
  88. details: ''
  89. },
  90. {
  91. title: 'C#',
  92. logo: '/images/logos/csharp.png',
  93. subtitle: i18n.t('x_years', { years: 2 }),
  94. details: ''
  95. },
  96. ]
  97. },
  98. {
  99. title: 'Frameworks',
  100. badges: [
  101. {
  102. 'title': 'Symfony',
  103. logo: '/images/logos/symfony.svg',
  104. subtitle: i18n.t('x_years', { years: 10 }),
  105. details: ''
  106. },
  107. {
  108. 'title': 'Vue.js',
  109. logo: '/images/logos/vue.png',
  110. subtitle: i18n.t('x_years', { years: 3 }),
  111. details: ''
  112. },
  113. {
  114. 'title': 'Nuxt.js',
  115. logo: '/images/logos/nuxt.svg',
  116. subtitle: i18n.t('x_years', { years: 3 }),
  117. details: ''
  118. },
  119. {
  120. 'title': '.Net',
  121. logo: '/images/logos/dotnet.svg',
  122. subtitle: i18n.t('x_years', { years: 2 }),
  123. details: ''
  124. },
  125. {
  126. 'title': 'Jquery',
  127. logo: theme.global.name.value === 'light' ? '/images/logos/jquery.png' : '/images/logos/jquery_dark.png',
  128. subtitle: i18n.t('x_years', { years: 3 }),
  129. details: ''
  130. },
  131. ]
  132. }
  133. ]
  134. const col2 = [
  135. {
  136. title: 'DBs and search-engines',
  137. badges: [
  138. {
  139. title: 'Mysql',
  140. logo: '/images/logos/mysql.png',
  141. subtitle: i18n.t('x_years', { years: 6 }),
  142. details: ''
  143. },
  144. {
  145. title: 'MariaDb',
  146. logo: theme.global.name.value === 'light' ? '/images/logos/mariadb.svg': '/images/logos/mariadb_dark.svg',
  147. subtitle: i18n.t('x_years', { years: 6 }),
  148. details: ''
  149. },
  150. {
  151. title: 'Postgresql',
  152. logo: '/images/logos/postgresql.svg',
  153. subtitle: i18n.t('x_years', { years: 5 }),
  154. details: ''
  155. },
  156. {
  157. title: 'SQL-Server',
  158. logo: '/images/logos/sql-server.svg',
  159. subtitle: i18n.t('x_years', { years: 6 }),
  160. details: ''
  161. },
  162. {
  163. title: 'Sqlite',
  164. logo: '/images/logos/sqlite.svg',
  165. subtitle: i18n.t('x_years', { years: 5 }),
  166. details: ''
  167. },
  168. {
  169. title: 'Solr',
  170. logo: theme.global.name.value === 'light' ? '/images/logos/solr_light.png' : '/images/logos/solr_dark.png',
  171. subtitle: i18n.t('x_years', { years: 1 }),
  172. details: ''
  173. },
  174. ]
  175. },
  176. {
  177. title: 'DevOps',
  178. badges: [
  179. {
  180. 'title': 'Docker',
  181. logo: '/images/logos/docker.svg',
  182. subtitle: i18n.t('x_years', { years: 5 }),
  183. details: ''
  184. },
  185. {
  186. 'title': 'Gitlab CI',
  187. logo: '/images/logos/gitlab.svg',
  188. subtitle: i18n.t('x_years', { years: 8 }),
  189. details: ''
  190. },
  191. {
  192. 'title': 'Github Actions',
  193. logo: theme.global.name.value === 'light' ? '/images/logos/github-light.svg' : '/images/logos/github-dark.svg',
  194. subtitle: i18n.t('x_years', { years: 3 }),
  195. details: ''
  196. },
  197. {
  198. 'title': 'Jenkins',
  199. logo: '/images/logos/jenkins.png',
  200. subtitle: i18n.t('x_years', { years: 3 }),
  201. details: ''
  202. }
  203. ]
  204. }
  205. ]
  206. const col3 = [
  207. {
  208. title: 'CMS',
  209. badges: [
  210. {
  211. title: 'Typo3',
  212. logo: '/images/logos/typo3.png',
  213. subtitle: i18n.t('x_years', { years: 4 }),
  214. details: ''
  215. },
  216. {
  217. title: 'Wordpress',
  218. logo: theme.global.name.value === 'light' ? '/images/logos/wordpress.png' : '/images/logos/wordpress_dark.png',
  219. subtitle: i18n.t('x_years', { years: 6 }),
  220. details: ''
  221. }
  222. ]
  223. },
  224. {
  225. title: 'Other',
  226. badges: [
  227. {
  228. title: 'Mercure (SSE)',
  229. logo: '/images/logos/docker.svg',
  230. subtitle: i18n.t('x_years', { years: 5 }),
  231. details: ''
  232. },
  233. {
  234. title: 'Nextcloud',
  235. logo: '/images/logos/gitlab.svg',
  236. subtitle: i18n.t('x_years', { years: 8 }),
  237. details: ''
  238. },
  239. {
  240. title: 'Linux',
  241. logo: theme.global.name.value === 'light' ? '/images/logos/github-light.svg' : '/images/logos/github-dark.svg',
  242. subtitle: i18n.t('x_years', { years: 3 }),
  243. details: ''
  244. }
  245. ]
  246. },
  247. {
  248. title: 'Management',
  249. badges: [
  250. {
  251. title: 'Management',
  252. logo: '/images/team-management.png',
  253. subtitle: i18n.t('x_years', { years: 10 }),
  254. details: ''
  255. },
  256. {
  257. title: 'Continuous Improvement',
  258. logo: '/images/continuous-improvement.png',
  259. subtitle: i18n.t('x_years', { years: 9 }),
  260. details: ''
  261. },
  262. {
  263. title: 'SCRUM',
  264. logo: '/images/scrum.png',
  265. subtitle: i18n.t('x_years', { years: 8 }),
  266. details: ''
  267. },
  268. {
  269. title: 'Tutoring',
  270. logo: '/images/teacher.png',
  271. subtitle: i18n.t('x_years', { years: 6 }),
  272. details: ''
  273. }
  274. ]
  275. }
  276. ]
  277. </script>
  278. <style scoped lang="scss">
  279. >.v-container {
  280. padding: 0 !important;
  281. }
  282. .v-col {
  283. display: flex;
  284. flex-direction: column;
  285. }
  286. .badges-section {
  287. display: flex;
  288. flex-direction: column;
  289. flex-wrap: wrap;
  290. justify-content: flex-start;
  291. margin: 12px 0;
  292. padding: 12px 6px;
  293. border: solid 1px rgba(var(--v-theme-primary-alt), 0.3);
  294. border-radius: 16px;
  295. flex: 1;
  296. h4 {
  297. font-size: 16px;
  298. margin: -24px 24px 6px 24px;
  299. padding: 0 12px;
  300. background: rgb(var(--v-theme-background));;
  301. }
  302. .v-card {
  303. margin: 6px auto;
  304. }
  305. }
  306. </style>