/* ===== tkuser 설비(Equipment) CRUD ===== */ let equipmentsLoaded = false; let equipmentsList = []; let selectedEquipmentIdTkuser = null; const EQUIPMENT_STATUS_MAP = { active: { label: '활성', cls: 'bg-green-100 text-green-700' }, maintenance: { label: '정비중', cls: 'bg-yellow-100 text-yellow-700' }, inactive: { label: '비활성', cls: 'bg-gray-100 text-gray-400' } }; async function loadEquipmentsTab() { if (equipmentsLoaded) return; equipmentsLoaded = true; if (currentUser && ['admin', 'system'].includes(currentUser.role)) { document.getElementById('btnAddEquipment')?.classList.remove('hidden'); } await Promise.all([loadEquipmentFilters(), loadEquipmentsList()]); } async function loadEquipmentFilters() { try { // 작업장 필터 const wRes = await api('/workplaces'); const workplaces = wRes.data || []; const wSel = document.getElementById('equipmentFilterWorkplace'); if (wSel) { const current = wSel.value; wSel.innerHTML = '' + workplaces.map(w => ``).join(''); wSel.value = current; } // 유형 필터 const tRes = await api('/equipments/types'); const types = tRes.data || []; const tSel = document.getElementById('equipmentFilterType'); if (tSel) { const current = tSel.value; tSel.innerHTML = '' + types.map(t => ``).join(''); tSel.value = current; } // 모달 select 채우기 (작업장) ['newEquipmentWorkplaceTkuser', 'editEquipmentWorkplaceTkuser'].forEach(id => { const el = document.getElementById(id); if (el) el.innerHTML = '' + workplaces.map(w => ``).join(''); }); } catch (e) { /* 필터 로드 실패는 무시 */ } } async function loadEquipmentsList() { try { const workplaceId = document.getElementById('equipmentFilterWorkplace')?.value || ''; const eqType = document.getElementById('equipmentFilterType')?.value || ''; const status = document.getElementById('equipmentFilterStatus')?.value || ''; const search = document.getElementById('equipmentSearchTkuser')?.value?.trim() || ''; const params = new URLSearchParams(); if (workplaceId) params.set('workplace_id', workplaceId); if (eqType) params.set('equipment_type', eqType); if (status) params.set('status', status); if (search) params.set('search', search); const r = await api('/equipments?' + params.toString()); equipmentsList = r.data || []; renderEquipmentsListTkuser(); } catch (e) { document.getElementById('equipmentsListTkuser').innerHTML = `
${e.message}
등록된 설비가 없습니다.
'; return; } const isAdmin = currentUser && ['admin', 'system'].includes(currentUser.role); c.innerHTML = equipmentsList.map(eq => { const st = EQUIPMENT_STATUS_MAP[eq.status] || EQUIPMENT_STATUS_MAP.active; return `