Files
TK-FB-Project/web-ui/pages/common/daily-work-report.html
Hyungi Ahn de427c457b feat: 작업 분석 시스템 및 관리 기능 대폭 개선
 새로운 기능:
- 작업 분석 페이지 구현 (기간별, 프로젝트별, 작업자별, 오류별)
- 개별 분석 실행 버튼으로 API 부하 최적화
- 연차/휴무 집계 방식 개선 (주말 제외, 작업내용 통합)
- 프로젝트 관리 시스템 (활성화/비활성화)
- 작업자 관리 시스템 (CRUD 기능)
- 코드 관리 시스템 (작업유형, 작업상태, 오류유형)

🎨 UI/UX 개선:
- 기간별 작업 현황을 테이블 형태로 변경
- 작업자별 rowspan 그룹화로 가독성 향상
- 연차/휴무 프로젝트 하단 배치 및 시각적 구분
- 기간 확정 시스템으로 사용자 경험 개선
- 반응형 디자인 적용

🔧 기술적 개선:
- Rate Limiting 제거 (내부 시스템 최적화)
- 주말 연차/휴무 자동 제외 로직
- 작업공수 계산 정확도 향상
- 데이터베이스 마이그레이션 추가
- API 엔드포인트 확장 및 최적화

🐛 버그 수정:
- projectSelect 요소 참조 오류 해결
- 차트 높이 무한 증가 문제 해결
- 날짜 표시 형식 단순화
- 작업보고서 저장 validation 오류 수정
2025-11-04 16:56:47 +09:00

178 lines
6.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>일일 작업보고서 작성 | (주)테크니컬코리아</title>
<link rel="stylesheet" href="/css/design-system.css">
<link rel="stylesheet" href="/css/daily-work-report.css?v=2">
<link rel="icon" type="image/png" href="/img/favicon.png">
<script src="/js/auth-check.js" defer></script>
</head>
<body>
<div class="work-report-container">
<!-- 네비게이션 바 -->
<div id="navbar-container"></div>
<!-- 헤더 -->
<header class="work-report-header">
<h1>✍️ 일일 작업보고서 작성</h1>
<p class="subtitle">단계별로 오늘의 작업 내용을 간편하게 기록하고 관리하세요.</p>
</header>
<!-- 메인 콘텐츠 -->
<main class="work-report-main">
<!-- 뒤로가기 버튼 -->
<a href="javascript:history.back()" class="back-button">
← 뒤로가기
</a>
<!-- 진행 단계 표시 -->
<div class="progress-steps">
<div class="progress-step active" id="progressStep1">
<div class="step-circle">1</div>
<div class="step-label">날짜 선택</div>
</div>
<div class="progress-step" id="progressStep2">
<div class="step-circle">2</div>
<div class="step-label">작업자 선택</div>
</div>
<div class="progress-step" id="progressStep3">
<div class="step-circle">3</div>
<div class="step-label">작업 입력</div>
</div>
</div>
<!-- 메시지 영역 -->
<div id="message-container"></div>
<!-- 1단계: 날짜 선택 -->
<div id="step1" class="step-section active">
<div class="step-header">
<div class="step-number">1</div>
<div class="step-title">작업 날짜 선택</div>
</div>
<div class="form-group">
<label for="reportDate" class="form-label">작업 날짜를 선택하세요</label>
<input type="date" id="reportDate" class="form-input" required>
</div>
<button type="button" class="btn btn-primary" id="nextStep1">다음 단계 →</button>
</div>
<!-- 2단계: 작업자 선택 -->
<div id="step2" class="step-section">
<div class="step-header">
<div class="step-number">2</div>
<div class="step-title">작업자 선택</div>
</div>
<div id="workerGrid" class="worker-grid">
<!-- 작업자 카드들이 여기에 동적으로 추가됩니다 -->
</div>
<button type="button" class="btn btn-primary" id="nextStep2" disabled>다음 단계 →</button>
</div>
<!-- 3단계: 작업 내역 입력 -->
<div id="step3" class="step-section">
<div class="step-header">
<div class="step-number">3</div>
<div class="step-title">작업 내역 입력</div>
</div>
<!-- 총 작업시간 표시 -->
<div class="total-hours-display" id="totalHoursDisplay">
총 작업시간: 0시간
</div>
<!-- 작업 항목들 -->
<div id="workEntriesList">
<!-- 작업 항목들이 여기에 동적으로 추가됩니다 -->
</div>
<!-- 작업 추가 버튼 -->
<button type="button" class="btn btn-secondary btn-block" id="addWorkBtn">
작업 추가
</button>
<!-- 저장 버튼 -->
<button type="button" class="btn btn-success btn-block" id="submitBtn">
💾 작업보고서 저장
</button>
</div>
<!-- 📊 내가 입력한 당일 작업 현황 (수정/삭제 가능) -->
<div class="step-section" id="dailyWorkersSection" style="display: none;">
<div class="step-header">
<div class="step-number">📊</div>
<div class="step-title">내가 입력한 작업 현황</div>
</div>
<p style="color: var(--text-secondary); margin-bottom: var(--space-5);">
✏️ 내가 입력한 작업만 표시되며, 각 작업을 <strong>수정</strong>하거나 <strong>삭제</strong>할 수 있습니다.
</p>
<div id="dailyWorkersContent">
<!-- 작업자 현황이 여기에 표시됩니다 -->
</div>
</div>
<!-- 사용법 안내 -->
<div class="step-section">
<div class="step-header">
<div class="step-number">📖</div>
<div class="step-title">사용 가이드</div>
</div>
<div class="guide-grid">
<div class="guide-item">
<div class="guide-icon">📅</div>
<strong>1단계</strong><br>
작업 날짜 선택
</div>
<div class="guide-item">
<div class="guide-icon">👤</div>
<strong>2단계</strong><br>
작업자 선택 (터치)
</div>
<div class="guide-item">
<div class="guide-icon">🔧</div>
<strong>3단계</strong><br>
작업 내역 입력
</div>
<div class="guide-item">
<div class="guide-icon">💾</div>
<strong>완료</strong><br>
저장하여 마무리
</div>
<div class="guide-item">
<div class="guide-icon">✏️</div>
<strong>관리</strong><br>
입력한 작업 수정/삭제
</div>
</div>
</div>
</main>
</div>
<!-- 저장 결과 모달 -->
<div id="saveResultModal" class="modal-overlay" style="display: none;">
<div class="modal-container result-modal">
<div class="modal-header">
<h2 id="resultModalTitle">저장 결과</h2>
<button class="modal-close-btn" onclick="closeSaveResultModal()">×</button>
</div>
<div class="modal-body">
<div id="resultModalContent" class="result-content">
<!-- 결과 내용이 여기에 동적으로 추가됩니다 -->
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="closeSaveResultModal()">
확인
</button>
</div>
</div>
</div>
<!-- 스크립트 -->
<script src="/js/api-config.js?v=2"></script>
<script src="/js/load-navbar.js?v=2"></script>
<script src="/js/daily-work-report.js?v=10"></script>
</body>
</html>