/** * 부적합 현황 페이지 JavaScript * category_type=nonconformity 고정 필터 */ const API_BASE = window.API_BASE_URL || 'http://localhost:20005/api'; const CATEGORY_TYPE = 'nonconformity'; // 상태 한글 변환 const STATUS_LABELS = { reported: '신고', received: '접수', in_progress: '처리중', completed: '완료', closed: '종료' }; // DOM 요소 let issueList; let filterStatus, filterStartDate, filterEndDate; // 초기화 document.addEventListener('DOMContentLoaded', async () => { issueList = document.getElementById('issueList'); filterStatus = document.getElementById('filterStatus'); filterStartDate = document.getElementById('filterStartDate'); filterEndDate = document.getElementById('filterEndDate'); // 필터 이벤트 리스너 filterStatus.addEventListener('change', loadIssues); filterStartDate.addEventListener('change', loadIssues); filterEndDate.addEventListener('change', loadIssues); // 데이터 로드 await Promise.all([loadStats(), loadIssues()]); }); /** * 통계 로드 (부적합만) */ async function loadStats() { try { const response = await fetch(`${API_BASE}/work-issues/stats/summary?category_type=${CATEGORY_TYPE}`, { headers: { 'Authorization': `Bearer ${localStorage.getItem('token')}` } }); if (!response.ok) { document.getElementById('statsGrid').style.display = 'none'; return; } const data = await response.json(); if (data.success && data.data) { document.getElementById('statReported').textContent = data.data.reported || 0; document.getElementById('statReceived').textContent = data.data.received || 0; document.getElementById('statProgress').textContent = data.data.in_progress || 0; document.getElementById('statCompleted').textContent = data.data.completed || 0; } } catch (error) { console.error('통계 로드 실패:', error); document.getElementById('statsGrid').style.display = 'none'; } } /** * 부적합 목록 로드 */ async function loadIssues() { try { // 필터 파라미터 구성 (category_type 고정) const params = new URLSearchParams(); params.append('category_type', CATEGORY_TYPE); if (filterStatus.value) params.append('status', filterStatus.value); if (filterStartDate.value) params.append('start_date', filterStartDate.value); if (filterEndDate.value) params.append('end_date', filterEndDate.value); const response = await fetch(`${API_BASE}/work-issues?${params.toString()}`, { headers: { 'Authorization': `Bearer ${localStorage.getItem('token')}` } }); if (!response.ok) throw new Error('목록 조회 실패'); const data = await response.json(); if (data.success) { renderIssues(data.data || []); } } catch (error) { console.error('부적합 목록 로드 실패:', error); issueList.innerHTML = `
잠시 후 다시 시도해주세요.
새로운 부적합을 신고하려면 '부적합 신고' 버튼을 클릭하세요.