# 01 独立页面基线 > 本文件不参考已有系统地图文档,完全基于代码扫描独立建立。 > 扫描日期:2026-06-19 > 扫描范围:AIStudyApp/AIStudyApp/ 目录下全部 .swift 文件(不含 Tests 和 Generated) --- ## 一、独立盘点统计 | 统计项 | 数量 | |--------|------| | 一级模块(Tab) | 4 | | 独立页面(含可路由页面) | 32 | | Sheet / 弹窗 | 10 | | 确认弹窗(Alert/ConfirmationDialog) | 8 | | 页面内嵌子视图(非独立路由) | 2 | | 代码存在但无入口的页面 | 1 | | 页面功能点(估算) | ~180 | --- ## 二、应用根结构 ### 2.1 入口点 - `AIStudyAppApp.swift` 是 `@main` 入口。 - 使用 `WindowGroup`,`UIApplicationSupportsMultipleScenes = false`。 - 无 URL Scheme、Universal Link、Deep Link 配置(Info.plist 中无相关条目)。 - 无通知点击路由(未发现 `UNUserNotificationCenter` delegate 或 `onOpenURL`)。 - 无"恢复上次页面"逻辑(每次启动由 AuthManager 状态决定初始页面)。 ### 2.2 会话状态机(AuthManager.AppSession) ``` unknown → SplashScreen unauthenticated → PreLoginFlow (WelcomePage → LoginPage) authenticating / refreshing → SplashScreen authenticated → ContentView (if hasCompletedOnboarding) else PostLoginOnboardingFlow disabled → AccountStatusView (禁用) deleted → AccountStatusView (注销) expired → PreLoginFlow ``` ### 2.3 Tab 根结构(ContentView) ``` TabView(selection: $selectedTab) ├─ "学习" (tag: "study") → NavigationStack → StudyHomeView ├─ "知识库" (tag: "library") → NavigationStack → LibraryHomeView ├─ "分析" (tag: "analysis") → NavigationStack → AnalysisHomeView └─ "我的" (tag: "profile") → NavigationStack → ProfileView ``` 所有 Tab 使用 NavigationStack + `.navigationDestination(for: Route.self)` 统一路由。 ### 2.4 条件性入口 | 条件 | 影响的页面/行为 | |------|----------------| | hasCompletedOnboarding = false | 显示 PostLoginOnboardingFlow (OnboardingPage → GoalSetupPage) | | hasCompletedOnboarding = true | 直接进入 ContentView | | session = .disabled | 显示 AccountStatusView(禁用) | | session = .deleted | 显示 AccountStatusView(注销) | | session = .expired / .unauthenticated | 显示 PreLoginFlow | | selectedTab 值变化 | StudyHomeView 通过 Binding 接收,可被其他 Tab 修改 | | 有 continueLearning API 数据 | 学习主页显示"继续上次学习"卡片 | | reviewCards.count > 0 | 学习主页显示"今日复习"卡片 | | quizzes.count > 0 | 学习主页显示"资料自测"卡片 | | knowledgeBases.count > 0 | 学习主页显示"开始学习"卡片 | | 以上全为空 | 学习主页显示空状态引导 | | iPhone / iPad | AppContext 中记录 deviceType,但不影响页面布局 | | Debug / Release | DEBUG 宏仅在 Route.destination 中用于显示页面标签覆盖层 | --- ## 三、完整页面清单(按入口类型分类) ### 3.1 启动/登录流程页面 | 序号 | 页面 | Swift 类型 | 入口方式 | 是否可路由 | |------|------|-----------|---------|-----------| | P01 | 启动页 | SplashScreen | 应用冷启动(session = .unknown/.authenticating/.refreshing) | 否 | | P02 | 欢迎页 | WelcomePage | PreLoginFlow step 0 | 否 | | P03 | 登录页 | LoginPage | PreLoginFlow step 1 | 否 | | P04 | 账号禁用页 | AccountStatusView | session = .disabled | 否 | | P05 | 账号注销页 | AccountStatusView | session = .deleted | 否 | | P06 | 引导页 | OnboardingPage | PostLoginOnboardingFlow step 0 | 否 | | P07 | 目标设置页 | GoalSetupPage | PostLoginOnboardingFlow step 1 | 否 | ### 3.2 学习 Tab 页面(NavigationLink Push) | 序号 | 页面 | Route 枚举 | 入口 | |------|------|-----------|------| | P08 | 学习主页 | Route.studyHome | Tab "学习" 默认 | | P09 | 学习会话页 | Route.learningSession | 资料阅读页工具栏 | | P10 | 复习卡片页 | Route.reviewCard | 学习主页 / AIHomeView | | P11 | 主动回忆页 | Route.activeRecall | 学习主页底部链接 / AIHomeView | ### 3.3 知识库 Tab 页面(NavigationLink Push) | 序号 | 页面 | Route 枚举 | 入口 | |------|------|-----------|------| | P12 | 知识库首页 | Tab "知识库" 直接渲染 | Tab "知识库" | | P13 | 知识库搜索页 | Route.librarySearch | 知识库首页搜索图标 | | P14 | 知识库详情页 | Route.libraryDetail | 知识库首页卡片点击 | | P15 | 创建知识库页 | Route.libraryCreate | 知识库首页 + 按钮 / 我的页学习资产 | | P16 | 添加知识点页 | Route.addKnowledge | 知识库详情页操作菜单"添加" | | P17 | 知识点详情页 | Route.knowledgeDetail | 知识库详情页点击知识点 | | P18 | 编辑知识点页 | Route.editKnowledge | 知识点详情页工具栏菜单 | | P19 | 导入资料页 | Route.libraryImport | 知识库详情页操作菜单"上传" | | P20 | 导入候选审核页 | Route.importReview | 导入资料完成后 | | P21 | 发现公开库页 | Route.discoverPublic | 我的页"发现公开库" | ### 3.4 分析 Tab 页面 | 序号 | 页面 | Route 枚举 | 入口 | |------|------|-----------|------| | P22 | 学习分析页 | Tab "分析" 直接渲染 | Tab "分析" | ### 3.5 我的 Tab 页面 | 序号 | 页面 | Route 枚举 | 入口 | |------|------|-----------|------| | P23 | 个人中心页 | Tab "我的" 直接渲染 | Tab "我的" | | P24 | 编辑资料页 | Route.editProfile | 个人中心页资料卡片 / 设置页 | | P25 | 设置页 | Route.settings | 个人中心页设置图标 / 复习提醒行 | | P26 | 学习目标设置页 | Route.goalSetting | 设置页 / 我的页 | | P27 | 学习方法偏好页 | Route.methodPreference | 设置页 / 我的页 | | P28 | 通知列表页 | Route.notificationList | 我的页通知图标 / 消息中心 | | P29 | 帮助与反馈页 | Route.feedbackForm | 我的页 / 设置页 | ### 3.6 AI 辅助页面(跨模块 Push) | 序号 | 页面 | Route 枚举 | 入口 | |------|------|-----------|------| | P30 | AI 对话页 | Route.aiChat | 知识库详情页底部 / 资料阅读页工具栏 / AI 反馈页 | | P31 | 每日思考页 | Route.dailyThinking | AI 反馈页"再来一题" / AIHomeView | | P32 | AI 反馈页 | Route.aiFeedback | 主动回忆完成后 / 每日思考提交后 | | P33 | 薄弱知识点页 | Route.weakPoints | 分析页"全部 N 个"链接 / AIHomeView | ### 3.7 测验页面 | 序号 | 页面 | Route 枚举 | 入口 | |------|------|-----------|------| | P34 | 测验列表页 | Route.quizList | 知识库详情页操作菜单"测验" | | P35 | 测验作答页 | Route.quizTake | 测验列表点击 / 学习主页自我测试 | | P36 | 测验结果页 | Route.quizResult | 测验作答提交后 | ### 3.8 资料阅读页面 | 序号 | 页面 | Route 枚举 | 入口 | |------|------|-----------|------| | P37 | 资料阅读页 | Route.materialReader | 学习主页"继续学习" / 分析页"继续阅读" / 来源文件 / 知识点详情 | | P38 | 资料详情页 | Route.materialDetail | 资料阅读页工具栏"信息"按钮 | ### 3.9 Sheet / 弹窗(非独立 Push 页面) | 序号 | 名称 | 类型 | 所在页面 | 入口 | |------|------|------|---------|------| | S01 | AI 会话列表 Sheet | .sheet (medium/large) | AIChatPage | 工具栏"会话列表"按钮 | | S02 | 快速笔记 Sheet | .sheet | MaterialReaderView | 工具栏笔记按钮 | | S03 | 系统预览 (QuickLook) | .sheet (QLPreviewController) | MaterialReaderView | "系统预览"按钮 | | S04 | 封面选择 Sheet | .sheet (height 220) | CreateLibraryPage | 封面区域点击 | | S05 | 文件夹管理 Sheet | .sheet | LibraryDetailPage | 操作菜单"文件夹管理" | | S06 | 链接导入 Alert | .alert (with TextField) | ImportPage | "链接导入"按钮 | ### 3.10 确认弹窗(Alert / ConfirmationDialog) | 序号 | 名称 | 类型 | 所在页面 | |------|------|------|---------| | A01 | 结束学习确认 | ConfirmationDialog | LearningSessionView | | A02 | 删除知识库确认 | Alert | LibraryDetailPage | | A03 | 批量删除确认 | Alert | LibraryDetailPage | | A04 | 新建文件夹 | Alert (with TextField) | FolderManageView | | A05 | 重命名文件夹 | Alert (with TextField) | FolderManageView | | A06 | 退出登录确认 | Alert | SettingsView | | A07 | 新建分类 | Alert (with TextField) | FolderManageView | | A08 | 链接导入 | Alert (with TextField) | ImportPage | ### 3.11 代码存在但无入口的页面 | 名称 | Swift 类型 | 情况说明 | |------|-----------|---------| | AI 首页 | AIHomeView | 完整页面代码,含 NavigationLink 到 AIChatPage/ActiveRecallView/WeakPointsPage/ReviewCardView/DailyThinkingPage,但 Route 中无对应 case,无任何其他页面跳转到此页 | --- ## 四、入口类型检查清单 | 入口类型 | 是否检查 | 发现情况 | |---------|---------|---------| | Tab | 是 | 4 个:学习、知识库、分析、我的 | | Push (NavigationLink via Route) | 是 | 约 25 个路由目标 | | Sheet | 是 | 6 个 Sheet | | FullScreenCover | 是 | 未发现 | | Alert | 是 | 6 个 Alert | | ConfirmationDialog | 是 | 1 个 | | Popover | 是 | 未发现 | | ContextMenu | 是 | LibraryDetailPage 知识点行 | | Menu | 是 | LibraryDetailPage 工具栏 | | Deep Link | 是 | 未配置 | | Universal Link | 是 | 未配置 | | URL Scheme | 是 | 未配置 | | 通知点击路由 | 是 | 未发现 | | Debug 页面 | 是 | 仅 DEBUG 标签覆盖层,无专用调试页面 | | 条件渲染页面 | 是 | 基于 session / onboarding / 数据状态的 7 种分支 | | iPhone/iPad 差异 | 是 | 仅在 AppContext 记录,无布局差异 | | Feature Flag | 是 | 未发现 | | 管理员/内部账号 | 是 | 未发现 | | 首次启动 vs 非首次 | 是 | hasCompletedOnboarding @AppStorage | --- ## 五、页面跳转关系(基于 Route 枚举和 NavigationLink 分析) ### 5.1 Tab 内跳转 | 源页面 | 目标页面 | Route | |--------|---------|-------| | StudyHomeView | MaterialReaderView | .materialReader | | StudyHomeView | ReviewCardView | .reviewCard | | StudyHomeView | QuizTakerView | .quizTake | | StudyHomeView | QuizListView | .quizList | | StudyHomeView | ActiveRecallView | .activeRecall | | StudyHomeView | 切换到 library Tab | selectedTab 绑定 | | LibraryHomeView | LibrarySearchView | .librarySearch | | LibraryHomeView | CreateLibraryPage | .libraryCreate | | LibraryHomeView | LibraryDetailPage | .libraryDetail | | LibraryDetailPage | KnowledgeDetailPage | .knowledgeDetail | | LibraryDetailPage | EditKnowledgePage | .editKnowledge | | LibraryDetailPage | ImportPage | .libraryImport | | LibraryDetailPage | AddKnowledgePage | .addKnowledge | | LibraryDetailPage | QuizListView | .quizList | | LibraryDetailPage | AIChatPage | .aiChat | | LibraryDetailPage | MaterialReaderView | .materialReader | | LibraryDetailPage | FolderManageView (Sheet) | - | | CreateLibraryPage | 封面选择 Sheet | - | | AddKnowledgePage | (文件选择器/相册) | 系统组件 | | KnowledgeDetailPage | MaterialReaderView | .materialReader | | KnowledgeDetailPage | QuickLook (Sheet) | - | | KnowledgeDetailPage | QuickNoteSheet | - | | ImportPage | ImportReviewPage | .importReview | | ImportPage | (文件选择器/相册/链接Alert) | 系统组件 | | AnalysisHomeView | WeakPointsPage | .weakPoints | | AnalysisHomeView | MaterialReaderView | .materialReader | | ProfileView | EditProfilePage | .editProfile | | ProfileView | GoalSettingDetailView | .goalSetting | | ProfileView | SettingsView | .settings | | ProfileView | MethodPreferenceView | .methodPreference | | ProfileView | FeedbackFormView | .feedbackForm | | ProfileView | CreateLibraryPage | .libraryCreate | | ProfileView | DiscoverView | .discoverPublic | | ProfileView | NotificationListView | .notificationList | | SettingsView | GoalSettingDetailView | .goalSetting | | SettingsView | MethodPreferenceView | .methodPreference | | SettingsView | EditProfilePage | .editProfile | | SettingsView | FeedbackFormView | .feedbackForm | ### 5.2 跨模块跳转 | 源页面 | 目标页面 | 触发方式 | |--------|---------|---------| | ActiveRecallView | AIFeedbackPageView | 提交完所有回答后"查看 AI 分析" | | AIFeedbackPageView | StudyHomeView | "加入待巩固" | | AIFeedbackPageView | AIChatPage | "深入提问" | | AIFeedbackPageView | DailyThinkingPage | "再来一题" | | DailyThinkingPage | AIFeedbackPageView | 提交回答后 | | MaterialReaderView | AIChatPage | 工具栏 AI 按钮 | | MaterialReaderView | MaterialDetailView | 工具栏信息按钮 | | MaterialReaderView | LearningSessionView | 工具栏学习按钮 | | MaterialReaderView | QuickNoteSheet | 工具栏笔记按钮 | | AIHomeView | AIChatPage | NavigationLink(页面自身无入口) | | AIHomeView | ActiveRecallView | NavigationLink(页面自身无入口) | | AIHomeView | WeakPointsPage | NavigationLink(页面自身无入口) | | AIHomeView | ReviewCardView | NavigationLink(页面自身无入口) | | AIHomeView | DailyThinkingPage | NavigationLink(页面自身无入口) | --- ## 六、API 服务清单(每个对应一组后端端点) | 服务类 | 主要端点 | 被哪些页面使用 | |--------|---------|--------------| | AuthService | /auth/apple, /auth/refresh, /auth/logout | LoginPage, AuthManager | | UserService | /users/me (GET/PATCH), /users/me/preferences, /users/me/profile, /users/me/deletion-request, /users/me/devices, /users/me/assets-summary, /users/me/storage | ProfileView, EditProfilePage, SettingsView, GoalSettingDetailView, MethodPreferenceView | | KnowledgeBaseService | /knowledge-bases (CRUD), /knowledge-bases/subscribed, /knowledge-bases/:id/subscribe | LibraryHomeView, LibraryDetailPage, CreateLibraryPage, DiscoverView, StudyHomeView | | KnowledgeItemService | /knowledge-items (CRUD, batch-delete) | LibraryDetailPage, AddKnowledgePage, KnowledgeDetailPage, EditKnowledgePage | | KnowledgeFolderService | /knowledge-bases/:id/folders (CRUD) | FolderManageView | | KnowledgeSourceService | /knowledge-bases/:id/sources (CRUD, parse) | LibraryDetailPage, MaterialReaderView | | DocumentImportService | /imports (create, status) | ImportPage | | ImportCandidateService | /import-candidates (list, accept, reject, batch-accept) | ImportReviewPage | | QuizService | /quizzes (generate, list, detail, start, submit, results, history) | QuizListView, QuizTakerView, QuizResultView | | RagChatService | /rag-chat/sessions (CRUD, messages, stream) | AIChatPage | | ActiveRecallService | /active-recalls (list, submit) | ActiveRecallView | | AIAnalysisService | /ai-analysis | (ViewModel 中有调用,但 ActiveRecallView 使用硬编码数据) | | ReviewService | /reviews (due, submit, generate-cards) | ReviewCardView (View 中硬编码,ViewModel 调用 API) | | FocusItemService | /focus-items (list, update, complete) | AnalysisHomeView (via ActivityViewModel) | | ActivityService | /activity (summary, heatmap, trend, streak, recommendations) | AnalysisHomeView, ProfileView, StudyHomeView | | LearningSessionService | /learning-sessions (list, start, end) | LearningSessionView, StudyHomeView | | ReadingAPIService | /learning/reading-events/batch, /materials/:id/reading-progress, /learning/continue, /learning/summary, /learning/trend, /learning/records | MaterialReaderView, StudyHomeView, AnalysisHomeView | | FileUploadService | /files/upload-url, /files/complete, /files/:id | CreateLibraryPage, AddKnowledgePage, ImportPage, EditProfilePage | | FeedbackService | /feedback | FeedbackFormView | | NotificationService | /notifications (list, markRead, markAllRead, preferences, push-token) | NotificationListView, SettingsView | | WaitlistService | /waitlist | (API 定义存在,iOS 代码中未发现使用入口) | --- ## 七、免责说明 - 本基线完全基于对 AIStudyApp/AIStudyApp/ 目录下全部 64 个 .swift 文件的逐文件阅读建立。 - 未检查 .xcassets、.entitlements、.xcodeproj 中的详细配置。 - iOS 推送通知的深度链接处理在代码中未发现,但可能在 Capabilities 中配置(未检查 .entitlements 文件全文)。 - WaitlistService 代码存在但未在任何 View 或 ViewModel 中使用,判定为无 C 端入口。