일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- java
- Docker
- JPA
- redis
- java crawler
- 테슬라
- vavr
- mysql
- ann
- Elastic
- Cache
- elasticsearch cache
- file download
- aqqle
- dbeaver
- Analyzer
- KNN
- 아이온큐
- NORI
- aggs
- api cache
- 양자컴퓨터
- Aggregation
- request cache
- Query
- TSLA
- Elasticsearch
- Selenium
- IONQ
- API
Archives
- Today
- Total
아빠는 개발자
[Aqqle] Admin 본문
728x90
반응형
bootstrap 무료 어드민을 사용해 aqqle 관리화면을 만들 예정
https://github.com/ColorlibHQ/AdminLTE
개발환경 요약
- java thymeleaf
- jQuery + axios
- bootstrap
우선 thymeleaf 로 레이아웃을 나눠보자
build.gradle 에 추가
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
compileOnly group: 'org.webjars.npm', name: 'axios', version: axiosVersion
Controller 생성
메인화면에서 사용할 컨트롤러 생성
@Controller
public class MainController {
@GetMapping("")
public String main(Model model){
Map<String, String> dataMap = new HashMap<>();
dataMap.put("api", "http://localhost:8080");
model.addAllAttributes(dataMap);
return "index";
}
그리고 resources 하위에 static , templates 디렉토리를 만들자
static 디렉토리 하위에는
admin 스킨에서 사용중인 dist, plugins 디렉토리를 넣어준다.
templates 디렉토리 하위에는 fragments 와 layout 디렉토리를 만들고 아래와 같이 구성하였다.
layout/default.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<!-- Head -->
<head>
<div th:replace="fragments/title::title"></div>
<th:block layout:fragment="css" class="css" ></th:block>
</head>
<!-- / .Head -->
<body class="hold-transition sidebar-mini layout-fixed">
<div class="wrapper">
<!-- Preloader -->
<div class="preloader flex-column justify-content-center align-items-center" id = "admin_lte_logo" >
<img class="animation__shake" src="/dist/img/AdminLTELogo.png" alt="AdminLTELogo" height="60" width="60">
</div>
<!-- Navbar -->
<div th:replace="fragments/navbar::navbar"></div>
<!-- /.navbar -->
<!-- Main Sidebar Container -->
<div th:replace="fragments/aside::aside"></div>
<!-- / .Main Sidebar Container -->
<!-- Content Wrapper. Contains page content -->
<div layout:fragment="content" class="content"></div>
<!-- /.content-wrapper -->
<!-- footer -->
<div th:replace="fragments/footer::footer"></div>
<!-- footer -->
<!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<!-- Control sidebar content goes here -->
</aside>
<!-- /.control-sidebar -->
</div>
<!-- ./wrapper -->
<!-- jQuery -->
<div th:replace="fragments/script::script"></div>
<th:block layout:fragment="script" th:class="script"></th:block>
</body>
</html>
fragments 의 css 와 script 는 공통파일 예를들면 jquery 같은
th:block 의 css 와 script는 페이지별 css 와 script
fragments/title.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<th:block th:fragment="title">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Aqqle | Dashboard</title>
</th:block>
</html>
title 과 meta 도 block 로 감싸고 index.html 에서 사용하는 css 도 아래와 같이 감싸서 처리
<th:block layout:fragment="css" th:class="css">
<!-- Google Font: Source Sans Pro -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome -->
<link rel="stylesheet" href="/plugins/fontawesome-free/css/all.min.css">
<!-- Ionicons -->
<link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<!-- Tempusdominus Bootstrap 4 -->
<link rel="stylesheet" href="/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">
<!-- iCheck -->
<link rel="stylesheet" href="/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
<!-- JQVMap -->
<link rel="stylesheet" href="/plugins/jqvmap/jqvmap.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="/dist/css/adminlte.min.css">
<!-- overlayScrollbars -->
<link rel="stylesheet" href="/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
<!-- Daterange picker -->
<link rel="stylesheet" href="/plugins/daterangepicker/daterangepicker.css">
<!-- summernote -->
<link rel="stylesheet" href="/plugins/summernote/summernote-bs4.min.css">
</th:block>
fragments/navbar.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<nav class="main-header navbar navbar-expand navbar-white navbar-light" th:fragment="navbar">
<!-- navbar 내용 -->
</nav>
</html>
실행화면
block 로 나누어진 titie 과 공통 css 영역 / 페이지별 css 영역
딱히 뭐 없고 처음화면과 동일하면 성공
기존에 만들었던 aqqle 전용 api 를 연동해서 페이지를 완성해보잣.
728x90
반응형
'Aqqle > WEB' 카테고리의 다른 글
[Apple] Admin > keyword 관리 (1) | 2024.01.28 |
---|