Files
duplicati_preview/public/index.html
T

158 lines
7.2 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>数据源控制台</title>
<link rel="stylesheet" href="/styles.css">
</head>
<body>
<main class="shell">
<section class="hero hero-compact">
<div>
<p class="eyebrow">Zero-Bandwidth Duplicati Web Client</p>
<h1>数据源控制台</h1>
</div>
<p class="lead">
首页现在只负责数据源级管理。任务上传、Server DB、全局 WebDAV 默认值和源列表已经拆成菜单式子面板,不再全部挤在同一屏。
</p>
</section>
<div id="feedback" class="feedback" hidden></div>
<section class="workspace-shell">
<aside class="workspace-nav" aria-label="数据源控制台菜单">
<a class="workspace-nav-link" href="#overview" data-view-link="overview">总览</a>
<a class="workspace-nav-link" href="#sources" data-view-link="sources">数据源列表</a>
<a class="workspace-nav-link" href="#upload" data-view-link="upload">新增任务库</a>
<a class="workspace-nav-link" href="#server-db" data-view-link="server-db">Server DB</a>
<a class="workspace-nav-link" href="#defaults" data-view-link="defaults">全局 WebDAV</a>
</aside>
<div class="workspace-content">
<section class="workspace-panel" data-view-panel="overview">
<div class="panel stack-gap">
<div class="panel-header">
<div>
<p class="section-label">Overview</p>
<h2>控制台总览</h2>
</div>
</div>
<div id="overviewSummary" class="summary-card">正在汇总控制台状态...</div>
</div>
</section>
<section class="workspace-panel" data-view-panel="sources" hidden>
<div class="panel panel-spacious">
<div class="panel-header">
<div>
<p class="section-label">Sources</p>
<h2>数据源列表</h2>
</div>
<button id="refreshButton" class="ghost-button" type="button">刷新列表</button>
</div>
<p class="panel-copy">
这里显示当前所有任务库 source。点击“进入工作台”会进入该任务自己的管理页;删除只会删除该 source,不会删除 <code>Duplicati-server.sqlite</code>
</p>
<div id="sourceList" class="source-list empty-state">正在读取数据源列表...</div>
</div>
</section>
<section class="workspace-panel" data-view-panel="upload" hidden>
<div class="panel">
<div class="panel-header">
<div>
<p class="section-label">Task DB</p>
<h2>新增任务数据源</h2>
</div>
</div>
<p class="panel-copy">
上传随机名任务库,例如 <code>TMQRJYNADS.sqlite</code>。每个任务库都会保留成独立 source,不会互相覆盖。
</p>
<form id="uploadForm" class="upload-form">
<label class="file-picker">
<span>选择任务 SQLite 文件</span>
<input id="databaseInput" name="database" type="file" accept=".sqlite,.db,application/octet-stream">
</label>
<div class="form-actions">
<button id="uploadButton" class="primary-button" type="submit">上传为新数据源</button>
</div>
</form>
</div>
</section>
<section class="workspace-panel" data-view-panel="server-db" hidden>
<div class="panel stack-gap">
<div class="panel-header">
<div>
<p class="section-label">Server DB</p>
<h2>上传服务器数据库</h2>
</div>
</div>
<p class="panel-copy">
上传 <code>Duplicati-server.sqlite</code> 后,系统会把随机任务库名映射回友好的任务名,并尝试推导每个任务的默认 WebDAV 目标 URL。
</p>
<form id="serverDbForm" class="upload-form">
<label class="file-picker">
<span>选择服务器数据库</span>
<input id="serverDbInput" name="database" type="file" accept=".sqlite,.db,application/octet-stream">
</label>
<div class="form-actions">
<button id="serverDbUploadButton" class="ghost-button" type="submit">上传 Server DB</button>
</div>
</form>
<div id="serverDbSummary" class="summary-card">正在读取当前 Server DB 状态...</div>
</div>
</section>
<section class="workspace-panel" data-view-panel="defaults" hidden>
<div class="panel stack-gap">
<div class="panel-header">
<div>
<p class="section-label">Global WebDAV</p>
<h2>保存全局默认值</h2>
</div>
</div>
<p class="panel-copy">
WebDAV 用户名、密码和备份口令如果大多数任务都共用,可以在这里全局保存一次。单个任务的目标 URL 会优先从 <code>Duplicati-server.sqlite</code> 自动推导。
</p>
<form id="globalDefaultsForm" class="secret-form">
<label>
<span>Fallback WebDAV Base URL</span>
<input id="globalWebdavBaseUrl" name="webdavBaseUrl" type="url" placeholder="可选,全局兜底 URL">
</label>
<label>
<span>认证方式</span>
<select id="globalAuthMode" name="authMode">
<option value="">自动 / 继承</option>
<option value="basic">Basic</option>
<option value="anonymous">Anonymous</option>
</select>
</label>
<label>
<span>用户名</span>
<input id="globalUsername" name="username" type="text" placeholder="可选,共用用户名">
</label>
<label>
<span>密码</span>
<input id="globalPassword" name="password" type="password" placeholder="可选,共用密码">
</label>
<label>
<span>备份口令</span>
<input id="globalPassphrase" name="passphrase" type="password" placeholder="共用的备份口令">
</label>
<div class="form-actions">
<button id="globalDefaultsSaveButton" class="ghost-button" type="submit">保存全局默认值</button>
</div>
</form>
<div id="globalDefaultsSummary" class="summary-card">正在读取全局默认值...</div>
</div>
</section>
</div>
</section>
</main>
<script type="module" src="/app.js"></script>
</body>
</html>