Files
memind/public/oa-drive/index.html
T
john 3e6b0c262a
Memind CI / Test, build, and release guards (push) Successful in 4m31s
feat(portal): add light/dark theme sync and OA drive navigation
Unify chat and OA drive appearance with shared memind-theme storage, default light mode, and cross-frame sync so users can switch themes from chat or the drive shell.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 20:10:06 +08:00

161 lines
6.8 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>OA 网盘 · Memind</title>
<link rel="icon" href="/oa-drive/favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="/oa-drive/app.css" />
</head>
<body>
<div class="wrap">
<div class="top-bar drop" id="dropZone" tabindex="0" title="拖放文件到此处上传">
<span class="top-title">OA 网盘</span>
<span class="top-sub">云端同步 · 拖放/<kbd>⌘V</kbd>粘贴上传</span>
<div class="links" id="links"></div>
<div class="top-actions">
<button type="button" id="themeToggle" title="切换主题">深色</button>
<button type="button" class="primary" id="pickFiles">选择文件</button>
<button type="button" id="pickFolder">选择文件夹</button>
</div>
<input type="file" id="fileInput" multiple />
<input type="file" id="folderInput" webkitdirectory directory multiple />
</div>
<div class="status" id="status"></div>
<div class="progress" id="progress"><i></i></div>
<div class="progress-detail" id="progressDetail">
<div class="progress-detail-head">
<strong id="progressSummary">上传中…</strong>
<span id="progressSpeed"></span>
</div>
<div class="progress-detail-list" id="progressList"></div>
</div>
<div class="panel-shell" id="filePanelShell">
<div class="panel" id="filePanel">
<div class="panel-head">
<span>
共享文件 <small id="fileCount">0 个</small>
<span class="sync-badge" id="syncBadge"><span class="dot"></span><span id="syncText">连接中…</span></span>
</span>
<div class="bulk-actions">
<div class="toolbar-search">
<input type="search" id="searchInput" placeholder="搜索文件名…" autocomplete="off" />
</div>
<select class="conflict-select" id="conflictSelect" title="冲突策略">
<option value="rename">冲突:重命名</option>
<option value="overwrite">冲突:覆盖</option>
<option value="skip">冲突:跳过</option>
</select>
<div class="view-toggle" role="group" aria-label="视图切换">
<button type="button" id="viewListBtn" class="active" title="列表视图"></button>
<button type="button" id="viewIconsBtn" title="图标视图"></button>
</div>
<label class="select-all-label">
<input type="checkbox" id="selectAllCheck" title="全选" aria-label="全选" /> 全选
</label>
<button type="button" id="downloadZipBtn" disabled title="打包下载所选">打包下载</button>
<button type="button" id="newFolderBtn">新建文件夹</button>
<button type="button" class="danger" id="bulkDeleteBtn" disabled>删除所选</button>
<button type="button" id="trashBtn" title="回收站">回收站</button>
<button type="button" class="notify-btn" id="notifyBtn" title="开启桌面通知">🔔</button>
<button type="button" id="refreshBtn">刷新</button>
</div>
</div>
<div class="breadcrumb" id="breadcrumb"></div>
<div class="file-list" id="fileList">
<div class="list-header">
<div class="col-check"></div>
<div class="col-name"><span class="sortable active" data-sort="name">名称 <span class="sort-mark"></span></span></div>
<div class="col-size"><span class="sortable" data-sort="size">大小</span></div>
<div class="col-date"><span class="sortable" data-sort="mtime">修改日期</span></div>
<div class="col-actions"></div>
</div>
<div class="list-body" id="fileTree" tabindex="0" aria-label="文件列表"></div>
</div>
</div>
<div class="panel-resizer" id="panelResizer" title="拖动调整窗口大小" role="separator"></div>
</div>
</div>
<!-- Drag overlay -->
<div class="drag-overlay" id="dragOverlay">
<div class="drag-overlay-box">
<div class="icon">📂</div>
<div class="hint" id="dragOverlayHint">松手移入</div>
<div class="sub" id="dragOverlaySub">释放以上传文件</div>
</div>
</div>
<!-- Preview modal -->
<div class="modal" id="previewModal">
<div class="modal-box">
<div class="modal-head">
<span id="previewTitle"></span>
<div style="display:flex;gap:8px;flex-shrink:0">
<a class="btn" id="previewDownload" href="#">下载</a>
<a class="btn" id="previewOpen" href="#" target="_blank" rel="noopener">新标签打开</a>
<button type="button" id="previewClose">关闭</button>
</div>
</div>
<div class="modal-body" id="previewBody"></div>
</div>
</div>
<!-- Detail modal -->
<div class="modal" id="detailModal">
<div class="modal-box sm">
<div class="modal-head">
<span id="detailTitle">文件详情</span>
<button type="button" id="detailClose">关闭</button>
</div>
<div class="modal-body">
<dl class="detail-grid" id="detailGrid"></dl>
</div>
</div>
</div>
<!-- Conflict modal -->
<div class="modal" id="conflictModal">
<div class="modal-box sm">
<div class="modal-head">
<span>文件冲突</span>
<button type="button" id="conflictClose">关闭</button>
</div>
<div class="modal-body">
<p id="conflictDesc">以下文件已存在,请选择处理方式:</p>
<div class="conflict-list" id="conflictList"></div>
<div class="conflict-actions">
<label><input type="radio" name="conflictChoice" value="rename" checked /> 重命名</label>
<label><input type="radio" name="conflictChoice" value="overwrite" /> 覆盖</label>
<label><input type="radio" name="conflictChoice" value="skip" /> 跳过</label>
</div>
</div>
<div class="modal-foot">
<button type="button" id="conflictCancel">取消</button>
<button type="button" class="primary" id="conflictConfirm">继续</button>
</div>
</div>
</div>
<!-- Trash drawer -->
<div class="trash-backdrop" id="trashBackdrop"></div>
<aside class="trash-drawer" id="trashDrawer">
<div class="trash-drawer-head">
<span>回收站</span>
<button type="button" id="trashClose">关闭</button>
</div>
<div class="trash-drawer-body" id="trashBody">
<div class="trash-empty">加载中…</div>
</div>
<div class="trash-drawer-foot">
<button type="button" id="trashEmptyBtn">清空回收站</button>
<button type="button" id="trashRefreshBtn">刷新</button>
</div>
</aside>
<script src="/oa-drive/app.js"></script>
</body>
</html>