Files
backup-manager/index.html

189 lines
7.8 KiB
HTML
Raw Normal View History

2026-02-01 15:12:59 +08:00
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>备份管理器</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="stylesheet" href="styles/main.css">
</head>
<body>
<!-- 标题栏 -->
<div class="titlebar">
<div class="titlebar-drag">
<i class="fa-solid fa-box-archive titlebar-icon"></i>
<span class="titlebar-title">备份管理器</span>
</div>
<div class="titlebar-controls">
<button class="titlebar-btn minimize" onclick="window.electronAPI.minimize()"><i
class="fa-solid fa-minus"></i></button>
<button class="titlebar-btn maximize" onclick="window.electronAPI.maximize()"><i
class="fa-regular fa-square"></i></button>
<button class="titlebar-btn close" onclick="window.electronAPI.close()"><i
class="fa-solid fa-xmark"></i></button>
</div>
</div>
<!-- 主容器 -->
<div class="container">
<!-- 侧边栏 -->
<aside class="sidebar">
<div class="sidebar-header">
<span class="sidebar-label">数据库</span>
<button class="btn-icon" id="btnNewDb" onclick="showNewDbModal()" title="新建数据库">
<i class="fa-solid fa-plus"></i>
</button>
</div>
<div class="database-list" id="databaseList">
<!-- 数据库列表动态生成 -->
</div>
</aside>
<!-- 主内容区 -->
<main class="main-content">
<!-- 未选择数据库提示 -->
<div class="no-database" id="noDatabase">
<i class="fa-solid fa-folder-open no-database-icon"></i>
<h2>选择数据库开始</h2>
<p>从左侧选择或新建数据库</p>
</div>
<!-- 数据库内容区 -->
<div class="database-content" id="databaseContent" style="display: none;">
<!-- 工具栏 -->
<div class="toolbar">
<div class="search-box">
<i class="fa-solid fa-search"></i>
<input type="text" id="searchInput" placeholder="搜索备份..." oninput="filterBackups()">
</div>
<div class="toolbar-info">
<span id="backupCount">0 个备份</span>
</div>
</div>
<!-- 拖拽区域 -->
<div class="drop-zone" id="dropZone">
<i class="fa-solid fa-cloud-arrow-up drop-icon"></i>
<span>拖拽文件或文件夹到此处导入</span>
</div>
<!-- 备份列表 -->
<div class="backup-list" id="backupList">
<!-- 备份项动态生成 -->
</div>
</div>
</main>
</div>
<!-- 新建/编辑数据库模态框 -->
<div class="modal" id="dbModal">
<div class="modal-overlay"></div>
<div class="modal-content">
<div class="modal-header">
<h3 id="dbModalTitle">新建数据库</h3>
<button class="modal-close" onclick="closeModal('dbModal')"><i class="fa-solid fa-xmark"></i></button>
</div>
<div class="modal-body">
<div class="form-group">
<label for="dbName">数据库名称</label>
<input type="text" id="dbName" placeholder="输入名称LittleW" maxlength="50">
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" onclick="closeModal('dbModal')">取消</button>
<button class="btn btn-primary" id="btnConfirmDb">确定</button>
</div>
</div>
</div>
<!-- 标签编辑模态框 -->
<div class="modal" id="tagModal">
<div class="modal-overlay"></div>
<div class="modal-content">
<div class="modal-header">
<h3>编辑标签</h3>
<button class="modal-close" onclick="closeModal('tagModal')"><i class="fa-solid fa-xmark"></i></button>
</div>
<div class="modal-body">
<div class="form-group">
<label for="tagInput">标签备注</label>
<input type="text" id="tagInput" placeholder="输入标签(如:稳定版 v1.0" maxlength="100">
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" onclick="closeModal('tagModal')">取消</button>
<button class="btn btn-danger" id="btnClearTag">清除</button>
<button class="btn btn-primary" id="btnConfirmTag">保存</button>
</div>
</div>
</div>
<!-- 确认对话框 -->
<div class="modal" id="confirmModal">
<div class="modal-overlay"></div>
<div class="modal-content modal-sm">
<div class="modal-header">
<h3 id="confirmTitle">确认</h3>
<button class="modal-close" onclick="closeModal('confirmModal')"><i
class="fa-solid fa-xmark"></i></button>
</div>
<div class="modal-body">
<p id="confirmMessage">确定要执行此操作吗?</p>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" onclick="closeModal('confirmModal')">取消</button>
<button class="btn btn-primary" id="btnConfirmAction">确定</button>
</div>
</div>
</div>
<!-- 文件名不匹配模态框 -->
<div class="modal" id="nameMismatchModal">
<div class="modal-overlay"></div>
<div class="modal-content">
<div class="modal-header">
<h3><i class="fa-solid fa-triangle-exclamation" style="color: var(--warning);"></i> 文件名不匹配</h3>
<button class="modal-close" onclick="closeModal('nameMismatchModal')"><i
class="fa-solid fa-xmark"></i></button>
</div>
<div class="modal-body">
<div class="mismatch-info">
<div class="mismatch-row">
<span class="mismatch-label">源文件</span>
<span class="mismatch-value" id="sourceFileName">-</span>
</div>
<div class="mismatch-row">
<span class="mismatch-label">数据库</span>
<span class="mismatch-value" id="targetDbName">-</span>
</div>
<div class="mismatch-row">
<span class="mismatch-label">重命名为</span>
<span class="mismatch-value highlight" id="newFileName">-</span>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" onclick="closeModal('nameMismatchModal')">取消</button>
<button class="btn btn-primary" id="btnConfirmImport">确认导入</button>
</div>
</div>
</div>
<!-- Toast 提示 -->
<div class="toast" id="toast">
<i class="toast-icon" id="toastIcon"></i>
<span class="toast-message" id="toastMessage"></span>
</div>
<!-- 加载遮罩 -->
<div class="loading-overlay" id="loadingOverlay">
<div class="loading-spinner"></div>
<p class="loading-text" id="loadingText">处理中...</p>
</div>
<script src="scripts/renderer.js"></script>
</body>
</html>