67 Commits

Author SHA1 Message Date
wangdl
90ad19aad1 feat(ios): IOS-M1-05 我的页面资产摘要 + 存储空间
- ProfileView 新增学习资产行(KB数/知识点/复习卡)
- 新增存储空间行(已用/总量)
- 新增消息中心快捷入口
- UserService 新增 fetchAssets()/fetchStorage()
- ProfileViewModel 新增 loadStats()

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:50:26 +08:00
wangdl
5ff979cc97 feat(ios): IOS-M1-04 AI 对话增强
- AIChatPage 新增引用来源展示(AI回答下方胶囊标签)
- 新增复制/重新生成按钮
- 右上角会话列表按钮
- SendMessageResponse 新增 citations 字段
- AIMessage 新增 citations 属性

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:48:46 +08:00
wangdl
2fcf68a64b feat(ios): IOS-M1-03 消息页面增强
- NotificationListView 改为按时间段分组:今天/本周/更早
- 新增 6 种消息类型图标(导入完成/失败/测验/AI/订阅/系统)
- 右上角增加「全部已读」按钮
- 未读蓝点标识

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:46:26 +08:00
wangdl
657e9cf2b4 feat(ios): IOS-M1-02 知识库列表筛选 + 置顶 + 排序
- LibraryHomeView 新增 filter chips(全部/我的/已订阅/官方)
- ZLibraryCard 显示置顶图标 + 公开标签
- LibraryViewModel 新增 currentFilter + fetchKBs 按类型加载
- KnowledgeBaseService 新增 listSubscribed()
- KnowledgeBase 模型新增 isPinned/visibility/ownerType/isVerified

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:44:33 +08:00
wangdl
1162eaac07 feat(ios): IOS-M1-01 学习首页改版
- 新增主行动卡片(今日复习/开始学习,基于优先级)
- 新增本周摘要行(本周分钟/完成任务/复习卡片/连续天数)
- 接入 ActivityService.streak()/summary() + ReviewService.dueCards()
- 保留今日任务列表 + 每日思考题
- 移除旧的进度环卡片

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:39:49 +08:00
wangdl
8e37223b7f fix(ios): 修复重复 list 方法 + FocusItem update Any 类型 + FocusItemUpdateRequest
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 21:00:35 +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
a8bf8d229f feat(ios): IOS-M0-08~14 P2 辅助功能服务层全部补齐
M0-08 账号注销/设备管理:
  - UserService: requestAccountDeletion/cancelDeletion/listDevices/removeDevice

M0-09 Push Token/通知偏好:
  - NotificationService: markAllRead/getPreferences/updatePreferences/registerPushToken/removePushToken

M0-12 Review 生成卡片:
  - ReviewService: generateCards()

M0-13 FocusItems 完整操作:
  - FocusItemService: update()/complete()

KnowledgeBase update 接口已存在,服务层已接入

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:21:23 +08:00
wangdl
bd635f4af1 feat(ios): IOS-M0-06 + IOS-M0-07
- LearningSessionService 新增 list() 分页查询
- FileUploadService 新增 deleteFile() 调用 DELETE /files/:id

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:17:52 +08:00
wangdl
0a8d873157 feat(ios): IOS-M0-05 Learning Activity 学习统计详情
- ActivityService 新增 trend()/streak()/recommendations()
- ActivityViewModel 加载连续学习/趋势/推荐数据
- AnalysisHomeView 新增连续学习卡片(火焰+天数+最长记录)
- AnalysisHomeView 新增学习推荐列表(type图标+标题+优先级标签)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:17:15 +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
444f1842d0 feat(ios): IOS-M0-01 RAG Chat 接入真实 API
- 新增 RagChatService: createSession/listSessions/getMessages/sendMessage/deleteSession
- 新增 ChatSession/ChatMessage/SendMessageResponse 等数据模型
- AIChatViewModel 重写:移除 mock,调用真实 /rag-chat API
- 自动选择知识库创建对话 session
- AIChatPage 增加加载态(创建 session 中)和错误态(无知识库)
- send() → POST /rag-chat/sessions/:id/messages 返回真实 AI 回复

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 20:00:07 +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
587b61d564 feat(ios): 知识库列表卡片显示封面图
- ZLibraryCard 改用 coverUrl 显示封面图(56×56)
- 无封面时回退到默认书本图标
- KnowledgeBase 模型新增 coverUrl 字段

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:48:35 +08:00
wangdl
d77a7fe50d fix(ios): CreateKnowledgeBaseRequest coverKey 设默认值 nil
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:45:38 +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
0860d7b8c2 fix(ios): 修正文件确认上传路径 confirm-upload → complete
后端接口是 POST /files/complete,不是 confirm-upload

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:55:23 +08:00
wangdl
1a88aaeecb feat(ios): 头像上传功能接入 COS
- 新增 FileUploadService:获取预签名URL → PUT到COS → confirm → 拿下载链接
- 新增 FileUploadUrlRequest/Response 等文件上传相关模型
- EditProfilePage 新增头像区域:
  - PhotosPicker 选择照片
  - 正方形裁剪 + 缩放到 256x256
  - 上传中显示 ProgressView
  - 上传完成后自动更新 profile avatarUrl
- ProfileView 支持显示真实头像图片(AsyncImage)
- 保存时携带 avatarUrl 不再写死 nil

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:44:07 +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
wangdl
9aa9fd76c7 fix(ios): 知识库页面优化 - 去掉中间创建按钮,右上角+改为创建
- 移除列表中部的虚线"创建新知识库"按钮
- 右上角+按钮从 libraryImport 改为 libraryCreate
- 空状态提示更新

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:24:44 +08:00
wangdl
e4132dd1c3 fix(ios): 修复顶部导航栏间距过大问题
- 所有 Tab 主页面 padding-top 从 statusBarH(44)+16=60pt 改为 8pt
- NavigationStack 已自动处理状态栏安全区,无需手动硬编码
- 影响页面:StudyHomeView / LibraryHomeView / AnalysisHomeView / ProfileView

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:20:49 +08:00
wangdl
49bebad402 fix(ios): APIClient 401 错误码传递到 AuthManager,完成错误码分支闭环
- notifyTokenExpired 接受 errorCode 参数,通过 Notification userInfo 传递
- 401 响应提取 errorCode 后传给 notifyTokenExpired
- AuthManager 观察者从 userInfo 读取 errorCode,调用 applyErrorCode
- handleUnauthorized 根据 errorCode 切换精确状态(disabled/deleted/expired)
- restoreSession 冷启动也检查 errorCode,禁用/删除用户不尝试 refresh

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:13:15 +08:00
wangdl
539b9a7d2b feat(ios): AppSession 状态枚举接入路由 + TabBar 精简 + authorizationCode
- AuthManager: 移除 isAuthenticated/isRestoring,仅保留 AppSession 枚举
- App 入口: switch session 分发行路由,支持 disabled/deleted 状态页
- 新增 AccountStatusView(禁用/注销提示)
- ContentView: TabBar 5→4(学习/知识库/分析/我的),去掉 AI 首页
- StudyHomeView: 融合每日思考题,去掉 AI 输入栏和本周活跃
- AnalysisHomeView: 新增本周学习活跃柱状图
- AppleAuthRequest 新增 authorizationCode,LoginPage 提取传递
- APIError 支持 errorCode,APIClient 解析服务端 errorCode
- AuthManager.applyErrorCode() 根据错误码切换状态

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:08:11 +08:00
wangdl
0f8e542b2a fix(ios): Apple登录nonce+401透传+DesignSystem v2.0+AIHomePage重设计
- LoginPage: 新增nonce生成(SHA256)CryptoKit、取消按钮、Task可取消
- APIClient: 401响应透传服务端error message(不再硬编码)
- DesignTokens: 主色切换#3D7FFB渐变#3D7FFB→#9DA7FD、补全15个兼容别名
- AIHomeView: 全新v2.0设计(暖白底色/知习蓝/34pt hero/Rive占位)
- AppleAuthRequest: 新增nonce字段
2026-05-27 20:23:01 +08:00
abf2cb8efa chore: remove old React prototype, switching to native iOS
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 17:00:44 +08:00
b3ad86a8f3 revert: remove Agent View config from README and delete AI_IOS_WORKSPACE
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 13:38:00 +08:00
42f7a0fe3c docs: add AI iOS workspace template and For AI Agents section to README
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 10:58:21 +08:00