@@ -3093,14 +3046,13 @@ async function saveEditedWork() {
body: JSON.stringify(updateData)
});
- console.log('✅ 수정 성공 (통합 API):', result);
- showMessage('✅ 작업이 성공적으로 수정되었습니다!', 'success');
+ showMessage(' 작업이 성공적으로 수정되었습니다!', 'success');
closeEditModal();
refreshTodayWorkers();
} catch (error) {
- console.error('❌ 수정 실패:', error);
+ console.error(' 수정 실패:', error);
showMessage('수정 중 오류가 발생했습니다: ' + error.message, 'error');
}
}
@@ -3121,14 +3073,13 @@ async function deleteWorkItem(workId) {
method: 'DELETE'
});
- console.log('✅ 삭제 성공 (통합 API):', result);
- showMessage('✅ 작업이 성공적으로 삭제되었습니다!', 'success');
+ showMessage(' 작업이 성공적으로 삭제되었습니다!', 'success');
// 화면 새로고침
refreshTodayWorkers();
} catch (error) {
- console.error('❌ 삭제 실패:', error);
+ console.error(' 삭제 실패:', error);
showMessage('삭제 중 오류가 발생했습니다: ' + error.message, 'error');
}
}
@@ -3164,7 +3115,6 @@ async function init() {
// TBM 작업 목록 로드 (기본 탭)
await loadIncompleteTbms();
- console.log('✅ 시스템 초기화 완료 (통합 API 설정 적용)');
} catch (error) {
console.error('초기화 오류:', error);
@@ -3422,7 +3372,6 @@ function renderInlineDefectList(index) {
const defects = tempDefects[index] || [];
- console.log(`📝 [renderInlineDefectList] index=${index}, 부적합 수=${defects.length}`, defects);
// 이슈가 있으면 이슈 선택 UI, 없으면 레거시 UI
if (nonconformityIssues.length > 0) {
@@ -3430,7 +3379,7 @@ function renderInlineDefectList(index) {
let html = `
diff --git a/system1-factory/web/js/daily-work-report/state.js b/system1-factory/web/js/daily-work-report/state.js
index 889fe94..aa1ca9c 100644
--- a/system1-factory/web/js/daily-work-report/state.js
+++ b/system1-factory/web/js/daily-work-report/state.js
@@ -68,7 +68,7 @@ class DailyWorkReportState extends BaseState {
}
try {
- const userInfo = localStorage.getItem('sso_user') || localStorage.getItem('userInfo') || localStorage.getItem('currentUser');
+ const userInfo = localStorage.getItem('sso_user');
if (userInfo) {
return JSON.parse(userInfo);
}
diff --git a/system1-factory/web/js/equipment-management.js b/system1-factory/web/js/equipment-management.js
index 941a64f..a5a54fb 100644
--- a/system1-factory/web/js/equipment-management.js
+++ b/system1-factory/web/js/equipment-management.js
@@ -327,16 +327,13 @@ async function openEquipmentModal(equipmentId = null) {
// 다음 관리번호 로드
async function loadNextEquipmentCode() {
try {
- console.log('📋 다음 관리번호 조회 중...');
const response = await axios.get('/equipments/next-code');
- console.log('📋 다음 관리번호 응답:', response.data);
if (response.data.success) {
document.getElementById('equipmentCode').value = response.data.data.next_code;
- console.log('✅ 다음 관리번호 설정:', response.data.data.next_code);
}
} catch (error) {
- console.error('❌ 다음 관리번호 조회 실패:', error);
- console.error('❌ 에러 상세:', error.response?.data || error.message);
+ console.error(' 다음 관리번호 조회 실패:', error);
+ console.error(' 에러 상세:', error.response?.data || error.message);
// 오류 시 기본값으로 빈 값 유지 (사용자가 직접 입력)
}
}
diff --git a/system1-factory/web/js/group-leader-dashboard.js b/system1-factory/web/js/group-leader-dashboard.js
index 6b708b2..0e2d7b6 100644
--- a/system1-factory/web/js/group-leader-dashboard.js
+++ b/system1-factory/web/js/group-leader-dashboard.js
@@ -2,7 +2,6 @@
// 그룹장 전용 대시보드 - 실시간 근태 및 작업 현황 (Real Data Version)
import { apiCall } from './api-config.js';
-console.log('📊 그룹장 대시보드 스크립트 로딩 (Live Data)');
// 상태별 스타일/텍스트 매핑
const STATUS_MAP = {
diff --git a/system1-factory/web/js/load-sections.js b/system1-factory/web/js/load-sections.js
index da3fd38..7c32854 100644
--- a/system1-factory/web/js/load-sections.js
+++ b/system1-factory/web/js/load-sections.js
@@ -92,11 +92,10 @@ async function initializeSections() {
// 5. 모든 수정이 완료된 HTML을 실제 DOM에 한 번에 삽입
mainContainer.innerHTML = doc.body.innerHTML;
- console.log(`✅ ${currentUser.role} 역할의 섹션 로딩 완료.`);
} catch (error) {
console.error('섹션 로딩 중 오류 발생:', error);
- mainContainer.innerHTML = `
콘텐츠 로딩에 실패했습니다: ${error.message}
`;
+ mainContainer.textContent = '콘텐츠 로딩에 실패했습니다. 페이지를 새로고침해 주세요.';
}
}
diff --git a/system1-factory/web/js/management-dashboard.js b/system1-factory/web/js/management-dashboard.js
index cfd6eca..1f0eab8 100644
--- a/system1-factory/web/js/management-dashboard.js
+++ b/system1-factory/web/js/management-dashboard.js
@@ -39,22 +39,18 @@ function getCurrentUser() {
const payloadBase64 = token.split('.')[1];
if (payloadBase64) {
const payload = JSON.parse(atob(payloadBase64));
- console.log('토큰에서 추출한 사용자 정보:', payload);
return payload;
}
} catch (error) {
- console.log('토큰에서 사용자 정보 추출 실패:', error);
}
try {
- const userInfo = localStorage.getItem('sso_user') || localStorage.getItem('userInfo') || localStorage.getItem('currentUser');
+ const userInfo = localStorage.getItem('sso_user');
if (userInfo) {
const parsed = JSON.parse(userInfo);
- console.log('localStorage에서 가져온 사용자 정보:', parsed);
return parsed;
}
} catch (error) {
- console.log('localStorage에서 사용자 정보 가져오기 실패:', error);
}
return null;
@@ -134,7 +130,6 @@ async function loadWorkers() {
return worker.status === 'active' || worker.is_active === 1 || worker.is_active === true;
});
- console.log(`✅ 작업자 로드 성공: ${workers.length}명 (전체: ${allWorkers.length}명)`);
} catch (error) {
console.error('작업자 로딩 오류:', error);
throw error;
@@ -148,32 +143,27 @@ async function loadWorkData(date) {
// 1차: view_all=true로 전체 데이터 시도
let queryParams = `date=${date}&view_all=true`;
- console.log(`🔍 1차 시도: ${API}/daily-work-reports?${queryParams}`);
let data = await apiCall(`${API}/daily-work-reports?${queryParams}`);
workData = Array.isArray(data) ? data : (data.data || []);
// 데이터가 없으면 다른 방법들 시도
if (workData.length === 0) {
- console.log('⚠️ view_all로 데이터 없음, 다른 방법 시도...');
// 2차: admin=true로 시도
queryParams = `date=${date}&admin=true`;
- console.log(`🔍 2차 시도: ${API}/daily-work-reports?${queryParams}`);
data = await apiCall(`${API}/daily-work-reports?${queryParams}`);
workData = Array.isArray(data) ? data : (data.data || []);
if (workData.length === 0) {
// 3차: 날짜 경로 파라미터로 시도
- console.log(`🔍 3차 시도: ${API}/daily-work-reports/date/${date}`);
data = await apiCall(`${API}/daily-work-reports/date/${date}`);
workData = Array.isArray(data) ? data : (data.data || []);
if (workData.length === 0) {
// 4차: 기본 파라미터만으로 시도
- console.log(`🔍 4차 시도: ${API}/daily-work-reports?date=${date}`);
data = await apiCall(`${API}/daily-work-reports?date=${date}`);
workData = Array.isArray(data) ? data : (data.data || []);
@@ -181,15 +171,11 @@ async function loadWorkData(date) {
}
}
- console.log(`✅ 최종 작업 데이터 로드 결과: ${workData.length}개`);
// 디버깅을 위한 상세 로그
if (workData.length > 0) {
- console.log('📊 로드된 데이터 샘플:', workData.slice(0, 3));
const uniqueWorkers = [...new Set(workData.map(w => w.worker_name))];
- console.log('👥 데이터에 포함된 작업자들:', uniqueWorkers);
} else {
- console.log('❌ 해당 날짜에 작업 데이터가 없거나 접근 권한이 없습니다.');
}
return workData;
@@ -201,10 +187,8 @@ async function loadWorkData(date) {
// 구체적인 에러 정보 표시
if (error.message.includes('403')) {
- console.log('🔒 권한 부족으로 인한 접근 제한');
throw new Error('해당 날짜의 데이터에 접근할 권한이 없습니다.');
} else if (error.message.includes('404')) {
- console.log('📭 해당 날짜에 데이터 없음');
throw new Error('해당 날짜에 입력된 작업 데이터가 없습니다.');
} else {
throw error;
@@ -345,7 +329,6 @@ function displayDashboard(data) {
filteredWorkData = data.workers;
setupFiltering();
- console.log('✅ 대시보드 표시 완료');
}
// 요약 섹션 표시
@@ -773,7 +756,6 @@ async function saveEditedWork(workId) {
body: JSON.stringify(updateData)
});
- console.log('✅ 수정 성공 (통합 API):', result);
showMessage('✅ 작업이 성공적으로 수정되었습니다!', 'success');
closeEditModal();
@@ -783,7 +765,7 @@ async function saveEditedWork(workId) {
await loadDashboardData();
} catch (error) {
- console.error('❌ 수정 실패:', error);
+ console.error(' 수정 실패:', error);
showMessage('수정 중 오류가 발생했습니다: ' + error.message, 'error');
}
}
@@ -804,7 +786,6 @@ async function deleteWorkItem(workId) {
method: 'DELETE'
});
- console.log('✅ 삭제 성공 (통합 API):', result);
showMessage('✅ 작업이 성공적으로 삭제되었습니다!', 'success');
closeWorkerDetailModal();
@@ -813,7 +794,7 @@ async function deleteWorkItem(workId) {
await loadDashboardData();
} catch (error) {
- console.error('❌ 삭제 실패:', error);
+ console.error(' 삭제 실패:', error);
showMessage('삭제 중 오류가 발생했습니다: ' + error.message, 'error');
}
}
@@ -918,7 +899,6 @@ async function init() {
// 이벤트 리스너 설정
setupEventListeners();
- console.log('✅ 관리자 대시보드 초기화 완료 (통합 API 설정 적용)');
// 자동으로 오늘 데이터 로드
loadDashboardData();
diff --git a/system1-factory/web/js/modern-dashboard.js b/system1-factory/web/js/modern-dashboard.js
index 51f675e..0db3c77 100644
--- a/system1-factory/web/js/modern-dashboard.js
+++ b/system1-factory/web/js/modern-dashboard.js
@@ -62,7 +62,7 @@ document.addEventListener('DOMContentLoaded', async () => {
}
if (!window.apiCall) {
- console.error('❌ API 함수를 로드할 수 없습니다.');
+ console.error(' API 함수를 로드할 수 없습니다.');
showToast('시스템을 초기화할 수 없습니다. 페이지를 새로고침해주세요.', 'error');
return;
}
@@ -76,7 +76,6 @@ document.addEventListener('DOMContentLoaded', async () => {
});
async function initializeDashboard() {
- console.log('🚀 모던 대시보드 초기화 시작');
// 사용자 정보 설정
setupUserInfo();
@@ -104,7 +103,6 @@ async function initializeDashboard() {
// TBM 페이지 접근 권한 확인
checkTbmPageAccess();
- console.log('✅ 모던 대시보드 초기화 완료');
}
// ========== 사용자 정보 설정 ========== //
@@ -113,7 +111,6 @@ function setupUserInfo() {
const authData = getAuthData();
if (authData && authData.user) {
currentUser = authData.user;
- console.log('👤 사용자 정보 로드 완료:', currentUser.name, currentUser.role);
}
}
@@ -179,7 +176,6 @@ function setupEventListeners() {
// ========== 데이터 로드 ========== //
async function loadDashboardData() {
- console.log('📊 대시보드 데이터 로딩 시작');
try {
// 로딩 상태 표시
@@ -200,10 +196,9 @@ async function loadDashboardData() {
// 작업자 현황 표시
displayWorkers(workersData, 'card');
- console.log('✅ 대시보드 데이터 로딩 완료');
} catch (error) {
- console.error('❌ 대시보드 데이터 로딩 오류:', error);
+ console.error(' 대시보드 데이터 로딩 오류:', error);
showErrorState();
showToast('데이터를 불러오는 중 오류가 발생했습니다.', 'error');
}
@@ -211,7 +206,6 @@ async function loadDashboardData() {
async function loadWorkers() {
try {
- console.log('👥 작업자 데이터 로딩...');
const response = await window.apiCall('/workers');
const allWorkers = Array.isArray(response) ? response : (response.data || []);
@@ -220,7 +214,6 @@ async function loadWorkers() {
return worker.status === 'active' || worker.is_active === 1 || worker.is_active === true;
});
- console.log(`✅ 작업자 ${workersData.length}명 로드 완료 (전체: ${allWorkers.length}명)`);
return workersData;
} catch (error) {
console.error('작업자 데이터 로딩 오류:', error);
@@ -231,10 +224,8 @@ async function loadWorkers() {
async function loadWorkData(date) {
try {
- console.log(`📋 ${date} 작업 데이터 로딩...`);
const response = await window.apiCall(`/daily-work-reports?date=${date}&view_all=true`);
workData = Array.isArray(response) ? response : (response.data || []);
- console.log(`✅ 작업 데이터 ${workData.length}건 로드 완료`);
return workData;
} catch (error) {
console.error('작업 데이터 로딩 오류:', error);
@@ -683,7 +674,6 @@ function checkAdminAccess() {
const isFullAdmin = currentUser && ['admin', 'system'].includes(currentUser.access_level);
const isGroupLeader = currentUser && currentUser.access_level === 'group_leader';
- console.log(`🔐 권한 확인: 사용자=${currentUser?.username}, 역할=${currentUser.access_level}, 전체관리자=${isFullAdmin}, 그룹리더=${isGroupLeader}`);
adminElements.forEach(element => {
const href = element.getAttribute('href');
@@ -725,22 +715,18 @@ function checkAdminAccess() {
async function checkTbmPageAccess() {
try {
if (!currentUser || !currentUser.user_id) {
- console.log('⚠️ TBM 페이지 권한 확인: 사용자 정보 없음');
return;
}
const tbmQuickAction = document.getElementById('tbmQuickAction');
if (!tbmQuickAction) {
- console.log('⚠️ TBM 빠른 작업 버튼 요소를 찾을 수 없습니다');
return;
}
- console.log('🛠️ TBM 페이지 권한 확인 중...', { role: currentUser.role, access_level: currentUser.access_level });
// Admin은 모든 페이지 접근 가능
if (currentUser.role === 'Admin' || currentUser.role === 'System Admin' || currentUser.access_level === 'admin' || currentUser.access_level === 'system') {
tbmQuickAction.style.display = 'block';
- console.log('✅ Admin 사용자 - TBM 빠른 작업 버튼 표시');
return;
}
@@ -755,15 +741,12 @@ async function checkTbmPageAccess() {
if (tbmPage && tbmPage.can_access) {
tbmQuickAction.style.display = 'block';
- console.log('✅ TBM 페이지 접근 권한 있음 - 빠른 작업 버튼 표시');
} else {
- console.log('❌ TBM 페이지 접근 권한 없음 - 빠른 작업 버튼 숨김');
}
} else {
- console.log('⚠️ TBM 페이지 권한 확인 실패');
}
} catch (error) {
- console.error('❌ TBM 페이지 권한 확인 오류:', error);
+ console.error(' TBM 페이지 권한 확인 오류:', error);
}
}
@@ -811,7 +794,6 @@ function showErrorState() {
// ========== 작업자 관련 액션 함수들 ========== //
function openWorkerModal(workerId, workerName) {
- console.log(`📝 ${workerName}(ID: ${workerId}) 작업 보고서 모달 열기`);
// 모달 데이터 설정
currentModalWorker = {
@@ -825,7 +807,6 @@ function openWorkerModal(workerId, workerName) {
}
function handleVacation(workerId, vacationType) {
- console.log(`🏖️ 작업자 ${workerId} 휴가 처리: ${vacationType}`);
const vacationNames = {
'full': '연차',
@@ -873,7 +854,6 @@ async function processVacation(workerId, vacationType, hours) {
}
function confirmOvertime(workerId) {
- console.log(`⚠️ 작업자 ${workerId} 초과근무 확인`);
if (confirm('12시간을 초과한 작업시간이 정상적인 입력인지 확인하시겠습니까?')) {
// 초과근무 확인 처리
@@ -1269,8 +1249,6 @@ async function saveModalNewWork() {
}]
};
- console.log('📤 전송할 작업 데이터:', workData);
- console.log('📋 현재 사용자:', currentUser);
await window.apiCall('/daily-work-reports', 'POST', workData);
diff --git a/system1-factory/web/js/my-attendance.js b/system1-factory/web/js/my-attendance.js
index efe5825..f9a449a 100644
--- a/system1-factory/web/js/my-attendance.js
+++ b/system1-factory/web/js/my-attendance.js
@@ -381,7 +381,8 @@ function showLoading() {
function showError(message) {
const tbody = document.getElementById('attendanceTableBody');
- tbody.innerHTML = `
| ${message} |
`;
+ const safeMsg = (window.escapeHtml ? window.escapeHtml(message) : message.replace(/[&<>"']/g, m => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m])));
+ tbody.innerHTML = `
| ${safeMsg} |
`;
// 통계 초기화
document.getElementById('totalHours').textContent = '-';
diff --git a/system1-factory/web/js/my-dashboard.js b/system1-factory/web/js/my-dashboard.js
index c61a5f5..3fc7fa4 100644
--- a/system1-factory/web/js/my-dashboard.js
+++ b/system1-factory/web/js/my-dashboard.js
@@ -8,7 +8,6 @@ let currentMonth = new Date().getMonth() + 1;
// 페이지 초기화
document.addEventListener('DOMContentLoaded', async () => {
- console.log('📊 나의 대시보드 초기화 시작');
await loadUserInfo();
await loadVacationBalance();
@@ -16,7 +15,6 @@ document.addEventListener('DOMContentLoaded', async () => {
await loadWorkHoursStats();
await loadRecentReports();
- console.log('✅ 나의 대시보드 초기화 완료');
});
// 사용자 정보 로드
diff --git a/system1-factory/web/js/my-profile.js b/system1-factory/web/js/my-profile.js
index 3a50a9c..17422ad 100644
--- a/system1-factory/web/js/my-profile.js
+++ b/system1-factory/web/js/my-profile.js
@@ -117,6 +117,5 @@ function showError(message) {
// 페이지 로드 시 실행
document.addEventListener('DOMContentLoaded', () => {
- console.log('👤 프로필 페이지 로드됨');
loadProfile();
});
\ No newline at end of file
diff --git a/system1-factory/web/js/navigation.js b/system1-factory/web/js/navigation.js
index b854d9b..700e0ff 100644
--- a/system1-factory/web/js/navigation.js
+++ b/system1-factory/web/js/navigation.js
@@ -14,7 +14,6 @@ function redirect(url) {
*/
export function redirectToLogin() {
const loginUrl = config.paths.loginPage + '?redirect=' + encodeURIComponent(window.location.href);
- console.log(`🔄 로그인 페이지로 이동합니다: ${loginUrl}`);
redirect(loginUrl);
}
@@ -25,7 +24,6 @@ export function redirectToLogin() {
*/
export function redirectToDefaultDashboard(backendRedirectUrl = null) {
const destination = backendRedirectUrl || config.paths.defaultDashboard;
- console.log(`🔄 대시보드로 이동합니다: ${destination}`);
// 부드러운 화면 전환 효과
document.body.style.transition = 'opacity 0.3s ease-out';
@@ -40,7 +38,6 @@ export function redirectToDefaultDashboard(backendRedirectUrl = null) {
* 시스템 대시보드 페이지로 리디렉션합니다.
*/
export function redirectToSystemDashboard() {
- console.log(`🔄 시스템 대시보드로 이동합니다: ${config.paths.systemDashboard}`);
redirect(config.paths.systemDashboard);
}
@@ -48,7 +45,6 @@ export function redirectToSystemDashboard() {
* 그룹 리더 대시보드 페이지로 리디렉션합니다.
*/
export function redirectToGroupLeaderDashboard() {
- console.log(`🔄 그룹 리더 대시보드로 이동합니다: ${config.paths.groupLeaderDashboard}`);
redirect(config.paths.groupLeaderDashboard);
}
diff --git a/system1-factory/web/js/project-management.js b/system1-factory/web/js/project-management.js
index 86822ce..5a07fba 100644
--- a/system1-factory/web/js/project-management.js
+++ b/system1-factory/web/js/project-management.js
@@ -8,7 +8,6 @@ let currentStatusFilter = 'all'; // 'all', 'active', 'inactive'
// 페이지 초기화
document.addEventListener('DOMContentLoaded', function() {
- console.log('📁 프로젝트 관리 페이지 초기화 시작');
initializePage();
loadProjects();
@@ -103,11 +102,9 @@ function setupSearchInput() {
// 프로젝트 목록 로드
async function loadProjects() {
try {
- console.log('📊 프로젝트 목록 로딩 시작');
const response = await apiCall('/projects', 'GET');
- console.log('📊 API 응답 구조:', response);
// API 응답이 { success: true, data: [...] } 형태인 경우 처리
let projectData = [];
@@ -122,7 +119,6 @@ async function loadProjects() {
allProjects = projectData;
- console.log(`✅ 프로젝트 ${allProjects.length}개 로드 완료`);
// 초기 필터 적용
applyAllFilters();
@@ -156,10 +152,10 @@ function renderProjects() {
const projectsHtml = filteredProjects.map(project => {
// 프로젝트 상태 아이콘 및 텍스트
const statusMap = {
- 'planning': { icon: '📋', text: '계획', color: '#6b7280' },
- 'active': { icon: '🚀', text: '진행중', color: '#10b981' },
- 'completed': { icon: '✅', text: '완료', color: '#3b82f6' },
- 'cancelled': { icon: '❌', text: '취소', color: '#ef4444' }
+ 'planning': { icon: '', text: '계획', color: '#6b7280' },
+ 'active': { icon: '', text: '진행중', color: '#10b981' },
+ 'completed': { icon: '', text: '완료', color: '#3b82f6' },
+ 'cancelled': { icon: '', text: '취소', color: '#ef4444' }
};
const validStatuses = ['planning', 'active', 'completed', 'cancelled'];
@@ -175,16 +171,9 @@ function renderProjects() {
const safePm = escapeHtml(project.pm || '-');
const safeSite = escapeHtml(project.site || '-');
- console.log('🎨 카드 렌더링:', {
- project_id: project.project_id,
- project_name: project.project_name,
- is_active_raw: project.is_active,
- isInactive: isInactive
- });
-
return `
- ${isInactive ? '
🚫 비활성화됨
' : ''}
+ ${isInactive ? '
비활성화됨
' : ''}
@@ -252,12 +241,6 @@ function updateProjectStats() {
if (totalProjectsElement) {
totalProjectsElement.textContent = filteredProjects.length;
}
-
- console.log('📊 프로젝트 통계:', {
- 전체: filteredProjects.length,
- 활성: activeProjects.length,
- 비활성: inactiveProjects.length
- });
}
// 날짜 포맷팅
@@ -282,7 +265,6 @@ function filterByStatus(status) {
// 필터링 적용
applyAllFilters();
- console.log(`🔍 상태 필터 적용: ${status}`);
}
// 통계 카드 활성화 상태 업데이트
@@ -371,7 +353,7 @@ async function refreshProjectList() {
const refreshBtn = document.querySelector('.btn-secondary');
if (refreshBtn) {
const originalText = refreshBtn.innerHTML;
- refreshBtn.innerHTML = '
⏳새로고침 중...';
+ refreshBtn.innerHTML = '
새로고침 중...';
refreshBtn.disabled = true;
await loadProjects();
@@ -415,12 +397,6 @@ function openProjectModal(project = null) {
const isActiveValue = project.is_active === 1 || project.is_active === true || project.is_active === 'true';
document.getElementById('isActive').checked = isActiveValue;
- console.log('🔧 프로젝트 로드:', {
- project_id: project.project_id,
- project_name: project.project_name,
- is_active_raw: project.is_active,
- is_active_processed: isActiveValue
- });
} else {
// 신규 등록 모드
modalTitle.textContent = '새 프로젝트 등록';
@@ -480,7 +456,6 @@ async function saveProject() {
is_active: document.getElementById('isActive').checked ? 1 : 0
};
- console.log('💾 저장할 프로젝트 데이터:', projectData);
// 필수 필드 검증
if (!projectData.job_no || !projectData.project_name) {
@@ -523,7 +498,7 @@ function confirmDeleteProject(projectId) {
return;
}
- if (confirm(`"${project.project_name}" 프로젝트를 정말 삭제하시겠습니까?\n\n⚠️ 삭제된 프로젝트는 복구할 수 없습니다.`)) {
+ if (confirm(`"${project.project_name}" 프로젝트를 정말 삭제하시겠습니까?\n\n 삭제된 프로젝트는 복구할 수 없습니다.`)) {
deleteProjectById(projectId);
}
}
diff --git a/system1-factory/web/js/safety-checklist-manage.js b/system1-factory/web/js/safety-checklist-manage.js
index 79fb94f..8554462 100644
--- a/system1-factory/web/js/safety-checklist-manage.js
+++ b/system1-factory/web/js/safety-checklist-manage.js
@@ -46,7 +46,6 @@ const WEATHER_ICONS = {
*/
async function initPage() {
try {
- console.log('📋 안전 체크리스트 관리 페이지 초기화...');
await Promise.all([
loadAllChecks(),
@@ -55,7 +54,6 @@ async function initPage() {
]);
renderCurrentTab();
- console.log('✅ 초기화 완료. 체크항목:', allChecks.length, '개');
} catch (error) {
console.error('초기화 실패:', error);
showToast('데이터를 불러오는데 실패했습니다.', 'error');
@@ -73,7 +71,6 @@ async function loadAllChecks() {
const response = await apiCall('/tbm/safety-checks');
if (response && response.success) {
allChecks = response.data || [];
- console.log('✅ 체크 항목 로드:', allChecks.length, '개');
} else {
console.warn('체크 항목 응답 실패:', response);
allChecks = [];
@@ -93,7 +90,6 @@ async function loadWeatherConditions() {
if (response && response.success) {
weatherConditions = response.data || [];
populateWeatherSelects();
- console.log('✅ 날씨 조건 로드:', weatherConditions.length, '개');
}
} catch (error) {
console.error('날씨 조건 로드 실패:', error);
@@ -110,7 +106,6 @@ async function loadWorkTypes() {
if (response && response.success) {
workTypes = response.data || [];
populateWorkTypeSelects();
- console.log('✅ 공정 목록 로드:', workTypes.length, '개');
}
} catch (error) {
console.error('공정 목록 로드 실패:', error);
diff --git a/system1-factory/web/js/system-dashboard.js b/system1-factory/web/js/system-dashboard.js
index 511adde..035a64f 100644
--- a/system1-factory/web/js/system-dashboard.js
+++ b/system1-factory/web/js/system-dashboard.js
@@ -1,10 +1,8 @@
// System Dashboard JavaScript
-console.log('🚀 system-dashboard.js loaded');
import { apiRequest } from './api-helper.js';
import { getCurrentUser } from './auth.js';
-console.log('📦 modules imported successfully');
// 전역 변수
let systemData = {
@@ -15,7 +13,6 @@ let systemData = {
// Initialize on page load
document.addEventListener('DOMContentLoaded', function() {
- console.log('📄 DOM loaded, starting initialization');
initializeSystemDashboard();
setupEventListeners();
});
@@ -31,65 +28,51 @@ function setupEventListeners() {
switch(action) {
case 'account-management':
button.addEventListener('click', openAccountManagement);
- console.log('✅ Account management button listener added');
break;
case 'system-logs':
button.addEventListener('click', openSystemLogs);
- console.log('✅ System logs button listener added');
break;
case 'database-management':
button.addEventListener('click', openDatabaseManagement);
- console.log('✅ Database management button listener added');
break;
case 'system-settings':
button.addEventListener('click', openSystemSettings);
- console.log('✅ System settings button listener added');
break;
case 'backup-management':
button.addEventListener('click', openBackupManagement);
- console.log('✅ Backup management button listener added');
break;
case 'monitoring':
button.addEventListener('click', openMonitoring);
- console.log('✅ Monitoring button listener added');
break;
case 'close-modal':
button.addEventListener('click', () => closeModal('account-modal'));
- console.log('✅ Modal close button listener added');
break;
}
});
- console.log(`🎯 Total ${actionButtons.length} event listeners setup completed`);
}
// Initialize system dashboard
async function initializeSystemDashboard() {
try {
- console.log('🚀 Starting system dashboard initialization...');
// Load user info
await loadUserInfo();
- console.log('✅ User info loaded');
// Load system status
await loadSystemStatus();
- console.log('✅ System status loaded');
// Load user statistics
await loadUserStats();
- console.log('✅ User statistics loaded');
// Load recent activities
await loadRecentActivities();
- console.log('✅ Recent activities loaded');
// Setup auto-refresh (every 30 seconds)
setInterval(refreshSystemStatus, 30000);
- console.log('🎉 System dashboard initialization completed');
} catch (error) {
- console.error('❌ System dashboard initialization error:', error);
+ console.error(' System dashboard initialization error:', error);
showNotification('Error loading system dashboard', 'error');
}
}
@@ -307,7 +290,6 @@ async function refreshSystemStatus() {
// Open account management
function openAccountManagement() {
- console.log('🎯 Account management button clicked');
const modal = document.getElementById('account-modal');
const content = document.getElementById('account-management-content');
@@ -315,13 +297,11 @@ function openAccountManagement() {
console.log('Content element:', content);
if (modal && content) {
- console.log('✅ Modal and content elements found, loading content...');
// Load account management content
loadAccountManagementContent(content);
modal.style.display = 'block';
- console.log('✅ Modal displayed');
} else {
- console.error('❌ Modal or content element not found');
+ console.error(' Modal or content element not found');
}
}
@@ -890,11 +870,9 @@ window.filterLogs = filterLogs;
// 테스트용 전역 함수
window.testFunction = function() {
- console.log('🧪 테스트 함수 호출됨!');
alert('테스트 함수가 정상적으로 작동합니다!');
};
-console.log('🌐 전역 함수들 노출 완료');
// 모달 외부 클릭 시 닫기
window.onclick = function(event) {
diff --git a/system1-factory/web/js/task-management.js b/system1-factory/web/js/task-management.js
index 82866e1..0ab8b7e 100644
--- a/system1-factory/web/js/task-management.js
+++ b/system1-factory/web/js/task-management.js
@@ -8,7 +8,6 @@ let currentEditingTask = null;
// 페이지 초기화
document.addEventListener('DOMContentLoaded', async () => {
- console.log('📋 작업 관리 페이지 초기화');
// API 함수가 로드될 때까지 대기
let retryCount = 0;
@@ -33,7 +32,7 @@ async function loadAllData() {
// 작업 목록 로드
await loadTasks();
} catch (error) {
- console.error('❌ 데이터 로드 오류:', error);
+ console.error(' 데이터 로드 오류:', error);
showToast('데이터를 불러오는 중 오류가 발생했습니다.', 'error');
}
}
@@ -51,11 +50,10 @@ async function loadWorkTypes() {
workTypes = [];
}
- console.log('✅ 공정 목록 로드:', workTypes.length + '개');
renderWorkTypeTabs();
populateWorkTypeSelect();
} catch (error) {
- console.error('❌ 공정 목록 조회 오류:', error);
+ console.error(' 공정 목록 조회 오류:', error);
// API 오류 시에도 빈 배열로 처리
workTypes = [];
renderWorkTypeTabs();
@@ -69,7 +67,6 @@ async function loadTasks() {
if (response && response.success) {
tasks = response.data || [];
- console.log('✅ 작업 목록 로드:', tasks.length + '개');
} else {
tasks = [];
}
@@ -77,7 +74,7 @@ async function loadTasks() {
renderTasks();
updateStatistics();
} catch (error) {
- console.error('❌ 작업 목록 조회 오류:', error);
+ console.error(' 작업 목록 조회 오류:', error);
showToast('작업 목록을 불러오는 중 오류가 발생했습니다.', 'error');
tasks = [];
renderTasks();
@@ -257,7 +254,7 @@ async function editTask(taskId) {
document.body.style.overflow = 'hidden';
}
} catch (error) {
- console.error('❌ 작업 조회 오류:', error);
+ console.error(' 작업 조회 오류:', error);
showToast('작업 정보를 불러올 수 없습니다.', 'error');
}
}
@@ -314,7 +311,7 @@ async function saveTask() {
throw new Error(response.message || '저장에 실패했습니다.');
}
} catch (error) {
- console.error('❌ 작업 저장 오류:', error);
+ console.error(' 작업 저장 오류:', error);
showToast('작업 저장 중 오류가 발생했습니다.', 'error');
}
}
@@ -339,7 +336,7 @@ async function deleteTask() {
throw new Error(response.message || '삭제에 실패했습니다.');
}
} catch (error) {
- console.error('❌ 작업 삭제 오류:', error);
+ console.error(' 작업 삭제 오류:', error);
showToast('작업 삭제 중 오류가 발생했습니다.', 'error');
}
}
@@ -399,7 +396,7 @@ async function editWorkType(workTypeId) {
document.getElementById('workTypeModal').style.display = 'flex';
document.body.style.overflow = 'hidden';
} catch (error) {
- console.error('❌ 공정 조회 오류:', error);
+ console.error(' 공정 조회 오류:', error);
showToast('공정 정보를 불러올 수 없습니다.', 'error');
}
}
@@ -445,7 +442,7 @@ async function saveWorkType() {
throw new Error(response.message || '저장에 실패했습니다.');
}
} catch (error) {
- console.error('❌ 공정 저장 오류:', error);
+ console.error(' 공정 저장 오류:', error);
showToast('공정 저장 중 오류가 발생했습니다.', 'error');
}
}
@@ -477,7 +474,7 @@ async function deleteWorkType() {
throw new Error(response.message || '삭제에 실패했습니다.');
}
} catch (error) {
- console.error('❌ 공정 삭제 오류:', error);
+ console.error(' 공정 삭제 오류:', error);
showToast('공정 삭제 중 오류가 발생했습니다.', 'error');
}
}
diff --git a/system1-factory/web/js/tbm.js b/system1-factory/web/js/tbm.js
index ec779c2..6951ffb 100644
--- a/system1-factory/web/js/tbm.js
+++ b/system1-factory/web/js/tbm.js
@@ -44,7 +44,6 @@ function formatDate(d) { return window.CommonUtils.formatDate(d); }
// 페이지 초기화
document.addEventListener('DOMContentLoaded', async () => {
- console.log('🛠️ TBM 관리 페이지 초기화');
// API 함수가 로드될 때까지 대기
let retryCount = 0;
@@ -542,7 +541,6 @@ function populateLeaderSelect() {
const jobTypeText = worker.job_type ? ` (${escapeHtml(worker.job_type)})` : '';
leaderSelect.innerHTML = `
`;
leaderSelect.disabled = true;
- console.log('✅ 입력자 자동 설정:', worker.worker_name);
} else {
// 작업자를 찾을 수 없는 경우
leaderSelect.innerHTML = '
';
@@ -560,7 +558,6 @@ function populateLeaderSelect() {
return `
`;
}).join('');
leaderSelect.disabled = false;
- console.log('✅ 관리자: 입력자 선택 가능');
}
}
@@ -637,16 +634,14 @@ window.closeTbmModal = closeTbmModal;
// TBM 세션 저장 (간소화: 프로젝트+공정+작업자, task/workplace=null)
async function saveTbmSession() {
- console.log('💾 TBM 저장 시작...');
let leaderId = parseInt(document.getElementById('leaderId').value);
if (!leaderId || isNaN(leaderId)) {
if (!currentUser.user_id) {
- console.log('📝 관리자 계정: leader_user_id를 NULL로 설정');
leaderId = null;
} else {
- console.error('❌ 입력자 설정 오류');
+ console.error(' 입력자 설정 오류');
showToast('입력자 정보가 올바르지 않습니다.', 'error');
return;
}
@@ -704,7 +699,7 @@ async function saveTbmSession() {
throw new Error(teamResponse.message || '팀원 수정에 실패했습니다.');
}
} catch (error) {
- console.error('❌ TBM 세션 수정 오류:', error);
+ console.error(' TBM 세션 수정 오류:', error);
showToast('TBM 세션 수정 중 오류가 발생했습니다.', 'error');
}
return;
@@ -745,7 +740,6 @@ async function saveTbmSession() {
if (response && response.success) {
createdSessionId = response.data.session_id;
- console.log('✅ TBM 세션 생성 완료:', createdSessionId);
const teamResponse = await window.TbmAPI.addTeamMembers(createdSessionId, members);
@@ -765,7 +759,7 @@ async function saveTbmSession() {
throw new Error(response.message || '저장에 실패했습니다.');
}
} catch (error) {
- console.error('❌ TBM 세션 저장 오류:', error);
+ console.error(' TBM 세션 저장 오류:', error);
// 409 중복 배정 에러 처리
if (error.duplicates && error.duplicates.length > 0) {
@@ -1540,7 +1534,7 @@ async function loadWorkplacesByCategory(categoryId) {
`).join('');
} catch (error) {
- console.error('❌ 작업장 로드 오류:', error);
+ console.error(' 작업장 로드 오류:', error);
workplaceList.innerHTML = '
작업장을 불러오는 중 오류가 발생했습니다
';
}
}
@@ -1641,7 +1635,6 @@ async function loadWorkplaceMap(categoryId, layoutImagePath) {
? layoutImagePath
: `${apiBaseUrl}${layoutImagePath}`;
- console.log('🖼️ 이미지 로드 시도:', fullImageUrl);
// 지도 영역 데이터 로드
mapRegions = await window.TbmAPI.loadMapRegions(categoryId);
@@ -1666,11 +1659,10 @@ async function loadWorkplaceMap(categoryId, layoutImagePath) {
// 클릭 이벤트 리스너 추가
mapCanvas.onclick = handleMapClick;
- console.log(`✅ 작업장 지도 로드 완료: ${mapRegions.length}개 영역`);
};
mapImage.onerror = function() {
- console.error('❌ 지도 이미지 로드 실패');
+ console.error(' 지도 이미지 로드 실패');
document.getElementById('layoutMapArea').style.display = 'none';
document.getElementById('workplaceListSection').style.display = 'block';
document.getElementById('workplaceList').style.display = 'flex';
@@ -1681,7 +1673,7 @@ async function loadWorkplaceMap(categoryId, layoutImagePath) {
mapImage.src = fullImageUrl;
} catch (error) {
- console.error('❌ 작업장 지도 로드 오류:', error);
+ console.error(' 작업장 지도 로드 오류:', error);
document.getElementById('layoutMapArea').style.display = 'none';
document.getElementById('workplaceList').style.display = 'flex';
}
@@ -2030,7 +2022,7 @@ async function openTeamCompositionModal(sessionId) {
lockBodyScroll();
} catch (error) {
- console.error('❌ 팀 구성 로드 오류:', error);
+ console.error(' 팀 구성 로드 오류:', error);
showToast('팀 구성을 불러오는 중 오류가 발생했습니다.', 'error');
}
}
@@ -2130,7 +2122,7 @@ async function saveTeamComposition() {
throw new Error(response.message || '저장에 실패했습니다.');
}
} catch (error) {
- console.error('❌ 팀 구성 저장 오류:', error);
+ console.error(' 팀 구성 저장 오류:', error);
showToast('팀 구성 저장 중 오류가 발생했습니다.', 'error');
}
}
@@ -2222,7 +2214,7 @@ async function openSafetyCheckModal(sessionId) {
lockBodyScroll();
} catch (error) {
- console.error('❌ 안전 체크 조회 오류:', error);
+ console.error(' 안전 체크 조회 오류:', error);
showToast('안전 체크 정보를 불러오는 중 오류가 발생했습니다.', 'error');
}
}
@@ -2328,7 +2320,7 @@ async function saveSafetyChecklist() {
showToast('안전 체크가 완료되었습니다.', 'success');
closeSafetyModal();
} catch (error) {
- console.error('❌ 안전 체크 저장 오류:', error);
+ console.error(' 안전 체크 저장 오류:', error);
showToast('안전 체크 저장 중 오류가 발생했습니다.', 'error');
}
}
@@ -2473,7 +2465,7 @@ async function completeTbmSession() {
throw new Error(response.message || '완료 처리에 실패했습니다.');
}
} catch (error) {
- console.error('❌ TBM 완료 처리 오류:', error);
+ console.error(' TBM 완료 처리 오류:', error);
showToast('TBM 완료 처리 중 오류가 발생했습니다.', 'error');
} finally {
if (btn) { btn.disabled = false; btn.innerHTML = '
✓ 완료'; }
@@ -2622,7 +2614,6 @@ async function viewTbmSession(sessionId) {
// 푸터 버튼 동적 생성
const footer = document.getElementById('detailModalFooter');
const safeId = parseInt(session.session_id) || 0;
- console.log('📋 TBM 상세 - session_id:', safeId, 'status:', session.status);
if (session.status === 'draft') {
footer.innerHTML = `