diff --git a/frontend/components/ConfirmDeleteStatusModal.vue b/frontend/components/ConfirmDeleteStatusModal.vue
new file mode 100644
index 0000000..ef3afd9
--- /dev/null
+++ b/frontend/components/ConfirmDeleteStatusModal.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
Supprimer le statut « {{ statusLabel }} »
+
+
+ {{ taskCount }} tâche{{ taskCount > 1 ? 's sont liées' : ' est liée' }} à ce statut.
+ Choisissez où les déplacer :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/components/ProjectGroupTab.vue b/frontend/components/ProjectGroupTab.vue
new file mode 100644
index 0000000..44e85c6
--- /dev/null
+++ b/frontend/components/ProjectGroupTab.vue
@@ -0,0 +1,118 @@
+
+
+
+
Groupes
+
+
+
+
+
+
+
+ | Titre |
+ Couleur |
+ Description |
+ Actions |
+
+
+
+
+ | {{ item.title }} |
+
+
+ |
+
+ {{ item.description ?? '—' }}
+ |
+
+
+ |
+
+
+ |
+ Aucun groupe trouvé.
+ |
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/components/ProjectStatusTab.vue b/frontend/components/ProjectStatusTab.vue
new file mode 100644
index 0000000..40e752a
--- /dev/null
+++ b/frontend/components/ProjectStatusTab.vue
@@ -0,0 +1,162 @@
+
+
+
+
Statuts
+
+
+
+
+
+
+
+ | Libellé |
+ Couleur |
+ Position |
+ Actions |
+
+
+
+
+ | {{ item.label }} |
+
+
+ |
+ {{ item.position }} |
+
+
+ |
+
+
+ |
+ Aucun statut trouvé.
+ |
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/components/TaskStatusDrawer.vue b/frontend/components/TaskStatusDrawer.vue
index ee65dd6..3fb83da 100644
--- a/frontend/components/TaskStatusDrawer.vue
+++ b/frontend/components/TaskStatusDrawer.vue
@@ -38,6 +38,7 @@ import { useTaskStatusService } from '~/services/task-statuses'
const props = defineProps<{
modelValue: boolean
item: TaskStatus | null
+ projectId: number
}>()
const emit = defineEmits<{
@@ -90,6 +91,7 @@ async function handleSubmit() {
label: form.label.trim(),
position: Number(form.position),
color: form.color,
+ project: `/api/projects/${props.projectId}`,
}
if (isEditing.value && props.item) {
diff --git a/frontend/pages/admin.vue b/frontend/pages/admin.vue
index ca420b1..9290f01 100644
--- a/frontend/pages/admin.vue
+++ b/frontend/pages/admin.vue
@@ -19,7 +19,6 @@
-
@@ -32,7 +31,6 @@
useHead({ title: 'Administration' })
const tabs = [
- { key: 'statuses', label: 'Statuts' },
{ key: 'efforts', label: 'Efforts' },
{ key: 'priorities', label: 'Priorités' },
{ key: 'types', label: 'Types' },
@@ -41,5 +39,5 @@ const tabs = [
type TabKey = typeof tabs[number]['key']
-const activeTab = ref
('statuses')
+const activeTab = ref('efforts')
diff --git a/frontend/pages/projects/[id]/groups.vue b/frontend/pages/projects/[id]/groups.vue
new file mode 100644
index 0000000..fa7e44a
--- /dev/null
+++ b/frontend/pages/projects/[id]/groups.vue
@@ -0,0 +1,32 @@
+
+
+
+
{{ project?.name ?? '' }} — Groupes
+
+
+
+
+
+
+
diff --git a/frontend/pages/projects/[id]/index.vue b/frontend/pages/projects/[id]/index.vue
new file mode 100644
index 0000000..2229f3a
--- /dev/null
+++ b/frontend/pages/projects/[id]/index.vue
@@ -0,0 +1,308 @@
+
+
+
+
{{ project?.name ?? '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ status.label }} ({{ tasksByStatus(status.id).length }})
+
+
+
+
+
+
+
+
Backlog
+
+
+
{{ task.title }}
+
+
+ {{ type.label }}
+
+
+ {{ task.priority.label }}
+
+
+ {{ task.effort.label }}
+
+
+ {{ task.assignee.username.substring(0, 2).toUpperCase() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/pages/projects/[id]/statuses.vue b/frontend/pages/projects/[id]/statuses.vue
new file mode 100644
index 0000000..a6932ee
--- /dev/null
+++ b/frontend/pages/projects/[id]/statuses.vue
@@ -0,0 +1,32 @@
+
+
+
+
{{ project?.name ?? '' }} — Statuts
+
+
+
+
+
+
+
diff --git a/frontend/services/dto/task-status.ts b/frontend/services/dto/task-status.ts
index 073c1ec..546046d 100644
--- a/frontend/services/dto/task-status.ts
+++ b/frontend/services/dto/task-status.ts
@@ -1,13 +1,17 @@
+import type { Project } from './project'
+
export type TaskStatus = {
id: number
'@id'?: string
label: string
color: string
position: number
+ project: Project | null
}
export type TaskStatusWrite = {
label: string
color: string
position: number
+ project: string
}
diff --git a/frontend/services/task-statuses.ts b/frontend/services/task-statuses.ts
index 28c4e06..7efcb9c 100644
--- a/frontend/services/task-statuses.ts
+++ b/frontend/services/task-statuses.ts
@@ -10,6 +10,13 @@ export function useTaskStatusService() {
return extractHydraMembers(data)
}
+ async function getByProject(projectId: number): Promise {
+ const data = await api.get>('/task_statuses', {
+ project: `/api/projects/${projectId}`,
+ })
+ return extractHydraMembers(data)
+ }
+
async function create(payload: TaskStatusWrite): Promise {
return api.post('/task_statuses', payload as Record, {
toastSuccessKey: 'taskStatuses.created',
@@ -28,5 +35,5 @@ export function useTaskStatusService() {
})
}
- return { getAll, create, update, remove }
+ return { getAll, getByProject, create, update, remove }
}