/** * issue-helpers.js — 부적합 관리 공통 유틸리티 함수 * dashboard, management, inbox, archive 등에서 공유 */ function getDepartmentText(department) { const departments = { 'production': '생산', 'quality': '품질', 'purchasing': '구매', 'design': '설계', 'sales': '영업' }; return department ? departments[department] || department : '-'; } function getCategoryText(category) { const categoryMap = { 'material_missing': '자재 누락', 'design_error': '설계 오류', 'incoming_defect': '반입 불량', 'inspection_miss': '검사 누락', 'quality': '품질', 'safety': '안전', 'environment': '환경', 'process': '공정', 'equipment': '장비', 'material': '자재', 'etc': '기타' }; return categoryMap[category] || category || '-'; } function getStatusBadgeClass(status) { const statusMap = { 'new': 'new', 'processing': 'processing', 'pending': 'pending', 'completed': 'completed', 'archived': 'archived', 'cancelled': 'cancelled' }; return statusMap[status] || 'new'; } function getStatusText(status) { const statusMap = { 'new': '새 부적합', 'processing': '처리 중', 'pending': '대기 중', 'completed': '완료', 'archived': '보관', 'cancelled': '취소' }; return statusMap[status] || status; } function getIssueTitle(issue) { const description = issue.description || issue.final_description || ''; const lines = description.split('\n'); return lines[0] || '부적합명 없음'; } function getIssueDetail(issue) { const description = issue.description || issue.final_description || ''; const lines = description.split('\n'); return lines.slice(1).join('\n') || '상세 내용 없음'; } function getDisposalReasonText(reason) { const reasonMap = { 'duplicate': '중복', 'invalid_report': '잘못된 신고', 'not_applicable': '해당 없음', 'spam': '스팸/오류', 'custom': '직접 입력' }; return reasonMap[reason] || reason; } function getReporterNames(issue) { let names = [issue.reporter?.full_name || issue.reporter?.username || '알 수 없음']; if (issue.duplicate_reporters && issue.duplicate_reporters.length > 0) { const duplicateNames = issue.duplicate_reporters.map(r => r.full_name || r.username); names = names.concat(duplicateNames); } return names.join(', '); }