From bda3207d19f12fb6788e170cba16489adc228ce4 Mon Sep 17 00:00:00 2001 From: "icksishu@gmail.com" Date: Tue, 9 Dec 2025 15:42:48 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=90=EC=9D=B4=EC=A0=84=ED=8A=B8=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=9D=BC=EB=B0=98=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=A7=84=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../front/src/components/AgentConfigView.vue | 231 ++++++++++++++---- .../front/src/components/MessageDataView.vue | 24 +- 2 files changed, 205 insertions(+), 50 deletions(-) diff --git a/src/main/front/src/components/AgentConfigView.vue b/src/main/front/src/components/AgentConfigView.vue index 3d61814..82792bc 100644 --- a/src/main/front/src/components/AgentConfigView.vue +++ b/src/main/front/src/components/AgentConfigView.vue @@ -47,6 +47,14 @@ const agentConfig = reactive({ postmanList: [], }, }) +let originalDtoString = '' +const agentConfigDeleted = { + knownAgentList: [], + dataSourceConfig: [], + logging: { + packages: [], + }, +} onMounted(() => { if (modalEl.value) { @@ -59,35 +67,135 @@ onMounted(() => { }) onBeforeUnmount(() => { - if (bsModal) { - bsModal.hide() - // Bootstrap v5에서는 dispose 지원 - if (typeof bsModal.dispose === 'function') { - bsModal.dispose() - } - bsModal = null + if (!bsModal) return + const instance = bsModal + const el = instance._element || modalEl.value + if (el) { + el.addEventListener( + 'hidden.bs.modal', + () => { + if (typeof instance.dispose === 'function') { + instance.dispose() + } + }, + { once: true }, + ) + instance.hide() } + bsModal = null }) +// 부모 컴포넌트에서 AgentConfigView 팝업 호출(defineExpose에 추가됨) function open() { if (bsModal) { if (props.dto) { + originalDtoString = JSON.stringify(props.dto) Object.assign(agentConfig, props.dto) } bsModal.show() } } +// 부모 컴포넌트에서 AgentConfigView 팝업 닫기(defineExpose에 추가됨) function close() { if (bsModal) { bsModal.hide() } } +// props.dto 기준으로 agentConfig reload +function configReload() { + Object.assign(agentConfig, JSON.parse(originalDtoString)) +} + +// agentConfig의 내용을 json 파일로 다운로드 function configExport() {} +// agentConfig의 내용을 서버에 전송하여 저장 function configSave() {} +// knownAgent 한 줄 추가 +function addKnownAgent() { + const knownAgent = { + hostId: '', + hostName: '', + listenPort: '', + dropBoxIdList: [], + routingHostIdList: [], + added: true, + } + agentConfig.knownAgentList.push(knownAgent) +} + +// 선택된 knownAgent 삭제 +function deleteKnownAgent() { + for (let i = agentConfig.knownAgentList.length - 1; i >= 0; i--) { + if (agentConfig.knownAgentList[i].selected) { + let splicedList = agentConfig.knownAgentList.splice(i, 1) + if (Object.keys(splicedList[0]).indexOf('added') == -1) { + agentConfigDeleted.knownAgentList.push(splicedList) + } + } + } +} + +// dataSource 한 줄 추가 +function addDataSource() { + const dataSource = { + dataSourceId: '', + driverClassName: '', + url: '', + username: '', + password: '', + initialSize: 10, + minIdle: 10, + maxIdle: 30, + maxTotal: 300, + maximumRowForTransaction: 1000, + added: true, + } + agentConfig.dataSourceConfig.push(dataSource) +} + +// 선택된 dataSource 삭제 +function deleteDataSource() { + for (let i = agentConfig.dataSourceConfig.length - 1; i >= 0; i--) { + if (agentConfig.dataSourceConfig[i].selected) { + let splicedList = agentConfig.dataSourceConfig.splice(i, 1) + if (Object.keys(splicedList[0]).indexOf('added') == -1) { + agentConfigDeleted.dataSourceConfig.push(splicedList) + } + } + } +} + +function addLoggingPackage() { + agentConfig.logging.packages.push({ '': 'INFO' }) +} + +function deleteLoggingPackage() { + for (let i = agentConfig.dataSourceConfig.length - 1; i >= 0; i--) { + if (agentConfig.dataSourceConfig[i].selected) { + let splicedList = agentConfig.dataSourceConfig.splice(i, 1) + if (Object.keys(splicedList[0]).indexOf('added') == -1) { + agentConfigDeleted.dataSourceConfig.push(splicedList) + } + } + } +} + +function changeLoggingPackageName(loggingPackageObject, loggingPackageName, newLoggingPackageName) { + newLoggingPackageName = newLoggingPackageName.trim() + if (!newLoggingPackageName || loggingPackageName === newLoggingPackageName) { + return + } + if (Object.prototype.hasOwnProperty.call(loggingPackageObject, newLoggingPackageName)) { + return + } + loggingPackageObject[newLoggingPackageName] = loggingPackageObject[loggingPackageName] + delete loggingPackageObject[loggingPackageName] +} + defineExpose({ open, close, @@ -102,6 +210,7 @@ defineExpose({