feat: left label column 실행과제/기반업무
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -229,53 +229,35 @@ export function DepartmentColumn({ title: initialTitle, titleEn, subtitle: initi
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* ── 실행과제 영역 ── */}
|
{/* 프로젝트 카드 목록 (스크롤 영역) */}
|
||||||
<div className="flex flex-1 min-h-0">
|
<div
|
||||||
{/* 좌측 라벨 */}
|
className="flex-1 overflow-y-auto p-4 min-h-0"
|
||||||
<div className="shrink-0 w-6 flex items-center justify-center bg-blue-50 border-r border-blue-100">
|
onContextMenu={handleListContextMenu}
|
||||||
<span
|
>
|
||||||
className="text-xs font-black text-blue-300 tracking-widest select-none"
|
{(() => {
|
||||||
style={{ writingMode: 'vertical-rl', transform: 'rotate(180deg)' }}
|
const projectTasks = orderedTasks.filter((t) => t.taskType !== '상시업무');
|
||||||
>실행과제</span>
|
return projectTasks.length === 0 ? (
|
||||||
</div>
|
<div className="flex items-center justify-center h-40 text-2xl text-gray-300">
|
||||||
{/* 카드 목록 */}
|
해당 업무 없음
|
||||||
<div
|
</div>
|
||||||
className="flex-1 overflow-y-auto p-4 min-h-0"
|
) : (
|
||||||
onContextMenu={handleListContextMenu}
|
<DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>
|
||||||
>
|
<SortableContext items={projectTasks.map((t) => t.id)} strategy={verticalListSortingStrategy}>
|
||||||
{(() => {
|
{projectTasks.map((task) => (
|
||||||
const projectTasks = orderedTasks.filter((t) => t.taskType !== '상시업무');
|
<SortableTaskCard key={task.id} task={task} sectionOptions={sectionOptions} onSelect={onSelectTask} />
|
||||||
return projectTasks.length === 0 ? (
|
))}
|
||||||
<div className="flex items-center justify-center h-40 text-2xl text-gray-300">
|
</SortableContext>
|
||||||
해당 업무 없음
|
</DndContext>
|
||||||
</div>
|
);
|
||||||
) : (
|
})()}
|
||||||
<DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={handleDragEnd}>
|
|
||||||
<SortableContext items={projectTasks.map((t) => t.id)} strategy={verticalListSortingStrategy}>
|
|
||||||
{projectTasks.map((task) => (
|
|
||||||
<SortableTaskCard key={task.id} task={task} sectionOptions={sectionOptions} onSelect={onSelectTask} />
|
|
||||||
))}
|
|
||||||
</SortableContext>
|
|
||||||
</DndContext>
|
|
||||||
);
|
|
||||||
})()}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* ── 기반업무 영역 ── */}
|
{/* 기반업무 고정 영역 */}
|
||||||
{(() => {
|
{(() => {
|
||||||
const routineTasks = orderedTasks.filter((t) => t.taskType === '상시업무');
|
const routineTasks = orderedTasks.filter((t) => t.taskType === '상시업무');
|
||||||
return (
|
return (
|
||||||
<div className="shrink-0 flex border-t border-gray-200" style={{ height: 300 }}>
|
<div className="shrink-0 border-t border-gray-200" style={{ height: 300 }}>
|
||||||
{/* 좌측 라벨 */}
|
<div className="h-full overflow-y-auto p-4">
|
||||||
<div className="shrink-0 w-6 flex items-center justify-center bg-amber-50 border-r border-amber-100">
|
|
||||||
<span
|
|
||||||
className="text-xs font-black text-amber-400 tracking-widest select-none"
|
|
||||||
style={{ writingMode: 'vertical-rl', transform: 'rotate(180deg)' }}
|
|
||||||
>기반업무</span>
|
|
||||||
</div>
|
|
||||||
{/* 카드 목록 */}
|
|
||||||
<div className="flex-1 overflow-y-auto p-4">
|
|
||||||
{routineTasks.length === 0 ? (
|
{routineTasks.length === 0 ? (
|
||||||
<div className="flex items-center justify-center h-full text-base text-gray-300">
|
<div className="flex items-center justify-center h-full text-base text-gray-300">
|
||||||
기반업무 없음
|
기반업무 없음
|
||||||
|
|||||||
@@ -83,8 +83,29 @@ export default function DashboardPage() {
|
|||||||
onOpenTaskManager={() => setShowTaskManager(true)}
|
onOpenTaskManager={() => setShowTaskManager(true)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<main className="relative flex-1 overflow-hidden min-h-0">
|
<main className="relative flex-1 overflow-hidden min-h-0 flex">
|
||||||
<div className="grid h-full grid-cols-4 overflow-hidden min-h-0">
|
|
||||||
|
{/* ── 맨 왼쪽 구분 라벨 컬럼 ── */}
|
||||||
|
<div className="shrink-0 w-8 flex flex-col border-r border-gray-200 bg-gray-50">
|
||||||
|
{/* 헤더 높이 맞춤 (DepartmentColumn 헤더 h-10) */}
|
||||||
|
<div className="h-10 shrink-0 border-b border-gray-200" />
|
||||||
|
{/* 실행과제 영역 (flex-1) */}
|
||||||
|
<div className="flex-1 flex items-center justify-center bg-blue-50/60 border-b border-gray-200">
|
||||||
|
<span
|
||||||
|
className="text-xs font-black text-blue-400 tracking-widest select-none"
|
||||||
|
style={{ writingMode: 'vertical-rl', transform: 'rotate(180deg)' }}
|
||||||
|
>실행과제</span>
|
||||||
|
</div>
|
||||||
|
{/* 기반업무 영역 (고정 300px) */}
|
||||||
|
<div className="shrink-0 flex items-center justify-center bg-amber-50/60" style={{ height: 300 }}>
|
||||||
|
<span
|
||||||
|
className="text-xs font-black text-amber-500 tracking-widest select-none"
|
||||||
|
style={{ writingMode: 'vertical-rl', transform: 'rotate(180deg)' }}
|
||||||
|
>기반업무</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="grid flex-1 h-full grid-cols-4 overflow-hidden min-h-0">
|
||||||
<DepartmentColumn
|
<DepartmentColumn
|
||||||
title="인사관리"
|
title="인사관리"
|
||||||
titleEn="HR Management"
|
titleEn="HR Management"
|
||||||
|
|||||||
Reference in New Issue
Block a user