feat: 캘린더 기반 작업 현황 확인 시스템 구현

- 월별 캘린더 UI로 작업 현황을 한눈에 확인 가능
- 미입력(빨강), 부분입력(주황), 확인필요(보라), 이상없음(초록) 상태 표시
- 범례 아이콘(●)을 사용한 직관적인 상태 표시
- 날짜 클릭 시 해당일 작업자별 상세 현황 모달
- 작업자 클릭 시 개별 작업 입력/수정 모달
- 휴가 처리 기능 (연차, 반차, 반반차, 조퇴)
- 월별 집계 데이터 최적화로 API 호출 최소화

백엔드:
- monthly_worker_status, monthly_summary 테이블 추가
- 자동 집계 stored procedure 및 trigger 구현
- 확인필요(12시간 초과) 상태 감지 로직
- 출석 관리 시스템 확장

프론트엔드:
- 캘린더 그리드 UI 구현
- 상태별 색상 및 아이콘 표시
- 모달 기반 상세 정보 표시
- 반응형 디자인 적용
This commit is contained in:
Hyungi Ahn
2025-11-04 10:12:07 +09:00
parent 33307bb243
commit 746e09420b
29 changed files with 8815 additions and 251 deletions

View File

@@ -117,6 +117,11 @@ app.get('/api/ping', (req, res) => {
});
});
// ✅ 개발용 DB 설정 엔드포인트 (임시 비활성화)
// app.post('/api/setup-attendance-db', async (req, res) => {
// // DB 설정 로직 임시 비활성화
// });
// ✅ 서버 상태 엔드포인트
app.get('/api/status', (req, res) => {
console.log('📊 Status 요청 받음!');
@@ -277,6 +282,9 @@ app.use('/api/auth/check-password-strength', loginLimiter);
// 나머지 인증 라우트
app.use('/api/auth', authRoutes);
// 🔧 DB 설정 라우트 (개발용 - 인증 없이 접근 가능)
app.use('/api/setup', require('./routes/setupRoutes'));
// 🔒 일반 API 속도 제한 적용
app.use('/api/', apiLimiter);
@@ -291,7 +299,14 @@ app.use('/api/*', (req, res, next) => {
'/api/auth/check-password-strength',
'/api/health',
'/api/ping', // 개발용 핑
'/api/status' // 서버 상태
'/api/status', // 서버 상태
'/api/setup/setup-attendance-db',
'/api/setup/setup-monthly-status', // DB 설정 (개발용)
'/api/setup/add-overtime-warning', // 12시간 초과 상태 추가 (개발용)
'/api/setup/migrate-existing-data', // 기존 데이터 마이그레이션 (개발용)
'/api/setup/check-data-status', // DB 상태 확인 (개발용)
'/api/monthly-status/calendar', // 월별 집계 테스트용
'/api/monthly-status/daily-details' // 일별 상세 테스트용
];
// 정확한 경로 매칭 확인
@@ -327,6 +342,8 @@ app.use('/api/daily-work-reports', dailyWorkReportRoutes);
app.use('/api/work-analysis', workAnalysisRoutes);
app.use('/api/analysis', analysisRoutes); // 새로운 분석 라우트 등록
app.use('/api/daily-work-reports-analysis', require('./routes/workReportAnalysisRoutes')); // 데일리 워크 레포트 분석 라우트
app.use('/api/attendance', require('./routes/attendanceRoutes')); // 근태 관리 라우트
app.use('/api/monthly-status', require('./routes/monthlyStatusRoutes')); // 월별 상태 집계 라우트
// 📊 리포트 및 분석
app.use('/api/workreports', workReportRoutes);