# 1.30dazhi合并前 · 完结页相关变更清单(禁止应用) **说明**:根据 git 拉取的 **1.30dazhi合并前** 分支与 commit **f725f31** 核对:除完结页外,**其他页面是否有被影响**。 **结论**:仅做审查与清单整理,**绝对禁止应用任何代码**。 --- ## 一、当前分支与提交 - **当前分支**:`1.30dazhi合并前` - **完结页相关提交**:`f725f31` — `feat: 完成页逻辑与占位页进入、无完成按钮;课程完成导航与文档` - **工作区**:有 **1 个未提交修改** — `ios/WildGrowth/WildGrowth/VerticalScreenPlayerView.swift`(约 41 行变更) --- ## 二、f725f31 中「除完结页外」被改动的文件(其他页面) 在 **f725f31** 里,**除了** 新增的 `CompletionView.swift` 和文档、以及 `VerticalScreenPlayerView.swift` 的完成页逻辑外,**以下页面/文件也被一起改动了**: ### 1. CourseNavigation.swift | 变更 | 说明 | |------|------| | `.player` | 由 `(courseId, nodeId)` 改为 `(courseId, nodeId, isLastNode, courseTitle)` | | 新增 `.completion` | `(courseId, courseTitle, completedLessonCount)` | | 注释 | 「从 HomeView 提取」改为「供 DiscoveryView / GrowthView / MapView / ProfileView 共用」 | **影响**:所有使用 `CourseNavigation.player` / `.completion` 的调用方必须传新参数或处理新 case。 --- ### 2. MainTabView.swift | 变更 | 说明 | |------|------| | Tab 选中状态 | 由 `@State private var selection` 改为使用 `navStore.selectedTab` | | 新增 `NavigationStore` | `@Published var selectedTab`、`func switchToGrowthTab()` | | TabView 绑定 | `TabView(selection: $selection)` → `TabView(selection: $navStore.selectedTab)` | | 登录成功跳转 | `selection = 2` → `navStore.selectedTab = 2` | | 多处 print | `selection` → `navStore.selectedTab` | **影响**:Tab 切换与完成页「回到技能页」依赖 `navStore.selectedTab` 与 `switchToGrowthTab()`。 --- ### 3. MapView.swift | 变更 | 说明 | |------|------| | 点击小节进入播放器 | `CourseNavigation.player(courseId, nodeId)` → `CourseNavigation.player(courseId, nodeId, isLastNode, courseTitle)` | | 新增 `isLastNode` | `(chapter.id == data.chapters.last?.id) && (index == chapter.nodes.count - 1)` | | 传入 `courseTitle` | `data.courseTitle` | **影响**:从地图进播放器时,会多传 `isLastNode`、`courseTitle`,与 `CourseNavigation` 新签名一致。 --- ### 4. ProfileView.swift | 变更 | 说明 | |------|------| | `.map` | `MapView(courseId:)` → `MapView(courseId:, navigationPath: $navStore.profilePath)` | | `.player` | `VerticalScreenPlayerView` 增加 `navigationPath: $navStore.profilePath`、`isLastNode`、`courseTitle` | | 新增 `.completion` | `CompletionView(courseId, courseTitle, completedLessonCount)` | **影响**:我的 Tab 下地图、播放器、完成页的导航与传参全部按新枚举和完成页流程改过。 --- ### 5. DiscoveryView.swift | 变更 | 说明 | |------|------| | `.map` | `MapView(courseId:)` → `MapView(courseId:, navigationPath: $navStore.homePath)` | | `.player` | `VerticalScreenPlayerView` 增加 `isLastNode`、`courseTitle`(原已有 navigationPath) | | 新增 `.completion` | `CompletionView(courseId, courseTitle, completedLessonCount)` | **影响**:发现 Tab 下地图、播放器、完成页的导航与传参全部按新枚举和完成页流程改过。 --- ### 6. GrowthView.swift | 变更 | 说明 | |------|------| | `.player` | `VerticalScreenPlayerView` 增加 `isLastNode`、`courseTitle`(原已有 MapView navigationPath) | | 新增 `.completion` | `CompletionView(courseId, courseTitle, completedLessonCount)` | **影响**:技能 Tab 下播放器、完成页的导航与传参全部按新枚举和完成页流程改过。 --- ### 7. VerticalScreenPlayerView.swift(f725f31 内) | 变更 | 说明 | |------|------| | 占位页 | `CompletionPlaceholderPage` 由「带 courseId/courseTitle/navigationPath + onAppear 里 push」改为「纯视觉占位」 | | 新增 | TabView 上 `.onChange(of: currentNodeId)`,当 `newId == "wg://completion"` 时 0.1s 后 append `.completion` | **影响**:完成页进入方式从「占位页 onAppear」改为「父视图 onChange」,避免预加载误触。 --- ## 三、当前工作区未提交改动(仅 1 个文件) | 文件 | 变更概要 | |------|----------| | **VerticalScreenPlayerView.swift** | 在 f725f31 基础上:CompletionPlaceholderPage 去掉参数、改为纯 ZStack;TabView 增加 `.onChange(of: currentNodeId)` 的完成页 push 逻辑(与上面「f725f31 内」描述一致,可能是同一逻辑的又一次提交前微调或重复修改) | **其他页面**:当前 **无** 未提交修改。GrowthView、ProfileView、DiscoveryView、MapView、MainTabView、CourseNavigation 等在工作区均为已提交状态(f725f31)。 --- ## 四、直接回答「除了完结页,其他页面有没有被影响」 **有。** 在引入完结页的 **f725f31** 中,除了: - 新增:`CompletionView.swift`、`COMPLETION_PAGE_MEANING.md`、`COMPLETION_VIEW_*` 等文档 - 修改:`VerticalScreenPlayerView.swift`(占位页 + 完成页进入逻辑) 还**一并修改了**以下「其他页面」以支持完成页导航与播放器参数: 1. **CourseNavigation.swift** — 枚举增加 `.completion`、`.player` 增加 `isLastNode`、`courseTitle` 2. **MainTabView.swift** — Tab 状态迁到 `navStore.selectedTab`,新增 `switchToGrowthTab()` 3. **MapView.swift** — 进播放器时传 `isLastNode`、`courseTitle` 4. **ProfileView.swift** — MapView 传 navigationPath;播放器传 isLastNode、courseTitle;增加 `.completion` destination 5. **DiscoveryView.swift** — MapView 传 navigationPath;播放器传 isLastNode、courseTitle;增加 `.completion` destination 6. **GrowthView.swift** — 播放器传 isLastNode、courseTitle;增加 `.completion` destination 因此:**1.30dazhi合并前** 分支上,完结页不是「只动完结页」,而是**和上述 6 个文件一起**在 f725f31 里改的;当前工作区里,只有 **VerticalScreenPlayerView.swift** 还有未提交修改,其他页面没有新的未提交变更。 --- **未对仓库进行任何应用或修改操作。**