This commit is contained in:
wjqserver 2025-06-20 16:33:27 +08:00
commit b10790c212
40 changed files with 4149 additions and 0 deletions

148
frontend/index.html Normal file
View file

@ -0,0 +1,148 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CaddyDash</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="app-container">
<aside class="sidebar" id="sidebar">
<header class="sidebar-header">
<i class="fa-solid fa-rocket"></i>
<h1>CaddyDash</h1>
</header>
<nav class="sidebar-nav">
<ul>
<li><a href="#" class="active"><i class="fa-solid fa-sitemap"></i> <span>配置管理</span></a></li>
<li><a href="#"><i class="fa-solid fa-chart-line"></i> <span>仪表盘 (预留)</span></a></li>
<li><a href="#"><i class="fa-solid fa-puzzle-piece"></i> <span>模板管理 (预留)</span></a></li>
</ul>
</nav>
<div class="sidebar-bottom">
<div class="theme-switcher">
<i class="fa-solid fa-sun"></i>
<label class="switch"><input type="checkbox" id="theme-toggle-input"><span class="slider"></span></label>
<i class="fa-solid fa-moon"></i>
</div>
<div class="caddy-control-panel">
<div id="caddy-status-indicator" class="caddy-status">
<span class="status-dot checking"></span>
<span class="status-text">检查中...</span>
</div>
<div id="caddy-action-button-container"></div>
</div>
<div class="logout-section">
<button id="logout-btn" class="btn btn-secondary">
<i class="fa-solid fa-right-from-bracket"></i>
<span>退出登录</span>
</button>
</div>
</div>
</aside>
<main class="main-content">
<header class="main-header">
<button class="btn-icon" id="menu-toggle-btn"><i class="fa-solid fa-bars"></i></button>
<h2>配置管理</h2>
<button id="add-new-config-btn" class="btn btn-primary">
<i class="fa-solid fa-plus"></i> <span class="btn-text">创建新配置</span>
</button>
</header>
<div id="view-container">
<section id="config-list-panel" class="card-panel view">
<ul id="config-list" class="config-list-container"></ul>
</section>
<section id="config-form-panel" class="card-panel view hidden">
<div class="form-panel-header">
<button id="back-to-list-btn" class="btn-icon" title="返回列表">
<i class="fa-solid fa-arrow-left"></i>
</button>
<h3 id="form-title">创建新配置</h3>
</div>
<form id="config-form">
<input type="hidden" id="original-filename" value="">
<div class="form-grid">
<div class="form-group">
<label for="domain">域名 (将用作文件名)</label>
<input type="text" id="domain" name="domain" required>
</div>
<div class="form-group">
<label>模板类型</label>
<div id="custom-select-tmpl" class="custom-select"></div>
</div>
</div>
<!-- 反向代理配置 -->
<fieldset id="upstream-fieldset" class="hidden">
<legend>反向代理 (Upstream)</legend>
<div class="form-group">
<label for="upstream">上游服务地址</label>
<input type="text" id="upstream" name="upstream" placeholder="例如: 127.0.0.1:8080">
</div>
<!-- 新增: 上游请求头配置区域 -->
<div class="sub-fieldset">
<p class="sub-legend">上游请求头 (Upstream Headers)</p>
<div id="upstream-headers-container"></div>
<button type="button" id="add-upstream-header-btn" class="btn btn-secondary btn-small">
<i class="fa-solid fa-plus"></i> 添加上游请求头
</button>
</div>
</fieldset>
<!-- 文件服务器配置 -->
<fieldset id="fileserver-fieldset" class="hidden">
<legend>文件服务 (File Server)</legend>
<div class="form-group">
<label for="file_dir_path">根目录路径</label>
<input type="text" id="file_dir_path" name="file_dir_path" placeholder="例如: /srv/www">
</div>
<label class="custom-checkbox">
<input type="checkbox" id="enable_browser" name="enable_browser">
<span class="checkmark"></span> 启用文件浏览器
</label>
</fieldset>
<!-- 全局请求头 -->
<fieldset id="headers-fieldset">
<legend>全局请求头 (Headers)</legend>
<div id="headers-container"></div>
<button type="button" id="add-header-btn" class="btn btn-secondary btn-small"><i class="fa-solid fa-plus"></i> 添加全局请求头</button>
</fieldset>
<fieldset>
<legend>功能开关</legend>
<div class="checkbox-grid">
<label class="custom-checkbox"><input type="checkbox" id="enable_log" name="enable_log"><span class="checkmark"></span> 启用日志</label>
<label class="custom-checkbox"><input type="checkbox" id="enable_error_page" name="enable_error_page"><span class="checkmark"></span> 启用错误页</label>
<label class="custom-checkbox"><input type="checkbox" id="enable_encode" name="enable_encode"><span class="checkmark"></span> 启用压缩</label>
</div>
</fieldset>
<div class="form-actions">
<button type="submit" class="btn btn-primary"><i class="fa-solid fa-save"></i> <span>保存配置</span></button>
<button type="button" id="cancel-edit-btn" class="btn btn-secondary">取消</button>
</div>
</form>
</section>
<section id="rendered-output-panel" class="card-panel view hidden">
<h3>渲染后的 Caddyfile</h3>
<pre><code id="rendered-content"></code></pre>
</section>
</div>
</main>
</div>
<div id="toast-container" class="toast-container"></div>
<div id="dialog-container"></div>
<script type="module" src="js/app.js"></script>
</body>
</html>