133 Commits

Author SHA1 Message Date
wangdl
1f75170b98 feat: #22 知识库分类管理页面
- KnowledgeFolder 模型 + CreateFolderRequest
- KnowledgeFolderService (list/create/update/delete)
- FolderManageView: 列表 + 新建/重命名/删除
- LibraryDetailPage 菜单「分类管理」入口

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 19:26:00 +08:00
wangdl
d9828bc3c8 fix: #34 #35 移除 contentHeightEstimate 80px 硬编码
- actualContentHeight 通过 GeometryReader 获取真实内容高度
- scrollProgress 使用实际高度计算,精度显著提升
- #36 ReadingEventCollector 已清理完毕(无 ObservableObject/Combine)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 19:22:08 +08:00
wangdl
5af29af549 fix: #21 设置页补全通知/存储/账号分组
- 通知: 复习提醒 + 导入完成 + 系统通知
- 数据与存储: 存储空间入口 + iCloud
- 账号: 个人资料 + 登录设备管理

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 19:19:31 +08:00
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
99dc2807be feat: AIChat 全链路调试日志 + 错误详情展示
load/createSession/loadSession/send 都加了 print 日志:
- scope 参数
- 请求成功/失败状态
- 具体错误信息

sessionError 现在显示具体错误原因而非通用"创建对话失败"

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 18:19:30 +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
4029da9c44 fix: DEBUG 调试标签放大 + 点击复制页面名
字号 9→13,padding 加大,背景加深,去掉 allowsHitTesting,点击复制 label

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 18:14:43 +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
1bbcf0acfb fix: M-CHAT-A5 MaterialDetailView 传 knowledgeBaseId + title
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 18:03:27 +08:00
wangdl
0af5b6554d fix: M-CHAT-A5/A9/A11 修复三个暂缓 issue
- A5: MaterialReaderView 传入 knowledgeBaseId (Route 新增参数)
- A9: 会话列表项显示 scope 图标 + 类型标签
- A11: 会话列表左滑归档 + 右滑置顶/取消置顶

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 18:02:26 +08:00
wangdl
491c3e7ef0 fix: M-CHAT audit 修复 7 个缺陷
- A1/A2(P0): listSessions 响应格式 + ChatEntryContext Hashable
- A3: forceCreate 支持,新对话按钮创建新会话
- A4: loadSession 更新 entryContext (scope 标签)
- A6: 死代码清理 (itemIds + AIMessageCitation)
- A8: sessions sheet scope 过滤
- A10: deleteSession 错误处理

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 17:58:45 +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
4889f6c832 feat(ios): 批量替换为 Tabler 图标(GitHub 直取)
- 所有已替换图标统一使用 Tabler outline 风格
- 描边 stroke-width=2, 24×24 viewBox
- 来源: raw.githubusercontent.com/tabler/tabler-icons/main/icons/outline/
- 新增: flame/calendar/sparkles/brain/books/warning/lightbulb/file/pin/mic/question/storage

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 13:50:30 +08:00
wangdl
39fb455f18 feat(ios): 设置图标替换为 Tabler 风格
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 13:45:04 +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
92f191c294 fix(ios): ContentView 缺少 import Combine
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 11:00:27 +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
5faff2f5ca fix(ios): 临时移除问题图标,排查 asset import 错误
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:46:30 +08:00
wangdl
1de940657c fix(ios): 方法图标 viewBox 恢复 100×100
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:43:32 +08:00
wangdl
8f5b0ce9f1 fix(ios): 学习方法行参数顺序修正
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:42:25 +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
18b0d1f4b2 feat(ios): 学习方法偏好图标替换 2026-05-30 10:39:31 +08:00
wangdl
0ba5401c82 feat(ios): 恢复纯色 template 渲染 + 新云图标替换 iCloud 同步
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:37:00 +08:00
wangdl
d1a03ff72e fix(ios): 所有图标关闭 template 渲染,保留黑+灰原色
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:34:38 +08:00
wangdl
509ff8847b feat(ios): 复习提醒开关切换铃铛图标(开=响铃/关=静音)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:33:04 +08:00
wangdl
1260c3cc92 fix(ios): AppIcon logo 缩放到标准 1024×1024
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:30:01 +08:00
wangdl
1ccdb6e4a7 fix(ios): AppIcon Contents.json 简化为 iOS-only 1024x1024
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:25:35 +08:00
wangdl
1aaf7f35ac feat(ios): App 图标替换为知习 Logo
- 从 startup-plan/图片资源/logo.png 复制到 AppIcon.appiconset
- 1254×1254,Xcode 自动生成所需尺寸

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:24:20 +08:00
wangdl
cfd5e07d40 feat(ios): App 显示名称改为「知习」
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:22:39 +08:00
wangdl
f99a9209d4 fix(ios): 用户协议和隐私政策图标互换
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:20:59 +08:00
wangdl
5ac6db8c71 fix(ios): 隐私政策和学习目标图标互换
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:20:03 +08:00
wangdl
9cefe25363 fix(ios): 帮助与反馈和用户协议图标互换
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:19:23 +08:00
wangdl
18d9049a96 fix(ios): 语言和隐私政策图标互换
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:18:39 +08:00
wangdl
439ea531d1 fix(ios): 5个设置图标内容旋转到正确名称
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:17:38 +08:00
wangdl
efa48a6dd5 fix(ios): SettingsView 括号修复 + isCustom 参数位置修正
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:12:35 +08:00
wangdl
3c3c586e9f feat(ios): 学习目标/隐私/用户协议/语言/帮助 5个图标替换 + 删除自动备份
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 10:06:26 +08:00
wangdl
3317602cdd fix(ios): 删除云图标,改用上传图标;设置页图标统一黑色
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:59:41 +08:00
wangdl
812a621251 fix(ios): 云图标双路径统一黑色修复 evenodd 镂空
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:56:20 +08:00
wangdl
c06c09b56a fix(ios): 云图标还原原始路径,外层黑色+内层灰色
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:55:00 +08:00
wangdl
794cd4cdd9 fix(ios): ZXSettingToggleRow 支持自定义图标 + iCloud cloud icon
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:52:45 +08:00
wangdl
ecc2ad5aa8 fix(ios): 云图标重新设计 — 黑+灰双色统一风格
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:51:00 +08:00
wangdl
78fde7cc09 feat(ios): iCloud 同步图标替换
- icon-cloud 替换 SettingsView 中的 iCloud
- 注意:云的路径粗细与其他图标不统一,需要后续优化

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:47:43 +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
0b2aafe045 feat(ios): 浅色/深色切换图标 + ZXSettingRow 支持自定义图标
- 新增 icon-sun(太阳)/ icon-moon(月亮)双色图标
- ZXSettingRow 新增 isCustom 参数支持 Asset 图片
- SettingsView 外观行根据当前模式切换图标

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