feat: Flask 애플리케이션 모듈화 및 웹 대시보드 구현
- Flask Blueprint 아키텍처로 전환 (dashboard, upload, backup, status) - app.py 681줄 95줄로 축소 (86% 감소) - HTML 템플릿 모듈화 (base.html + 기능별 templates) - CSS/JS 파일 분리 (common + 기능별 파일) - 대시보드 기능 추가 (통계, 주간 예보, 방문객 추이) - 파일 업로드 웹 인터페이스 구현 - 백업/복구 관리 UI 구현 - Docker 배포 환경 개선 - .gitignore 업데이트 (uploads, backups, cache 등)
This commit is contained in:
72
app/templates/base.html
Normal file
72
app/templates/base.html
Normal file
@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}First Garden - POS 데이터 관리{% endblock %}</title>
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<!-- Bootstrap Icons -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet">
|
||||
<!-- Chart.js -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
|
||||
<!-- 공통 CSS -->
|
||||
<link href="{{ url_for('static', filename='css/common.css') }}" rel="stylesheet">
|
||||
|
||||
{% block extra_css %}{% endblock %}
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="container-main">
|
||||
<!-- 헤더 -->
|
||||
<div class="header">
|
||||
<h1>
|
||||
<i class="bi bi-graph-up"></i>
|
||||
First Garden POS 데이터 관리 시스템
|
||||
</h1>
|
||||
<p>실시간 데이터 모니터링, 파일 관리, 백업 시스템</p>
|
||||
</div>
|
||||
|
||||
<!-- 탭 네비게이션 -->
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<a class="nav-link {% if request.endpoint == 'dashboard.index' or not request.endpoint %}active{% endif %}"
|
||||
href="{{ url_for('dashboard.index') }}" role="tab">
|
||||
<i class="bi bi-speedometer2"></i> 대시보드
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<a class="nav-link {% if request.endpoint == 'upload.index' %}active{% endif %}"
|
||||
href="{{ url_for('upload.index') }}" role="tab">
|
||||
<i class="bi bi-cloud-upload"></i> 파일 업로드
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<a class="nav-link {% if request.endpoint == 'backup.index' %}active{% endif %}"
|
||||
href="{{ url_for('backup.index') }}" role="tab">
|
||||
<i class="bi bi-cloud-check"></i> 백업 관리
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- 탭 콘텐츠 -->
|
||||
<div class="tab-content">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 알림 영역 -->
|
||||
<div id="alert-container" style="position: fixed; top: 20px; right: 20px; z-index: 9999; max-width: 400px;"></div>
|
||||
|
||||
<!-- Bootstrap JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<!-- 공통 JavaScript -->
|
||||
<script src="{{ url_for('static', filename='js/common.js') }}"></script>
|
||||
|
||||
{% block extra_js %}{% endblock %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user