fix(monthly-comparison): 0일 0h 수정 + 관리자 검토 태깅

- getAllStatus: daily_attendance_records JOIN으로 실제 근무일/시간 집계
- vacation_days: vacation_types.deduct_days SUM (반차 0.5 정확 반영)
- admin_checked 컬럼 + POST /admin-check API (upsert 패턴)
- 상태 뱃지 라벨: 미검토/확인요청/수정요청/반려/확인완료

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-01 08:20:27 +09:00
parent 65e5530a6a
commit 10fd65ba9e
6 changed files with 53 additions and 10 deletions

View File

@@ -361,9 +361,9 @@ function renderWorkerList(workers) {
}
el.innerHTML = filtered.map(w => {
const statusBadge = `<span class="mc-worker-status-badge ${w.status}">${
{ confirmed: '확인완료', pending: '미확인', rejected: '반려' }[w.status] || ''
}</span>`;
const statusLabels = { confirmed: '확인완료', pending: '미검토', review_sent: '확인요청', change_request: '수정요청', rejected: '반려' };
const statusBadge = `<span class="mc-worker-status-badge ${w.status}">${statusLabels[w.status] || ''}</span>`;
const checkedBadge = w.admin_checked ? ' <span style="color:#10b981;font-size:0.7rem;">✓검토</span>' : '';
const mismatchBadge = w.mismatch_count > 0
? `<span class="mc-worker-mismatch">⚠️ 불일치${w.mismatch_count}</span>` : '';
const rejectReason = w.status === 'rejected' && w.reject_reason
@@ -374,7 +374,7 @@ function renderWorkerList(workers) {
<div class="mc-worker-card" onclick="viewWorkerDetail(${w.user_id})">
<div style="display:flex;justify-content:space-between;align-items:center">
<div>
<div class="mc-worker-name">${escHtml(w.worker_name)} ${mismatchBadge}</div>
<div class="mc-worker-name">${escHtml(w.worker_name)}${checkedBadge} ${mismatchBadge}</div>
<div class="mc-worker-dept">${escHtml(w.department_name)} · ${escHtml(w.job_type)}</div>
</div>
<i class="fas fa-chevron-right text-gray-300"></i>