diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 83ba6d3..926cd96 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -759,11 +759,10 @@ const deviceData = await deviceResponse.json(); if (deviceData && deviceData.body) { loadFromData(deviceData.body); - console.log('Device 설정 자동 로드 완료'); } } } catch (error) { - console.log('Device 설정 파일이 없거나 로드 실패, 기본값 사용:', error.message); + alert('Device configuration file missing or loading failed'); } try { @@ -773,12 +772,10 @@ const protocolData = await protocolResponse.json(); if (protocolData && protocolData.body) { loadFromRegisterJson(protocolData.body); - console.log('Protocol 설정 자동 로드 완료'); } } } catch (error) { - console.log('Protocol 설정 파일이 없거나 로드 실패, 기본값 사용:', error.message); - } + alert('Protocol configuration file missing or loading failed'); } } @@ -1238,7 +1235,7 @@ // 파일명 검증 (data-expected-filename 사용) if (DeviceFileName !== expectedDeviceFileName){ - alert(`잘못된 파일입니다. '${expectedDeviceFileName}' 파일을 선택해주세요. 현재 파일: ${DeviceFileName} `); + alert(`Invalid file.'${expectedDeviceFileName}' Please select a file. Current file: ${DeviceFileName} `); uploadDeviceFileInput.value = ''; // 잘못된 파일 선택 시 input 초기화 return; } @@ -1250,16 +1247,6 @@ const DeviceFileContent = e.target.result; const jsonData = JSON.parse(DeviceFileContent); - // JSON 내용 유효성 검증 - // 모든 파일이 Register 설정이라면 isValidRegisterConfig를 그대로 사용 - // 만약 파일 타입에 따라 다른 유효성 검사가 필요하다면, - // 여기에 조건부 로직을 추가해야 합니다. - // if (!isValidDeviceConfig(jsonData)){ // 예를 들어, isValidModbusConfig(jsonData) 등 - // alert(`선택된 파일의 내용이 유효한 ${DeviceFileType} 설정 파일 형식이 아닙니다.`); - // uploadDeviceFileInput.value = ''; - // return; - // } - // 백엔드 저장 API 호출 (data-upload-url 사용) const response = await fetch(uploadDeviceUrl, { method: 'POST', @@ -1271,13 +1258,13 @@ if (!response.ok) { const errorText = await response.text(); - throw new Error(`파일 업로드 실패: ${response.status} ${response.statusText} - ${errorText}`); + throw new Error(`File upload failed: ${response.status} ${response.statusText} - ${errorText}`); } const result = await response.json(); if (result.result && result.result.result_code === 200) { - alert(`파일이 Device에 성공적으로 업로드되었습니다! (${DeviceFileType})`); + alert(`File uploaded to Device successfully (${DeviceFileType})`); console.log(`Upload successful for ${DeviceFileType}:`, result); // 업로드 성공 후 최신 데이터를 Device에서 다시 불러와 UI 업데이트 (data-get-url 사용) @@ -1292,28 +1279,28 @@ loadFromData(apiResponseData.body); console.log(`UI updated with newly uploaded ${DeviceFileType} data.`); } else { - console.warn(`업로드 후 ${DeviceFileType} 데이터 재로드 실패: 응답 body 없음`); + console.warn(`Failed to reload ${DeviceFileType} data after upload: no response body`); } }) - .catch(err => console.error(`업로드 후 ${DeviceFileType} 데이터 재로드 중 오류 발생:`, err)); + .catch(err => console.error(`Error reloading ${DeviceFileType} data after upload:`, err)); uploadDeviceFileInput.value = ''; // input 초기화 (다음 업로드 위함) } else { - alert(`파일 업로드 실패: ${result.result ? result.result.result_message : '알 수 없는 오류'} (${DeviceFileType})`); + alert(`File upload failed: ${result.result ? result.result.result_message : 'Unknown error'} (${DeviceFileType})`); console.error(`Upload failed for ${DeviceFileType} with backend error:`, result); uploadDeviceFileInput.value = ''; } } catch (error) { - console.error(`파일 업로드 중 오류 발생 (${DeviceFileType}):`, error); - alert(`파일 업로드 중 오류 발생: ${error.message} (${DeviceFileType})`); + console.error(`Error uploading file (${DeviceFileType}):`, error); + alert(`Error uploading file: ${error.message} (${DeviceFileType})`); uploadDeviceFileInput.value = ''; } }; reader.onerror = () => { - alert(`파일을 읽는 도중 오류가 발생했습니다. (${DeviceFileType})`); + alert(`An error occurred while reading the file. (${DeviceFileType})`); console.error(`FileReader error for ${DeviceFileType}:`, reader.error); uploadDeviceFileInput.value = ''; }; @@ -1360,7 +1347,7 @@ // 파일명 검증 (data-expected-filename 사용) if (fileName !== expectedFileName){ - alert(`잘못된 파일입니다. '${expectedFileName}' 파일을 선택해주세요. 현재 파일: ${fileName} `); + alert(`Invalid file. '${expectedFileName}' Please select a file. Current file: ${fileName} `); uploadFileInput.value = ''; // 잘못된 파일 선택 시 input 초기화 return; } @@ -1377,7 +1364,7 @@ // 만약 파일 타입에 따라 다른 유효성 검사가 필요하다면, // 여기에 조건부 로직을 추가해야 합니다. if (!isValidRegisterConfig(jsonData)){ // 예를 들어, isValidModbusConfig(jsonData) 등 - alert(`선택된 파일의 내용이 유효한 ${fileType} 설정 파일 형식이 아닙니다.`); + alert(`The contents of the selected file are not in a valid ${fileType} setting file format.`); uploadFileInput.value = ''; return; } @@ -1393,13 +1380,13 @@ if (!response.ok) { const errorText = await response.text(); - throw new Error(`파일 업로드 실패: ${response.status} ${response.statusText} - ${errorText}`); + throw new Error(`File upload failed: ${response.status} ${response.statusText} - ${errorText}`); } const result = await response.json(); if (result.result && result.result.result_code === 200) { - alert(`파일이 Device에 성공적으로 업로드되었습니다! (${fileType})`); + alert(`File uploaded to Device successfully (${fileType})`); console.log(`Upload successful for ${fileType}:`, result); // 업로드 성공 후 최신 데이터를 Device에서 다시 불러와 UI 업데이트 (data-get-url 사용) @@ -1414,7 +1401,7 @@ loadFromRegisterJson(apiResponseData.body); console.log(`UI updated with newly uploaded ${fileType} data.`); } else { - console.warn(`업로드 후 ${fileType} 데이터 재로드 실패: 응답 body 없음`); + console.warn(`Failed to reload ${fileType} data after upload: no response body`); } }) .catch(err => console.error(`업로드 후 ${fileType} 데이터 재로드 중 오류 발생:`, err)); @@ -1422,21 +1409,19 @@ uploadFileInput.value = ''; // input 초기화 (다음 업로드 위함) } else { - alert(`파일 업로드 실패: ${result.result ? result.result.result_message : '알 수 없는 오류'} (${fileType})`); + alert(`File upload failed: ${result.result?result.result_message: 'unknown error'} (${fileType})`); console.error(`Upload failed for ${fileType} with backend error:`, result); uploadFileInput.value = ''; } } catch (error) { - console.error(`파일 업로드 중 오류 발생 (${fileType}):`, error); - alert(`파일 업로드 중 오류 발생: ${error.message} (${fileType})`); + alert(`Error uploading file: ${error.message} (${fileType})`); uploadFileInput.value = ''; } }; reader.onerror = () => { - alert(`파일을 읽는 도중 오류가 발생했습니다. (${fileType})`); - console.error(`FileReader error for ${fileType}:`, reader.error); + alert(`An error occurred while reading the file. (${fileType})`); uploadFileInput.value = ''; }; @@ -1704,7 +1689,7 @@ } document.getElementById('modbus_modify_btn').onclick = function () { - if (!selectedRow) return alert('수정할 행을 선택하세요!'); + if (!selectedRow) return alert('Please select the row you want to modify'); selectedRow.querySelector('.field-display').textContent = document.getElementById('modbus_field_input').value; selectedRow.querySelector('.addr-display').textContent = document.getElementById('modbus_addr_input').value; selectedRow.querySelector('.idt-display').textContent = document.getElementById('modbus_idt_input').value; @@ -1717,7 +1702,7 @@ // 삭제 버튼 document.getElementById('modbus_delete_btn').onclick = function () { - if (!selectedRow) return alert('삭제할 행을 선택하세요!'); + if (!selectedRow) return alert('Select the row you want to delete'); const list = document.getElementById('modbus-field-list'); selectedRow.remove(); selectedRow = null; @@ -1763,7 +1748,7 @@ } document.getElementById('opcua_modify_btn').onclick = function () { - if (!selectedRow) return alert('수정할 행을 선택하세요!'); + if (!selectedRow) return alert('Please select the row you want to modify'); selectedRow.querySelector('.opcua-field-display').textContent = document.getElementById('opcua_field_input').value; selectedRow.querySelector('.opcua-addr-display').textContent = document.getElementById('opcua_addr_input').value; selectedRow.querySelector('.opcua-ns-display').textContent = document.getElementById('opcua_ns_input').value; @@ -1776,7 +1761,7 @@ // 삭제 버튼 document.getElementById('opcua_delete_btn').onclick = function () { - if (!selectedRow) return alert('삭제할 행을 선택하세요!'); + if (!selectedRow) return alert('Select the row you want to delete'); const list = document.getElementById('opcua-field-list'); selectedRow.remove(); selectedRow = null; @@ -1811,7 +1796,7 @@ document.getElementById('can_mask_input').value = ''; }); document.getElementById('can_modify_btn').onclick = function () { - if (!selectedRow) return alert('수정할 행을 선택하세요!'); + if (!selectedRow) return alert('Please select the row you want to modify'); selectedRow.querySelector('.can-field-display').textContent = document.getElementById('can_field_input').value; selectedRow.querySelector('.can-id-display').textContent = document.getElementById('can_id_input').value; selectedRow.querySelector('.can-odt-display').textContent = document.getElementById('can_odt_input').value; @@ -1821,7 +1806,7 @@ selectedRow.querySelector('.can-mask-display').textContent = document.getElementById('can_mask_input').value; }; document.getElementById('can_delete_btn').onclick = function () { - if (!selectedRow) return alert('삭제할 행을 선택하세요!'); + if (!selectedRow) return alert('Select the row you want to delete'); const list = document.getElementById('can-field-list'); selectedRow.remove(); selectedRow = null; @@ -1832,7 +1817,6 @@ regProtocolSelect = document.getElementById('reg_protocol'); if (regProtocolSelect) { regProtocolSelect.addEventListener('change', () => { - console.log('regProtocolSelect 변경 감지', regProtocolSelect.value); toggleProtocolMenus(); }); @@ -1844,7 +1828,7 @@ const protocolData = collectConfigData(); if (!isValidRegisterConfig(protocolData)) { - alert("현재 Register 설정이 유효하지 않습니다. 저장할 수 없습니다. 콘솔을 확인하세요."); + alert("Register settings are currently invalid. Cannot be saved."); return; } @@ -1868,11 +1852,11 @@ alert('saved successfully'); } else { alert('save failure'); - console.error('device 응답:', res1.status, 'protocol 응답:', res2.status); + console.error('device response:', res1.status, 'protocol response:', res2.status); } }) .catch(err => { - console.error('전송 중 오류 발생:', err); + console.error('Error during transfer:', err); alert('save failure'); }); }