Files
am-downloader/UI_REDESIGN.md
T

5.2 KiB
Raw Blame History

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 导航体系净化与精简

  1. 移除顶部及移动端独立「设置」按钮:
    • 彻底移除了原先顶栏导航与移动端底栏的独立「设置」入口。
    • 所有系统运行配置统一纳管在管理员后台内部,避免入口碎片化。
  2. 下载按钮去除角标数字:
    • 移除桌面端导航与移动端底栏「下载」按钮后方突兀的数字徽章(Badge),保持导航栏整体视觉纯粹和谐。
    • 保留 DOM 节点以保证后台任务轮询更新逻辑的向后兼容,不报错不中断。

3.2 管理控制台(Admin Center)全面重构

  1. 分段式选项卡(Segmented Tabs):

    • 废弃原有的“点击磁贴切换子面板再返回”繁琐交互,重构为顶部毛玻璃分段 Tab 栏:
      • 👥 用户管理
      • ◎ 积分账本
      • ◇ 卡密批次
      • ≡ 审计日志
      • ⚙️ 全局设置(由原“纳管设置”更名,系统 API、下载存储策略、全局 WebDAV 完整收拢在此)
    • Tab 切换平滑无刷新,记忆当前选中状态。
  2. 抽屉详情交互(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);)。

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 契约完整无副作用。