- 페이지 폴더 재구성: safety/, attendance/ 폴더 신규 생성
- work/ → safety/: 이슈 신고, 출입 신청 관련 페이지 이동
- common/ → attendance/: 근태/휴가 관련 페이지 이동
- admin/ 정리: safety-* 파일들을 safety/로 이동
- 사이드바 네비게이션 메뉴 구현
- 카테고리별 메뉴: 작업관리, 안전관리, 근태관리, 시스템관리
- 접기/펼치기 기능 및 상태 저장
- 관리자 전용 메뉴 자동 표시/숨김
- 날씨 API 연동 (기상청 단기예보)
- TBM 및 navbar에 현재 날씨 표시
- weatherService.js 추가
- 안전 체크리스트 확장
- 기본/날씨별/작업별 체크 유형 추가
- checklist-manage.html 페이지 추가
- 이슈 신고 시스템 구현
- workIssueController, workIssueModel, workIssueRoutes 추가
- DB 마이그레이션 파일 추가 (실행 대기)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 실시간 작업장 현황을 지도로 시각화
- 작업장 관리 페이지에서 정의한 구역 정보 활용
- TBM 작업자 및 방문자 현황 표시
주요 변경사항:
- dashboard.html: 작업장 현황 섹션 추가 (기존 작업 현황 테이블 제거)
- workplace-status.js: 지도 렌더링 및 데이터 통합 로직 구현
- modern-dashboard.js: 삭제된 DOM 요소 조건부 체크 추가
시각화 방식:
- 인원 없음: 회색 테두리 + 작업장 이름
- 내부 작업자: 파란색 영역 + 인원 수
- 외부 방문자: 보라색 영역 + 인원 수
- 둘 다: 초록색 영역 + 총 인원 수
기술 구현:
- Canvas API 기반 사각형 영역 렌더링
- map-regions API를 통한 데이터 일관성 보장
- 클릭 이벤트로 상세 정보 모달 표시
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- /api/tools/work-types → /api/daily-work-reports/work-types
- task-management.js와 tbm.js에서 올바른 엔드포인트 사용
- API 서버 재시작으로 /api/tasks 라우트 활성화
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Backend Changes
- Create tasks table with work_type_id FK to work_types
- Add taskModel, taskController, taskRoutes for task CRUD
- Update tbmModel to support work_type_id and task_id
- Add migrations for tasks table and TBM integration
## Frontend Changes
- Create task management admin page (tasks.html, task-management.js)
- Update TBM modal to include work type (공정) and task (작업) selection
- Add cascading dropdown: work type → task selection
- Display work type and task info in TBM session cards
- Update sidebar navigation in all admin pages
## Database Schema
- tasks: task_id, work_type_id, task_name, description, is_active
- tbm_sessions: add work_type_id, task_id columns with FKs
- Foreign keys maintain referential integrity with work_types and tasks
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## 주요 기능 추가
### 1. 작업 인계 시스템 (반차/조퇴 시)
- **인계 모달** (`handoverModal`)
- 인계 사유 선택 (반차/조퇴/긴급/기타)
- 인수자 (다른 팀장) 선택
- 인계 날짜/시간 입력
- 인계할 팀원 선택 (체크박스)
- 인계 내용 메모
- **API 연동**
- POST /api/tbm/handovers (인계 요청 생성)
- 세션 정보와 팀 구성 자동 조회
- from_leader_id 자동 설정
- **UI 개선**
- TBM 카드에 "📤 인계" 버튼 추가
- 인계할 팀원 목록 자동 로드
- 현재 팀장 제외한 리더만 표시
### 2. TBM 상세보기 모달
- **상세 정보 표시** (`detailModal`)
- 기본 정보 (팀장, 날짜, 프로젝트, 작업 장소, 작업 내용)
- 안전 특이사항 (노란색 강조)
- 팀 구성 (그리드 레이아웃)
- 안전 체크리스트 (카테고리별 그룹화)
- **안전 체크 시각화**
- ✅/❌ 아이콘으로 체크 상태 표시
- 체크됨: 초록색 배경
- 미체크: 빨간색 배경
- 카테고리별 구분 (PPE/EQUIPMENT/ENVIRONMENT/EMERGENCY)
- **병렬 API 호출**
- Promise.all로 세션/팀/안전체크 동시 조회
- 로딩 성능 최적화
### 3. 작업 보고서와 TBM 연동
- **TBM 팀 구성 자동 불러오기**
- `loadTbmTeamForDate()` 함수 추가
- 선택한 날짜의 TBM 세션 자동 조회
- 진행중(draft) 세션 우선 선택
- 팀 구성 정보 자동 로드
- **작업자 자동 선택**
- TBM에서 구성한 팀원 자동 선택
- 선택된 작업자 시각적 표시 (.selected 클래스)
- 다음 단계 버튼 자동 활성화
- **안내 메시지**
- "🛠️ TBM 팀 구성 자동 적용" 알림
- 자동 선택된 팀원 수 표시
- 파란색 강조 스타일
### 4. UI/UX 개선
- TBM 카드 버튼 레이아웃 개선 (flex-wrap)
- 인계 버튼 오렌지색 (#f59e0b)
- 모달 스크롤 가능 (max-height: 70vh)
- 반응형 그리드 (auto-fill, minmax)
## 기술 구현
### 함수 추가
- `viewTbmSession()`: 상세보기 (병렬 API 호출)
- `openHandoverModal()`: 인계 모달 (팀 구성 자동 로드)
- `saveHandover()`: 인계 저장 (worker_ids JSON array)
- `loadTbmTeamForDate()`: TBM 팀 구성 조회
- `closeDetailModal()`, `closeHandoverModal()`: 모달 닫기
### 수정 함수
- `populateWorkerGrid()`: TBM 연동 추가 (async/await)
- `displayTbmSessions()`: 인계 버튼 추가
## 파일 변경사항
- web-ui/pages/work/tbm.html (모달 2개 추가, 약 110줄)
- web-ui/js/tbm.js (함수 추가, 약 250줄 증가)
- web-ui/js/daily-work-report.js (TBM 연동, 약 60줄 추가)
## 사용 시나리오
### 시나리오 1: TBM → 작업보고서
1. 아침 TBM에서 팀 구성 (예: 5명 선택)
2. 작업 보고서 작성 시 날짜 선택
3. **자동으로 5명 선택됨** ✨
4. 바로 작업 내역 입력 가능
### 시나리오 2: 조퇴 시 인계
1. TBM 카드에서 "📤 인계" 클릭
2. 사유 선택 (조퇴), 인수자 선택
3. 인계할 팀원 선택 (기본 전체 선택)
4. 인계 요청 → DB 저장
### 시나리오 3: TBM 상세 확인
1. TBM 카드 클릭
2. 기본 정보, 팀 구성, 안전 체크 한눈에 확인
3. 안전 체크 완료 여부 시각적 확인
## 데이터 흐름
```
TBM 시작
↓
팀 구성 저장 (tbm_team_assignments)
↓
작업 보고서 작성 시
↓
GET /api/tbm/sessions/date/:date
↓
GET /api/tbm/sessions/:id/team
↓
팀원 자동 선택
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## 주요 기능
### 1. TBM 세션 관리
- 날짜별 TBM 세션 목록 조회
- 새 TBM 세션 생성
- TBM 세션 완료 처리
- 세션 상태별 표시 (진행중/완료/취소)
### 2. 팀 구성 관리
- 작업자 선택 그리드 UI
- 전체 선택/해제 기능
- 선택된 작업자 실시간 표시
- 팀원 일괄 추가
### 3. 안전 체크리스트
- 카테고리별 체크리스트 표시
- PPE (개인 보호 장비)
- EQUIPMENT (장비 점검)
- ENVIRONMENT (작업 환경)
- EMERGENCY (비상 대응)
- 필수/선택 항목 구분
- 체크 상태 저장
### 4. UI/UX
- 모달 기반 인터페이스
- 토스트 알림
- 실시간 통계 표시 (총 세션, 완료 세션)
- 반응형 그리드 레이아웃
## 구현 상세
### 전역 상태 관리
- allSessions: TBM 세션 목록
- allWorkers: 작업자 목록
- allProjects: 프로젝트 목록
- allSafetyChecks: 안전 체크리스트
- selectedWorkers: 선택된 작업자 (Set)
### API 연동
- GET /api/tbm/sessions/date/:date
- POST /api/tbm/sessions
- POST /api/tbm/sessions/:id/team/batch
- GET /api/tbm/sessions/:id/safety
- POST /api/tbm/sessions/:id/safety
- POST /api/tbm/sessions/:id/complete
### 주요 함수
- loadTbmSessionsByDate(): 날짜별 세션 조회
- saveTbmSession(): TBM 세션 생성
- saveTeamComposition(): 팀 구성 저장
- saveSafetyChecklist(): 안전 체크 저장
- completeTbmSession(): TBM 완료 처리
## 파일
- web-ui/js/tbm.js (신규, 약 600줄)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>