diff --git a/frontend/components/AdminEffortTab.vue b/frontend/components/AdminEffortTab.vue
index 140c885..ecd0e67 100644
--- a/frontend/components/AdminEffortTab.vue
+++ b/frontend/components/AdminEffortTab.vue
@@ -10,39 +10,15 @@
-
-
-
-
- | Libellé |
- Actions |
-
-
-
-
- | {{ item.label }} |
-
-
- |
-
-
- |
- Aucun effort trouvé.
- |
-
-
-
-
+ handleDelete(item.id)"
+ />
([])
const isLoading = ref(true)
diff --git a/frontend/components/AdminPriorityTab.vue b/frontend/components/AdminPriorityTab.vue
index 1e87bcb..65d78cd 100644
--- a/frontend/components/AdminPriorityTab.vue
+++ b/frontend/components/AdminPriorityTab.vue
@@ -10,46 +10,22 @@
-
-
-
-
- | Libellé |
- Couleur |
- Actions |
-
-
-
-
- | {{ item.label }} |
-
-
- |
-
-
- |
-
-
- |
- Aucune priorité trouvée.
- |
-
-
-
-
+ handleDelete(item.id)"
+ >
+
+
+
+
([])
const isLoading = ref(true)
diff --git a/frontend/components/AdminStatusTab.vue b/frontend/components/AdminStatusTab.vue
index 93c106b..7ce33a1 100644
--- a/frontend/components/AdminStatusTab.vue
+++ b/frontend/components/AdminStatusTab.vue
@@ -10,48 +10,22 @@
-
-
-
-
- | Libellé |
- Couleur |
- Position |
- Actions |
-
-
-
-
- | {{ item.label }} |
-
-
- |
- {{ item.position }} |
-
-
- |
-
-
- |
- Aucun statut trouvé.
- |
-
-
-
-
+ handleDelete(item.id)"
+ >
+
+
+
+
([])
const isLoading = ref(true)
diff --git a/frontend/components/AdminTypeTab.vue b/frontend/components/AdminTypeTab.vue
index 17ae000..e786acf 100644
--- a/frontend/components/AdminTypeTab.vue
+++ b/frontend/components/AdminTypeTab.vue
@@ -10,46 +10,22 @@
-
-
-
-
- | Libellé |
- Couleur |
- Actions |
-
-
-
-
- | {{ item.label }} |
-
-
- |
-
-
- |
-
-
- |
- Aucun type trouvé.
- |
-
-
-
-
+ handleDelete(item.id)"
+ >
+
+
+
+
([])
const isLoading = ref(true)
diff --git a/frontend/components/AdminUserTab.vue b/frontend/components/AdminUserTab.vue
index 8c537d6..861a1e5 100644
--- a/frontend/components/AdminUserTab.vue
+++ b/frontend/components/AdminUserTab.vue
@@ -10,49 +10,25 @@
-
-
-
-
- | Nom d'utilisateur |
- Rôles |
- Actions |
-
-
-
-
- | {{ item.username }} |
-
-
- {{ role }}
-
- |
-
-
- |
-
-
- |
- Aucun utilisateur trouvé.
- |
-
-
-
-
+ handleDelete(item.id)"
+ >
+
+
+ {{ role }}
+
+
+
([])
const isLoading = ref(true)
diff --git a/frontend/components/DataTable.vue b/frontend/components/DataTable.vue
new file mode 100644
index 0000000..b430277
--- /dev/null
+++ b/frontend/components/DataTable.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+ |
+ {{ col.label }}
+ |
+
+ Actions
+ |
+
+
+
+
+ |
+
+ {{ item[col.key] }}
+
+ |
+
+
+ |
+
+
+ |
+ {{ emptyMessage }}
+ |
+
+
+
+
+
+
+
diff --git a/frontend/components/ProjectGroupTab.vue b/frontend/components/ProjectGroupTab.vue
index 44e85c6..457ea8d 100644
--- a/frontend/components/ProjectGroupTab.vue
+++ b/frontend/components/ProjectGroupTab.vue
@@ -10,50 +10,25 @@
-
-
-
-
- | Titre |
- Couleur |
- Description |
- Actions |
-
-
-
-
- | {{ item.title }} |
-
-
- |
-
- {{ item.description ?? '—' }}
- |
-
-
- |
-
-
- |
- Aucun groupe trouvé.
- |
-
-
-
-
+ handleDelete(item.id)"
+ >
+
+
+
+
+ {{ item.description ?? '—' }}
+
+
()
+import type { DataTableColumn } from '~/components/DataTable.vue'
+
+const columns: DataTableColumn[] = [
+ { key: 'title', label: 'Titre', primary: true },
+ { key: 'color', label: 'Couleur' },
+ { key: 'description', label: 'Description', class: 'max-w-xs truncate text-neutral-700' },
+]
+
const { getByProject, remove } = useTaskGroupService()
const items = ref([])
const isLoading = ref(true)
diff --git a/frontend/components/ProjectStatusTab.vue b/frontend/components/ProjectStatusTab.vue
index 40e752a..71804c4 100644
--- a/frontend/components/ProjectStatusTab.vue
+++ b/frontend/components/ProjectStatusTab.vue
@@ -10,48 +10,22 @@
-
-
-
-
- | Libellé |
- Couleur |
- Position |
- Actions |
-
-
-
-
- | {{ item.label }} |
-
-
- |
- {{ item.position }} |
-
-
- |
-
-
- |
- Aucun statut trouvé.
- |
-
-
-
-
+
+
+
+
+
()
+import type { DataTableColumn } from '~/components/DataTable.vue'
+
+const columns: DataTableColumn[] = [
+ { key: 'label', label: 'Libellé', primary: true },
+ { key: 'color', label: 'Couleur' },
+ { key: 'position', label: 'Position', class: 'text-neutral-700' },
+]
+
const statusService = useTaskStatusService()
const taskService = useTaskService()
diff --git a/frontend/pages/clients.vue b/frontend/pages/clients.vue
index f16a9fb..cce2a4a 100644
--- a/frontend/pages/clients.vue
+++ b/frontend/pages/clients.vue
@@ -10,45 +10,25 @@
-
-
-
-
- | Nom |
- Email |
- Adresse |
- Téléphone |
- |
-
-
-
-
- | {{ client.name }} |
- {{ client.email ?? '-' }} |
- {{ formatAddress(client) }} |
- {{ client.phone ?? '-' }} |
-
-
- |
-
-
- |
- Aucun client trouvé.
- |
-
-
-
-
+ handleDelete(item.id)"
+ >
+
+ {{ item.email ?? '-' }}
+
+
+ {{ formatAddress(item) }}
+
+
+ {{ item.phone ?? '-' }}
+
+
([])
const isLoading = ref(true)