- 后端: - UploadService.delete_file 下沉删除逻辑(DB 行 + 磁盘文件),单删/批删复用。 - POST /api/admin/files/batch-delete:批量硬删除,返回 deleted 数与 not_found 列表。 - list 接口加 Query 约束(limit 1-10000、offset>=0),非法返回 422。 - 前端(file_browser): - 复选框列 + 全选/反选,选中行高亮,批量操作栏(已选计数/下载/删除/取消)。 - 分页控件:每页 20/50/100/全部 切换,页码导航(首页/末页/当前±1/省略号)。 - 批量下载逐个触发(间隔 150ms 防浏览器拦截);批量删除走 batch-delete 接口。 - 删除后重载当前页,当前页空则回退一页。
48 lines
1.5 KiB
HTML
48 lines
1.5 KiB
HTML
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>文件浏览 - zikai</title>
|
|
<link rel="stylesheet" href="/static/common.css">
|
|
<link rel="stylesheet" href="/static/file_browser.css">
|
|
</head>
|
|
<body>
|
|
<div class="wrap">
|
|
<h1>文件浏览</h1>
|
|
<p class="sub">查看已上传的文件、下载或删除。支持多选与分页。删除后不再显示。</p>
|
|
|
|
<div class="toolbar">
|
|
<button class="btn primary" id="refresh">刷新</button>
|
|
<span class="muted" id="count"></span>
|
|
<span class="toolbar-spacer"></span>
|
|
<label class="page-size">每页
|
|
<select id="pageSize">
|
|
<option value="20">20</option>
|
|
<option value="50">50</option>
|
|
<option value="100" selected>100</option>
|
|
<option value="all">全部</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
|
|
<div id="batchbar" class="batchbar hidden">
|
|
<span class="batchbar-info">已选 <b id="selCount">0</b> 项</span>
|
|
<button class="btn primary" id="batchDownload">批量下载</button>
|
|
<button class="btn danger" id="batchDelete">批量删除</button>
|
|
<button class="btn ghost" id="clearSel">取消选择</button>
|
|
</div>
|
|
|
|
<div id="list">
|
|
<div class="skel">加载中…</div>
|
|
</div>
|
|
|
|
<div id="pager" class="pager hidden"></div>
|
|
|
|
<p class="foot"><a class="link" href="/upload">上传文件</a> · zikai file service</p>
|
|
</div>
|
|
<script src="/static/common.js"></script>
|
|
<script src="/static/file_browser.js"></script>
|
|
</body>
|
|
</html>
|