"""管理界面:单页 HTML + 原生 JS(无构建、无外部 CDN,内网离线可用)。 前端约定(2026-10-11 按"点同步曲库就卡住"的反馈重做): * **动作类按钮一律"发起即返回"**:点击后按钮进入 loading 态 + 顶上一行提示, 拒绝在前端 `await` 长任务(同步曲库要跑上百秒,等它就是"页面像死了"的根源); * **一个统一的轮询(默认 4 秒,可暂停)**:每轮只请求当前页签需要的接口, `Promise.allSettled` 并发 + 单个接口失败互不影响;上一轮没回来就跳过这一轮(防重入); * **只更新变化的那几块 DOM**:每个块用"内容签名"比对,签名没变就一个字节都不动 (整页 `innerHTML` 重建会丢输入焦点/勾选/滚动位置);顶部实时显示"最后更新时间"; * **进度可见**:同步显示进度条/百分比/已用时;批量显示 keeps 总数/待下/已下/失败、 百分比、速率与预计剩余。 """ from __future__ import annotations from . import web PAGE = r"""