This commit is contained in:
2024-09-12 17:37:23 +09:00
parent 658f3d5543
commit ea69accedc
16 changed files with 6829 additions and 122 deletions

View File

@@ -0,0 +1,15 @@
package com.spring.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/schedule")
public class ScheduleController {
@GetMapping
public String schedule() {
return "pages/schedule/schedule-list";
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,6 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:fragment="config" lang="ko" xml:lang="ko">
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
<link rel="stylesheet" th:href="@{/css/bootstrap-icons.css}">
<link rel="stylesheet" th:href="@{/css/style.css}">
<script>
const BASE_URL = /*[[${baseUrl}]]*/ '';

View File

@@ -1,6 +1,5 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="ko" xml:lang="ko">
<footer th:fragment="footer">
<p>Footer</p>
<html xmlns:th="http://www.thymeleaf.org" th:fragment="footer" lang="ko" xml:lang="ko">
<footer class="bg-light text-center p-3">
<p>회사 정보: © 2023 회사명. 모든 권리 보유.</p>
</footer>
</html>

View File

@@ -1,4 +1,229 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:fragment="header" lang="ko" xml:lang="ko">
<h1>사이트 로고</h1>
<html xmlns:th="http://www.thymeleaf.org" th:fragment="header" lang="ko" xml:lang="ko">
<header id="header" class="header fixed-top d-flex align-items-center">
<div class="d-flex align-items-center justify-content-between">
<a href="index.html" class="logo d-flex align-items-center">
<img src="assets/img/logo.png" alt="">
<span class="d-none d-lg-block">NiceAdmin</span>
</a>
<i class="bi bi-list toggle-sidebar-btn"></i>
</div><!-- End Logo -->
<div class="search-bar">
<form class="search-form d-flex align-items-center" method="POST" action="#">
<input type="text" name="query" placeholder="Search" title="Enter search keyword">
<button type="submit" title="Search"><i class="bi bi-search"></i></button>
</form>
</div><!-- End Search Bar -->
<nav class="header-nav ms-auto">
<ul class="d-flex align-items-center">
<li class="nav-item d-block d-lg-none">
<a class="nav-link nav-icon search-bar-toggle " href="#">
<i class="bi bi-search"></i>
</a>
</li><!-- End Search Icon-->
<li class="nav-item dropdown">
<a class="nav-link nav-icon" href="#" data-bs-toggle="dropdown">
<i class="bi bi-bell"></i>
<span class="badge bg-primary badge-number">4</span>
</a><!-- End Notification Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow notifications">
<li class="dropdown-header">
You have 4 new notifications
<a href="#"><span class="badge rounded-pill bg-primary p-2 ms-2">View all</span></a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="notification-item">
<i class="bi bi-exclamation-circle text-warning"></i>
<div>
<h4>Lorem Ipsum</h4>
<p>Quae dolorem earum veritatis oditseno</p>
<p>30 min. ago</p>
</div>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="notification-item">
<i class="bi bi-x-circle text-danger"></i>
<div>
<h4>Atque rerum nesciunt</h4>
<p>Quae dolorem earum veritatis oditseno</p>
<p>1 hr. ago</p>
</div>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="notification-item">
<i class="bi bi-check-circle text-success"></i>
<div>
<h4>Sit rerum fuga</h4>
<p>Quae dolorem earum veritatis oditseno</p>
<p>2 hrs. ago</p>
</div>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="notification-item">
<i class="bi bi-info-circle text-primary"></i>
<div>
<h4>Dicta reprehenderit</h4>
<p>Quae dolorem earum veritatis oditseno</p>
<p>4 hrs. ago</p>
</div>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-footer">
<a href="#">Show all notifications</a>
</li>
</ul><!-- End Notification Dropdown Items -->
</li><!-- End Notification Nav -->
<li class="nav-item dropdown">
<a class="nav-link nav-icon" href="#" data-bs-toggle="dropdown">
<i class="bi bi-chat-left-text"></i>
<span class="badge bg-success badge-number">3</span>
</a><!-- End Messages Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow messages">
<li class="dropdown-header">
You have 3 new messages
<a href="#"><span class="badge rounded-pill bg-primary p-2 ms-2">View all</span></a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="message-item">
<a href="#">
<img src="assets/img/messages-1.jpg" alt="" class="rounded-circle">
<div>
<h4>Maria Hudson</h4>
<p>Velit asperiores et ducimus soluta repudiandae labore officia est ut...</p>
<p>4 hrs. ago</p>
</div>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="message-item">
<a href="#">
<img src="assets/img/messages-2.jpg" alt="" class="rounded-circle">
<div>
<h4>Anna Nelson</h4>
<p>Velit asperiores et ducimus soluta repudiandae labore officia est ut...</p>
<p>6 hrs. ago</p>
</div>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="message-item">
<a href="#">
<img src="assets/img/messages-3.jpg" alt="" class="rounded-circle">
<div>
<h4>David Muldon</h4>
<p>Velit asperiores et ducimus soluta repudiandae labore officia est ut...</p>
<p>8 hrs. ago</p>
</div>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-footer">
<a href="#">Show all messages</a>
</li>
</ul><!-- End Messages Dropdown Items -->
</li><!-- End Messages Nav -->
<li class="nav-item dropdown pe-3">
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
<img src="assets/img/profile-img.jpg" alt="Profile" class="rounded-circle">
<span class="d-none d-md-block dropdown-toggle ps-2">K. Anderson</span>
</a><!-- End Profile Iamge Icon -->
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
<li class="dropdown-header">
<h6>Kevin Anderson</h6>
<span>Web Designer</span>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="users-profile.html">
<i class="bi bi-person"></i>
<span>My Profile</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="users-profile.html">
<i class="bi bi-gear"></i>
<span>Account Settings</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="pages-faq.html">
<i class="bi bi-question-circle"></i>
<span>Need Help?</span>
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item d-flex align-items-center" href="#">
<i class="bi bi-box-arrow-right"></i>
<span>Sign Out</span>
</a>
</li>
</ul><!-- End Profile Dropdown Items -->
</li><!-- End Profile Nav -->
</ul>
</nav><!-- End Icons Navigation -->
</header><!-- End Header -->
</html>

View File

@@ -1,13 +1,237 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" th:fragment="sidebar" lang="ko" xml:lang="ko">
<div class="sidebar">
<nav>
<ul>
<li><a href="/home"></a></li>
<li><a href="/about">소개</a></li>
<li><a href="/services">서비스</a></li>
<li><a href="/contact">연락처</a></li>
</ul>
</nav>
</div>
<aside id="sidebar" class="sidebar">
<ul class="sidebar-nav" id="sidebar-nav">
<li class="nav-item">
<a class="nav-link " href="index.html">
<i class="bi bi-grid"></i>
<span>Dashboard</span>
</a>
</li><!-- End Dashboard Nav -->
<li class="nav-item">
<a class="nav-link collapsed" data-bs-target="#components-nav" data-bs-toggle="collapse" href="#">
<i class="bi bi-menu-button-wide"></i><span>Components</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="components-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
<li>
<a href="components-alerts.html">
<i class="bi bi-circle"></i><span>Alerts</span>
</a>
</li>
<li>
<a href="components-accordion.html">
<i class="bi bi-circle"></i><span>Accordion</span>
</a>
</li>
<li>
<a href="components-badges.html">
<i class="bi bi-circle"></i><span>Badges</span>
</a>
</li>
<li>
<a href="components-breadcrumbs.html">
<i class="bi bi-circle"></i><span>Breadcrumbs</span>
</a>
</li>
<li>
<a href="components-buttons.html">
<i class="bi bi-circle"></i><span>Buttons</span>
</a>
</li>
<li>
<a href="components-cards.html">
<i class="bi bi-circle"></i><span>Cards</span>
</a>
</li>
<li>
<a href="components-carousel.html">
<i class="bi bi-circle"></i><span>Carousel</span>
</a>
</li>
<li>
<a href="components-list-group.html">
<i class="bi bi-circle"></i><span>List group</span>
</a>
</li>
<li>
<a href="components-modal.html">
<i class="bi bi-circle"></i><span>Modal</span>
</a>
</li>
<li>
<a href="components-tabs.html">
<i class="bi bi-circle"></i><span>Tabs</span>
</a>
</li>
<li>
<a href="components-pagination.html">
<i class="bi bi-circle"></i><span>Pagination</span>
</a>
</li>
<li>
<a href="components-progress.html">
<i class="bi bi-circle"></i><span>Progress</span>
</a>
</li>
<li>
<a href="components-spinners.html">
<i class="bi bi-circle"></i><span>Spinners</span>
</a>
</li>
<li>
<a href="components-tooltips.html">
<i class="bi bi-circle"></i><span>Tooltips</span>
</a>
</li>
</ul>
</li><!-- End Components Nav -->
<li class="nav-item">
<a class="nav-link collapsed" data-bs-target="#forms-nav" data-bs-toggle="collapse" href="#">
<i class="bi bi-journal-text"></i><span>Forms</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="forms-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
<li>
<a href="forms-elements.html">
<i class="bi bi-circle"></i><span>Form Elements</span>
</a>
</li>
<li>
<a href="forms-layouts.html">
<i class="bi bi-circle"></i><span>Form Layouts</span>
</a>
</li>
<li>
<a href="forms-editors.html">
<i class="bi bi-circle"></i><span>Form Editors</span>
</a>
</li>
<li>
<a href="forms-validation.html">
<i class="bi bi-circle"></i><span>Form Validation</span>
</a>
</li>
</ul>
</li><!-- End Forms Nav -->
<li class="nav-item">
<a class="nav-link collapsed" data-bs-target="#tables-nav" data-bs-toggle="collapse" href="#">
<i class="bi bi-layout-text-window-reverse"></i><span>Tables</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="tables-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
<li>
<a href="tables-general.html">
<i class="bi bi-circle"></i><span>General Tables</span>
</a>
</li>
<li>
<a href="tables-data.html">
<i class="bi bi-circle"></i><span>Data Tables</span>
</a>
</li>
</ul>
</li><!-- End Tables Nav -->
<li class="nav-item">
<a class="nav-link collapsed" data-bs-target="#charts-nav" data-bs-toggle="collapse" href="#">
<i class="bi bi-bar-chart"></i><span>Charts</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="charts-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
<li>
<a href="charts-chartjs.html">
<i class="bi bi-circle"></i><span>Chart.js</span>
</a>
</li>
<li>
<a href="charts-apexcharts.html">
<i class="bi bi-circle"></i><span>ApexCharts</span>
</a>
</li>
<li>
<a href="charts-echarts.html">
<i class="bi bi-circle"></i><span>ECharts</span>
</a>
</li>
</ul>
</li><!-- End Charts Nav -->
<li class="nav-item">
<a class="nav-link collapsed" data-bs-target="#icons-nav" data-bs-toggle="collapse" href="#">
<i class="bi bi-gem"></i><span>Icons</span><i class="bi bi-chevron-down ms-auto"></i>
</a>
<ul id="icons-nav" class="nav-content collapse " data-bs-parent="#sidebar-nav">
<li>
<a href="icons-bootstrap.html">
<i class="bi bi-circle"></i><span>Bootstrap Icons</span>
</a>
</li>
<li>
<a href="icons-remix.html">
<i class="bi bi-circle"></i><span>Remix Icons</span>
</a>
</li>
<li>
<a href="icons-boxicons.html">
<i class="bi bi-circle"></i><span>Boxicons</span>
</a>
</li>
</ul>
</li><!-- End Icons Nav -->
<li class="nav-heading">Pages</li>
<li class="nav-item">
<a class="nav-link collapsed" href="users-profile.html">
<i class="bi bi-person"></i>
<span>Profile</span>
</a>
</li><!-- End Profile Page Nav -->
<li class="nav-item">
<a class="nav-link collapsed" href="pages-faq.html">
<i class="bi bi-question-circle"></i>
<span>F.A.Q</span>
</a>
</li><!-- End F.A.Q Page Nav -->
<li class="nav-item">
<a class="nav-link collapsed" href="pages-contact.html">
<i class="bi bi-envelope"></i>
<span>Contact</span>
</a>
</li><!-- End Contact Page Nav -->
<li class="nav-item">
<a class="nav-link collapsed" href="pages-register.html">
<i class="bi bi-card-list"></i>
<span>Register</span>
</a>
</li><!-- End Register Page Nav -->
<li class="nav-item">
<a class="nav-link collapsed" href="pages-login.html">
<i class="bi bi-box-arrow-in-right"></i>
<span>Login</span>
</a>
</li><!-- End Login Page Nav -->
<li class="nav-item">
<a class="nav-link collapsed" href="pages-error-404.html">
<i class="bi bi-dash-circle"></i>
<span>Error 404</span>
</a>
</li><!-- End Error 404 Page Nav -->
<li class="nav-item">
<a class="nav-link collapsed" href="pages-blank.html">
<i class="bi bi-file-earmark"></i>
<span>Blank</span>
</a>
</li><!-- End Blank Page Nav -->
</ul>
</aside><!-- End Sidebar-->
</html>

View File

@@ -1,16 +1,58 @@
<!DOCTYPE html>
<html lagn="ko" xml:lang="ko"
<html lang="ko" xml:lang="ko"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head th:replace="fragments/config :: config"/>
<head th:replace="fragments/config :: config"></head>
<body>
<div class="container">
<div th:replace="fragments/header::header"></div>
<div class="content">
<div th:replace="fragments/left::sidebar"></div>
<div class="main" layout:fragment="content"></div>
<div th:replace="fragments/header::header"></div>
<div th:replace="fragments/left::sidebar"></div>
<main class="col-md-9 ml-sm-auto col-lg-10 px-4" id="main">
<h1 class="mt-5 pagetitle">스케줄 관리</h1>
<div class="mt-4">
<form action="/api/schedule/search" method="get" class="form-inline">
<div class="form-group mb-2">
<label for="groupName" class="sr-only">그룹명</label>
<input type="text" class="form-control" id="groupName" name="groupName" placeholder="그룹명 입력">
</div>
<div class="form-group mb-2 mx-2">
<label for="jobName" class="sr-only">작업명</label>
<input type="text" class="form-control" id="jobName" name="jobName" placeholder="작업명 입력">
</div>
<div class="form-group mb-2 mx-2">
<label for="status" class="sr-only">상태</label>
<select class="form-control" id="status" name="status">
<option value="">모두</option>
<option value="ACTIVE">활성</option>
<option value="PAUSED">일시 정지</option>
</select>
</div>
<button type="submit" class="btn btn-primary mb-2">검색</button>
</form>
</div>
<footer th:replace="fragments/footer::footer"></footer>
</div>
<h2 class="mt-4">모든 작업</h2>
<table class="table">
<thead>
<tr>
<th>작업 이름</th>
<th>그룹 이름</th>
<th>상태</th>
<th>작업 조작</th>
</tr>
</thead>
<tbody>
<tr th:each="job : ${jobs}">
<td th:text="${job.name}"></td>
<td th:text="${job.group}"></td>
<td th:text="${job.status}"></td>
<td>
<button class="btn btn-warning" th:onclick="'pauseJob(\'' + ${job.group} + '\', \'' + ${job.name} + '\')'">일시 정지</button>
<button class="btn btn-success" th:onclick="'resumeJob(\'' + ${job.group} + '\', \'' + ${job.name} + '\')'">재개</button>
<button class="btn btn-danger" th:onclick="'triggerJob(\'' + ${job.group} + '\', \'' + ${job.name} + '\')'">트리거</button>
</td>
</tr>
</tbody>
</table>
</main>
</body>
</html>

View File

@@ -1,38 +1,57 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layouts/layout}"
layout:fragment="content" lang="ko" xml:lang="ko">
layout:decorate="~{layouts/layout}" lang="ko" xml:lang="ko">
<head>
<title>Schedule - List</title>
</head>
<body>
<section layout:fragment="content">
<h2>Manage Batch Jobs</h2>
<table class="job-table">
<thead>
<tr>
<th>Job Name</th>
<th>Group</th>
<th>Schedule</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr th:each="job : ${jobs}">
<td th:text="${job.name}"></td>
<td th:text="${job.group}"></td>
<td th:text="${job.schedule}"></td>
<td th:text="${job.status}"></td>
<td>
<button class="btn" onclick="editJob('${job.name}', '${job.group}')">Edit</button>
<button class="btn danger" onclick="deleteJob('${job.name}', '${job.group}')">Delete</button>
</td>
</tr>
</tbody>
</table>
<button class="btn add-job" onclick="showAddJobForm()">Add Job</button>
</section>
<h1 class="mt-5">스케줄 관리</h1>
<div class="mt-4">
<form action="/api/schedule/search" method="get">
<div class="form-row">
<div class="form-group col-md-4">
<label for="groupName">그룹명</label>
<input type="text" class="form-control" id="groupName" name="groupName" placeholder="그룹명 입력">
</div>
<div class="form-group col-md-4">
<label for="jobName">작업명</label>
<input type="text" class="form-control" id="jobName" name="jobName" placeholder="작업명 입력">
</div>
<div class="form-group col-md-4">
<label for="status">상태</label>
<select class="form-control" id="status" name="status">
<option value="">모두</option>
<option value="ACTIVE">활성</option>
<option value="PAUSED">일시 정지</option>
</select>
</div>
</div>
<button type="submit" class="btn btn-primary">검색</button>
</form>
</div>
<h2 class="mt-4">모든 작업</h2>
<table class="table">
<thead>
<tr>
<th>작업 이름</th>
<th>그룹 이름</th>
<th>상태</th>
<th>작업 조작</th>
</tr>
</thead>
<tbody>
<tr th:each="job : ${jobs}">
<td th:text="${job.name}"></td>
<td th:text="${job.group}"></td>
<td th:text="${job.status}"></td>
<td>
<button class="btn btn-warning" th:onclick="'pauseJob(\'' + ${job.group} + '\', \'' + ${job.name} + '\')'">일시 정지</button>
<button class="btn btn-success" th:onclick="'resumeJob(\'' + ${job.group} + '\', \'' + ${job.name} + '\')'">재개</button>
<button class="btn btn-danger" th:onclick="'triggerJob(\'' + ${job.group} + '\', \'' + ${job.name} + '\')'">트리거</button>
</td>
</tr>
</tbody>
</table>
</body>
</html>