5.2 KiB
5.2 KiB
AM Downloader 交互界面 (UI) 重构与优化文档
1. 概述与背景
am-downloader 原先的 index.html 采用单页平铺逻辑,随着多用户鉴权、积分兑换、用户级 WebDAV 与管理员后台的引入,旧版界面存在层级分散、导航冗余、缺乏现代感与移动端适配生硬等问题。
本项目已完成系统级的前端现代化重构,并保持对后端原有 API 契约和前端 DOM 事件完全兼容,目前已在运行中的 Docker 容器环境(端口 9540)热更新上线生效。
2. 视觉设计系统规范
2.1 配色与质感(Modern Dark Glassmorphism)
- 深色基底:主背景采用
#080c14,配合双色极光渐变暗影(翡翠绿#10b981与天蓝#38bdf8),提升流媒体科技质感。 - 毛玻璃面板:卡片与导航栏统一采用
rgba(17, 26, 42, 0.75)配以backdrop-filter: blur(16px),边框引入半透明微发光分割线(rgba(255, 255, 255, 0.08))。 - 字体与层级:接入
Plus Jakarta Sans作为主要无衬线英文字体,JetBrains Mono作为代码、卡密与音质参数等宽字体。
3. 核心功能与架构重构细节
3.1 导航体系净化与精简
- 移除顶部及移动端独立「设置」按钮:
- 彻底移除了原先顶栏导航与移动端底栏的独立「设置」入口。
- 所有系统运行配置统一纳管在管理员后台内部,避免入口碎片化。
- 下载按钮去除角标数字:
- 移除桌面端导航与移动端底栏「下载」按钮后方突兀的数字徽章(Badge),保持导航栏整体视觉纯粹和谐。
- 保留 DOM 节点以保证后台任务轮询更新逻辑的向后兼容,不报错不中断。
3.2 管理控制台(Admin Center)全面重构
-
分段式选项卡(Segmented Tabs):
- 废弃原有的“点击磁贴切换子面板再返回”繁琐交互,重构为顶部毛玻璃分段 Tab 栏:
👥 用户管理◎ 积分账本◇ 卡密批次≡ 审计日志⚙️ 全局设置(由原“纳管设置”更名,系统 API、下载存储策略、全局 WebDAV 完整收拢在此)
- Tab 切换平滑无刷新,记忆当前选中状态。
- 废弃原有的“点击磁贴切换子面板再返回”繁琐交互,重构为顶部毛玻璃分段 Tab 栏:
-
抽屉详情交互(Slide-over Drawer):
- 用户详情不再替换整页或跳转离开当前列表。
- 点击任意用户的「查看详情」时,桌面端由右侧平滑滑出毛玻璃抽屉面板,移动端自适应为底部滑起抽屉(Bottom Sheet)。
- 抽屉内置:账号角色与状态、密码重置、账号启停、积分增减与实时流水。
- 配合磨砂半透明背景遮罩(Backdrop),点击空白处或「✕ 关闭」按钮即可无缝收起,列表浏览上下文不丢失。
4. 兼容性与上线记录
- DOM 契约兼容:保留所有核心配置 ID(
amApi、downloadDir、localFilePolicy、defaultQuality、davUrl等)以及事件回调机制。 - 上线状态:最新代码已提交 Git(分支
master),并同步热更新至运行中的am-downloader容器内/app/index.html。
5. 交互与细节修复记录(2026-09-17)
5.1 移动端底部导航栏贴底优化
- 改动说明:解决移动端底栏浮岛胶囊式设计(悬空
12px且带圆角)在滚动时产生的文字从缝隙穿插、视觉割裂问题。 - 调整实现:
- 改为全宽贴底原生 TabBar 布局(
left: 0; right: 0; bottom: 0; border-radius: 0;)。 - 顶部微弱边框隔离(
border-top: 1px solid var(--border-subtle)),四周无多余外边框。 - 适配安全区域与深色毛玻璃(
padding: 6px 8px calc(6px + env(safe-area-inset-bottom, 0px)); background: rgba(8, 12, 20, 0.95); backdrop-filter: blur(20px);)。
- 改为全宽贴底原生 TabBar 布局(
5.2 全局接口与弹窗提示中文语义化
- 改动说明:解决兑换失败、加入队列失败时直接将后端原始错误 JSON(如
["error""code already used or unavailable"])弹给用户的粗糙体验。 - 调整实现:
- 在底层封装统一错误解析器
parseErrorMsg(msg),自动解包后端返回的 JSON 结构。 - 建立错误语义字典映射:
code already used or unavailable→ 该兑换码已被使用或已失效record not found→ 兑换码不存在,请核对后重试insufficient credits→ 积分不足,请先兑换或充值积分code expired→ 该兑换码已过期user disabled→ 账户已被禁用,无法执行此操作only failed tasks can be retried→ 只有失败的任务才支持重试- 其他校验项(用户名/密码规则、金额非零等)同步完成中文友好化。
- 在底层封装统一错误解析器
5.3 用户管理抽屉积分调整事件委托审核
- 问题根因:原代码在为
detailAdd与detailSub绑定onclick后,通过innerHTML += ...追加积分流水,导致整个容器内 DOM 被全量重构,先前绑定的监听器失效。 - 修复方案与审核:通过
document.createElement('div')+appendChild(ledger)实现流水平行追加,既保留了已渲染节点的事件监听,又保证了 DOM 结构与 ID 契约完整无副作用。