diff --git a/system1-factory/web/css/monthly-comparison.css b/system1-factory/web/css/monthly-comparison.css index 17d648c..b16735d 100644 --- a/system1-factory/web/css/monthly-comparison.css +++ b/system1-factory/web/css/monthly-comparison.css @@ -210,7 +210,10 @@ padding: 2px 8px; border-radius: 10px; } .mc-worker-status-badge.confirmed { background: #dcfce7; color: #166534; } +.mc-worker-status-badge.admin_checked { background: #dbeafe; color: #1e40af; } .mc-worker-status-badge.pending { background: #fef3c7; color: #92400e; } +.mc-worker-status-badge.review_sent { background: #e0e7ff; color: #3730a3; } +.mc-worker-status-badge.change_request { background: #fff7ed; color: #c2410c; } .mc-worker-status-badge.rejected { background: #fef2f2; color: #991b1b; } .mc-worker-reject-reason { font-size: 0.7rem; color: #991b1b; diff --git a/system1-factory/web/js/monthly-comparison.js b/system1-factory/web/js/monthly-comparison.js index 5e8a834..f09bc69 100644 --- a/system1-factory/web/js/monthly-comparison.js +++ b/system1-factory/web/js/monthly-comparison.js @@ -293,43 +293,31 @@ function renderConfirmationStatus(conf) { const statusEl = document.getElementById('confirmedStatus'); const badge = document.getElementById('statusBadge'); + // 관리자 페이지: 확인/문제 버튼 항상 숨김 (작업자는 my-monthly-confirm에서 처리) + actions.classList.add('hidden'); + if (!conf) { - // detail 모드(관리자가 타인의 기록 조회)에서는 버튼 숨김 - if (currentMode === 'detail') { - actions.classList.add('hidden'); - } else { - actions.classList.remove('hidden'); - } statusEl.classList.add('hidden'); + badge.textContent = ''; return; } - badge.textContent = { pending: '미확인', confirmed: '확인완료', rejected: '반려' }[conf.status] || ''; - badge.className = `mc-status-badge ${conf.status}`; + var displayStatus = (conf.status === 'pending' && conf.admin_checked) ? 'admin_checked' : conf.status; + var labels = { pending: '미검토', admin_checked: '검토완료', review_sent: '확인요청', confirmed: '확인완료', change_request: '수정요청', rejected: '반려' }; + badge.textContent = labels[displayStatus] || ''; + badge.className = 'mc-status-badge ' + displayStatus; - if (currentMode === 'detail') { - // 관리자 상세 뷰: 확인/반려 버튼 숨기고 상태만 표시 - actions.classList.add('hidden'); - if (conf.status !== 'pending') { - statusEl.classList.remove('hidden'); - const statusLabel = { confirmed: '확인 완료', rejected: '반려' }[conf.status] || ''; - const dt = conf.confirmed_at ? new Date(conf.confirmed_at).toLocaleString('ko') : ''; - const reason = conf.reject_reason ? ` (사유: ${conf.reject_reason})` : ''; - document.getElementById('confirmedText').textContent = `${dt} ${statusLabel}${reason}`; - } else { - statusEl.classList.add('hidden'); - } - } else if (conf.status === 'confirmed') { - actions.classList.add('hidden'); + if (conf.status === 'confirmed') { statusEl.classList.remove('hidden'); - const dt = conf.confirmed_at ? new Date(conf.confirmed_at).toLocaleString('ko') : ''; - document.getElementById('confirmedText').textContent = `${dt} 확인 완료`; + var dt = conf.confirmed_at ? new Date(conf.confirmed_at).toLocaleString('ko') : ''; + document.getElementById('confirmedText').textContent = dt + ' 확인 완료'; } else if (conf.status === 'rejected') { - // 재확인 가능 - actions.classList.remove('hidden'); - statusEl.classList.add('hidden'); + statusEl.classList.remove('hidden'); + document.getElementById('confirmedText').textContent = '반려: ' + (conf.reject_reason || '-'); + } else if (conf.status === 'change_request') { + statusEl.classList.remove('hidden'); + document.getElementById('confirmedText').textContent = '수정요청 접수됨'; } else { - actions.classList.remove('hidden'); statusEl.classList.add('hidden'); } } @@ -381,9 +369,10 @@ function renderWorkerList(workers) { } el.innerHTML = filtered.map(w => { - const statusLabels = { confirmed: '확인완료', pending: '미검토', review_sent: '확인요청', change_request: '수정요청', rejected: '반려' }; - const statusBadge = `${statusLabels[w.status] || ''}`; - const checkedBadge = w.admin_checked ? ' ✓검토' : ''; + // admin_checked면 "미검토" → "검토완료"로 표시 + var displayStatus = (w.status === 'pending' && w.admin_checked) ? 'admin_checked' : w.status; + const statusLabels = { confirmed: '확인완료', pending: '미검토', admin_checked: '검토완료', review_sent: '확인요청', change_request: '수정요청', rejected: '반려' }; + const statusBadge = `${statusLabels[displayStatus] || ''}`; const mismatchBadge = w.mismatch_count > 0 ? `⚠️ 불일치${w.mismatch_count}` : ''; const rejectReason = w.status === 'rejected' && w.reject_reason @@ -394,7 +383,7 @@ function renderWorkerList(workers) {