79 lines
3.5 KiB
Markdown
79 lines
3.5 KiB
Markdown
|
|
# CompletionView 粉紫掌机版 — 定稿审查报告(不应用)
|
|||
|
|
|
|||
|
|
**审查日期**:2025-01-29
|
|||
|
|
**范围**:Pink-Purple Gameboy Edition(赛博粉紫外壳 + 黑框大屏 + 蓝色胶囊按钮 + 数字滚动)
|
|||
|
|
**结论**:仅审查、不修改仓库;逻辑继承正确,有一处待确认的 UI 细节。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 修改点落实情况
|
|||
|
|
|
|||
|
|
| 修改点 | 要求 | 定稿实现 | 结论 |
|
|||
|
|
|--------|------|----------|------|
|
|||
|
|
| **外壳颜色** | 赛博粉紫渐变 (Hot Pink → Deep Purple) | `shellGradient`:`Color(1, 0.35, 0.8)` → `Color(0.58, 0.2, 0.9)` | ✅ |
|
|||
|
|
| **去除装饰** | 右下角勋章删掉,只留数据 | `Spacer()` 替代原勋章位,注释 "已删除勋章" | ✅ |
|
|||
|
|
| **屏幕布局** | 严格复刻截图 | 上:TOTAL → 数字 → LESSONS;下:FOCUS TIME → 数字 min;无 ONLINE/电量 | ✅ |
|
|||
|
|
| **按钮** | 蓝色胶囊,与粉紫撞色 | 亮蓝渐变 + 凹槽 + 高光,保留撞色效果 | ✅ |
|
|||
|
|
| **动效** | 点击 → 屏幕闪白 → 数字匀速滚动 | `performActivation` 中 `isSystemOn = true` + `withAnimation(.linear(duration: 1.5))` | ✅ |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 逻辑继承(FRC 要求)
|
|||
|
|
|
|||
|
|
| 项目 | 要求 | 定稿实现 | 结论 |
|
|||
|
|
|------|------|----------|------|
|
|||
|
|
| **持久化 Key** | `has_revealed_course_\(courseId)` | 一致 | ✅ |
|
|||
|
|
| **游客短路** | 不调网络,短延迟后直接激活 | `if userManager.isGuest { asyncAfter(0.5) { performActivation(0,0) }; return }` | ✅ |
|
|||
|
|
| **游客延迟** | 极短假连接 | 0.5s | ✅ |
|
|||
|
|
| **登录用户** | 拉取 fetchUserProfile 后激活 | `Task { sleep(0.8s); fetchUserProfile; performActivation(lessons, minutes) }` | ✅ |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. RollingNumberText 与 Animatable
|
|||
|
|
|
|||
|
|
- `RollingNumberText` 正确实现 `Animatable`:`animatableData` 读写 `value`,`Double` 符合 `VectorArithmetic`,数字在 1.5s 内线性插值显示。
|
|||
|
|
- `displayLessons`、`displayMinutes` 初始为 0,激活时设为目标值,配合 `withAnimation(.linear(duration: 1.5))` 实现匀速滚动。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. checkSystemStatus 与数据来源
|
|||
|
|
|
|||
|
|
- 已激活时:`displayLessons`、`displayMinutes` 从 `userManager.studyStats` 取,保证二次进入时显示正确。
|
|||
|
|
- 游客:`performActivation(0, 0)`,与未登录、无服务端统计一致。
|
|||
|
|
- 登录用户:`performActivation(lessons, minutes)` 使用 `fetchUserProfile` 后的 `studyStats`,正确。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 待确认 UI 细节
|
|||
|
|
|
|||
|
|
**按钮未按下时的图标**:当前在 `!isBooting && !isSystemOn` 时显示 `Image(systemName: "checkmark")`,与激活后相同。若希望更易理解「待操作」,可改为 `"arrow.down.circle.fill"` 或 `"checkmark.circle"` 等,属可选优化,非阻塞。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 可选小修正(按需)
|
|||
|
|
|
|||
|
|
- **ForEach(0..<100)**:扫描线纹理的 `ForEach(0..<100)` 若在部分 Swift/SwiftUI 版本报错,可加上 `id: \.self`。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 接口与影响范围
|
|||
|
|
|
|||
|
|
| 项目 | 结论 |
|
|||
|
|
|------|------|
|
|||
|
|
| **初始化参数** | 三参数不变,调用方无需修改 |
|
|||
|
|
| **替换方式** | 直接整文件替换 `CompletionView.swift` |
|
|||
|
|
| **其他页面** | 无影响 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 总结
|
|||
|
|
|
|||
|
|
| 维度 | 结论 |
|
|||
|
|
|------|------|
|
|||
|
|
| **视觉修改** | ✅ 粉紫外壳、去勋章、复刻布局、蓝胶囊按钮、数字滚动 |
|
|||
|
|
| **逻辑继承** | ✅ Key 回滚、游客短路、登录用户拉取逻辑一致 |
|
|||
|
|
| **动效** | ✅ 屏幕闪白 + 1.5s 线性滚动 |
|
|||
|
|
| **接口兼容** | ✅ 可直接替换 |
|
|||
|
|
|
|||
|
|
**审查结论**:定稿代码满足设计要求,逻辑继承正确,可直接用于替换。**本次未对仓库做任何修改。**
|