chore: 初始提交 - 移除所有硬编码凭据,统一从环境变量读取

This commit is contained in:
yangxiangyuan
2026-06-11 17:10:58 +08:00
commit c223c79b36
1699 changed files with 313940 additions and 0 deletions
@@ -0,0 +1,9 @@
{
"_comment": "文档云管家工具的前端鉴权配置",
"enable_auth_comment": "true:启用鉴权(需导航token握手或已有会话);false:完全放开访问",
"enable_auth": true,
"cookieName_comment": "文档云管家鉴权 cookie 名称(用于标记已登录状态)",
"cookieName": "doc_cloud_keeper_gate",
"max_age_days_comment": "鉴权 cookie 的最大有效天数(1~365)",
"max_age_days": 30
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+241
View File
@@ -0,0 +1,241 @@
<!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="icon" href="/icons/cloud.svg" type="image/svg+xml" />
<link rel="stylesheet" href="/common/common.css" />
<link rel="stylesheet" href="/tools/doc_cloud_keeper/doc_cloud_keeper.css?v=12" />
</head>
<body class="dck-body">
<main class="container">
<div class="dck-header">
<div class="dck-header-main">
<h2><span class="logo-ico" aria-hidden="true"></span>文档云管家</h2>
<div class="dck-stats">
<span id="dck-stat-total">文件数: 0</span>
<span id="dck-stat-size">占用: 0 B</span>
<span id="dck-stat-trash">回收站: 0</span><a href="DocHelper\DocHelper.zip">⚒</a>
</div>
</div>
<div id="dck-header-actions" class="dck-actions" style="display:none">
<button id="dck-refresh" class="mini-btn">刷新</button>
<button id="dck-oss-probe-open" class="mini-btn">OSS检测</button>
<button id="dck-change-pass" class="mini-btn">改密</button>
<button id="dck-logout" class="mini-btn">退出</button>
</div>
</div>
<div id="dck-login" class="card dck-login" style="max-width:450px; margin:24px auto; display:none">
<h3 style="margin:0 0 16px 0; text-align:center; font-size:20px">欢迎使用文档云管家</h3>
<div class="list-card">
<div class="modal-row">
<label class="modal-label">👤 用户名</label>
<input id="dck-username" class="modal-input" type="text" autocomplete="off" readonly placeholder="请输入用户名" />
</div>
<div class="modal-row">
<label class="modal-label">🔒 密码</label>
<input id="dck-password" class="modal-input" type="password" autocomplete="off" readonly placeholder="请输入密码" />
</div>
<div class="action-buttons" style="margin-top:16px; justify-content:center">
<button id="dck-login-btn" class="action-btn" style="padding:10px 24px">
<span>🔐</span>立即登录
</button>
<div id="dck-login-msg" class="status" style="display:none; margin-left:12px"></div>
</div>
</div>
</div>
<div id="dck-app" style="display:none">
<div id="dck-banner" class="dck-banner" style="display:none"></div>
<div class="dck-layout">
<aside class="dck-left card">
<div class="dck-left-top">
<button id="dck-folder-create" class="mini-btn">新建文件夹</button>
<button id="dck-toggle-trash" class="mini-btn">回收站</button>
</div>
<ul id="dck-folders" class="dck-folders"></ul>
</aside>
<section class="dck-right card">
<div class="dck-toolbar">
<input id="dck-search" class="modal-input" placeholder="搜索文件名 / 备注" />
<select id="dck-filter-priority" class="modal-input dck-small">
<option value="">全部优先级</option>
<option value="high">高</option>
<option value="medium">中</option>
<option value="low">低</option>
</select>
<select id="dck-filter-status" class="modal-input dck-small">
<option value="">全部状态</option>
<option value="todo">未处理</option>
<option value="doing">处理中</option>
<option value="done">已完成</option>
</select>
<select id="dck-sort-by" class="modal-input dck-small">
<option value="updated_at">按更新时间</option>
<option value="due_at">按到期时间</option>
<option value="size_bytes">按文件大小</option>
<option value="priority">按优先级</option>
</select>
<select id="dck-sort-dir" class="modal-input dck-small">
<option value="desc">降序</option>
<option value="asc">升序</option>
</select>
<button id="dck-query" class="mini-btn">查</button>
</div>
<div class="dck-batch">
<button id="dck-upload-new" class="mini-btn">上传新文档</button>
<button id="dck-local-edit" class="mini-btn" style="background: rgba(37, 99, 235, 0.1); color: #2563eb; border-color: #bfdbfe; font-weight: 500;">在线编辑</button>
<button id="dck-upload-cover" class="mini-btn">覆盖上传</button>
<button id="dck-download" class="mini-btn">下载</button>
<button id="dck-rename" class="mini-btn">重命名</button>
<button id="dck-move" class="mini-btn">移动</button>
<button id="dck-meta-edit" class="mini-btn">编辑属性</button>
<button id="dck-versions" class="mini-btn">版本</button>
<button id="dck-trash" class="mini-btn">逻辑删除</button>
<button id="dck-restore" class="mini-btn">恢复</button>
<button id="dck-hard-delete" class="mini-btn">物理删除</button>
<button id="dck-bulk-trash" class="mini-btn">批量删除</button>
<button id="dck-bulk-move" class="mini-btn">批量移动</button>
<button id="dck-bulk-hard-delete" class="mini-btn">批量物理删</button>
</div>
<div class="dck-table-wrap">
<table class="dck-table">
<thead>
<tr>
<th><input id="dck-check-all" type="checkbox" /></th>
<th>本地</th>
<th>文件名</th>
<th>类型</th>
<th>大小</th>
<th>优先级</th>
<th>状态</th>
<th>到期时间</th>
<th>倒计时</th>
<th>更新时间</th>
</tr>
</thead>
<tbody id="dck-tbody"></tbody>
</table>
</div>
</section>
</div>
</div>
</main>
<div id="dck-versions-modal" class="modal" style="display:none">
<div class="modal-body dck-form-body" style="width: min(800px, 94vw);">
<div class="dck-form-head">
<h3 id="dck-versions-title">历史版本</h3>
<button id="dck-versions-close" class="icon-theme">✕</button>
</div>
<div class="dck-versions-tabs">
<button id="dck-versions-tab-local" class="dck-versions-tab active" type="button">云服务器</button>
<button id="dck-versions-tab-oss" class="dck-versions-tab" type="button">OSS存储</button>
<button id="dck-versions-compare" class="mini-btn dck-versions-compare-btn" type="button">比较差异</button>
<button id="dck-versions-oss-refresh" class="mini-btn dck-versions-refresh-btn" type="button" style="display:none">刷新 OSS 状态</button>
</div>
<div id="dck-versions-list" class="dck-versions-list" style="padding: 16px;"></div>
<div id="dck-oss-versions-list" class="dck-versions-list" style="padding: 16px; display:none;"></div>
</div>
</div>
<div id="dck-compare-modal" class="modal" style="display:none">
<div class="modal-body dck-compare-body">
<div class="dck-form-head">
<h3 id="dck-compare-title">版本差异摘要</h3>
<button id="dck-compare-close" class="icon-theme">✕</button>
</div>
<div class="dck-compare-layout">
<section class="dck-compare-panel">
<div class="dck-compare-section-title">基础信息</div>
<div id="dck-compare-meta" class="dck-compare-section-content"></div>
</section>
<section class="dck-compare-panel">
<div class="dck-compare-section-title">差异摘要</div>
<div id="dck-compare-summary" class="dck-compare-section-content"></div>
</section>
<section class="dck-compare-panel">
<div class="dck-compare-section-title">关键明细</div>
<div id="dck-compare-details" class="dck-compare-section-content"></div>
</section>
</div>
</div>
</div>
<div id="dck-preview-modal" class="modal" style="display:none">
<div class="modal-body dck-preview-body" style="width: min(960px, 94vw);">
<div class="dck-form-head">
<h3 id="dck-preview-title">快速查看</h3>
<button id="dck-preview-close" class="icon-theme">✕</button>
</div>
<div id="dck-preview-meta" class="dck-preview-meta"></div>
<div id="dck-preview-loading" class="dck-preview-loading">加载中...</div>
<div id="dck-preview-content" class="dck-preview-content"></div>
<div class="dck-preview-actions">
<button id="dck-preview-copy" class="mini-btn">复制内容</button>
<button id="dck-preview-download" class="mini-btn">下载原文件</button>
</div>
</div>
</div>
<div id="dck-form-modal" class="modal" style="display:none">
<div class="modal-body dck-form-body">
<div class="dck-form-head">
<h3 id="dck-form-title">操作</h3>
<button id="dck-form-close" class="icon-theme">✕</button>
</div>
<div id="dck-form-msg" class="dck-form-msg"></div>
<div id="dck-form-fields"></div>
<div class="dck-form-actions">
<button id="dck-form-copy" class="mini-btn">复制内容</button>
<button id="dck-form-cancel" class="mini-btn">取消</button>
<button id="dck-form-confirm" class="mini-btn">确认</button>
</div>
</div>
</div>
<div id="dck-oss-probe-modal" class="modal" style="display:none">
<div class="modal-body dck-oss-probe-body">
<div class="dck-form-head">
<h3>OSS检测</h3>
<button id="dck-oss-probe-close" class="icon-theme">✕</button>
</div>
<div class="dck-oss-probe-layout">
<section class="dck-oss-probe-panel">
<div class="dck-oss-probe-panel-title">选择文件</div>
<div class="dck-oss-probe-actions">
<button id="dck-oss-probe-pick" class="mini-btn" type="button">选择文件</button>
<button id="dck-oss-probe-upload" class="mini-btn" type="button">上传检测</button>
<button id="dck-oss-probe-clear" class="mini-btn" type="button">清空</button>
</div>
<div id="dck-oss-probe-file" class="dck-oss-probe-file">尚未选择文件</div>
</section>
<section class="dck-oss-probe-panel">
<div class="dck-oss-probe-panel-title">操作日志</div>
<div id="dck-oss-probe-logs" class="dck-oss-probe-logs"></div>
</section>
<section class="dck-oss-probe-panel">
<div class="dck-oss-probe-panel-title">上传结果</div>
<div id="dck-oss-probe-result" class="dck-oss-probe-result">等待执行检测</div>
</section>
</div>
</div>
</div>
<div id="dck-action-modal" class="modal" style="display:none">
<div class="modal-body dck-action-body" style="width: min(960px, 94vw); padding: 0; border-radius: 0; border: 1px solid #0078d7; box-shadow: 0 0 0 1px #0078d7, 0 10px 20px rgba(0, 0, 0, 0.35); background: #fff;">
<div class="dck-action-head">
<h3 id="dck-action-title">处理中</h3>
<button id="dck-action-close" class="icon-theme">✕</button>
</div>
<div id="dck-action-msg" class="dck-action-msg"></div>
<div id="dck-action-status" class="dck-action-status">运行中</div>
<div id="dck-action-logs" class="dck-action-logs"></div>
<div class="dck-action-actions">
<button id="dck-action-copy-all" class="mini-btn">复制全部</button>
<button id="dck-action-copy-error" class="mini-btn">复制错误</button>
<button id="dck-action-open-folder" class="mini-btn" style="display:none">打开文件夹</button>
<button id="dck-action-close-bottom" class="mini-btn">关闭</button>
</div>
</div>
</div>
<input id="dck-file-picker" type="file" style="display:none" />
<input id="dck-oss-probe-picker" type="file" style="display:none" />
<script src="/common/common.js"></script>
<script src="/tools/doc_cloud_keeper/doc_cloud_keeper.js?v=20"></script>
</body>
</html>