에이전트 설정 일반 부분 로직 완료, DropBox 로직 완료

main
icksishu@gmail.com 1 month ago
parent bda3207d19
commit 9911a401fd

@ -54,8 +54,13 @@ const agentConfigDeleted = {
logging: {
packages: [],
},
dropBoxConfig: {
dropBoxList: [],
},
}
window.debugData = agentConfig
onMounted(() => {
if (modalEl.value) {
// ,
@ -133,7 +138,7 @@ function deleteKnownAgent() {
if (agentConfig.knownAgentList[i].selected) {
let splicedList = agentConfig.knownAgentList.splice(i, 1)
if (Object.keys(splicedList[0]).indexOf('added') == -1) {
agentConfigDeleted.knownAgentList.push(splicedList)
agentConfigDeleted.knownAgentList.push(splicedList[0])
}
}
}
@ -163,7 +168,7 @@ function deleteDataSource() {
if (agentConfig.dataSourceConfig[i].selected) {
let splicedList = agentConfig.dataSourceConfig.splice(i, 1)
if (Object.keys(splicedList[0]).indexOf('added') == -1) {
agentConfigDeleted.dataSourceConfig.push(splicedList)
agentConfigDeleted.dataSourceConfig.push(splicedList[0])
}
}
}
@ -174,13 +179,14 @@ function addLoggingPackage() {
}
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)
const checkboxList = document.getElementsByClassName('agent-config-logging-packages-checkbox')
for (let i = checkboxList.length - 1; i >= 0; i--) {
if (checkboxList[i].checked) {
agentConfig.logging.packages.splice(i, 1)
}
}
for (let i = checkboxList.length - 1; i >= 0; i--) {
checkboxList[i].checked = false
}
}
@ -196,6 +202,31 @@ function changeLoggingPackageName(loggingPackageObject, loggingPackageName, newL
delete loggingPackageObject[loggingPackageName]
}
// dropBox
function addDropBox() {
const dropBox = {
dropBoxId: '',
taskType: 'RECEIVE_DB_TO_DB_SAVE',
dataSourceId: '',
sqlId: '',
description: '',
added: true,
}
agentConfig.dropBoxConfig.dropBoxList.push(dropBox)
}
// dropBox
function deleteDropBox() {
for (let i = agentConfig.dropBoxConfig.dropBoxList.length - 1; i >= 0; i--) {
if (agentConfig.dropBoxConfig.dropBoxList[i].selected) {
let splicedList = agentConfig.dropBoxConfig.dropBoxList.splice(i, 1)
if (Object.keys(splicedList[0]).indexOf('added') == -1) {
agentConfigDeleted.dropBoxConfig.dropBoxList.push(splicedList[0])
}
}
}
}
defineExpose({
open,
close,
@ -445,7 +476,7 @@ defineExpose({
</thead>
<tbody class="table-group-divider">
<tr v-if="agentConfig.logging.packages.length > 0" v-for="(loggingPackage, rowIndex) in agentConfig.logging.packages">
<td scope="row" class="text-center"><input type="checkbox" class="form-check-input" /></td>
<td scope="row" class="text-center"><input type="checkbox" class="form-check-input agent-config-logging-packages-checkbox" /></td>
<template v-for="(level, packageName) in loggingPackage" :key="packageName">
<td>
<input type="text" class="form-control" :value="packageName" @change="changeLoggingPackageName(loggingPackage, packageName, $event.target.value)" />
@ -476,19 +507,19 @@ defineExpose({
<div class="tab-pane fade tab-pane-scroll" id="dropbox-tab-pane" role="tabpanel" aria-labelledby="dropbox-tab" tabindex="0">
<div class="row mb-2">
<div class="col-md-12">
<h5>DropBox General</h5>
<h5>드롭박스 일반(DropBox General)</h5>
</div>
</div>
<div class="row mb-2">
<div class="col-md-5">
<div class="input-group">
<span class="input-group-text" id="agent-config-received-message-storage-root-label">receivedMessageStorageRoot</span>
<span class="input-group-text" id="agent-config-received-message-storage-root-label">수신 메시지 저장 경로(receivedMessageStorageRoot)</span>
<input type="text" class="form-control" id="agent-config-received-message-storage-root-input" aria-describedby="agent-config-received-message-storage-root-label agent-config-received-message-storage-root-input" v-model="agentConfig.dropBoxConfig.receivedMessageStorageRoot" />
</div>
</div>
<div class="col-md-5">
<div class="input-group">
<span class="input-group-text" id="agent-config-processed-message-storage-root-label">processedMessageStorageRoot</span>
<span class="input-group-text" id="agent-config-processed-message-storage-root-label">처리 메시지 저장 경로(processedMessageStorageRoot)</span>
<input type="text" class="form-control" id="agent-config-processed-message-storage-root-input" aria-describedby="agent-config-processed-message-storage-root-label agent-config-processed-message-storage-root-input" v-model="agentConfig.dropBoxConfig.processedMessageStorageRoot" />
</div>
</div>
@ -496,13 +527,13 @@ defineExpose({
<div class="row mb-2">
<div class="col-md-5">
<div class="input-group">
<span class="input-group-text" id="agent-config-failure-message-storage-root-label">failureMessageStorageRoot</span>
<span class="input-group-text" id="agent-config-failure-message-storage-root-label">실패 메시지 저장 경로(failureMessageStorageRoot)</span>
<input type="text" class="form-control" id="agent-config-failure-message-storage-root-input" aria-describedby="agent-config-failure-message-storage-root-label agent-config-failure-message-storage-root-input" v-model="agentConfig.dropBoxConfig.failureMessageStorageRoot" />
</div>
</div>
<div class="col-md-5">
<div class="input-group">
<span class="input-group-text" id="agent-config-manual-message-storage-root-label">manualMessageStorageRoot</span>
<span class="input-group-text" id="agent-config-manual-message-storage-root-label">수동 메시지 저장 경로(manualMessageStorageRoot)</span>
<input type="text" class="form-control" id="agent-config-manual-message-storage-root-input" aria-describedby="agent-config-manual-message-storage-root-label agent-config-manual-message-storage-root-input" v-model="agentConfig.dropBoxConfig.manualMessageStorageRoot" />
</div>
</div>
@ -510,13 +541,13 @@ defineExpose({
<div class="row mb-2">
<div class="col-md-5">
<div class="input-group">
<span class="input-group-text" id="agent-config-drop-box-thread-pool-size-label">threadPoolSize</span>
<span class="input-group-text" id="agent-config-drop-box-thread-pool-size-label">드롭박스 처리 쓰레드풀 크기(threadPoolSize)</span>
<input type="number" class="form-control" id="agent-config-drop-box-thread-pool-size-input" aria-describedby="agent-config-drop-box-thread-pool-size-label agent-config-drop-box-thread-pool-size-input" v-model="agentConfig.dropBoxConfig.threadPoolSize" />
</div>
</div>
<div class="col-md-5">
<div class="input-group">
<span class="input-group-text" id="agent-config-drop-box-retent-days-of-processed-message-label">retentionDaysOfProcessedMessage</span>
<span class="input-group-text" id="agent-config-drop-box-retent-days-of-processed-message-label">메시지 파일 유지 기간(retentionDaysOfProcessedMessage)</span>
<input type="number" class="form-control" id="agent-config-drop-box-retent-days-of-processed-message-input" aria-describedby="agent-config-drop-box-retent-days-of-processed-message-label agent-config-drop-box-retent-days-of-processed-message-input" v-model="agentConfig.dropBoxConfig.retentionDaysOfProcessedMessage" />
</div>
</div>
@ -524,28 +555,36 @@ defineExpose({
<hr />
<div class="row m-1">
<div class="card p-0">
<div class="card-header"><h5>dropBoxList</h5></div>
<div class="card-body">
<table class="table table-striped table-bordered align-middle">
<div class="card-header d-flex">
<h5 class="mb-0">드롭박스 목록 설정(dropBoxList)</h5>
<div class="ms-auto">
<button type="button" class="btn btn-sm btn-success" @click.prevent="addDropBox">추가</button>
<button type="button" class="btn btn-sm btn-danger ms-2" @click.prevent="deleteDropBox">삭제</button>
</div>
</div>
<div class="card-body table-scroll">
<table class="table table-striped table-bordered align-middle table-sticky">
<thead>
<tr>
<th scope="col" class="text-center">dropBoxId</th>
<th scope="col" class="text-center">taskType</th>
<th scope="col" class="text-center">dataSourceId</th>
<th scope="col" class="text-center">sqlId</th>
<th scope="col" class="text-center">description</th>
<th scope="col" class="text-center">선택</th>
<th scope="col" class="text-center">드롭박스ID (dropBoxId)</th>
<th scope="col" class="text-center">동작 방식 (taskType)</th>
<th scope="col" class="text-center">데이터소스ID (dataSourceId)</th>
<th scope="col" class="text-center">SQL ID(sqlId)</th>
<th scope="col" class="text-center">설명 (description)</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr v-if="agentConfig.dropBoxConfig.dropBoxList.length > 0" v-for="dropBox in agentConfig.dropBoxConfig.dropBoxList" :key="dropBox.dropBoxId">
<td scope="row">{{ dropBox.dropBoxId }}</td>
<td>{{ dropBox.taskType }}</td>
<td>{{ dropBox.dataSourceId }}</td>
<td>{{ dropBox.sqlId }}</td>
<td>{{ dropBox.description }}</td>
<td scope="row" class="text-center"><input type="checkbox" class="form-check-input" v-model="dropBox.selected" /></td>
<td><input type="text" class="form-control" v-model="dropBox.dropBoxId" /></td>
<td><input type="text" class="form-control" v-model="dropBox.taskType" /></td>
<td><input type="text" class="form-control" v-model="dropBox.dataSourceId" /></td>
<td><input type="text" class="form-control" v-model="dropBox.sqlId" /></td>
<td><input type="text" class="form-control" v-model="dropBox.description" /></td>
</tr>
<tr v-else>
<td scope="row" class="text-center" colspan="5">no dropBox.</td>
<td scope="row" class="text-center" colspan="6">no dropBox.</td>
</tr>
</tbody>
</table>
@ -572,8 +611,8 @@ defineExpose({
<div class="row m-1">
<div class="card p-0">
<div class="card-header"><h5>postmanList</h5></div>
<div class="card-body data-table-wrapper">
<table class="table table-striped table-bordered align-middle data-table">
<div class="card-body table-scroll">
<table class="table table-striped table-bordered align-middle table-sticky">
<thead>
<tr>
<th scope="col" class="text-center" rowspan="2">postmanId</th>
@ -627,8 +666,8 @@ defineExpose({
<style scoped>
/* 모달이 화면을 거의 꽉 채우게 */
.data-modal-dialog {
max-width: calc(100% - 4vh); /* 좌우 95% */
margin: 2vh auto; /* 위아래 여백 조금 */
max-width: calc(100% - 4vh);
margin: 2vh auto;
}
/* 모달 전체 높이를 화면의 95% 정도로 */
@ -641,54 +680,26 @@ defineExpose({
/* 헤더/푸터 빼고 나머지 영역을 테이블 영역으로 */
.data-modal-body {
flex: 1 1 auto;
overflow: hidden; /* 여기서는 스크롤 안 하고 */
overflow: hidden;
padding: 0.5rem;
display: flex;
flex-direction: column;
}
/* 실제 스크롤이 일어나는 영역 */
.data-table-wrapper {
height: 100%;
overflow: auto; /* 세로/가로 스크롤 모두 */
}
/* 컬럼이 많을 때 한 줄에 계속 붙게(가로 스크롤) */
.data-table {
white-space: nowrap;
border-collapse: separate;
border-spacing: 0;
}
/* 헤더 전체를 sticky 처리 */
.data-table thead {
position: sticky;
top: 0;
z-index: 2;
}
/* 헤더 배경/글자 색 지정 */
.data-table thead th {
background-color: #343a40;
color: #fff;
}
/* 모달 header 패딩 조정 */
.modal-header {
display: flex;
align-items: center;
justify-content: space-between;
/* 상·하 4px, 좌·우는 기존처럼 16px */
padding: 0.5rem 1rem;
}
/* 큰 스위치용 커스텀 클래스 */
.form-switch.form-switch-lg .form-check-input {
width: 3rem; /* 가로 길이 늘리기 */
height: 1.5rem; /* 세로 길이 늘리기 */
width: 3rem;
height: 1.5rem;
}
/* 너무 붙어 보이면 왼쪽 여백 조정 */
.form-switch.form-switch-lg {
padding-left: 3.5rem;
padding-top: 0.2rem;
@ -696,13 +707,40 @@ defineExpose({
.tab-content {
flex: 1 1 auto;
min-height: 0; /* 이거 중요: 자식이 줄어들 수 있어야 스크롤 생김 */
min-height: 0;
}
/* 실제 스크롤이 생기는 곳: general 탭 pane */
.tab-pane-scroll {
height: 100%;
overflow-y: auto; /* 세로 스크롤만 */
overflow-x: hidden; /* 가로 스크롤 숨김 */
height: 100%; /* tab-content 높이에 맞추기 */
overflow-y: auto; /* 세로 스크롤 */
overflow-x: hidden; /* 가로 스크롤은 숨기기 */
}
/* 카드 안에서만 스크롤되는 테이블 영역 */
.table-scroll {
max-height: 50vh; /* 필요에 따라 조절 */
overflow: auto;
position: relative; /* sticky 기준 컨테이너 */
padding-top: 0;
}
/* sticky header를 쓰는 테이블 공용 스타일 */
.table-sticky {
white-space: nowrap;
border-collapse: separate;
border-spacing: 0;
}
/* thead 전체를 sticky로 고정 */
.table-sticky thead {
position: sticky;
top: 0;
z-index: 2;
}
/* 헤더 셀 스타일 */
.table-sticky thead th {
background-color: #343a40; /* 덮어씌우는 느낌으로 진하게 */
color: #fff;
}
</style>

Loading…
Cancel
Save