File size: 6,962 Bytes
16b3bc4
33ce322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16b3bc4
33ce322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158

// 작업 배포 관리 스크립트
document.addEventListener('DOMContentLoaded', function() {
    // 샘플 문서 데이터
    const sampleDocuments = [
        { id: 1, title: '건축 도면 #2456', type: '도면', priority: 'high', deadline: '2024-03-15' },
        { id: 2, title: '시공 계획서 #1890', type: '계획서', priority: 'normal', deadline: '2024-03-20' },
        { id: 3, title: '공사 명세서 #3124', type: '명세서', priority: 'low', deadline: '2024-03-25' },
        { id: 4, title: '안전 계획서 #4567', type: '계획서', priority: 'high', deadline: '2024-03-12' },
        { id: 5, title: '건축 허가서 #5231', type: '허가서', priority: 'normal', deadline: '2024-03-18' },
        { id: 6, title: '공사 일정표 #6789', type: '일정표', priority: 'low', deadline: '2024-03-28' }
    ];

    // 샘플 작업자 데이터
    const sampleWorkers = [
        { id: 1, name: '김작업', group: 'A팀', status: 'available', currentTasks: 3 },
        { id: 2, name: '이수정', group: 'B팀', status: 'available', currentTasks: 2 },
        { id: 3, name: '박라벨', group: 'A팀', status: 'busy', currentTasks: 5 },
        { id: 4, name: '최교정', group: 'C팀', status: 'available', currentTasks: 1 },
        { id: 5, name: '정정밀', group: 'B팀', status: 'available', currentTasks: 4 }
    ];
    // 문서 카드 생성 함수
    function createDocumentCard(document) {
        const priorityColors = {
            high: 'bg-red-100 text-red-800',
            normal: 'bg-yellow-100 text-yellow-800',
            low: 'bg-green-100 text-green-800'
        };

        return `
            <div class="document-card bg-white rounded-lg p-4 shadow-md border border-gray-200 cursor-move" 
                 draggable="true" 
                 data-document-id="${document.id}">
                <div class="flex justify-between items-start mb-2">
                    <span class="text-sm font-medium text-gray-700">${document.title}</span>
                    <span class="priority-badge ${priorityColors[document.priority]} px-2 py-1 rounded-full text-xs">
                ${document.priority === 'high' ? '높음' : document.priority === 'normal' ? '보통' : '낮음'}
            </span>
        </div>
        <div class="text-xs text-gray-500 mb-2">${document.type}</div>
        <div class="flex justify-between items-center">
            <span class="text-xs text-gray-400">마감: ${document.deadline}</span>
            <button class="worker-select-btn text-xs bg-primary-500 text-white px-2 py-1 rounded">
                작업자 선택
            </button>
        </div>
    </div>
        `;
    }
// 작업자 목록 표시 함수
    function showWorkerList(workers) {
        const workerList = workers.map(worker => `
            <div class="worker-item bg-gray-50 rounded-lg p-3 mb-2 cursor-pointer hover:bg-gray-100 transition-colors" data-worker-id="${worker.id}">
                <div class="flex justify-between items-center">
                    <span class="text-sm font-medium">${worker.name}</span>
                    <span class="text-xs ${worker.status === 'available' ? 'text-green-600' : 'text-yellow-600'}">
                    ${worker.status === 'available' ? '가능' : '바쁨'}
                </span>
            </div>
            <div class="text-xs text-gray-500">${worker.group}${worker.currentTasks}개 작업</div>
        </div>
    `).join('');

    // 모달이나 드롭다운에 작업자 목록 표시
    const workerModal = document.createElement('div');
    workerModal.className = 'fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden" id="workerModal">
        <div class="bg-white rounded-xl p-6 max-w-md w-full mx-4">
            <h3 class="text-lg font-semibold mb-4">작업자 선택</h3>
            <div class="worker-list max-h-64 overflow-y-auto">
                ${workerList}
            </div>
            <button class="w-full bg-gray-500 hover:bg-gray-600 text-white px-4 py-2 rounded-lg font-medium transition-all duration-300 mt-4" onclick="hideWorkerModal()">
                닫기
            </button>
        </div>
    </div>

    document.body.appendChild(workerModal);
}
// 드래그 앤 드롭 기능
function initializeDragAndDrop() {
    const documentCards = document.querySelectorAll('.document-card');
    const columns = document.querySelectorAll('#waitingColumn, #deployingColumn, #progressColumn, #completedColumn');

    // 드래그 시작
    documentCards.forEach(card => {
        card.addEventListener('dragstart', function(e) {
            e.dataTransfer.setData('text/plain', this.dataset.documentId);
            this.classList.add('dragging');
        });

        // 드래그 종료
        card.addEventListener('dragend', function() {
            this.classList.remove('dragging');
        });
    });

    // 드롭 영역 설정
    columns.forEach(column => {
        column.addEventListener('dragover', function(e) {
            e.preventDefault();
            this.classList.add('drag-over');
        });

        column.addEventListener('dragleave', function() {
            this.classList.remove('drag-over');
        });

        column.addEventListener('drop', function(e) {
            e.preventDefault();
            this.classList.remove('drag-over');
            
            const documentId = e.dataTransfer.getData('text/plain');
            const documentCard = document.querySelector(`[data-document-id="${documentId}"]`);
            
            if (documentCard) {
                this.appendChild(documentCard);
                updateDocumentStatus(documentId, column.id);
            }
        });
    });
}
// 문서 상태 업데이트
function updateDocumentStatus(documentId, columnId) {
    console.log(`문서 ${documentId}가 ${columnId}로 이동되었습니다.');
    
    // 여기에 실제 상태 업데이트 로직 추가
    // 예: API 호출로 서버에 상태 변경 알림
}

// 초기 문서 로드
function loadInitialDocuments() {
    const waitingColumn = document.getElementById('waitingColumn');
    
    sampleDocuments.forEach(document => {
        waitingColumn.innerHTML += createDocumentCard(document);
    });

    // 드래그 앤 드롭 초기화
    setTimeout(() => {
        initializeDragAndDrop();
    }, 100);
}

// 배포 버튼 이벤트
document.getElementById('deployBtn').addEventListener('click', function() {
    const workerType = document.getElementById('workerType').value;
    const priority = document.getElementById('priority').value;
    const deadline = document.getElementById('deadline').value;
    
    alert(`작업 배포가 시작되었습니다!\n유형: ${workerType}\n우선순위: ${priority}\n마감일: ${deadline || '미설정'}`);
    
    // 실제 배포 로직 구현
    // deployDocuments(workerType, priority, deadline);
}

// 초기 실행
loadInitialDocuments();