From 695518b27632e67d4d48ab8f626b81346ab873ff Mon Sep 17 00:00:00 2001 From: wangdl Date: Sat, 6 Jun 2026 19:07:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20#16=20sortOption=20=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=8E=92=E5=BA=8F=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- .../AIStudyApp/Core/Services/APIService.swift | 9 +++++---- .../Features/Library/LibrarySubpages.swift | 13 +++++++++++++ .../Features/Library/LibraryViewModel.swift | 12 ++++++------ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/AIStudyApp/AIStudyApp/Core/Services/APIService.swift b/AIStudyApp/AIStudyApp/Core/Services/APIService.swift index 8c90d3e..55526bb 100644 --- a/AIStudyApp/AIStudyApp/Core/Services/APIService.swift +++ b/AIStudyApp/AIStudyApp/Core/Services/APIService.swift @@ -149,10 +149,11 @@ class KnowledgeItemService { static let shared = KnowledgeItemService() private let client = APIClient.shared - func list(knowledgeBaseId: String) async throws -> [KnowledgeItem] { - return try await client.request("/knowledge-items", queryItems: [ - URLQueryItem(name: "knowledgeBaseId", value: knowledgeBaseId), - ]) + func list(knowledgeBaseId: String, sortBy: String? = nil, order: String? = nil) async throws -> [KnowledgeItem] { + var items = [URLQueryItem(name: "knowledgeBaseId", value: knowledgeBaseId)] + if let s = sortBy { items.append(URLQueryItem(name: "sortBy", value: s)) } + if let o = order { items.append(URLQueryItem(name: "order", value: o)) } + return try await client.request("/knowledge-items", queryItems: items) } func detail(id: String) async throws -> KnowledgeItem { diff --git a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift index c233039..a7fe711 100644 --- a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift +++ b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift @@ -392,6 +392,10 @@ struct LibraryDetailPage: View { Text("确定要删除选中的 \(selectedIds.count) 个知识点吗?此操作不可恢复。") } .task { await viewModel.loadItems(knowledgeBaseId: knowledgeBaseId) } + .onChange(of: sortOption) { _ in + let (sb, od) = sortParams(sortOption) + Task { await viewModel.loadItems(knowledgeBaseId: knowledgeBaseId, sortBy: sb, order: od) } + } .safeAreaInset(edge: .bottom) { NavigationLink(value: Route.aiChat(context: ChatEntryContext(scopeType: .knowledgeBase, scopeId: knowledgeBaseId, scopeName: "知识库", parentKnowledgeBaseId: knowledgeBaseId, createdFrom: "knowledge_base_detail"))) { HStack(spacing: 8) { @@ -496,6 +500,15 @@ struct LibraryDetailPage: View { return URL(string: "https://longde.cloud\(urlString)") } + private func sortParams(_ option: Int) -> (String?, String?) { + switch option { + case 1: return ("fileSize", "desc") + case 2: return ("createdAt", "desc") + case 3: return ("updatedAt", "desc") + default: return (nil, nil) + } + } + private func fileTypeText(for item: KnowledgeItem) -> String { if let t = item.sourceType?.trimmingCharacters(in: .whitespaces), !t.isEmpty { return t.uppercased() diff --git a/AIStudyApp/AIStudyApp/Features/Library/LibraryViewModel.swift b/AIStudyApp/AIStudyApp/Features/Library/LibraryViewModel.swift index bddbfec..895401e 100644 --- a/AIStudyApp/AIStudyApp/Features/Library/LibraryViewModel.swift +++ b/AIStudyApp/AIStudyApp/Features/Library/LibraryViewModel.swift @@ -92,13 +92,13 @@ class LibraryDetailViewModel: ObservableObject { private var currentPage = 1 private let pageSize = 20 - func loadItems(knowledgeBaseId: String) async { + func loadItems(knowledgeBaseId: String, sortBy: String? = nil, order: String? = nil) async { isLoading = true errorMessage = nil currentPage = 1 do { async let kb = try? KnowledgeBaseService.shared.detail(id: knowledgeBaseId) - async let list = try? KnowledgeItemService.shared.list(knowledgeBaseId: knowledgeBaseId) + async let list = try? KnowledgeItemService.shared.list(knowledgeBaseId: knowledgeBaseId, sortBy: sortBy, order: order) let (kbResult, listResult) = await (kb, list) knowledgeBase = kbResult items = listResult ?? [] @@ -109,22 +109,22 @@ class LibraryDetailViewModel: ObservableObject { isLoading = false } - func refresh(knowledgeBaseId: String) async { + func refresh(knowledgeBaseId: String, sortBy: String? = nil, order: String? = nil) async { isRefreshing = true currentPage = 1 do { - items = try await KnowledgeItemService.shared.list(knowledgeBaseId: knowledgeBaseId) + items = try await KnowledgeItemService.shared.list(knowledgeBaseId: knowledgeBaseId, sortBy: sortBy, order: order) hasMore = items.count >= pageSize } catch {} isRefreshing = false } - func loadMore(knowledgeBaseId: String) async { + func loadMore(knowledgeBaseId: String, sortBy: String? = nil, order: String? = nil) async { guard !isLoadingMore, hasMore else { return } isLoadingMore = true currentPage += 1 do { - let more = try await KnowledgeItemService.shared.list(knowledgeBaseId: knowledgeBaseId) + let more = try await KnowledgeItemService.shared.list(knowledgeBaseId: knowledgeBaseId, sortBy: sortBy, order: order) items.append(contentsOf: more) hasMore = more.count >= pageSize } catch {