/* meetings.js — 생산회의록 목록 */ let canEdit = false; document.addEventListener('DOMContentLoaded', async () => { const ok = await initAuth(); if (!ok) return; document.querySelector('.fade-in').classList.add('visible'); const role = currentUser?.role || ''; canEdit = ['support_team', 'admin', 'system', 'system admin'].includes(role); if (canEdit) document.getElementById('btnNewMeeting').classList.remove('hidden'); // Year filter const yearSel = document.getElementById('yearFilter'); const now = new Date(); for (let y = now.getFullYear() - 2; y <= now.getFullYear() + 1; y++) { const opt = document.createElement('option'); opt.value = y; opt.textContent = y + '년'; if (y === now.getFullYear()) opt.selected = true; yearSel.appendChild(opt); } document.getElementById('monthFilter').value = String(now.getMonth() + 1); yearSel.addEventListener('change', loadMeetings); document.getElementById('monthFilter').addEventListener('change', loadMeetings); document.getElementById('searchInput').addEventListener('input', debounce(loadMeetings, 300)); document.getElementById('btnNewMeeting').addEventListener('click', () => { location.href = '/pages/work/meeting-detail.html'; }); await Promise.all([loadMeetings(), loadActionItems()]); }); async function loadMeetings() { try { const year = document.getElementById('yearFilter').value; const month = document.getElementById('monthFilter').value; const search = document.getElementById('searchInput').value.trim(); let url = `/meetings?year=${year}`; if (month) url += `&month=${month}`; if (search) url += `&search=${encodeURIComponent(search)}`; const res = await api(url); renderMeetings(res.data || []); } catch (err) { showToast('회의록 목록 로드 실패: ' + err.message, 'error'); } } function renderMeetings(meetings) { const list = document.getElementById('meetingList'); const empty = document.getElementById('emptyState'); if (meetings.length === 0) { list.innerHTML = ''; empty.classList.remove('hidden'); return; } empty.classList.add('hidden'); list.innerHTML = meetings.map(m => { const statusBadge = m.status === 'published' ? '발행' : '초안'; return `
${formatDate(m.meeting_date)} ${statusBadge}

${escapeHtml(m.title)}

${escapeHtml(m.created_by_name || '-')} 참석 ${m.attendee_count || 0}명 안건 ${m.agenda_count || 0}건 ${m.open_action_count > 0 ? `미완료 ${m.open_action_count}건` : ''}
`; }).join(''); } async function loadActionItems() { try { const res = await api('/meetings/action-items?status=open'); const items = res.data || []; if (items.length === 0) return; document.getElementById('actionSummary').classList.remove('hidden'); document.getElementById('actionCount').textContent = items.length; document.getElementById('actionList').innerHTML = items.slice(0, 5).map(item => `
${escapeHtml(item.content)} ${item.responsible_name ? `${escapeHtml(item.responsible_name)}` : ''} ${item.due_date ? `${formatDate(item.due_date)}` : ''}
`).join('') + (items.length > 5 ? `
외 ${items.length - 5}건
` : ''); } catch {} }