diff --git a/web-ui/js/daily-work-report.js b/web-ui/js/daily-work-report.js
index 5037e64..14e9977 100644
--- a/web-ui/js/daily-work-report.js
+++ b/web-ui/js/daily-work-report.js
@@ -294,11 +294,68 @@ async function loadErrorTypes() {
}
}
+// TBM 팀 구성 자동 불러오기
+async function loadTbmTeamForDate(date) {
+ try {
+ console.log('🛠️ TBM 팀 구성 조회 중:', date);
+ const response = await window.apiCall(`/tbm/sessions/date/${date}`);
+
+ if (response && response.success && response.data && response.data.length > 0) {
+ // 가장 최근 세션 선택 (진행중인 세션 우선)
+ const draftSessions = response.data.filter(s => s.status === 'draft');
+ const targetSession = draftSessions.length > 0 ? draftSessions[0] : response.data[0];
+
+ if (targetSession) {
+ // 팀 구성 조회
+ const teamRes = await window.apiCall(`/tbm/sessions/${targetSession.session_id}/team`);
+ if (teamRes && teamRes.success && teamRes.data) {
+ const teamWorkerIds = teamRes.data.map(m => m.worker_id);
+ console.log(`✅ TBM 팀 구성 로드 성공: ${teamWorkerIds.length}명`);
+ return teamWorkerIds;
+ }
+ }
+ }
+
+ console.log('ℹ️ 해당 날짜의 TBM 팀 구성이 없습니다.');
+ return [];
+ } catch (error) {
+ console.error('❌ TBM 팀 구성 조회 오류:', error);
+ return [];
+ }
+}
+
// 작업자 그리드 생성
-function populateWorkerGrid() {
+async function populateWorkerGrid() {
const grid = document.getElementById('workerGrid');
grid.innerHTML = '';
+ // 선택된 날짜의 TBM 팀 구성 불러오기
+ const reportDate = document.getElementById('reportDate').value;
+ let tbmWorkerIds = [];
+
+ if (reportDate) {
+ tbmWorkerIds = await loadTbmTeamForDate(reportDate);
+ }
+
+ // TBM 팀 구성이 있으면 안내 메시지 표시
+ if (tbmWorkerIds.length > 0) {
+ const infoDiv = document.createElement('div');
+ infoDiv.style.cssText = `
+ padding: 1rem;
+ background: #eff6ff;
+ border: 1px solid #3b82f6;
+ border-radius: 0.5rem;
+ margin-bottom: 1rem;
+ color: #1e40af;
+ font-size: 0.875rem;
+ `;
+ infoDiv.innerHTML = `
+ 🛠️ TBM 팀 구성 자동 적용
+ 오늘 TBM에서 구성된 팀원 ${tbmWorkerIds.length}명이 자동으로 선택되었습니다.
+ `;
+ grid.appendChild(infoDiv);
+ }
+
workers.forEach(worker => {
const btn = document.createElement('button');
btn.type = 'button';
@@ -306,12 +363,24 @@ function populateWorkerGrid() {
btn.textContent = worker.worker_name;
btn.dataset.id = worker.worker_id;
+ // TBM 팀 구성에 포함된 작업자는 자동 선택
+ if (tbmWorkerIds.includes(worker.worker_id)) {
+ btn.classList.add('selected');
+ selectedWorkers.add(worker.worker_id);
+ }
+
btn.addEventListener('click', () => {
toggleWorkerSelection(worker.worker_id, btn);
});
grid.appendChild(btn);
});
+
+ // 자동 선택된 작업자가 있으면 다음 단계 버튼 활성화
+ const nextBtn = document.getElementById('nextStep2');
+ if (nextBtn) {
+ nextBtn.disabled = selectedWorkers.size === 0;
+ }
}
// 작업자 선택 토글
diff --git a/web-ui/js/tbm.js b/web-ui/js/tbm.js
index 9c018ad..5f5ad92 100644
--- a/web-ui/js/tbm.js
+++ b/web-ui/js/tbm.js
@@ -176,14 +176,17 @@ function displayTbmSessions() {
` : ''}
-