/** * TBM - Utilities * TBM 관련 유틸리티 함수들 (공통 함수는 CommonUtils에 위임) */ class TbmUtils { constructor() { this._common = window.CommonUtils; console.log('[TbmUtils] 초기화 완료'); } // --- CommonUtils 위임 --- getTodayKST() { return this._common.getTodayKST(); } formatDate(dateString) { return this._common.formatDate(dateString); } getDayOfWeek(dateString) { return this._common.getDayOfWeek(dateString); } isToday(dateString) { return this._common.isToday(dateString); } generateUUID() { return this._common.generateUUID(); } escapeHtml(text) { return this._common.escapeHtml(text); } // --- TBM 전용 --- /** * 날짜 표시용 포맷 (MM월 DD일) */ formatDateDisplay(dateString) { if (!dateString) return ''; const [year, month, day] = dateString.split('-'); return `${parseInt(month)}월 ${parseInt(day)}일`; } /** * 날짜를 연/월/일/요일 형식으로 포맷 */ formatDateFull(dateString) { if (!dateString) return ''; const [year, month, day] = dateString.split('-'); const dayName = this._common.getDayOfWeek(dateString); return `${year}년 ${parseInt(month)}월 ${parseInt(day)}일 (${dayName})`; } /** * 현재 시간을 HH:MM 형식으로 반환 */ getCurrentTime() { return new Date().toTimeString().slice(0, 5); } /** * 날씨 조건명 반환 */ getWeatherConditionName(code) { const names = { clear: '맑음', rain: '비', snow: '눈', heat: '폭염', cold: '한파', wind: '강풍', fog: '안개', dust: '미세먼지' }; return names[code] || code; } /** * 날씨 아이콘 반환 */ getWeatherIcon(code) { const icons = { clear: '☀️', rain: '🌧️', snow: '❄️', heat: '🔥', cold: '🥶', wind: '💨', fog: '🌫️', dust: '😷' }; return icons[code] || '🌤️'; } /** * 카테고리명 반환 */ getCategoryName(category) { const names = { 'PPE': '개인 보호 장비', 'EQUIPMENT': '장비 점검', 'ENVIRONMENT': '작업 환경', 'EMERGENCY': '비상 대응', 'WEATHER': '날씨', 'TASK': '작업' }; return names[category] || category; } /** * 상태 배지 HTML 반환 */ getStatusBadge(status) { const badges = { 'draft': '진행중', 'completed': '완료', 'cancelled': '취소' }; return badges[status] || ''; } } // 전역 인스턴스 생성 window.TbmUtils = new TbmUtils(); // 하위 호환성: TBM 전용 유틸 (showToast, formatDate, waitForApi, generateUUID는 api-base.js 전역) window.getTodayKST = () => window.TbmUtils.getTodayKST(); // 카테고리별 그룹화 window.groupChecksByCategory = function(checks) { return checks.reduce((acc, check) => { const category = check.check_category || 'OTHER'; if (!acc[category]) acc[category] = []; acc[category].push(check); return acc; }, {}); }; // 작업별 그룹화 window.groupChecksByTask = function(checks) { return checks.reduce((acc, check) => { const taskId = check.task_id || 0; const taskName = check.task_name || '기타 작업'; if (!acc[taskId]) acc[taskId] = { name: taskName, items: [] }; acc[taskId].items.push(check); return acc; }, {}); }; // Admin 사용자 확인 window.isAdminUser = function() { return window.TbmState?.isAdminUser() || false; }; console.log('[Module] tbm/utils.js 로드 완료');