diff --git a/frontend/components/task/TaskCard.vue b/frontend/components/task/TaskCard.vue
index 0a5f57b..c8a92ef 100644
--- a/frontend/components/task/TaskCard.vue
+++ b/frontend/components/task/TaskCard.vue
@@ -40,6 +40,13 @@
+
+ {{ task.status.label }}
+
(), {
showProjectColor: false,
+ showStatusBadge: false,
})
const emit = defineEmits<{
diff --git a/frontend/pages/my-tasks.vue b/frontend/pages/my-tasks.vue
index ce36c08..d0bd9bb 100644
--- a/frontend/pages/my-tasks.vue
+++ b/frontend/pages/my-tasks.vue
@@ -7,6 +7,8 @@ import type { TaskTag } from '~/services/dto/task-tag'
import type { TaskGroup } from '~/services/dto/task-group'
import type { UserData } from '~/services/dto/user-data'
import type { Project } from '~/services/dto/project'
+import type { StatusCategory } from '~/services/dto/workflow'
+import { STATUS_CATEGORY_LABEL } from '~/services/dto/workflow'
import { useTaskService } from '~/services/tasks'
import { useTaskStatusService } from '~/services/task-statuses'
import { useTaskEffortService } from '~/services/task-efforts'
@@ -112,13 +114,11 @@ const sortOptions = computed(() => [
{ label: t('myTasks.sortScheduledStart'), value: SORT_SCHEDULED },
])
-// Kanban helpers
-const sortedStatuses = computed(() =>
- [...statuses.value].sort((a, b) => a.position - b.position)
-)
+// Kanban helpers (grouped by canonical status category)
+const CATEGORIES: StatusCategory[] = ['todo', 'in_progress', 'blocked', 'review', 'done']
-function tasksByStatus(statusId: number): Task[] {
- return tasks.value.filter(t => t.status?.id === statusId)
+function tasksByCategory(category: StatusCategory): Task[] {
+ return tasks.value.filter(t => t.status?.category === category)
}
const backlogTasks = computed(() =>
@@ -205,44 +205,6 @@ watch(selectedProjectId, () => {
selectedGroupId.value = null
}, { flush: 'sync' })
-// Drag & drop
-const dragOverStatusId = ref(null)
-const dragCounter = ref(0)
-
-function onDragEnter(id: number) {
- dragCounter.value++
- dragOverStatusId.value = id
-}
-
-function onDragLeave() {
- dragCounter.value--
- if (dragCounter.value === 0) {
- dragOverStatusId.value = null
- }
-}
-
-function onDrop(event: DragEvent) {
- dragCounter.value = 0
- dragOverStatusId.value = null
- return Number(event.dataTransfer!.getData('text/plain'))
-}
-
-async function onDropStatus(event: DragEvent, status: TaskStatus) {
- const taskId = onDrop(event)
- const task = tasks.value.find(t => t.id === taskId)
- if (!task || task.status?.id === status.id) return
- task.status = status
- await taskService.update(taskId, { status: `/api/task_statuses/${status.id}` })
-}
-
-async function onDropBacklog(event: DragEvent) {
- const taskId = onDrop(event)
- const task = tasks.value.find(t => t.id === taskId)
- if (!task || !task.status) return
- task.status = null
- await taskService.update(taskId, { status: null })
-}
-
// Modal
function openTaskCreate() {
selectedTask.value = null
@@ -428,36 +390,29 @@ onMounted(async () => {
-
+
-
- {{ status.label }} ({{ tasksByStatus(status.id).length }})
+
+ {{ STATUS_CATEGORY_LABEL[cat] }} ({{ tasksByCategory(cat).length }})
{{ $t('myTasks.noTasks') }}
@@ -467,15 +422,8 @@ onMounted(async () => {
-
-
+
+
{{ $t('myTasks.backlog') }} ({{ backlogTasks.length }})
{
:key="task.id"
:task="task"
show-project-color
+ show-status-badge
@click="openTaskEdit(task)"
/>