From 976bf090ad36827572d427785607414976923adb Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 31 Mar 2025 16:03:24 +0800 Subject: [PATCH] fix index view --- dimensionhub/Core/API.swift | 4 +- dimensionhub/Views/DateNavView.swift | 9 +- dimensionhub/Views/IndexView.swift | 118 ++++++++++++++------------- 3 files changed, 68 insertions(+), 63 deletions(-) diff --git a/dimensionhub/Core/API.swift b/dimensionhub/Core/API.swift index 7666d5a..41470e6 100644 --- a/dimensionhub/Core/API.swift +++ b/dimensionhub/Core/API.swift @@ -93,8 +93,8 @@ struct API { } print("request url: \(request.url!.absoluteString)") -// let x = String(data: data, encoding: .utf8)! -// print("url: \(request.url!.path()), data is: \(x)") + let x = String(data: data, encoding: .utf8)! + print("url: \(request.url!.path()), data is: \(x)") do { let result = try JSONDecoder().decode(APISuccessResponse.self, from: data) return .result(result.result) diff --git a/dimensionhub/Views/DateNavView.swift b/dimensionhub/Views/DateNavView.swift index 38042cd..a126aec 100644 --- a/dimensionhub/Views/DateNavView.swift +++ b/dimensionhub/Views/DateNavView.swift @@ -70,10 +70,12 @@ struct DateNavView: View { var body: some View { ScrollView(.vertical, showsIndicators: false) { - VStack(alignment: .center) { + VStack(alignment: .center, spacing: 15) { ForEach(navModel.dateModels) { model in - VStack(alignment: .leading, spacing: 15) { - Text(model.year) + VStack(alignment: .leading, spacing: 5) { + Text("\(model.year)年") + .font(.system(size: 18, weight: .regular)) + HStack { ForEach(model.months, id: \.id) { month in if month.disabled { @@ -156,7 +158,6 @@ extension DateNavView { } -// //#Preview { // DateNavView() //} diff --git a/dimensionhub/Views/IndexView.swift b/dimensionhub/Views/IndexView.swift index 8f40597..a5c125e 100644 --- a/dimensionhub/Views/IndexView.swift +++ b/dimensionhub/Views/IndexView.swift @@ -146,7 +146,7 @@ final class IndexModel { } } - return targetGroups + return sortDramaGroups(groups: targetGroups) } private func appendMergeDramaGroups(groups: [UpdateDramaGroup], mergeGroups: [UpdateDramaGroup]) -> [UpdateDramaGroup] { @@ -163,7 +163,22 @@ final class IndexModel { } } - return targetGroups + return sortDramaGroups(groups: targetGroups) + } + + // 按照日期进行排序 + private func sortDramaGroups(groups: [UpdateDramaGroup]) -> [UpdateDramaGroup] { + return groups.sorted { g0, g1 in + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM" + + if let date0 = dateFormatter.date(from: g0.group_id), + let date1 = dateFormatter.date(from: g1.group_id) { + return date0 > date1 + } else { + return g0.group_id > g1.group_id + } + } } private func getDramaIds(_ updateDramaGroups: [UpdateDramaGroup]) -> [Int] { @@ -291,14 +306,14 @@ extension IndexView { .overlay { HStack(alignment: .center) { Text("亚次元") - .font(.system(size: 16)) + .font(.system(size: 18, weight: .bold)) .padding([.top, .bottom], 5) Spacer() NavigationLink(destination: FollowListView()) { HStack { Text("♡ \(indexModel.follow_num)") - .font(.system(size: 16)) + .font(.system(size: 17)) .foregroundColor(.black) .padding([.top, .bottom], 5) } @@ -310,65 +325,54 @@ extension IndexView { .frame(height: 50) .background(Color(hex: "#F2F2F2"), ignoresSafeAreaEdges: .top) - VStack(alignment: .center) { - - ScrollView(.vertical, showsIndicators: false) { - HStack(alignment: .center) { - Spacer() - Text("番剧补完计划") - .font(.system(size: 24)) - .foregroundColor(Color(hex: "#999999")) - } - - // 基于日期的更新列表 - LazyVStack(alignment: .center, spacing: 10) { - ForEach(indexModel.updateDramaGroups, id: \.group_id) { group in - DramaGroupView(group: group) { - selectGroupId = group.group_id - indexModel.selectedDate = group.group_id - showDateNavPopover = true - } + ScrollView(.vertical, showsIndicators: false) { + // 基于日期的更新列表 + LazyVStack(alignment: .center, spacing: 10) { + ForEach(indexModel.updateDramaGroups, id: \.group_id) { group in + DramaGroupView(group: group) { + selectGroupId = group.group_id + indexModel.selectedDate = group.group_id + showDateNavPopover = true } } - - Rectangle() - .frame(height: 0) - .background(GeometryReader { - geometry in - Color.clear.onChange(of: geometry.frame(in: .global).minY) {_, offset in - - let frame = geometry.frame(in: .global) - let screenBounds = UIScreen.main.bounds - let contextFrame = geometry.frame(in: .named("indexScrollView")) - - if screenBounds.height - frame.minY > 50 && contextFrame.minY > 0 && !isMoreLoading { - Task { - self.isMoreLoading = true - await self.indexModel.loadMoreUpdateDramas(userId: self.userId, mode: .next) - self.isMoreLoading = false - } - } - } - }) - - if self.isMoreLoading { - ProgressView() - } - } - .coordinateSpace(name: "indexScrollView") - .refreshable { - guard !self.isPrevLoading && !self.showDateNavPopover else { - return - } - - // 上拉刷新功能 - self.isPrevLoading = true - await self.indexModel.loadMoreUpdateDramas(userId: self.userId, mode: .prev) - self.isPrevLoading = false } + Rectangle() + .frame(height: 0) + .background(GeometryReader { + geometry in + Color.clear.onChange(of: geometry.frame(in: .global).minY) {_, offset in + + let frame = geometry.frame(in: .global) + let screenBounds = UIScreen.main.bounds + let contextFrame = geometry.frame(in: .named("indexScrollView")) + + if screenBounds.height - frame.minY > 50 && contextFrame.minY > 0 && !isMoreLoading { + Task { + self.isMoreLoading = true + await self.indexModel.loadMoreUpdateDramas(userId: self.userId, mode: .next) + self.isMoreLoading = false + } + } + } + }) + + if self.isMoreLoading { + ProgressView() + } } .frame(width: 370) + .coordinateSpace(name: "indexScrollView") + .refreshable { + guard !self.isPrevLoading && !self.showDateNavPopover else { + return + } + + // 上拉刷新功能 + self.isPrevLoading = true + await self.indexModel.loadMoreUpdateDramas(userId: self.userId, mode: .prev) + self.isPrevLoading = false + } } .ignoresSafeArea(edges: .bottom) .popover(isPresented: $showDateNavPopover) {