103 lines
3.5 KiB
JavaScript
103 lines
3.5 KiB
JavaScript
// /js/group-leader-dashboard.js
|
|
// 그룹장 전용 대시보드 기능
|
|
|
|
console.log('📊 그룹장 대시보드 스크립트 로딩');
|
|
|
|
// 팀 현황 새로고침
|
|
async function refreshTeamStatus() {
|
|
console.log('🔄 팀 현황 새로고침 시작');
|
|
|
|
try {
|
|
// 로딩 상태 표시
|
|
const teamList = document.getElementById('team-list');
|
|
if (teamList) {
|
|
teamList.innerHTML = '<div style="text-align: center; padding: 20px;">⏳ 로딩 중...</div>';
|
|
}
|
|
|
|
// 실제로는 API 호출
|
|
// const response = await fetch('/api/team-status', { headers: getAuthHeaders() });
|
|
// const data = await response.json();
|
|
|
|
// 임시 데이터로 업데이트 (실제 API 연동 시 교체)
|
|
setTimeout(() => {
|
|
updateTeamStatusUI();
|
|
}, 1000);
|
|
|
|
} catch (error) {
|
|
console.error('❌ 팀 현황 로딩 실패:', error);
|
|
const teamList = document.getElementById('team-list');
|
|
if (teamList) {
|
|
teamList.innerHTML = '<div style="text-align: center; padding: 20px; color: #f44336;">❌ 로딩 실패</div>';
|
|
}
|
|
}
|
|
}
|
|
|
|
// 팀 현황 UI 업데이트 (임시 데이터)
|
|
function updateTeamStatusUI() {
|
|
const teamData = [
|
|
{ name: '김작업', status: 'present', statusText: '출근' },
|
|
{ name: '이현장', status: 'present', statusText: '출근' },
|
|
{ name: '박휴가', status: 'absent', statusText: '휴가' },
|
|
{ name: '최작업', status: 'present', statusText: '출근' },
|
|
{ name: '정현장', status: 'present', statusText: '출근' }
|
|
];
|
|
|
|
const teamList = document.getElementById('team-list');
|
|
if (teamList) {
|
|
teamList.innerHTML = teamData.map(member => `
|
|
<div class="team-member ${member.status}">
|
|
<span class="member-name">${member.name}</span>
|
|
<span class="member-status">${member.statusText}</span>
|
|
</div>
|
|
`).join('');
|
|
}
|
|
|
|
// 통계 업데이트
|
|
const presentCount = teamData.filter(m => m.status === 'present').length;
|
|
const absentCount = teamData.filter(m => m.status === 'absent').length;
|
|
|
|
const totalEl = document.getElementById('team-total');
|
|
const presentEl = document.getElementById('team-present');
|
|
const absentEl = document.getElementById('team-absent');
|
|
|
|
if (totalEl) totalEl.textContent = teamData.length;
|
|
if (presentEl) presentEl.textContent = presentCount;
|
|
if (absentEl) absentEl.textContent = absentCount;
|
|
|
|
console.log('✅ 팀 현황 업데이트 완료');
|
|
}
|
|
|
|
// 환영 메시지 개인화
|
|
function personalizeWelcome() {
|
|
const user = JSON.parse(localStorage.getItem('user') || '{}');
|
|
const welcomeMsg = document.getElementById('welcome-message');
|
|
|
|
if (user && user.name && welcomeMsg) {
|
|
welcomeMsg.textContent = `${user.name}님의 실시간 팀 현황 및 작업 모니터링`;
|
|
console.log('✅ 환영 메시지 개인화 완료');
|
|
}
|
|
}
|
|
|
|
// 페이지 초기화
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
console.log('🚀 그룹장 대시보드 초기화 시작');
|
|
|
|
// 사용자 정보 확인
|
|
const user = JSON.parse(localStorage.getItem('user') || '{}');
|
|
console.log('👤 현재 사용자:', user);
|
|
|
|
// 권한 확인
|
|
if (user.access_level !== 'group_leader') {
|
|
console.warn('⚠️ 그룹장 권한 없음:', user.access_level);
|
|
// 필요시 다른 페이지로 리다이렉트
|
|
}
|
|
|
|
// 초기화 작업
|
|
personalizeWelcome();
|
|
updateTeamStatusUI();
|
|
|
|
console.log('✅ 그룹장 대시보드 초기화 완료');
|
|
});
|
|
|
|
// 전역 함수로 내보내기 (HTML에서 사용)
|
|
window.refreshTeamStatus = refreshTeamStatus; |