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

@@ -749,6 +749,18 @@
box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);
}
/* 비밀번호 초기화 버튼 스타일 */
.action-btn.reset-pw {
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
color: white;
}
.action-btn.reset-pw:hover {
background: linear-gradient(135deg, #d97706 0%, #b45309 100%);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);
}
/* 페이지 권한 모달 사용자 정보 */
.page-access-user-info {
display: flex;

View File

@@ -1008,3 +1008,178 @@
.tbm-session-group:not(.manual-input-section) {
margin-bottom: 1.5rem;
}
/* 부적합 원인 관리 버튼 */
.btn-defect-manage {
background: #f3f4f6;
border: 1px solid #d1d5db;
border-radius: 6px;
padding: 0.5rem 0.75rem;
cursor: pointer;
font-size: 0.875rem;
min-width: 80px;
text-align: center;
transition: all 0.2s ease;
}
.btn-defect-manage:hover {
background: #e5e7eb;
border-color: #9ca3af;
}
.btn-defect-manage span {
color: #9ca3af;
}
.btn-defect-manage span[style*="color: #dc2626"] {
font-weight: 500;
}
/* 부적합 토글 버튼 (인라인 방식) */
.btn-defect-toggle {
background: #f9fafb;
border: 2px solid #e5e7eb;
border-radius: 6px;
padding: 0.5rem 0.75rem;
cursor: pointer;
font-size: 0.875rem;
min-width: 70px;
text-align: center;
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
min-height: 44px;
}
.btn-defect-toggle:hover {
background: #f3f4f6;
border-color: #d97706;
}
.btn-defect-toggle.has-defect {
background: #fef3c7;
border-color: #f59e0b;
}
.btn-defect-toggle span {
color: #6b7280;
font-weight: 500;
}
.btn-defect-toggle.has-defect span {
color: #dc2626;
font-weight: 600;
}
/* 부적합 인라인 영역 */
.defect-row td {
border-bottom: 1px solid #fcd34d !important;
}
.defect-inline-area {
padding: 0.75rem 1rem;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.defect-list {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.defect-inline-item {
display: flex;
align-items: center;
gap: 0.5rem;
background: white;
padding: 0.5rem;
border-radius: 6px;
border: 1px solid #e5e7eb;
}
.defect-select {
flex: 1;
min-width: 120px;
max-width: 200px;
padding: 0.5rem;
border: 1px solid #d1d5db;
border-radius: 6px;
font-size: 0.875rem;
background: white;
}
.defect-select:focus {
outline: none;
border-color: #f59e0b;
box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.1);
}
.defect-time-input {
display: flex;
align-items: center;
gap: 0.25rem;
padding: 0.5rem 0.75rem;
background: #f9fafb;
border: 2px solid #e5e7eb;
border-radius: 6px;
cursor: pointer;
min-width: 80px;
justify-content: center;
transition: all 0.2s ease;
}
.defect-time-input:hover {
background: #f3f4f6;
border-color: #f59e0b;
}
.defect-time-value {
font-weight: 600;
color: #374151;
font-size: 0.875rem;
}
.defect-time-unit {
font-size: 0.75rem;
color: #6b7280;
}
.btn-remove-defect {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
background: #fee2e2;
color: #dc2626;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 1.25rem;
font-weight: bold;
transition: all 0.2s ease;
}
.btn-remove-defect:hover {
background: #fecaca;
}
.btn-add-defect-inline {
align-self: flex-start;
padding: 0.5rem 1rem;
background: #f59e0b;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 0.875rem;
font-weight: 500;
transition: all 0.2s ease;
}
.btn-add-defect-inline:hover {
background: #d97706;
}