wangdl bac51224e2 feat(ios): M2 测验模块全部 4 个 issue
M2-01 测验列表页 (QuizListView):
- 展示知识库下所有测验 + 空状态/生成新测验按钮
- POST /quizzes 生成测验

M2-02 答题页面 (QuizTakerView):
- 选择题 ABCD 选项 / 判断题 ✓✗ / 填空题输入
- 进度条 + 上一题/下一题/提交按钮
- POST /quizzes/:id/start + POST /quizzes/:id/submit

M2-03 结果页 (QuizResultView):
- 得分展示 + 每题对错详情 + 解释
- 重新测验按钮

路由: quizList/quizTake/quizResult
QuizService: generate/list/detail/start/submit/results/history
Quiz 模型: Quiz/QuizQuestion/QuizAttempt/QuizAnswer/QuizSubmitRequest 等

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 08:50:25 +08:00

78 lines
2.6 KiB
Swift

import SwiftUI
enum Route: Hashable {
// AI
case aiChat
case dailyThinking
case aiFeedback
case activeRecall
case weakPoints
case reviewCard
// Library
case librarySearch
case libraryDetail(knowledgeBaseId: String)
case libraryImport
case libraryCreate
case addKnowledge(knowledgeBaseId: String)
case knowledgeDetail(item: KnowledgeItem)
case editKnowledge(item: KnowledgeItem)
// Study
case learningSession(taskTitle: String, taskType: String, taskColorHex: String)
case studyHome
// Import
case importReview(sourceId: String)
// Quiz
case quizList(knowledgeBaseId: String)
case quizTake(quizId: String)
case quizResult(quizId: String, attemptId: String)
// Profile
case notificationList
case settings
case goalSetting
case methodPreference
case feedbackForm
case editProfile
}
extension Route {
@ViewBuilder
var destination: some View {
switch self {
case .aiChat: AIChatPage()
case .dailyThinking: DailyThinkingPage()
case .aiFeedback: AIFeedbackPageView()
case .activeRecall: ActiveRecallView()
case .weakPoints: WeakPointsPage()
case .reviewCard: ReviewCardView()
case .librarySearch: LibrarySearchView()
case .libraryDetail(let id): LibraryDetailPage(knowledgeBaseId: id)
case .libraryImport: ImportPage()
case .libraryCreate: CreateLibraryPage()
case .addKnowledge(let id): AddKnowledgePage(knowledgeBaseId: id)
case .knowledgeDetail(let item): KnowledgeDetailPage(item: item)
case .editKnowledge(let item): EditKnowledgePage(item: item)
case .learningSession(let title, let type, let colorHex):
LearningSessionView(taskTitle: title, taskType: type, taskColor: Color(hex: colorHex))
case .studyHome: StudyHomeView()
case .notificationList: NotificationListView()
case .settings: SettingsView()
case .goalSetting: GoalSettingDetailView()
case .methodPreference: MethodPreferenceView()
case .feedbackForm: FeedbackFormView()
case .editProfile: EditProfilePage()
case .importReview(let sourceId): ImportReviewPage(sourceId: sourceId)
case .quizList(let kbId): QuizListView(knowledgeBaseId: kbId)
case .quizTake(let id): QuizTakerView(quizId: id)
case .quizResult(let qid, let aid): QuizResultView(quizId: qid, attemptId: aid)
}
}
}