feat: 페이지 구조 재구성 및 사이드바 네비게이션 구현

- 페이지 폴더 재구성: 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>
This commit is contained in:
Hyungi Ahn
2026-02-02 14:27:22 +09:00
parent b6485e3140
commit 74d3a78aa3
116 changed files with 23117 additions and 294 deletions

View File

@@ -13,9 +13,16 @@
</div>
<div class="header-center">
<div class="current-time" id="currentTime">
<span class="time-label">현재 시각</span>
<span class="time-value" id="timeValue">--:--:--</span>
<div class="datetime-weather-box">
<div class="date-time-section">
<span class="date-value" id="dateValue">--월 --일 (--)</span>
<span class="time-value" id="timeValue">--:--:--</span>
</div>
<div class="weather-section" id="weatherSection">
<span class="weather-icon" id="weatherIcon">🌤️</span>
<span class="weather-temp" id="weatherTemp">--°C</span>
<span class="weather-desc" id="weatherDesc">날씨 로딩중</span>
</div>
</div>
</div>
@@ -109,29 +116,58 @@
font-weight: var(--font-normal);
}
.header-center .current-time {
/* 날짜/시간/날씨 박스 */
.datetime-weather-box {
display: flex;
align-items: center;
gap: var(--space-4);
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: var(--radius-full);
padding: var(--space-3) var(--space-4);
text-align: center;
border-radius: var(--radius-xl);
padding: var(--space-2) var(--space-5);
}
.time-label {
display: block;
font-size: var(--text-xs);
opacity: 0.8;
margin-bottom: var(--space-1);
.date-time-section {
display: flex;
flex-direction: column;
align-items: center;
padding-right: var(--space-4);
border-right: 1px solid rgba(255, 255, 255, 0.2);
}
.date-value {
font-size: var(--text-sm);
opacity: 0.9;
margin-bottom: 2px;
}
.time-value {
display: block;
font-size: var(--text-lg);
font-size: var(--text-xl);
font-weight: var(--font-bold);
font-family: 'Courier New', monospace;
}
.weather-section {
display: flex;
align-items: center;
gap: var(--space-2);
}
.weather-icon {
font-size: 1.75rem;
}
.weather-temp {
font-size: var(--text-lg);
font-weight: var(--font-bold);
}
.weather-desc {
font-size: var(--text-sm);
opacity: 0.9;
}
.header-right .user-profile {
position: relative;
display: flex;