/* ===== tkuser 협력업체 CRUD ===== */ let partnersLoaded = false; let partnersList = []; let partnerWorkersList = []; let selectedPartnerIdTkuser = null; let editingWorkerIdTkuser = null; async function loadPartnersTab() { if (partnersLoaded) return; partnersLoaded = true; if (currentUser && ['admin', 'system'].includes(currentUser.role)) { document.getElementById('btnAddPartnerTkuser')?.classList.remove('hidden'); } await loadPartnersList(); } async function loadPartnersList() { try { const isActive = document.getElementById('partnerFilterActiveTkuser')?.value; const search = document.getElementById('partnerSearchTkuser')?.value?.trim() || ''; const params = new URLSearchParams(); if (isActive !== '' && isActive !== undefined) params.set('is_active', isActive); if (search) params.set('search', search); const r = await api('/partners?' + params.toString()); partnersList = r.data || []; renderPartnersListTkuser(); } catch (e) { document.getElementById('partnersListTkuser').innerHTML = `
${e.message}
등록된 협력업체가 없습니다.
'; return; } const isAdmin = currentUser && ['admin', 'system'].includes(currentUser.role); c.innerHTML = partnersList.map(p => { const types = tryParseJsonTkuser(p.business_type) || []; const typeStr = types.map(t => `${escHtml(t)}`).join(' '); const insuranceWarn = isInsuranceExpiringSoonTkuser(p.insurance_expiry); return `등록된 작업자가 없습니다
'}