DataTable.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <!--
  2. Tableau interactif
  3. @see https://vuetifyjs.com/en/components/data-tables/
  4. -->
  5. <template>
  6. <v-col
  7. cols="12"
  8. sm="12"
  9. >
  10. <v-data-table
  11. :headers="headersWithItem"
  12. :items="items"
  13. :locale="$i18n.locale"
  14. class="elevation-1"
  15. :footer-props="{
  16. 'items-per-page-text': $t('itemsPerPage'),
  17. 'items-per-page-all-text': $t('allResult')
  18. }"
  19. >
  20. <template v-for="header in headersWithItem" #[header.item]="props">
  21. <slot :name="header.item" v-bind="props">
  22. {{ props.item[header.value] }}
  23. </slot>
  24. </template>
  25. <template #[`footer.page-text`]="items">
  26. {{ items.pageStart }} - {{ items.pageStop }} {{$t('of')}} {{ items.itemsLength }}
  27. </template>
  28. </v-data-table>
  29. </v-col>
  30. </template>
  31. <script lang="ts">
  32. import { defineComponent, computed, toRefs } from '@nuxtjs/composition-api'
  33. export default defineComponent({
  34. props: {
  35. items: {
  36. type: Array,
  37. required: true
  38. },
  39. headers: {
  40. type: Array,
  41. required: true
  42. }
  43. },
  44. setup (props) {
  45. const { headers } = toRefs(props)
  46. const headersWithItem = computed(() => {
  47. return headers.value.map((header:any) => {
  48. header.item = 'item.' + header.value
  49. return header
  50. })
  51. })
  52. return {
  53. headersWithItem
  54. }
  55. }
  56. })
  57. </script>