Files
ddys-client/DDYSClient/Views/Search/SearchView.swift
2026-02-26 22:15:35 +08:00

62 lines
2.3 KiB
Swift

import SwiftUI
struct SearchView: View {
@State private var viewModel = SearchViewModel()
var body: some View {
ScrollView {
if viewModel.isSearching {
ProgressView("搜索中...")
.frame(maxWidth: .infinity, minHeight: 300)
} else if let error = viewModel.error {
VStack(spacing: 16) {
Image(systemName: "exclamationmark.triangle")
.font(.system(size: 48))
.foregroundStyle(.secondary)
Text(error)
.foregroundStyle(.secondary)
}
.frame(maxWidth: .infinity, minHeight: 300)
} else if viewModel.hasSearched && viewModel.results.isEmpty {
VStack(spacing: 12) {
Image(systemName: "magnifyingglass")
.font(.system(size: 48))
.foregroundStyle(.secondary)
Text("未找到相关内容")
.foregroundStyle(.secondary)
}
.frame(maxWidth: .infinity, minHeight: 300)
} else if !viewModel.results.isEmpty {
ContentGridView(items: viewModel.results)
.padding()
if viewModel.currentPage < viewModel.totalPages {
ProgressView()
.padding()
.task {
await viewModel.loadMore()
}
}
} else {
//
VStack(spacing: 16) {
Image(systemName: "magnifyingglass")
.font(.system(size: 48))
.foregroundStyle(.tertiary)
Text("输入关键词搜索影片")
.foregroundStyle(.secondary)
}
.frame(maxWidth: .infinity, minHeight: 300)
}
}
.navigationTitle("搜索")
.navigationDestination(for: ContentItem.self) { item in
DetailView(item: item)
}
.searchable(text: $viewModel.query, prompt: "搜索电影、电视剧...")
.onSubmit(of: .search) {
Task { await viewModel.search() }
}
}
}