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>
This commit is contained in:
parent
99dc2807be
commit
695518b276
@ -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 {
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user