경남은행 요청 사항 반영

This commit is contained in:
현성필
2023-08-22 13:57:18 +09:00
parent 38d088cce0
commit 32a5719a12
13 changed files with 490 additions and 354 deletions
@@ -10,35 +10,45 @@
<header th:fragment="headerFragment" class="border-bottom" id="header">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">
API Simulator
<a th:href="@{/}" class="text-dark text-decoration-none">
<div class="d-flex align-items-center">
<img th:src="@{/img/logo.png}" class="logo me-3"/>
<div class="logo_only" style="width: 20px; height: 30px; border-left: 2px solid #efefef;"></div>
<span class="fs-3 logo_only" style="color: #6d6447">API Simulator</span>
</div>
</a>
<div class="d-flex" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item" sec:authorize="isAuthenticated()">
<div class="d-flex justify-content-end">
<div class="d-flex flex-fill justify-content-between hide">
<div class="text-center flex-fill" sec:authorize="isAuthenticated()">
<a class="nav-link" href="/mgmt/routes/list_view.do">응답 관리</a>
</li>
<li class="nav-item" sec:authorize="isAuthenticated()">
<a class="nav-link" href="/mgmt/api_tester.do">테스터</a>
</li>
<li class="nav-item dropdown" sec:authorize="hasRole('ROLE_ADMIN')">
<a class="nav-link dropdown-toggle" href="#" id="mgmtDropDown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
시스템 관리
</a>
<ul class="dropdown-menu" aria-labelledby="mgmtDropDown">
<li><a class="dropdown-item" href="/mgmt/users/list_view.do">사용자 관리</a></li>
<!-- <li><a class="dropdown-item" href="/mgmt/groups/list_view.do">그룹 관리</a></li>-->
<li><a class="dropdown-item" href="/mgmt/servers/list_view.do">서버 관리</a></li>
</ul>
</li>
<li class="nav-item" sec:authorize="isAnonymous()">
</div>
<div class="text-center flex-fill" sec:authorize="isAuthenticated()">
<a class="nav-link" href="/mgmt/api_tester.do">요청 관리</a>
</div>
<div class="text-center flex-fill" sec:authorize="hasRole('ROLE_ADMIN')" >
<div class="d-flex justify-content-center">
<div class="nav-item dropdown">
<a class="nav-link" style="padding: 0.5rem 0.5rem !important;" href="#" id="mgmtDropDown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<span>시스템 관리</span>
</a>
<ul class="dropdown-menu" aria-labelledby="mgmtDropDown" style="width: 8rem;">
<li><a class="dropdown-item" href="/mgmt/users/list_view.do">사용자 관리</a></li>
<!-- <li><a class="dropdown-item" href="/mgmt/groups/list_view.do">그룹 관리</a></li>-->
<li><a class="dropdown-item" href="/mgmt/servers/list_view.do">서버 관리</a></li>
</ul>
</div>
</div>
</div>
<div class="text-center flex-fill" sec:authorize="isAuthenticated()">
<a href="/change_password.do" class="nav-link">비밀번호 변경</a>
</div>
<div class="text-center flex-fill" sec:authorize="isAuthenticated()">
<a href="/actionLogout.do" class="nav-link">로그 아웃</a>
</div>
<div class="text-center flex-fill" sec:authorize="isAnonymous()">
<a href="/login" class="nav-link">로그인</a>
</li>
<li class="nav-item" sec:authorize="isAuthenticated()">
<a href="/change_password.do" class="nav-link">비밀번호 변경</a></li>
<li class="nav-item" sec:authorize="isAuthenticated()">
<a href="/actionLogout.do" class="nav-link">로그 아웃</a></li>
</ul>
</div>
</div>
</div>
</div>
</nav>
@@ -7,7 +7,7 @@
<script>
require.config({paths: {'vs': '/plugins/vs'}});
</script>
<div class="container mt-1">
<div class="container mt-2">
<form name="mockRouteForm" id="mockRouteForm"
th:action="${mockRoute.id == null}?@{/mgmt/routes/register.do}:@{/mgmt/routes/update.do}"
th:object='${mockRoute}' method="post">
@@ -8,26 +8,28 @@
<section layout:fragment="contentFragment">
<div class="container">
<div class="card mt-1">
<div class="card mt-2">
<div class="card-header">
<h1>응답 API 목록</h1>
</div>
<div class="card-body">
<div class="d-flex justify-content-between">
<form role="form" name="searchForm" th:action="@{/mgmt/routes/list_view.do}" method="get" th:object="${modelSearch}">
<form role="form" class="row g-3" name="searchForm" th:action="@{/mgmt/routes/list_view.do}" method="get" th:object="${modelSearch}">
<input name="page" type="hidden" value="1"/>
<div class="search_field">
<div class="search_field_input">
<input class="form-control" name="username" placeholder="이름" type="text" size="35" th:title="#{title.search}+ '' + #{input.input}"
th:value="${modelSearch.name}"
maxlength="255"/>
</div>
<div class="search_field_button">
<button type="button" class="btn btn-primary btn_search" th:value="#{button.inquire}"><i class="fa-sharp fa-solid fa-magnifying-glass"></i> [[#{title.inquire}]]
</button>
<button type="button" class="btn btn-primary btn_delete"><i class="fa-sharp fa-solid fa-trash"></i> [[#{title.delete}]]</button>
<button type="button" class="btn btn-primary btn_add"><i class="fa-sharp fa-solid fa-plus"></i> [[#{button.create}]]</button><!-- 등록 -->
</div>
<div class="col-auto">
<input class="form-control" name="username" placeholder="이름" type="text" size="35" th:title="#{title.search}+ '' + #{input.input}"
th:value="${modelSearch.name}"
maxlength="255"/>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_search" th:value="#{button.inquire}"><i class="fa-sharp fa-solid fa-magnifying-glass"></i> [[#{title.inquire}]]
</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_delete"><i class="fa-sharp fa-solid fa-trash"></i> [[#{title.delete}]]</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_add"><i class="fa-sharp fa-solid fa-plus"></i> [[#{button.create}]]</button><!-- 등록 -->
</div>
</form>
</div>
@@ -43,30 +45,38 @@
<colgroup>
<col style="width: 5%;">
<col style="width: 5%;">
<col style="width: 5%;">
<col style="width: 10%;">
<col>
<col>
<col style="width: 5%;">
</colgroup>
<thead>
<tr>
<th class="no">번호</th>
<th><input type="checkbox" name="checkAll" class="check2" onclick="fncCheckAll()" th:title="#{input.selectAll.title}"></th><!-- 전체선택 -->
<th>method</th>
<th>path</th>
<th>이름</th>
<th>비고</th>
<th><div class="text-center">번호</div></th>
<th>
<div class="text-center">
<input type="checkbox" name="checkAll" class="check2" onclick="fncCheckAll()" th:title="#{input.selectAll.title}">
</div>
</th>
<th><div class="text-center">method</div></th>
<th><div class="text-center">path</div></th>
<th><div class="text-center">이름</div></th>
<th><div class="text-center">비고</div></th>
</tr>
</thead>
<tbody>
<tr th:each="row, status : ${page.content}">
<td class="no" th:text="${page.getTotalElements() - (page.getNumber() * page.getSize() + status.count ) + 1}"></td>
<td class="text-center" th:text="${page.getNumber() * page.getSize() + status.count}"></td>
<td>
<input type="checkbox" name="checkField" class="check2" title="선택"/>
<input name="checkId" type="hidden" th:value="${row.id}"/>
<div class="d-flex justify-content-center">
<input type="checkbox" name="checkField" class="check2" title="선택"/>
<input name="checkId" type="hidden" th:value="${row.id}"/>
</div>
</td>
<td>
<span th:text="${row.method}"></span>
<div class="d-flex justify-content-center">
<span th:text="${row.method}"></span>
</div>
</td>
<td>
@@ -76,9 +86,11 @@
<span th:text="${row.name}"></span>
</td>
<td>
<button type="button" class="btn btn-primary btn-sm" th:onclick="fnSelectItem([[${row.id}]])" th:value="#{button.update}"><i class="fa-sharp fa-solid fa-edit"></i>
[[#{button.update}]]
</button>
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-primary btn-sm me-2" th:onclick="fnSelectItem([[${row.id}]])" th:value="#{button.update}"><i class="fa-sharp fa-solid fa-edit"></i>
[[#{button.update}]]
</button>
</div>
</td>
</tr>
<!-- 글이 없는 경우 -->
@@ -3,8 +3,8 @@
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/default_layout}">
<body>
<section layout:fragment="contentFragment">
<div class="container m-0">
<div class="card">
<div class="container">
<div class="card mt-2">
<div class="card-header">
<h1 th:if="${server.id == null}">서버 등록</h1>
<h1 th:if="${server.id != null}">서버 수정</h1>
@@ -14,21 +14,27 @@
</div>
<div class="card-body">
<div class="d-flex justify-content-between">
<form role="form" name="searchForm" th:action="@{/mgmt/servers/list_view.do}" method="get" th:object="${modelSearch}">
<form role="form" class="row g-3" name="searchForm" th:action="@{/mgmt/servers/list_view.do}" method="get" th:object="${modelSearch}">
<input name="page" type="hidden" value="1"/>
<div class="search_field">
<div class="search_field_input">
<input class="form-control" name="username" placeholder="이름" type="text" size="35" th:title="#{title.search}+ '' + #{input.input}"
th:value="${modelSearch.name}"
maxlength="255"/>
</div>
<div class="search_field_button">
<button type="button" class="btn btn-primary btn_search" th:value="#{button.inquire}"><i class="fa-sharp fa-solid fa-magnifying-glass"></i> [[#{title.inquire}]]
</button>
<button type="button" class="btn btn-primary btn_delete"><i class="fa-sharp fa-solid fa-trash"></i> [[#{title.delete}]]</button>
<button type="button" class="btn btn-primary btn_add"><i class="fa-sharp fa-solid fa-plus"></i> [[#{button.create}]]</button><!-- 등록 -->
</div>
<div class="col-auto">
<input class="form-control" name="username" placeholder="이름" type="text" size="35" th:title="#{title.search}+ '' + #{input.input}"
th:value="${modelSearch.name}"
maxlength="255"/>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_search" th:value="#{button.inquire}"><i class="fa-sharp fa-solid fa-magnifying-glass"></i> [[#{title.inquire}]]
</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_delete"><i class="fa-sharp fa-solid fa-trash"></i> [[#{title.delete}]]</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_add"><i class="fa-sharp fa-solid fa-plus"></i> [[#{button.create}]]</button><!-- 등록 -->
</div>
</form>
</div>
</div>
@@ -49,34 +55,46 @@
</colgroup>
<thead>
<tr>
<th class="no">번호</th>
<th><input type="checkbox" name="checkAll" class="check2" onclick="fncCheckAll()" th:title="#{input.selectAll.title}"></th><!-- 전체선택 -->
<th>이름</th>
<th>주소</th>
<th>사용 중</th>
<th>비고</th>
<th><div class="text-center">번호</div></th>
<th>
<div class="text-center">
<input type="checkbox" name="checkAll" class="check2" onclick="fncCheckAll()" th:title="#{input.selectAll.title}">
</div>
</th>
<th><div class="text-center">이름</div></th>
<th><div class="text-center">주소</div></th>
<th><div class="text-center">사용 중</div></th>
<th><div class="text-center">비고</div></th>
</tr>
</thead>
<tbody>
<tr th:each="row, status : ${page.content}">
<td class="no" th:text="${page.getTotalElements() - (page.getNumber() * page.getSize() + status.count ) + 1}"></td>
<td class="text-center" th:text="${page.getNumber() * page.getSize() + status.count}"></td>
<td>
<input type="checkbox" name="checkField" class="check2" title="선택"/>
<input name="checkId" type="hidden" th:value="${row.id}"/>
<div class="d-flex justify-content-center">
<input type="checkbox" name="checkField" class="check2" title="선택"/>
<input name="checkId" type="hidden" th:value="${row.id}"/>
</div>
</td>
<td>
<span th:text="${row.name}"></span>
<div class="d-flex justify-content-center">
<span th:text="${row.name}"></span>
</div>
</td>
<td>
<span th:text="${row.getFullHostAddress()}"></span>
</td>
<td>
<div class="d-flex justify-content-center">
<span th:text="${row.enabled}"></span>
</div>
</td>
<td>
<button type="button" class="btn btn-primary btn-sm" th:onclick="fnSelectItem([[${row.id}]])" th:value="#{button.update}"><i class="fa-sharp fa-solid fa-edit"></i>
[[#{button.update}]]
</button>
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-primary btn-sm me-2" th:onclick="fnSelectItem([[${row.id}]])" th:value="#{button.update}"><i class="fa-sharp fa-solid fa-edit"></i>
[[#{button.update}]]
</button>
</div>
</td>
</tr>
<!-- 글이 없는 경우 -->
@@ -6,7 +6,7 @@
</head>
<body>
<aside class="pt-sidebar" th:fragment="collectionFragment">
<aside class="pt-sidebar border" th:fragment="collectionFragment" style="min-width: 200px;">
<!-- <div class="input-group p-1">-->
<!-- <input type="text" class="form-control" placeholder="검색어를 입력하세요" aria-label="검색어를 입력하세요" id="filter_text"-->
<!-- aria-describedby="button-addon2">-->
@@ -17,11 +17,17 @@
</div>
</div>
</div>
<div class="container">
<div class="container-fluid mt-2">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
<ul class="nav nav-tabs" role="tablist" id="apiRequestTabTitle">
</ul>
<div class="tab-content" id="apiRequestTabContent">
<div class="card">
<div class="card-header" style="min-height: 50px;">
<ul class="nav nav-tabs card-header-tabs" role="tablist" id="apiRequestTabTitle">
</ul>
</div>
<div class="card-body" style="min-height: 800px;">
<div class="tab-content" id="apiRequestTabContent">
</div>
</div>
</div>
</div>
<div class="modal fade" id="new_api_request_modal" tabindex="-1" aria-labelledby="new_api_request_modal"
@@ -6,7 +6,7 @@
<body>
<section layout:fragment="contentFragment">
<div class="container m-0">
<div class="container">
<div class="card mt-2">
<div class="card-header">
<h1>비밀 번호 변경 </h1>
@@ -44,7 +44,7 @@
</div>
<div class="card-footer">
<button type="button" class="btn btn-primary btn_update"><i class="fa-sharp fa-solid fa-floppy-disk"></i> 저장</button>
<a th:href="@{/mypage.do}" class="btn btn-primary" th:title="#{button.cancel}"><i class="fa-sharp fa-solid fa-cancel"></i> [[#{button.cancel}]]</a>
<a th:href="@{/}" class="btn btn-primary" th:title="#{button.cancel}"><i class="fa-sharp fa-solid fa-cancel"></i> [[#{button.cancel}]]</a>
</div>
</div>
</div>
@@ -13,8 +13,8 @@
<form name="staffUserForm" id="staffUserForm" th:action="@{/admin_register.do}" th:object='${user}' method="post">
<input id="csrf" type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
<div class="form-floating mt-2">
<input type="email" class="form-control" th:classappend="${#fields.hasErrors('userId')}? 'is-invalid'" th:field="*{userId}" name="userId" id="userId" required th:readonly="${user.esntlId != null}"/>
<label for="userId" class="form-label must" th:text="#{email}">이메일</label>
<input type="text" class="form-control" th:classappend="${#fields.hasErrors('userId')}? 'is-invalid'" th:field="*{userId}" name="userId" id="userId" required th:readonly="${user.esntlId != null}"/>
<label for="userId" class="form-label must">사용자ID</label>
<th:block th:each="err : ${#fields.errors('userId')}">
<div th:text="${err}" class="invalid-feedback"></div>
</th:block>
@@ -4,8 +4,8 @@
<body>
<section layout:fragment="contentFragment">
<div class="container m-0">
<div class="card">
<div class="container">
<div class="card mt-2">
<div class="card-header">
<h1 th:if="${user.esntlId == null}">내부 사용자 등록</h1>
<h1 th:if="${user.esntlId != null}">내부 사용자 수정</h1>
@@ -18,8 +18,8 @@
<label for="esntlId" class="form-label must" th:text="#{esntlId}">고유ID</label>
</div>
<div class="form-floating mt-2">
<input type="email" class="form-control" th:classappend="${#fields.hasErrors('userId')}? 'is-invalid'" th:field="*{userId}" name="userId" id="userId" required th:readonly="${user.esntlId != null}"/>
<label for="userId" class="form-label must" th:text="#{email}">이메일</label>
<input type="text" class="form-control" th:classappend="${#fields.hasErrors('userId')}? 'is-invalid'" th:field="*{userId}" name="userId" id="userId" required th:readonly="${user.esntlId != null}"/>
<label for="userId" class="form-label must">사용자 ID</label>
<th:block th:each="err : ${#fields.errors('userId')}">
<div th:text="${err}" class="invalid-feedback"></div>
</th:block>
@@ -13,20 +13,22 @@
</div>
<div class="card-body">
<div class="d-flex justify-content-between">
<form role="form" name="searchForm" th:action="@{/mgmt/users/list_view.do}" method="get" th:object="${modelSearch}">
<form role="form" class="row g-3" name="searchForm" th:action="@{/mgmt/users/list_view.do}" method="get" th:object="${modelSearch}">
<input name="page" type="hidden" value="1"/>
<div class="search_field">
<div class="search_field_input">
<input class="form-control" name="username" placeholder="사용자 이름" type="text" size="35" th:title="#{title.search}+ '' + #{input.input}"
th:value="${modelSearch.username}"
maxlength="255"/>
</div>
<div class="search_field_button">
<button type="button" class="btn btn-primary btn_search" th:value="#{button.inquire}"><i class="fa-sharp fa-solid fa-magnifying-glass"></i> [[#{title.inquire}]]
</button>
<button type="button" class="btn btn-primary btn_delete"><i class="fa-sharp fa-solid fa-trash"></i> [[#{title.delete}]]</button>
<button type="button" class="btn btn-primary btn_add"><i class="fa-sharp fa-solid fa-plus"></i> [[#{button.create}]]</button><!-- 등록 -->
</div>
<div class="col-auto">
<input class="form-control" name="username" placeholder="사용자 이름" type="text" size="35" th:title="#{title.search}+ '' + #{input.input}"
th:value="${modelSearch.username}"
maxlength="255"/>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_search" th:value="#{button.inquire}"><i class="fa-sharp fa-solid fa-magnifying-glass"></i> [[#{title.inquire}]]
</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_delete"><i class="fa-sharp fa-solid fa-trash"></i> [[#{title.delete}]]</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary btn_add"><i class="fa-sharp fa-solid fa-plus"></i> [[#{button.create}]]</button><!-- 등록 -->
</div>
</form>
</div>
@@ -49,34 +51,46 @@
</colgroup>
<thead>
<tr>
<th class="no">번호</th>
<th><input type="checkbox" name="checkAll" class="check2" onclick="fncCheckAll()" th:title="#{input.selectAll.title}"></th><!-- 전체선택 -->
<th>ID</th>
<th>이름</th>
<th>상태</th>
<th>비고</th>
<th><div class="text-center">번호</div></th>
<th>
<div class="text-center">
<input type="checkbox" name="checkAll" class="check2" onclick="fncCheckAll()" th:title="#{input.selectAll.title}">
</div>
</th>
<th><div class="text-center">ID</div></th>
<th><div class="text-center">이름</div></th>
<th><div class="text-center">상태</div></th>
<th><div class="text-center">비고</div></th>
</tr>
</thead>
<tbody>
<tr th:each="row, status : ${page.content}">
<td class="no" th:text="${page.getTotalElements() - (page.getNumber() * page.getSize() + status.count ) + 1}"></td>
<td class="text-center" th:text="${page.getNumber() * page.getSize() + status.count}"></td>
<td>
<input type="checkbox" name="checkField" class="check2" title="선택"/>
<input name="checkId" type="hidden" th:value="${row.esntlId}"/>
<div class="d-flex justify-content-center">
<input type="checkbox" name="checkField" class="check2" title="선택"/>
<input name="checkId" type="hidden" th:value="${row.esntlId}"/>
</div>
</td>
<td>
<span th:text="${row.userId}"></span>
</td>
<td>
<span th:text="${row.username}"></span>
<div class="d-flex justify-content-center">
<span th:text="${row.username}"></span>
</div>
</td>
<td>
<span th:text="${row.status.toString()}"></span>
<div class="d-flex justify-content-center">
<span th:text="${row.status.toString()}"></span>
</div>
</td>
<td>
<button type="button" class="btn btn-primary btn-sm" th:onclick="fnSelectItem([[${row.esntlId}]])" th:value="#{button.update}"><i class="fa-sharp fa-solid fa-edit"></i>
[[#{button.update}]]
</button>
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-primary btn-sm me-2" th:onclick="fnSelectItem([[${row.esntlId}]])" th:value="#{button.update}"><i class="fa-sharp fa-solid fa-edit"></i>
[[#{button.update}]]
</button>
</div>
</td>
</tr>
<!-- 글이 없는 경우 -->