diff --git a/frontend/src/components/dashboard/DepartmentColumn.tsx b/frontend/src/components/dashboard/DepartmentColumn.tsx index 53435fd..0116670 100644 --- a/frontend/src/components/dashboard/DepartmentColumn.tsx +++ b/frontend/src/components/dashboard/DepartmentColumn.tsx @@ -215,7 +215,7 @@ export function DepartmentColumn({ title: initialTitle, titleEn, subtitle: initi {/* 컬럼 헤더 (noHeader 시 숨김) */} {!noHeader && (
{ e.preventDefault(); setCtxMenu({ x: e.clientX, y: e.clientY, type: 'header' }); }} > @@ -223,7 +223,7 @@ export function DepartmentColumn({ title: initialTitle, titleEn, subtitle: initi {titleEnState && ( {titleEnState} )} - + {tasks.length}건
@@ -238,13 +238,31 @@ export function DepartmentColumn({ title: initialTitle, titleEn, subtitle: initi
해당 업무 없음
- ) : ( - - t.id)} strategy={verticalListSortingStrategy}> - {orderedTasks.map((task) => )} - - - )} + ) : (() => { + const projectTasks = orderedTasks.filter((t) => t.taskType !== '상시업무'); + const routineTasks = orderedTasks.filter((t) => t.taskType === '상시업무'); + return ( + + t.id)} strategy={verticalListSortingStrategy}> + {projectTasks.map((task) => ( + + ))} + {routineTasks.length > 0 && ( + <> +
+
+ 상시업무 +
+
+ {routineTasks.map((task) => ( + + ))} + + )} + + + ); + })()}
diff --git a/frontend/src/components/dashboard/TaskCard.tsx b/frontend/src/components/dashboard/TaskCard.tsx index eb217b7..6704ed7 100644 --- a/frontend/src/components/dashboard/TaskCard.tsx +++ b/frontend/src/components/dashboard/TaskCard.tsx @@ -4,7 +4,6 @@ import { useSortable } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; import type { DraggableAttributes } from '@dnd-kit/core'; import type { SyntheticListenerMap } from '@dnd-kit/core/dist/hooks/utilities'; -import { sendTaskSelected } from '../../lib/dualMonitor'; import { apiClient } from '../../lib/apiClient'; import { ContextMenu } from '../common/ContextMenu'; import { TaskModal } from '../common/TaskModal'; @@ -98,7 +97,6 @@ export function TaskCard({ onCardClick?: () => void; }) { const queryClient = useQueryClient(); - const tagCfg = TAG_CONFIG[task.tag ?? ''] ?? { bg: 'bg-gray-100', text: 'text-gray-600' }; // ── API mutations ────────────────────────────────────────── const create = useMutation({ @@ -174,7 +172,7 @@ export function TaskCard({ style={dragStyle} {...dragAttributes} {...dragListeners} - className="bg-white rounded-2xl px-5 py-3 mb-3 shadow-sm border border-gray-100 hover:shadow-md hover:border-gray-200 transition-all select-none h-[112px] cursor-grab active:cursor-grabbing overflow-hidden" + className="bg-white rounded-2xl px-5 py-3 mb-3 shadow-sm border border-gray-100 hover:shadow-md hover:border-gray-200 transition-all select-none cursor-grab active:cursor-grabbing overflow-hidden" onPointerDown={(e) => { // 우클릭(button !== 0)을 dnd-kit에 전달하지 않음 // dnd-kit은 pointerdown→pointerup 시 synthetic click을 발화하는데 @@ -202,15 +200,16 @@ export function TaskCard({ - {/* ── 태그 + 기간 + 상태 ── */} + {/* ── description ── */} + {task.description && ( +
+ {task.description} +
+ )} + + {/* ── 기간 + 상태 ── */}
- sendTaskSelected(task.id)} - > - {task.tag} - - + {(task.startDate || task.dueDate) ? `${task.startDate ? fmtDate(task.startDate) : '?'} ~ ${task.dueDate ? fmtDate(task.dueDate) : '?'}` : ''} @@ -222,7 +221,7 @@ export function TaskCard({ {/* ── 이슈 메모 ── */} {task.issueNote && ( -
+
▶ 이슈 : {task.issueNote}