Files

79 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 契约完整无副作用。