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

62 lines
2.1 KiB
Swift

import Combine
import Foundation
@MainActor
class ActivityViewModel: ObservableObject {
@Published var summary: ActivitySummary?
@Published var focusItems: [FocusItem] = []
@Published var heatmap: [String: Int] = [:]
@Published var streak: ActivityStreak?
@Published var trends: [ActivityTrend] = []
@Published var recommendations: [ActivityRecommendation] = []
@Published var isLoading = false
@Published var errorMessage: String?
func loadAll() async {
isLoading = true
errorMessage = nil
async let s = try? ActivityService.shared.summary()
async let f = try? FocusItemService.shared.list()
async let h = try? ActivityService.shared.heatmap()
async let st = try? ActivityService.shared.streak()
async let t = try? ActivityService.shared.trend()
async let r = try? ActivityService.shared.recommendations()
let (summaryResult, focusResult, heatmapResult, streakResult, trendResult, recResult) = await (s, f, h, st, t, r)
summary = summaryResult
focusItems = focusResult ?? []
heatmap = heatmapResult ?? [:]
streak = streakResult
trends = trendResult ?? []
recommendations = recResult ?? []
if summary == nil {
errorMessage = "加载分析数据失败,请下拉刷新重试"
}
isLoading = false
}
func refresh() async {
errorMessage = nil
async let s = try? ActivityService.shared.summary()
async let f = try? FocusItemService.shared.list()
async let h = try? ActivityService.shared.heatmap()
async let st = try? ActivityService.shared.streak()
async let t = try? ActivityService.shared.trend()
async let r = try? ActivityService.shared.recommendations()
let (summaryResult, focusResult, heatmapResult, streakResult, trendResult, recResult) = await (s, f, h, st, t, r)
summary = summaryResult
focusItems = focusResult ?? []
heatmap = heatmapResult ?? [:]
streak = streakResult
trends = trendResult ?? []
recommendations = recResult ?? []
}
}