From 7a1d545506d355cc55de693d6c7f6b3cc530b47f Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Thu, 20 Feb 2025 16:20:12 +0800 Subject: [PATCH] fix --- dimensionhub/Core/API.swift | 6 ++ dimensionhub/Views/DateNavView.swift | 103 +++++++++++++++++++++++++++ dimensionhub/Views/IndexView.swift | 2 +- 3 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 dimensionhub/Views/DateNavView.swift diff --git a/dimensionhub/Core/API.swift b/dimensionhub/Core/API.swift index 2a66622..8e76236 100644 --- a/dimensionhub/Core/API.swift +++ b/dimensionhub/Core/API.swift @@ -41,6 +41,12 @@ struct API { return await doRequest(request: request, as: T.self) } + static func getDateIndex(as: T.Type) async -> APIResponse { + let request = URLRequest(url: URL(string: url + "date_index")!) + + return await doRequest(request: request, as: T.self) + } + // 执行http请求 private static func doRequest(request: URLRequest, as: T.Type) async -> APIResponse { do { diff --git a/dimensionhub/Views/DateNavView.swift b/dimensionhub/Views/DateNavView.swift new file mode 100644 index 0000000..3c9eaf2 --- /dev/null +++ b/dimensionhub/Views/DateNavView.swift @@ -0,0 +1,103 @@ +// +// DateNavView.swift +// dimensionhub +// +// Created by 安礼成 on 2025/2/20. +// + +import Foundation +import SwiftUI + +struct DateNavView: View { + + // 处理数据模型 + struct DateModel: Codable { + struct Month: Codable { + let name: String + let disabled: Bool + } + + let year: String + let months: [Month] + } + + @State var dateModels: [DateModel] = [] + + var body: some View { + + VStack(alignment: .center) { + ForEach(dateModels, id: \.year) { item in + VStack(alignment: .leading, spacing: 10) { + Text(item.year) + HStack { + ForEach(item.months, id: \.name) { month in + if month.disabled { + DateDisabledItemView(datetime: month.name) + } else { + DateItemView(datetime: month.name, selected: false) + } + } + } + } + } + } + .task { + let response = await API.getDateIndex(as: [DateNavView.DateModel].self) + switch response { + case .error(let code, let message): + print(code) + print(message) + case .result(let result): + print(result) + self.dateModels = result + } + } + } +} + +extension DateNavView { + + struct DateItemView: View { + let datetime: String + let selected: Bool + + var body: some View { + Rectangle() + .frame(width: 80, height: 50) + .foregroundColor(selected ? Color.black : Color.white) + .cornerRadius(10) + .overlay { + RoundedRectangle(cornerRadius: 10) + .stroke(Color.black, lineWidth: 1) + Text(datetime) + .foregroundColor(selected ? Color.white : Color.black) + .font(.system(size: 20, weight: .regular)) + + } + } + } + + struct DateDisabledItemView: View { + let datetime: String + + var body: some View { + Rectangle() + .frame(width: 80, height: 50) + .foregroundColor(Color.white) + .cornerRadius(10) + .overlay { + RoundedRectangle(cornerRadius: 10) + .stroke(style: StrokeStyle(lineWidth: 1, dash: [4])) + Text(datetime) + .foregroundColor(Color.yellow) + .font(.system(size: 20, weight: .regular)) + + } + } + } + +} + +#Preview { + DateNavView() +} diff --git a/dimensionhub/Views/IndexView.swift b/dimensionhub/Views/IndexView.swift index 8b48fc8..1856f23 100644 --- a/dimensionhub/Views/IndexView.swift +++ b/dimensionhub/Views/IndexView.swift @@ -103,6 +103,7 @@ struct IndexView: View { ProgressView() } } + } .task { let response = await API.getIndexData(as: IndexResponse.self) @@ -116,7 +117,6 @@ struct IndexView: View { self.showUpdateDramas = Self.yes(updateDramas: result.updateDramas) } } - } @MainActor