wangdl
695518b276
fix : #16 sortOption 接入后端排序 API
...
- KnowledgeItemService.list 加 sortBy/order 参数
- loadItems/refresh/loadMore 加 sortBy/order 参数
- sortOption onChange 触发重新加载
- sortParams 映射函数: 0→默认, 1→fileSize, 2→createdAt, 3→updatedAt
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 19:07:33 +08:00
wangdl
9d0f426118
revert: 恢复 AddKnowledgePage 标签改动
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 18:15:51 +08:00
wangdl
d8bdfe1dd4
fix: AddKnowledgePage 标签放大 + 文件名点击复制
...
- 标签字号 12→15 (内容来源/标题/内容)
- 文件列表项点击文件名复制到剪贴板
- 提示文字 12→13
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 18:10:00 +08:00
wangdl
2610bcf7f9
feat: M-CHAT iOS ChatScope 入口 + AI View 对接
...
## ChatEntryContext 模型
- ChatScopeType enum (knowledgeBase/folder/material/knowledgeItem/global)
- ChatEntryContext struct + ChatScopeSnapshot
- ChatSession 更新 (新增 13 个 scope 字段)
- CreateSessionRequest/UpdateChatSessionRequest
## Route + Service
- Route.aiChat 从 knowledgeBaseId 改为 ChatEntryContext
- RagChatService.createSession 接入 open-or-create API
- listSessions 支持 scope 过滤
- 新增 updateSession (PATCH)
## 6 个入口全部接入
- 知识库详情 → knowledge_base scope
- 资料详情 → material scope
- 资料阅读页 → material scope
- 知识点详情 → knowledge_item scope
- 全局入口 → global scope
## AI Chat View
- open-or-create: load() 直接调 POST /sessions
- 顶部 scope 指示器 (scopeLabel + scopeIcon)
- 新对话按钮在当前 scope 下工作
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 17:41:27 +08:00
wangdl
4ebb70c036
feat: 图标线型化 + 首页重设计 + 知识库卡片优化 + 知识点列表重构
...
- 所有 SF Symbol .fill 图标替换为线性版本
- 自定义加载动画全部替换为原生 ProgressView/refreshable
- StudyHomeView 重设计:优先级驱动主行动卡片
- ZLibraryCard 重新设计:封面图自适应、信息布局优化
- LibraryDetailPage:顶部KB信息区、···菜单、排序、长按操作
- 知识点列表:文件类型图标、学习时长、分割线样式
- 弥散渐变顶部背景
- 新增 icon-folder、icon-xmark SVG
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 20:07:15 +08:00
wangdl
52756d3bb0
feat(ios): 全局替换所有 systemName 为 Tabler SVG 图标
...
- 30+ 种 systemName 全部换为自定义 SVG
- 新增 list/clock/refresh/pencil 4 个 Tabler 图标
- 底部导航栏已使用自定义 SVG(无需改动)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 13:53:43 +08:00
wangdl
70b9ee1250
fix(ios): 加号/垃圾桶图标尺寸放大 + 加号颜色统一
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 13:32:10 +08:00
wangdl
f6df01d9ca
feat(ios): TabBar 显示/隐藏增加入场出场动画
...
- TabBarState ObservableObject 管理可见性
- ContentView 用 .toolbar(hidden)+animation 驱动动画
- 子页面 hideTabBarWithAnimation() 替代静态 toolbar hidden
- 0.28s easeInOut 淡入淡出
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:57:39 +08:00
wangdl
7f252b48f0
fix(ios): TabBar 隐藏改回直接 .toolbar(.hidden, for: .tabBar)
...
- 移除 AnimatedTabBarHide 环境值动画系统
- 所有子页面统一使用 .toolbar(.hidden, for: .tabBar)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:52:32 +08:00
wangdl
51f51692ef
fix(ios): 全局图标尺寸标准化 — 导航22/行内20/箭头14
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:41:41 +08:00
wangdl
62714558db
feat(ios): 退出/相机/垃圾桶/打勾 4 个图标替换
...
- icon-logout: 退出登录
- icon-camera: 拍照上传
- icon-trash: 删除
- icon-check: 确认打勾
- 全局替换 systemName: trash/camera.fill/rectangle.portrait/checkmark
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:42:57 +08:00
wangdl
9f4e3815d4
feat(ios): 播放/暂停/下载/上传/左右箭头 6 个图标全部替换
...
- icon-play / icon-pause / icon-download / icon-upload
- icon-chevron-left / icon-chevron-right
- 全局替换 systemName: chevron/play 引用
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:38:15 +08:00
wangdl
a09853ffa9
fix(ios): 全局去掉图标彩色背景块,图标直接显色
...
- ZXSettingRow / ZXSettingToggleRow 移除 background+clipShape
- ProfileView 通知/设置图标去掉毛玻璃背景
- 全局清理 .background(xxxBG(0.xx)).clipShape() 图案
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:33:59 +08:00
wangdl
cb5e49de12
feat(ios): + 号图标替换为自定义 SVG
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:29:25 +08:00
wangdl
850e38d1a4
feat(ios): M2-04 测验入口(KB详情页 + 学习首页快捷操作)
...
- KB详情页 toolbar 新增 ? 测验按钮
- 学习首页新增快捷操作栏(AI问答/自测/复习)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 08:51:02 +08:00
wangdl
7535865492
fix(ios): EditKnowledgePage 去掉多余的闭合括号
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:59:01 +08:00
wangdl
71a7f8aa8a
fix(ios): ZXImportRow 缺少闭合 } 导致 ImportReviewPage/EditKnowledgePage 被嵌套
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:56:17 +08:00
wangdl
011dabcb43
fix(ios): 重写 LibraryDetailPage body — 清理 ZStack/VStack 嵌套结构
...
- ZStack { Color; VStack { ... } } 结构正确分离
- ScrollView 内 VStack 的 if/else 分支独立清晰
- Source 列表去掉多余外层 VStack
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:52:05 +08:00
wangdl
6bb0ae6e29
fix(ios): 修复多余闭合括号 + EditKnowledgePage 缺少 body 闭合
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:48:45 +08:00
wangdl
64ee5a371f
fix(ios): 修复 if/else 与 VStack 闭合括号错位
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:46:30 +08:00
wangdl
a6c5d27e62
fix(ios): 修复 LibraryDetailPage 闭合括号错误
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:44:32 +08:00
wangdl
6664612212
feat(ios): IOS-M0-04 Knowledge Source 知识源管理
...
- 新增 KnowledgeSourceService: list/detail/add/delete
- 新增 KnowledgeSource/AddSourceRequest 模型
- LibraryDetailPage 新增分段选择器:知识点 | 资料来源
- 资料来源 Tab 显示来源列表(类型图标/标题/解析状态/字数)
- 左滑删除资料来源
- 切换 Tab 自动加载数据
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:15:13 +08:00
wangdl
fea5bca8a6
feat(ios): IOS-M0-03 Import Candidate 候选知识点审批
...
- 新增 ImportCandidateService: listBySource/detail/update/accept/reject/batchAccept
- 新增 ImportCandidate/BatchAcceptRequest 模型
- 新增 ImportReviewPage 审批页面:
- 候选列表(置信度标签 + 标题 + 内容摘要)
- 点击展开 → 接受/拒绝按钮
- 全部接受批量操作
- 空状态 + 加载态
- Route 新增 importReview(sourceId:)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:12:01 +08:00
wangdl
60d89e2bba
feat(ios): IOS-M0-02 Document Import 文档导入
...
- 新增 DocumentImportService: create/getStatus
- 新增 CreateImportRequest/ImportStatusResponse 模型
- ImportPage 重写:
- 文件导入 → fileImporter → 上传 COS → POST /imports
- 相册导入 → PhotosPicker → 上传 COS → POST /imports
- 链接导入 → alert 输入 URL → POST /imports
- 自动选第一个知识库作为导入目标
- 导入状态提示 + 错误处理
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:07:20 +08:00
wangdl
481f513b11
feat(ios): 封面图底部半屏抽屉弹窗 + 左侧正方形卡片
...
- 封面图有独立中文标签"封面图"
- 120×120 正方形虚线框,左侧对齐
- 点击弹出底部半屏 sheet(height: 220)
- sheet 内:从相册选择(带图标+描述+箭头)
- 顶部有指示条(灰色胶囊)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 11:00:20 +08:00
wangdl
11c0fe42b7
feat(ios): 封面图改为卡片+底部弹窗选择 + 必填加红星
...
- 封面图改为全宽卡片,点击弹出底部 confirmationDialog
- 选项:"从相册选择" / "取消"
- 名称和描述字段加红色 * 必填标识
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:56:55 +08:00
wangdl
3547b6cef6
fix(ios): 封面框正方形 + 描述改文本域 + 描述必填
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:52:45 +08:00
wangdl
d6254287bb
fix(ios): 封面图改为正方形裁剪 512×512
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:50:08 +08:00
wangdl
32790070aa
fix(ios): 删除多余的闭合括号
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:44:02 +08:00
wangdl
cc40d8b364
feat(ios): 创建知识库支持上传封面图
...
- CreateLibraryPage 新增封面图区域(3:2,600×400)
- 自动裁剪 + 缩放到规范尺寸
- 上传到 COS,coverKey 传给后端
- FileUploadService 新增 uploadImageWithKey 返回 fileId+objectKey
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:43:00 +08:00
wangdl
c021370a82
fix(ios): 选择模式下点击卡片任意位置即可选中/取消
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:52:50 +08:00
wangdl
3f80f9aaf8
fix(ios): 拆分删除知识库和选择知识点按钮,避免误触
...
- 删除知识库 🗑 移到左侧灰色按钮,远离右侧操作区
- 选择知识点 ☑ 独立显示在右侧
- 不再共用 ⋯ 菜单
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:50:37 +08:00
wangdl
e1bfda0169
feat(ios): 知识点删除 + 批量选择删除
...
- 新增单个删除 + 批量删除 API 调用
- LibraryDetailPage 新增选择模式:
- ⋯ 菜单 → "选择知识点" 进入多选模式
- 全选/取消全选 + 批量删除按钮
- 选中的 items 显示选中标记
- 选择模式下禁止导航进入详情
- LibraryDetailViewModel 新增 deleteItem + batchDeleteItems
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:47:24 +08:00
wangdl
ed3e587bf0
fix(ios): 文件上传模式隐藏标题,标题仅在手写模式显示
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:29:13 +08:00
wangdl
2b464df7cf
feat(ios): 添加知识点 - 多选文件 + 标题可选 + 每个文件独立知识点
...
- 文件选择器改为多选(allowsMultipleSelection: true)
- 图片选择器支持多选(maxSelectionCount: 10)
- 标题改为可选,留空自动用文件名
- 每个文件独立上传 → 独立知识点
- 多文件时按钮显示"批量添加 (N个)"
- 已选文件可逐个删除
- 部分失败时显示 X/N 成功计数
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:26:32 +08:00
wangdl
42b60a21ec
feat(ios): TabBar 隐藏/出现增加平滑动画
...
- ContentView 新增 TabBarVisibleKey 环境值 + AnimatedTabBarHide modifier
- TabView 使用 .toolbar(visible/hidden) + .animation 驱动动画
- 子页面 onAppear 隐藏 → onDisappear 出现,带 easeInOut 0.28s
- 替换所有静态 .toolbar(.hidden, for: .tabBar) 为 .animatedTabBarHide()
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:16:22 +08:00
wangdl
f288421493
fix(ios): 所有子页面隐藏底部 TabBar
...
- 17个子页面添加 .toolbar(.hidden, for: .tabBar)
- 包括:知识库详情、创建、编辑、搜索、添加知识点、
个人资料编辑、设置、反馈、目标、方法偏好、通知、
AI对话、每日思考、薄弱点、回忆测试、AI反馈、主动回忆、
复习卡片、学习会话
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:12:00 +08:00
wangdl
e0998169a1
fix(ios): 修复另一个 LinearGradient/Color 三元表达式类型不匹配
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:07:37 +08:00
wangdl
2dac206b39
fix(ios): LibrarySubpages.swift 缺少 PhotosUI 和 UniformTypeIdentifiers import
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:06:46 +08:00
wangdl
fe7aae7c27
feat(ios): AddKnowledgePage 支持文件上传(md/txt/pdf/图片)
...
- 新增内容来源切换:手写输入 | 上传文件
- 文件模式:支持 .md/.txt/.pdf 文档选择 + 图片选择
- FileUploadService 新增 uploadData 通用上传方法
- 上传到 COS → 创建知识点(content=下载URL, itemType=格式)
- 手写模式保持原有文本编辑器
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:05:33 +08:00
wangdl
942c3e8454
fix(ios): 修复三元表达式 Color/LinearGradient 类型不匹配
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:34:25 +08:00
wangdl
e80f8af79b
feat(ios): 知识库详情页 - toolbar 按钮 + 删除功能
...
- + 和删除按钮移入导航栏 toolbar,与系统返回按钮同行
- 新增删除确认弹窗(alert with destructive action)
- LibraryDetailViewModel 新增 deleteKnowledgeBase 方法
- 删除成功后 toast + 自动返回列表
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:33:36 +08:00
wangdl
f90f90ee41
fix(ios): 创建知识库页面 - 创建后自动返回 + 成功/失败反馈
...
- 新增 @Environment(\.dismiss) 创建成功后自动返回列表
- 新增 isCreating 加载态,按钮显示 ProgressView 并禁用
- 空名称时按钮灰色不可点击
- 成功 toast "知识库已创建" + 自动 dismiss
- 失败 toast "创建失败,请重试"
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:28:40 +08:00
a05dd09902
refactor(ios): migrate NavigationLink to value-based routing, add Dynamic Type support, fix gesture conflicts
...
- Replace all deprecated NavigationLink(destination:) with NavigationLink(value: Route)
- Add Route enum with navigationDestination mapping in new Core/Navigation/
- Extract 7 new sub-page files (AIChatPage, AIFeedbackPageView, RecallTestPage, WeakPointsPage, FeedbackFormView, GoalSettingDetailView, MethodPreferenceView)
- Add @ScaledMetric-based zxFontScaled modifier for Dynamic Type
- Fix ZXPressModifier gesture conflict with ScrollView using onLongPressGesture
- Enlarge touch targets from 36pt to 44pt
- Add accessibility labels to TextField and other controls
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 15:21:36 +08:00
89d89e542c
feat(ios): P2 动效补充 + 无障碍适配
...
- 新增 ZXAnimations.swift — ZXButtonStyle/ZXPressModifier/ZXPageTransition/ZXThinkingOverlay/ZXCelebrationView/ZXAIAnalysisProgress
- 新增 ZXLoadingView.swift — 品牌化加载动画/ZXDotLoader/ZXShimmer
- 新增 ZXRefreshableScrollView.swift — 下拉刷新+上拉加载更多
- 新增 ZXToast.swift — 全局 Toast 通知系统
- 新增 FileCache.swift / LocalCache.swift — 本地缓存层
- 新增 AIChatViewModel.swift / StudyHomeViewModel.swift / ReviewPlanViewModel.swift
- 全部关键按钮接入 .zxPressable() 触觉反馈
- AI 分析流程接入 ZXThinkingOverlay + ZXAIAnalysisProgress
- 学习完成/复习完成接入 ZXCelebrationView 庆祝动画
- 全部关键交互元素添加 .accessibilityLabel
- 修复 ProfileViewModel async let 问题、EditProfilePage 保存失败、let _ = Task{} 反模式
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 22:31:24 +08:00
5e19bd740e
feat(ios): 鉴权系统完善 + 前后端打通 + 模型对齐 + ViewModel 创建
...
- 新增 AuthManager (ObservableObject) 集中管理鉴权状态:
- session 恢复 → token 验证 → 自动刷新
- 登出自动重定向到登录页
- NotificationCenter 监听 401 实现全局踢回
- APIClient 新增 401 自动 refresh + 单次重试
- App.swift 重构鉴权门控:
- 去掉 hasCompletedOnboarding 绕过鉴权漏洞
- 拆分为 SplashScreen / PreLoginFlow / PostLoginOnboardingFlow / ContentView
- LoginPage 移除"跳过"按钮
- KeychainHelper 实现 token 安全存储
- APIModels 对齐后端 Prisma schema (UserProfile/KnowledgeBase/ReviewCard 等)
- APIService 简化 AuthService,token 管理迁移至 AuthManager
- 新增 8 个 ViewModel 接入 API:
ProfileViewModel, LibraryViewModel, StudyViewModel,
ActiveRecallViewModel, AIAnalysisViewModel, ReviewViewModel, ActivityViewModel
- 新增 EditProfilePage 编辑资料页
- 新增 NotificationListView 通知列表页
- AIHomeView 修复"检测中"卡住 (改用公开 GET / 健康检查)
- SettingsView 登出调用 AuthManager.signOut() 实现重定向
- 修复 NotificationItem 命名冲突、Combine import 缺失等编译错误
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 19:06:23 +08:00
a96d6cb159
feat(ios): 补全页面跳转、浅色模式、3个新页面
...
- 移除 3 处强制深色模式,用 @AppStorage 全局切换
- 设置页「外观」按钮实时切换深色/浅色/跟随系统
- 底部导航栏 inactive 颜色改为自适应 Color.zxF03
- 12 个子页面修复:保留返回按钮 + 消除顶部空白
- 新增 LearningSessionView/ReviewCardView/ActiveRecallView
- 新增 NotificationListView/SettingsView 等子页面
- 补全所有按钮 NavigationLink 跳转(0 个空白 action)
- KnowledgeBase 模型对齐服务器数据
- Info.plist 补充 CFBundleIdentifier + ATS
- 新增缺口分析文档 gap-analysis-1/2.md
2026-05-12 17:08:27 +08:00
fb95c27340
refactor: 重构架构,接入线上 API 并修复编译错误
...
- 删除旧 ViewModel/Repository/Storage 层,简化架构
- 新增网络层:APIClient、APIConfig、APIError
- 新增数据模型层:APIModels(含 20+ DTO)
- 新增服务层:APIService(含 8 个业务服务类)
- 各页面内联组件定义,消除跨文件依赖
- 修复 ZXQuickAction、ZXAIInteractionRow、ZXWeakRow 缺失
- 修复 ZXTabBtn 参数标签缺失
- 配置 ATS 例外允许 HTTP 请求
- API 地址指向线上服务器 81.70.187.179:3001
2026-05-11 17:27:56 +08:00
7066200b7b
feat: MVVM 架构、全套 UI 页面、浅深色主题、本地持久化、等待名单、AI 动效
...
- 架构层:ViewModel/ObservableObject、Service/Repository、网络层 APIClient/APIEndpoint/APIError
- 设计系统:Color(light:dark:) 自适应 28 色 Token、ColorSchemeManager 深浅色切换
- 全页面:AI 对话/反馈/回忆/薄弱点、知识库 CRUD、学习工作台、复习计划、学习分析、个人中心/设置
- 登录与引导:Sign in with Apple、AppSession 状态管理、引导流程、演示模式
- 本地持久化:FileCache + PersistenceController(学习任务/复习任务/学习记录)
- 本地化:zh-Hans Localizable.strings ~120 条、ZXStrings 程序化引用、LanguageManager
- 组件库:ZXTabBar/ZXBackHeader/ZXSTaskRow/ZXChartView/ZXTypingIndicator 等 22 个共享组件
- 等待名单:WaitlistView 邮箱收集表单
- 动效:ZXTypingIndicator AI 打字动画、ZXShimmerModifier 骨架屏
- 测试:StudyHomeViewModel/AIChatViewModel/ReviewPlanViewModel/FileCache 共 28 条
- Dynamic Type 支持 + 范围限制
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 22:22:50 +08:00
b2795fe64b
feat: iOS app - design tokens, 22 pages, navigation, onboarding
2026-05-09 11:18:35 +08:00