import { TMapMngr, TFclt } from "/js/vworld/map-mngr.js"; import { LayerIndex } from "/js/vworld/map-const.js"; let _mapManager = null; let _selectFcltNmbr = null; let _vmsTableList = null; let _managerData = []; const _pageMsg = 'VMS'; const _pageName = 'VMS 기본정보 관리'; const _lyrIdx = LayerIndex.Vms; const _apiUri = '/api/vms/manager/info'; const _vmsBtnBoxMap = new Map(); const _vmsCdTypeMap = new Map(); const _vmsInputBoxMap = new Map(); /*** * VMS_MAX_PHSE_NUM = 16; //VMS 최대 표출면 개수 VMS_PHSE_CHNG_CYCL = 5; //VMS 표출면 변경 주기(계획된 메시지의 동작시간(초)) VMS_CMNC_ERR_BASS_VAL = 127; //VMS 통신 오류 기본 값(모듈 전원이 꺼지는 온도값(℃)) FAN_MTNS_TMPR = 35; //팬동작온도 HETR_MTNS_TMPR = 0; //히터동작온도 VMS_MODL_ERR_RATE = 20; //모듈장애율(Options) */ const _updateColumns = { brgh_mode: null, cmncfail_slot_nmbr : 0, cmtrinfr_cnct_yn : "N", del_yn : "N", envrinfr_cnct_yn : "N", fan_mtns_tmpr : 35, frst_regr_nmbr : null, frst_rgst_dt : null, hetr_mtns_tmpr : 0, istl_lctn_nm : null, last_crct_dt : null, last_crpr_nmbr : window.opener.$userId, oper_mode : "A", panl_off_time : null, panl_on_time : null, panl_pwer_mode : null, pwer_fail_slot_nmbr : 0, strm_sesn_nm : null, trfc_strg_use_yn : "N", vms_cmnc_err_bass_val : 127, vms_cmnc_port : null, vms_ctlr_id : null, vms_ctlr_ip : null, vms_ctlr_nmbr : 0, vms_frm_type_cd : null, vms_id : null, vms_loc_ifsc_id : 0, vms_max_phse_num : 0, vms_modl_err_rate : 20, vms_modl_type_cd : null, vms_nght_brgh_step : 0, vms_nm : null, vms_phse_chng_cycl : 5, vms_type_cd : null, vms_usag_type_cd : null, vms_week_brgh_step : 0, web_cmra_id : null, web_cmra_ip : null, web_cmra_port : null, web_cmra_pwd : null, wthrinfr_cnct_yn : "N", x_crdn : 0, y_crdn : 0, strm_http_addr: null, strm_rtsp_addr: null, } const _btnClasses = [ 'all-vms-apply-btn', 'close-btn', 'edit-btn', 'add-btn', 'del-btn', 'save-btn', 'cancle-btn' ]; const _inputClasses = [ 'vms_ctlr_nmbr', 'vms_ctlr_id', 'vms_nm', 'vms_usag_type_cd', 'vms_type_cd', 'x_crdn', 'y_crdn', 'vms_ctlr_ip', 'vms_cmnc_port', 'web_cmra_ip', 'web_cmra_port', 'web_cmra_id', 'web_cmra_pwd', 'strm_sesn_nm', 'vms_max_phse_num', 'panl_on_time', 'panl_off_time', 'strm_http_addr', 'strm_rtsp_addr', ]; const panlTimeColumns = [ 'panl_on_time', 'panl_off_time' ]; $(()=>{ _vmsTableList = $('.list-table').width('100%').height('100%').dxDataGrid({ dataSource : null, allowColumnReordering : true, showColumnLines : true, showBorders : true, allowColumnResizing : true, rowAlternationEnabled : true, focusedRowEnabled : true, columnAutoWidth : true, noDataText : '표출할 정보가 없습니다.', keyExpr : 'vms_ctlr_nmbr', headerFilter : { visible: true, }, scrolling : { mode : 'standard', }, paging: { enabled: true, pageSize: 1000, }, selection: { mode: 'single', }, columns:[ { dataField : "vms_ctlr_nmbr", caption : "번호", alignment : "center", sortOrder : 'asc', sortIndex : 0, cssClass : 'no-padding', }, { dataField : "vms_ctlr_id", caption : "VMS ID", alignment : "center", cssClass : 'no-padding', }, { dataField : "vms_usag_type_cd", caption : "유형", alignment : "center", cssClass : 'no-padding', lookup : { dataSource : null, valueExpr : "vms_usag_type_cd", displayExpr : "vms_usag_type_desc", } }, { dataField : "vms_type_cd", caption : "크기", alignment : "center", cssClass : 'no-padding', lookup : { dataSource : null, valueExpr : "vms_type_cd", displayExpr : "vms_type_nm", } }, { dataField : "vms_ctlr_ip", caption : "제어가 IP", alignment : "center", cssClass : 'no-padding', }, { dataField : "vms_cmnc_port", caption : "통신포트", alignment : "center", cssClass : 'no-padding', }, { dataField : "web_cmra_ip", caption : "웹카메라 IP", alignment : "center", cssClass : 'no-padding', }, { dataField : "panl_on_time", caption : "전광판 ON", alignment : "center", cssClass : 'no-padding', }, { dataField : "panl_off_time", caption : "전광판 OFF", alignment : "center", cssClass : 'no-padding', }, { dataField : "vms_max_phse_num", caption : "폼 최대갯수", alignment : "center", cssClass : 'no-padding', }, ], onRowDblClick(row){ vmsTableDblClick(row); } }).dxDataGrid('instance'); fetchVmsInputArray(); fetchVmsButtonArray(); fetchBaseData(); }); //필요 데이터 가져오기 async function fetchBaseData(){ getDataAsync('/api/vms/common/vms-type', fetchVmsType); getDataAsync('/api/vms/common/vms-usage', fetchVmsUsage); getDataAsync(_apiUri, fetchInfoTableList ); } //VMS 목록 수신 및 세팅 function fetchInfoTableList(jsonData){ _vmsTableList.option('dataSource', jsonData); _managerData.push(jsonData); console.log(jsonData); doMap(); updateIcon(); } //VMS 유형 코드 데이터 수신 및 데이터 소스 세팅 function fetchVmsUsage(jsonData){ _vmsCdTypeMap.set('vms_usag_type_cd', jsonData); _vmsTableList.option('columns[2].lookup.dataSource', jsonData); const vmsUsagSelect = _vmsInputBoxMap.get('vms_usag_type_cd').get('input'); vmsUsagSelect.option('dataSource', jsonData); setValue(vmsUsagSelect, jsonData[0].vms_usag_type_cd); _vmsInputBoxMap.get('vms_usag_type_cd').set('init', jsonData[0].vms_usag_type_cd); } //VMS 크기 코드 데이터 수신 및 데이터 소스 세팅 function fetchVmsType(jsonData){ _vmsCdTypeMap.set('vms_type_cd', jsonData); _vmsTableList.option('columns[3].lookup.dataSource', jsonData); const vmsTypeCdSelect = _vmsInputBoxMap.get('vms_type_cd').get('input'); vmsTypeCdSelect.option('dataSource', jsonData); setValue(vmsTypeCdSelect, jsonData[0].vms_type_cd); _vmsInputBoxMap.get('vms_type_cd').set('init', jsonData[0].vms_type_cd); } //버튼들 화면 세팅 function fetchVmsButtonArray(){ _btnClasses.forEach( (btnClass)=>{ _vmsBtnBoxMap.set(btnClass, new Map()); const btnInfoBox = _vmsBtnBoxMap.get(btnClass); btnInfoBox.set('btn', $('.'+btnClass).dxButton({}).dxButton('instance')); switch(btnClass){ case 'all-vms-apply-btn': setVmsBtnOption(btnClass, '전체 VMS 적용', 'save', allVmsApplyEvent, true, false); break; case 'close-btn': setVmsBtnOption(btnClass, '닫기', 'close', closeEvent); break; case 'edit-btn': setVmsBtnOption(btnClass, '편집', 'edit', editEvent, true, true); btnInfoBox.set('dblClick', [true, false]); btnInfoBox.set('event', [false, false]); btnInfoBox.set('cancle', [true, false, true]); break; case 'add-btn': setVmsBtnOption(btnClass, '추가', 'plus', addEvent, true, false); btnInfoBox.set('dblClick', [true, false]); btnInfoBox.set('event', [true, true]); btnInfoBox.set('cancle', [true, false, false]); break; case 'del-btn': setVmsBtnOption(btnClass, '삭제', 'minus', delEvent, true, true); btnInfoBox.set('dblClick', [true, false]); btnInfoBox.set('event', [true, true]); btnInfoBox.set('cancle', [true, false, true]); break; case 'save-btn': setVmsBtnOption(btnClass, '저장', 'save', null, true, true); btnInfoBox.set('dblClick', [true, true]); btnInfoBox.set('event', [true, false]); btnInfoBox.set('cancle', [true, true, true]); break; case 'cancle-btn': setVmsBtnOption(btnClass, '취소', 'close', cancleEvent, false, false); btnInfoBox.set('dblClick', [false, false]); btnInfoBox.set('event', [true, false]); btnInfoBox.set('cancle', [false, false, false]); break; default : break } }); } //inputBox 화면 세팅 function fetchVmsInputArray(){ _inputClasses.forEach( (inputClass)=>{ _vmsInputBoxMap.set(inputClass, new Map()); const inputBox = _vmsInputBoxMap.get(inputClass); inputBox.set('input', null); switch(inputClass){ case 'vms_ctlr_nmbr' : setVmsInputOption(inputClass, 'text', 60, null, 10); inputBox.set('must', '제어기 번호'); break case 'vms_ctlr_id': setVmsInputOption(inputClass, 'text', 100, null, 30); inputBox.set('must', 'VMS ID'); break case 'vms_nm' : setVmsInputOption(inputClass, 'text', 250, null, 40); inputBox.set('must', 'VMS 명칭'); break case 'vms_usag_type_cd' : setVmsInputOption(inputClass, 'select', 250); inputBox.set('must', 'VMS 유형'); break case 'vms_type_cd' : setVmsInputOption(inputClass, 'select', 250); inputBox.set('must', 'VMS 크기'); break case 'x_crdn' : setVmsInputOption(inputClass, 'text', 120, '0.00000000', 11); inputBox.set('must', '위치좌표 X'); inputBox.get('input').on('valueChanged', (text) => crdnChanges(text, 3)); break case 'y_crdn' : setVmsInputOption(inputClass, 'text', 120, '0.00000000', 11); inputBox.set('must', '위치좌표 Y'); inputBox.get('input').on('valueChanged', (text) => crdnChanges(text, 2)); break case 'vms_ctlr_ip' : setVmsInputOption(inputClass, 'text', 170, null, 20); inputBox.set('must', '제어기 IP'); break case 'vms_cmnc_port' : setVmsInputOption(inputClass, 'text', 70, null, 5); inputBox.set('must', '제어기 PORT'); break case 'web_cmra_ip' : setVmsInputOption(inputClass, 'text', 170, null, 20); break case 'web_cmra_port' : setVmsInputOption(inputClass, 'text', 70, null, 5); break case 'web_cmra_id' : setVmsInputOption(inputClass, 'text', 120, null, 30); break case 'web_cmra_pwd' : setVmsInputOption(inputClass, 'text', 120, null, 64); break case 'strm_sesn_nm' : setVmsInputOption(inputClass, 'text', 250, null, 200); break case 'strm_http_addr' : setVmsInputOption(inputClass, 'text', 250, null, 200); break case 'strm_rtsp_addr' : setVmsInputOption(inputClass, 'text', 250, null, 200); break case 'vms_max_phse_num' : setVmsInputOption(inputClass, 'number', 70, 10, 16); break case 'panl_on_time' : setVmsInputOption(inputClass, 'time', 70, firstSettingTime); inputBox.set('must', '전광판 ON 시각'); break case 'panl_off_time' : setVmsInputOption(inputClass, 'time', 70, firstSettingTime); inputBox.set('must', '전광판 OFF 시각'); break default : break } }); } //input 옵션 세팅 function setVmsInputOption( inputClass, type, width, value, max, maskRules){ const inputBox = _vmsInputBoxMap.get(inputClass); inputBox.set('init', ''); if(value) inputBox.set('init', value); switch (type) { case 'text': inputBox.set('input', $('.' + inputClass).dxTextBox({ value : value, readOnly : true, width : width, stylingMode : 'outlined', height : 25, maskRules : maskRules, maxLength : max, }).dxTextBox('instance')); break; case 'number': inputBox.set('input', $('.' + inputClass).dxNumberBox({ value : value, readOnly : true, width : width, stylingMode : 'outlined', showSpinButtons : true, height : 25, min : 1, max : max, }).dxNumberBox('instance')); break; case 'select': const valueExpr = inputClass; const displayExpr = valueExpr.substring(0,valueExpr.length-2) + 'desc'; inputBox.set('input', $('.' + inputClass).dxSelectBox({ displayExpr : displayExpr, valueExpr : valueExpr, readOnly : true, width : width, stylingMode : 'outlined', height : 25, }).dxSelectBox('instance')); break; case 'time': inputBox.set('input', $('.' + inputClass).dxDateBox({ type : type, value : value, readOnly : false, width : width, stylingMode : 'outlined', height : 25, displayFormat : 'HH:mm', interval : 10, }).dxDateBox('instance')); break default: break; } } //버튼 옵션 세팅 function setVmsBtnOption( classNm, text, icon, event, visible, disabled){ let btn = _vmsBtnBoxMap.get(classNm).get('btn'); if(btn){ btn.option('text', text); btn.option('icon', icon); btn.option('onClick', event); btn.option('visible', visible); btn.option('disabled', disabled); btn.option('stylingMode', 'outlined'); }; }; //전체 VMS 적용 이벤트 function allVmsApplyEvent(){ const panlOnTime = getInput('panl_on_time'); const panlOffTime = getInput('panl_off_time'); let onTime = getValue(panlOnTime); let offTime = getValue(panlOffTime) let panlTimeParam = {}; let data = []; let ctrlNmvr = null; for (let panlTimeColumn of panlTimeColumns){ const inputBox = _vmsInputBoxMap.get(panlTimeColumn); const input = getInput(panlTimeColumn); if (nullChecker(getValue(input)) === ""){ input.focus(); return alertWarning(inputBox.get('must') + '을 입력해주세요', null, input); } else if (input.option('validationError')){ input.focus(); return alertWarning('전광판 On/Off 시각을 바르게 입력해주세요', null, input); } }; if (_vmsTableList.getSelectedRowsData().length > 0) ctrlNmvr = _vmsTableList.getSelectedRowsData()[0].vms_ctlr_nmbr; confirmMessage("제어기 설정 정보를 전체 VMS에 동일하게 적용 하시겠습니까?").done((yes) => { if (yes === true) { onTime = getSendTime(onTime); offTime = getSendTime(offTime); panlTimeParam['panl_on_time'] = onTime; panlTimeParam['panl_off_time'] = offTime; const result = postInsertUpdate(_apiUri + '/panl-time', panlTimeParam); if (result > 0) { refresh(_vmsTableList, data, _apiUri); if (ctrlNmvr){ _vmsTableList.clearSelection(); _vmsTableList.selectRows(ctrlNmvr, true).done(function () { _vmsTableList.option("focusedRowKey", ctrlNmvr); _vmsTableList.refresh(); }); }; eventOff(); return alertConfirm('VMS 제어기 설정 정보저장
제이기 설정 정보를 전체 제어기에 적용 하였습니다.'); }; //return alertConfirm('VMS 제이기 설정 정보저장
제이기 설정 정보를 전체 제어기에 적용 되지 않았습니다.'); } }); }; //닫기 이벤트 function closeEvent(){ window.close(); }; //편집 이벤트 function editEvent(){ eventOn(); editFcltObject(_selectFcltNmbr, true); _vmsBtnBoxMap.get('save-btn').get('btn').off('click'); _vmsBtnBoxMap.get('save-btn').get('btn').on('click', () => saveEvent('edit')); }; //추가 이벤트 function addEvent(){ eventOn(true); let center = _mapManager.getCenter(); const xCrdn = getInput('x_crdn'); const yCrdn = getInput('y_crdn'); setValue(xCrdn, center[0]); setValue(yCrdn, center[1]); const newNum = getNewNmbr(); addFcltObject(newNum); setValue( getInput('vms_ctlr_nmbr'), newNum); _vmsBtnBoxMap.get('save-btn').get('btn').off('click'); _vmsBtnBoxMap.get('save-btn').get('btn').on('click', () => saveEvent()); }; //삭제 이벤트 function delEvent(){ const vmsCtlrNmbr = _vmsTableList.getSelectedRowsData()[0].vms_ctlr_nmbr; if (confirm(_pageMsg + "번호 : " + vmsCtlrNmbr + "\n선택하신 " + _pageMsg + " 정보를 삭제하시겠습니까?")) { const result = deleteData(_apiUri, vmsCtlrNmbr); if (result > 0) { delResultMsg(_pageMsg); _managerData = refresh(_vmsTableList, _managerData, _apiUri); _vmsTableList.refresh().done(function () { _vmsTableList.option("focusedRowIndex", -1); _vmsTableList.clearSelection(); }); deleteFcltObject(vmsCtlrNmbr); } } }; //저장 이벤트 function saveEvent(type){ let updateData = {..._updateColumns}; if (type === 'edit') { let rowData = _vmsTableList.getSelectedRowsData()[0]; for (let key in updateData) { updateData[key] = rowData[key]; } } let selected = false; for( let inputClass of _inputClasses){ const inputBox = _vmsInputBoxMap.get(inputClass); const input = getInput(inputClass); const value = input.option('value'); if(inputBox.get('must') && nullChecker(value) === ""){ input.focus(); return alertWarning(inputBox.get('must') + " 정보를 입력해주세요.", null, input); }; updateData[inputClass] = value; }; if(!/^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}$/.test(updateData.vms_ctlr_ip)){ const edIp = getInput('vms_ctlr_ip'); edIp.focus(); return alertWarning("스트리밍 주소 IP를 형식에 맞게 입력해주세요.", null, edIp); }; if( updateData.web_cmra_ip && !/^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}$/.test(updateData.web_cmra_ip)){ const edIp = getInput('web_cmra_ip'); edIp.focus(); return alertWarning("웹카메라 IP를 형식에 맞게 입력해주세요.", null, edIp); }; if( updateData.strm_http_addr && !/^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}$/.test(updateData.strm_http_addr)){ const edIp = getInput('strm_http_addr'); edIp.focus(); return alertWarning("스트리밍 HTTP 주소 IP를 형식에 맞게 입력해주세요.", null, edIp); }; if( updateData.strm_rtsp_addr && !/^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}$/.test(updateData.strm_rtsp_addr)){ const edIp = getInput('strm_rtsp_addr'); edIp.focus(); return alertWarning("스트리밍 RSTP 주소 IP를 형식에 맞게 입력해주세요.", null, edIp); }; for( let panlTimeColumn of panlTimeColumns){ const input = getInput(panlTimeColumn); if(input.option('validationError')){ input.focus(); return alertWarning('전광판 On/Off 시각을 바르게 입력해주세요', null, input); } } updateData.panl_on_time = getSendTime(updateData.panl_on_time); updateData.panl_off_time = getSendTime(updateData.panl_off_time); updateData.vms_id = updateData.vms_ctlr_nmbr % 10000; updateData.vms_modl_type_cd = updateData.vms_usag_type_cd === 'VUTN' ? "VMM0" : "VMM1"; if (_vmsTableList.getRowIndexByKey(updateData.vms_ctlr_nmbr) > -1 && _vmsTableList.getSelectedRowsData().length > 0){ let selectedData = _vmsTableList.getSelectedRowsData()[0]; for(let key in updateData){ if(!_inputClasses.includes(key) && key !== 'vms_id' && key !== 'vms_modl_type_cd'){ updateData[key] = selectedData[key]; } } selected = true; } console.log(updateData); let result = postInsertUpdate(_apiUri + "/" + updateData.vms_ctlr_nmbr, updateData); if (result <= 0) { return alertWarning("VMS 제어기 정보가 저장되지 않았습니다."); } insResultMsg("VMS 제어기"); _managerData = refresh(_vmsTableList, _managerData, _apiUri); if(selected){ _vmsTableList.clearSelection(); _vmsTableList.selectRows(updateData.vms_ctlr_nmbr, true).done(function () { _vmsTableList.option("focusedRowKey", updateData.vms_ctlr_nmbr); _vmsTableList.refresh(); }); } eventOff(); }; //취소 이벤트 function cancleEvent(){ eventOff(); }; //vms 목록 더블클릭 이벤트 function vmsTableDblClick(row){ if(row.data){ const vmsInfo = row.data; _selectFcltNmbr = vmsInfo.vms_ctlr_nmbr; selectFcltObject(_selectFcltNmbr); _inputClasses.forEach(inputClass => { const inputBox = _vmsInputBoxMap.get(inputClass).get('input'); setValue(inputBox, vmsInfo[inputClass]); if(inputClass === 'panl_on_time' || inputClass === 'panl_off_time'){ let timeVal = vmsInfo[inputClass]; let now = nowTime(); timeVal = now.substring(0,10) +' '+ timeVal.substring(0,2) + ':' + timeVal.substring(2,4)+ ':00'; timeVal = new Date(timeVal).getTime(); setValue(inputBox, timeVal); } }); _btnClasses.forEach( (btnClass)=>{ const btnInfoBox = _vmsBtnBoxMap.get(btnClass); const btn = btnInfoBox.get('btn'); if(btnInfoBox.get('dblClick')){ const options = btnInfoBox.get('dblClick'); btn.option('visible', options[0]); btn.option('disabled', options[1]); } }) } } //이벤트 실행시 발생 이벤트 function eventOn(init){ _btnClasses.forEach( (btnClass)=>{ const btnInfoBox = _vmsBtnBoxMap.get(btnClass); const btn = btnInfoBox.get('btn'); if(btnInfoBox.get('event')){ const options = btnInfoBox.get('event'); btn.option('visible', options[0]); btn.option('disabled', options[1]); }; }); _inputClasses.forEach(inputClass => { const inputInfoBox = _vmsInputBoxMap.get(inputClass); const inputBox = inputInfoBox.get('input'); inputBox.option('readOnly', false); if(inputClass === 'vms_ctlr_nmbr'){ inputBox.option('readOnly', true); } if(init){ inputBox.option('value', inputInfoBox.get('init')); } }); dsblOnBtn(_vmsTableList); } //이벤트 취소시 발생 이벤트 function eventOff(){ dsblOffBtn(_vmsTableList); updateIcon(); const selectedData = _vmsTableList.getSelectedRowsData(); const selected = selectedData.length > 0 ? true : false; _btnClasses.forEach( (btnClass)=>{ const btnInfoBox = _vmsBtnBoxMap.get(btnClass); const btn = btnInfoBox.get('btn'); if(btnInfoBox.get('cancle')){ const options = btnInfoBox.get('cancle'); btn.option('visible', options[0]); if (selected) { btn.option('disabled', options[1]); } else{ btn.option('disabled', options[2]); } }; }); _inputClasses.forEach(inputClass => { const inputInfoBox = _vmsInputBoxMap.get(inputClass); const inputBox = inputInfoBox.get('input'); inputBox.option('readOnly', true); if('panl_on_time' === inputClass || 'panl_off_time' === inputClass) inputBox.option('readOnly', false); if (selected) { inputBox.option('value', selectedData[0][inputClass]); } else{ inputBox.option('value', inputInfoBox.get('init')); } }); } /** * 제어기 신규 ID 조회 */ function getNewNmbr() { let newId = []; getData(_apiUri + "/new-id", newId); _selectFcltNmbr = newId[0].new_id; return _selectFcltNmbr; } /** * 지도 인터페이스 함수........ */ function doMap() { _mapManager = new TMapMngr("vms-map", "tooltip"); _mapManager.setEditMode(_lyrIdx, true); _mapManager.showLayer(_lyrIdx, true); _mapManager.showFcltObjectText(_lyrIdx, true); _mapManager.onFcltDragEndFunc = onFcltDragEndFunc; // 객체(시설물) 편집시 객체 이동후 좌표 반환 _mapManager.onMouseClickFunc = onMouseClickFunc; // 객체 마우스 클릭 이벤트 반환 fetchMapIconBar($('.map-bar'), _mapManager, _lyrIdx, _pageName); } function onFcltDragEndFunc(ALyrIdx, ALyrName, ANmbr, ACoordX, ACoordY) { if (ALyrIdx != _lyrIdx) { return; } if (ANmbr === _selectFcltNmbr) { setValue(getInput('x_crdn'), ACoordX.toFixed(7)); setValue(getInput('y_crdn'), ACoordY.toFixed(7)); } console.log(`onFcltDragEndFunc, ${ALyrIdx}, ${ALyrName}, ${ANmbr}, ${ACoordX}, ${ACoordY}`); } function onMouseClickFunc(ALyrIdx, ALyrName, ANmbr, ACoordX, ACoordY, X, Y) { if (ALyrIdx != _lyrIdx) { return; } console.log(`onMouseClickFunc, ${ALyrIdx}, ${ALyrName}, ${ANmbr}, ${ACoordX}, ${ACoordY}, ${X}, ${Y}`); const obj = _mapManager.findLayerObject(ALyrIdx, ANmbr); if (!obj) { return; } } /** * 지도에 시설물 객체 정보를 그린다. */ function updateIcon() { // 기존 객체를 모두 삭제한다. _mapManager.removeLayerObject(_lyrIdx); // 시설물 객체를 지도에 그린다. const objs = new Array(); _managerData[0].forEach((obj) => { const item = new TFclt(obj.vms_ctlr_nmbr, obj.vms_nm, obj.x_crdn, obj.y_crdn); objs.push(item); }); console.log(_lyrIdx, objs); _mapManager.initFcltObject(_lyrIdx, objs); } function selectFcltObject(ANmbr) { _mapManager.selectLayerObject(_lyrIdx, ANmbr); } function editFcltObject(ANmbr, AIsEdit) { _mapManager.editFcltObject(_lyrIdx, ANmbr, AIsEdit, AIsEdit ? "1" : "0"); } function deleteFcltObject(ANmbr) { _mapManager.deleteFcltObject(_lyrIdx, ANmbr); _selectFcltNmbr = null; } function addFcltObject(ANmbr) { _mapManager.createFcltObject(_lyrIdx, ANmbr, "New", "New", "1" /*아이콘색결정,시설물유형_N.png*/ /*, x_crdn, y_crdn*/); } function getInput(column){ return _vmsInputBoxMap.get(column).get('input') } //좌표값 변경 시 이벤트 function crdnChanges(text, num){ let value = text.value; const textBox = text.component if(!value || isNaN(value)) return setValue(textBox, '0.0000000'); value = value.toString(); if(value.length <= num) return setValue(textBox, value + ".0000000"); if (!value.includes(".")){ let front = value.substr(0, num); let end = value.substr(num, value.length); let zero = ""; if (end.length < 7) { for (let ii = 0; ii < 7 - end.length; ii++) { zero += "0"; } } if (end.length > 7) end = end.substring(0, 7); setValue(textBox, front + "." + end + zero); } else{ switch (true) { case value.substring(0, value.indexOf(".")) === "": setValue(textBox, "0" + value); break; case value.substring(value.indexOf("."), value.length) === "": setValue(textBox, value + "0000000"); break; case value.substring(value.indexOf("."), value.length).length < 7: let zero = ""; for (let ii = 0; ii < 7 - value.substring(value.indexOf(".") + 1, value.length).length; ii++) { zero += "0"; } setValue(textBox, value.substring(0, value.indexOf(".")) + value.substring(value.indexOf("."), value.length) + zero); break; default: break; } } }