Files
zTools2/static/file_browser.html
zikai 41580a9025 feat: 文件浏览页支持多选、批量下载/删除与分页
- 后端:
  - 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 接口。
  - 删除后重载当前页,当前页空则回退一页。
2026-07-21 14:37:13 +00:00

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>