| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <!--
- Tableau interactif
- @see https://vuetifyjs.com/en/components/data-tables/
- -->
- <template>
- <v-col
- cols="12"
- sm="12"
- >
- <v-data-table
- :headers="headersWithItem"
- :items="collection.items"
- :server-items-length="collection.pagination.totalItems"
- :loading="$fetchState.pending"
- class="elevation-1"
- >
- <template v-for="header in headersWithItem" #[header.item]="props">
- <slot :name="header.item" v-bind="props">
- {{ props.item[header.value] }}
- </slot>
- </template>
- <template #item.actions="{ item }">
- <v-icon
- small
- class="mr-2"
- @click="editItem(item)"
- >
- mdi-pencil
- </v-icon>
- <v-icon
- small
- @click="deleteItem(item)"
- >
- mdi-delete
- </v-icon>
- </template>
- </v-data-table>
- </v-col>
- </template>
- <script setup lang="ts">
- import {ref, Ref, toRefs} from "@vue/reactivity";
- import {AnyJson} from "~/types/enum/data";
- import {useEntityFetch} from "~/composables/data/useEntityFetch";
- import ApiResource from "~/models/ApiResource";
- const props = defineProps({
- parent: {
- type: Object,
- required: true
- },
- model: {
- type: Object,
- required: true
- },
- headers: {
- type: Array,
- required: true
- }
- })
- const { parent, model, headers } = toRefs(props)
- const headersWithItem = computed(() => {
- return headers.value.map((header:any) => {
- header.item = 'item.' + header.value
- return header
- })
- })
- const totalEntries: Ref<number> = ref(0)
- const entries: Ref<Array<AnyJson>> = ref(Array<AnyJson>())
- const { fetchCollection } = useEntityFetch()
- const { data: collection, pending } = await fetchCollection(model.value as typeof ApiResource, parent.value as ApiResource)
- const itemId: Ref<number> = ref(0)
- const editItem = (item: AnyJson) => {
- itemId.value = item.id
- }
- </script>
|