DataTable.vue 989 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <!--
  2. Template de base d'un tableau interactif
  3. @see https://vuetifyjs.com/en/components/data-tables/
  4. -->
  5. <template>
  6. <v-col cols="12" sm="12">
  7. <v-data-table :headers="headersWithItem" :items="items" class="elevation-1">
  8. <template v-for="(header, index) in headersWithItem" :key="index" #[header.item]="slotProps">
  9. <slot :name="header.item" v-bind="slotProps">
  10. {{ slotProps.item[header.value] }}
  11. </slot>
  12. </template>
  13. </v-data-table>
  14. </v-col>
  15. </template>
  16. <script setup lang="ts">
  17. interface TableHeader {
  18. value: string;
  19. item?: string;
  20. [key: string]: unknown;
  21. }
  22. const props = defineProps({
  23. items: {
  24. type: Array,
  25. required: true,
  26. },
  27. headers: {
  28. type: Array as PropType<TableHeader[]>,
  29. required: true,
  30. },
  31. })
  32. const { headers } = toRefs(props)
  33. const headersWithItem = computed(() => {
  34. return headers.value.map((header: TableHeader) => {
  35. header.item = 'item.' + header.value
  36. return header
  37. })
  38. })
  39. </script>