fix(monthly-comparison): 미검토→검토완료 뱃지 + 확인버튼 제거

- admin_checked=1: "미검토" → "검토완료" 뱃지(파란색)로 변경
- "✓검토" 별도 뱃지 제거
- "확인 완료/문제 있음" 하단 버튼 항상 숨김 (관리자 페이지에서 불필요)
- 새 상태 뱃지 CSS: admin_checked, review_sent, change_request

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-01 08:48:50 +09:00
parent 80eb018caa
commit c9249da944
3 changed files with 25 additions and 33 deletions

View File

@@ -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;

View File

@@ -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 = `<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>' : '';
// 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 = `<span class="mc-worker-status-badge ${displayStatus}">${statusLabels[displayStatus] || ''}</span>`;
const mismatchBadge = w.mismatch_count > 0
? `<span class="mc-worker-mismatch">⚠️ 불일치${w.mismatch_count}</span>` : '';
const rejectReason = w.status === 'rejected' && w.reject_reason
@@ -394,7 +383,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)}${checkedBadge} ${mismatchBadge}</div>
<div class="mc-worker-name">${escHtml(w.worker_name)} ${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>

View File

@@ -164,7 +164,7 @@
<script src="/static/js/tkfb-core.js?v=2026033108"></script>
<script src="/js/api-base.js?v=2026031701"></script>
<script src="/js/monthly-comparison.js?v=2026040104"></script>
<script src="/js/monthly-comparison.js?v=2026040105"></script>
<script>initAuth();</script>
</body>
</html>