From 7d40fe3203cdab65f08bac6ad268d89a8148fcc7 Mon Sep 17 00:00:00 2001 From: Junhui Chen Date: Tue, 19 Aug 2025 15:24:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BB=E9=A2=98=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 4 + .../UserInterfaceState.xcuserstate | Bin 56317 -> 57109 bytes wake/Extensions/ColorExtensions.swift | 34 ++++ wake/Theme.swift | 177 ++++++++++++++++++ .../Components/SubscriptionStatusBar.swift | 140 ++++++++++++++ 5 files changed, 355 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 wake/Extensions/ColorExtensions.swift create mode 100644 wake/Theme.swift create mode 100644 wake/View/Subscribe/Components/SubscriptionStatusBar.swift diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..17dc782 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "lldb.library": "/Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/LLDB", + "lldb.launch.expressions": "native" +} \ No newline at end of file diff --git a/wake.xcodeproj/project.xcworkspace/xcuserdata/fairclip.xcuserdatad/UserInterfaceState.xcuserstate b/wake.xcodeproj/project.xcworkspace/xcuserdata/fairclip.xcuserdatad/UserInterfaceState.xcuserstate index a86f52bbbbcb0a2af55794c767116d06edbd768a..6e6e72499448001a99e3761746a5dee7d7cabe07 100644 GIT binary patch literal 57109 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 Ize`8{2WO@Tx&QzG literal 56317 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 X$8HuZT=>6x_5a3j{`dHG&hGm^1KOLH diff --git a/wake/Extensions/ColorExtensions.swift b/wake/Extensions/ColorExtensions.swift new file mode 100644 index 0000000..d70934b --- /dev/null +++ b/wake/Extensions/ColorExtensions.swift @@ -0,0 +1,34 @@ +// +// ColorExtensions.swift +// wake +// +// Created by fairclip on 2025/8/19. +// + +import SwiftUI + +// MARK: - Color Extension for Hex Colors +extension Color { + /// 通过十六进制字符串创建颜色 + /// - Parameter hex: 十六进制颜色字符串 (例如: "FF5733", "FFF8DE") + init(hex: String) { + let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) + var int: UInt64 = 0 + Scanner(string: hex).scanHexInt64(&int) + let a, r, g, b: UInt64 + switch hex.count { + case 6: // RGB (24-bit) + (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF) + default: + (a, r, g, b) = (1, 1, 1, 0) + } + + self.init( + .sRGB, + red: Double(r) / 255, + green: Double(g) / 255, + blue: Double(b) / 255, + opacity: Double(a) / 255 + ) + } +} diff --git a/wake/Theme.swift b/wake/Theme.swift new file mode 100644 index 0000000..7a3f307 --- /dev/null +++ b/wake/Theme.swift @@ -0,0 +1,177 @@ +// +// Theme.swift +// wake +// +// Created by fairclip on 2025/8/19. +// + +import SwiftUI + +// MARK: - 主题色管理 +struct Theme { + + // MARK: - 主要颜色 + struct Colors { + + // MARK: - 品牌色 + static let primary = Color(hex: "FFB645") // 主橙色 + static let primaryLight = Color(hex: "FFF8DE") // 浅橙色 + static let primaryDark = Color(hex: "E6A03D") // 深橙色 + + // MARK: - 辅助色 + static let secondary = Color(hex: "6C7B7F") // 灰蓝色 + static let accent = Color(hex: "FF6B6B") // 强调红色 + + // MARK: - 中性色 + static let background = Color(hex: "F8F9FA") // 背景色 + static let surface = Color.white // 表面色 + static let surfaceSecondary = Color(hex: "F5F5F5") // 次级表面色 + + // MARK: - 文本色 + static let textPrimary = Color.black // 主文本色 + static let textSecondary = Color(hex: "6B7280") // 次级文本色 + static let textTertiary = Color(hex: "9CA3AF") // 三级文本色 + static let textInverse = Color.white // 反色文本 + + // MARK: - 状态色 + static let success = Color(hex: "10B981") // 成功色 + static let warning = Color(hex: "F59E0B") // 警告色 + static let error = Color(hex: "EF4444") // 错误色 + static let info = Color(hex: "3B82F6") // 信息色 + + // MARK: - 边框色 + static let border = Color(hex: "E5E7EB") // 边框色 + static let borderLight = Color(hex: "F3F4F6") // 浅边框色 + static let borderDark = Color(hex: "D1D5DB") // 深边框色 + + // MARK: - 订阅相关色 + static let freeBackground = primaryLight // Free版背景 + static let pioneerBackground = primary // Pioneer版背景 + static let subscribeButton = primary // 订阅按钮色 + } + + // MARK: - 渐变色 + struct Gradients { + static let primaryGradient = LinearGradient( + colors: [Colors.primary, Colors.primaryDark], + startPoint: .topLeading, + endPoint: .bottomTrailing + ) + + static let backgroundGradient = LinearGradient( + colors: [Colors.background, Colors.surface], + startPoint: .top, + endPoint: .bottom + ) + + static let accentGradient = LinearGradient( + colors: [Colors.accent, Color(hex: "FF8E8E")], + startPoint: .leading, + endPoint: .trailing + ) + } + + // MARK: - 阴影 + struct Shadows { + static let small = Color.black.opacity(0.1) + static let medium = Color.black.opacity(0.15) + static let large = Color.black.opacity(0.2) + + // 阴影配置 + static let cardShadow = (color: small, radius: CGFloat(4), x: CGFloat(0), y: CGFloat(2)) + static let buttonShadow = (color: medium, radius: CGFloat(6), x: CGFloat(0), y: CGFloat(3)) + static let modalShadow = (color: large, radius: CGFloat(12), x: CGFloat(0), y: CGFloat(8)) + } + + // MARK: - 圆角 + struct CornerRadius { + static let small: CGFloat = 8 + static let medium: CGFloat = 12 + static let large: CGFloat = 16 + static let extraLarge: CGFloat = 20 + static let round: CGFloat = 50 + } + + // MARK: - 间距 + struct Spacing { + static let xs: CGFloat = 4 + static let sm: CGFloat = 8 + static let md: CGFloat = 12 + static let lg: CGFloat = 16 + static let xl: CGFloat = 20 + static let xxl: CGFloat = 24 + static let xxxl: CGFloat = 32 + } +} + +// MARK: - 便捷扩展 +extension Color { + /// 主题色快捷访问 + static var themePrimary: Color { Theme.Colors.primary } + static var themePrimaryLight: Color { Theme.Colors.primaryLight } + static var themeSecondary: Color { Theme.Colors.secondary } + static var themeAccent: Color { Theme.Colors.accent } + static var themeBackground: Color { Theme.Colors.background } + static var themeSurface: Color { Theme.Colors.surface } + static var themeTextPrimary: Color { Theme.Colors.textPrimary } + static var themeTextSecondary: Color { Theme.Colors.textSecondary } +} + +// MARK: - 预览 +#Preview("Theme Colors") { + ScrollView { + VStack(spacing: Theme.Spacing.lg) { + // 品牌色 + ColorPreviewSection(title: "品牌色", colors: [ + ("Primary", Theme.Colors.primary), + ("Primary Light", Theme.Colors.primaryLight), + ("Primary Dark", Theme.Colors.primaryDark) + ]) + + // 辅助色 + ColorPreviewSection(title: "辅助色", colors: [ + ("Secondary", Theme.Colors.secondary), + ("Accent", Theme.Colors.accent) + ]) + + // 状态色 + ColorPreviewSection(title: "状态色", colors: [ + ("Success", Theme.Colors.success), + ("Warning", Theme.Colors.warning), + ("Error", Theme.Colors.error), + ("Info", Theme.Colors.info) + ]) + } + .padding() + } + .background(Theme.Colors.background) +} + +// MARK: - 预览辅助组件 +struct ColorPreviewSection: View { + let title: String + let colors: [(String, Color)] + + var body: some View { + VStack(alignment: .leading, spacing: Theme.Spacing.sm) { + Text(title) + .font(.headline) + .foregroundColor(Theme.Colors.textPrimary) + + LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 3), spacing: Theme.Spacing.sm) { + ForEach(colors, id: \.0) { name, color in + VStack(spacing: Theme.Spacing.xs) { + Rectangle() + .fill(color) + .frame(height: 60) + .cornerRadius(Theme.CornerRadius.small) + + Text(name) + .font(.caption) + .foregroundColor(Theme.Colors.textSecondary) + } + } + } + } + } +} diff --git a/wake/View/Subscribe/Components/SubscriptionStatusBar.swift b/wake/View/Subscribe/Components/SubscriptionStatusBar.swift new file mode 100644 index 0000000..1a92267 --- /dev/null +++ b/wake/View/Subscribe/Components/SubscriptionStatusBar.swift @@ -0,0 +1,140 @@ +// +// SubscriptionStatusBar.swift +// wake +// +// Created by fairclip on 2025/8/19. +// + +import SwiftUI + +// MARK: - 订阅状态枚举 +enum SubscriptionStatus { + case free + case pioneer(expiryDate: Date) + + var title: String { + switch self { + case .free: + return "Free" + case .pioneer: + return "Pioneer" + } + } + + var hasExpiry: Bool { + switch self { + case .free: + return false + case .pioneer: + return true + } + } + + var backgroundColor: Color { + switch self { + case .free: + return Theme.Colors.freeBackground // 浅橙色背景 + case .pioneer: + return Theme.Colors.pioneerBackground // 橙色背景 + } + } + + var textColor: Color { + switch self { + case .free: + return Theme.Colors.textPrimary + case .pioneer: + return Theme.Colors.textPrimary + } + } +} + +// MARK: - 订阅状态栏组件 +struct SubscriptionStatusBar: View { + let status: SubscriptionStatus + let onSubscribeTap: (() -> Void)? + + init(status: SubscriptionStatus, onSubscribeTap: (() -> Void)? = nil) { + self.status = status + self.onSubscribeTap = onSubscribeTap + } + + var body: some View { + HStack(spacing: 16) { + VStack(alignment: .leading, spacing: 8) { + // 订阅类型标题 + Text(status.title) + .font(.system(size: 28, weight: .bold, design: .rounded)) + .foregroundColor(status.textColor) + + // 过期时间或订阅按钮 + if case .pioneer(let expiryDate) = status { + VStack(alignment: .leading, spacing: 4) { + Text("Expires on :") + .font(.system(size: 14, weight: .medium)) + .foregroundColor(status.textColor.opacity(0.8)) + + Text(formatDate(expiryDate)) + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(status.textColor) + } + } else { + Button(action: { + onSubscribeTap?() + }) { + Text("Subscribe") + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(Theme.Colors.textPrimary) + .padding(.horizontal, 20) + .padding(.vertical, 8) + .background(Theme.Colors.subscribeButton) + .cornerRadius(Theme.CornerRadius.large) + } + } + } + + Spacer() + + // 播放按钮图标 + Circle() + .fill(Color.black) + .frame(width: 60, height: 60) + .overlay( + Image(systemName: "play.fill") + .foregroundColor(.white) + .font(.title2) + .offset(x: 2) // 微调播放图标位置 + ) + } + .padding(20) + .background(status.backgroundColor) + .cornerRadius(20) + .shadow(color: Color.black.opacity(0.1), radius: 4, x: 0, y: 2) + } + + // MARK: - 日期格式化 + private func formatDate(_ date: Date) -> String { + let formatter = DateFormatter() + formatter.dateFormat = "MMMM d, yyyy" + return formatter.string(from: date) + } +} + +// MARK: - 预览 +#Preview("Free Status") { + VStack(spacing: 20) { + SubscriptionStatusBar( + status: .free, + onSubscribeTap: { + print("Subscribe tapped") + } + ) + .padding() + + SubscriptionStatusBar( + status: .pioneer(expiryDate: Calendar.current.date(byAdding: .month, value: 6, to: Date()) ?? Date()) + ) + .padding() + } + .background(Color(.systemGroupedBackground)) +}