fix settings view

This commit is contained in:
anlicheng 2026-03-20 00:21:50 +08:00
parent 5ab94163a6
commit 81ae103730
2 changed files with 216 additions and 29 deletions

View File

@ -4,34 +4,138 @@
//
// Created by on 2026/1/19.
//
import SwiftUI
struct SettingsAboutView: View {
@Environment(\.openURL) private var openURL
var body: some View {
VStack(alignment: .leading, spacing: 8) {
Text("关于PunchNet")
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading, spacing: 32) {
HStack {
Text("当前版本")
Text("v1.25(arm64)")
// MARK: - ()
HStack(spacing: 20) {
// App Icon
ZStack {
RoundedRectangle(cornerRadius: 16, style: .continuous)
.fill(Color.blue.gradient)
.frame(width: 64, height: 64)
.shadow(color: .blue.opacity(0.2), radius: 8, x: 0, y: 4)
Text("检查更新")
Image(systemName: "bolt.shield.fill")
.font(.system(size: 32))
.foregroundColor(.white)
}
VStack(alignment: .leading, spacing: 4) {
Text("PunchNet")
.font(.system(size: 22, weight: .bold))
Text("版本 \(SystemConfig.version_name)")
.font(.subheadline)
.foregroundColor(.secondary)
Text(SystemConfig.systemInfo)
.font(.caption2)
.padding(.horizontal, 6)
.padding(.vertical, 2)
.background(Color.primary.opacity(0.05))
.cornerRadius(4)
}
}
.padding(.top, 10)
// MARK: -
VStack(alignment: .leading, spacing: 0) {
AboutRow(title: "检查更新", icon: "arrow.clockwise.circle") {
Button("立即检查") {
//
}
.buttonStyle(.plain)
.foregroundColor(.blue)
.font(.subheadline.bold())
}
Divider().padding(.leading, 44)
AboutRow(title: "用户反馈", icon: "bubble.left.and.exclamationmark.bubble.right") {
Image(systemName: "chevron.right")
.font(.caption)
.foregroundColor(.secondary)
}
.onTapGesture {
if let url = URL(string: "https://yourfeedbacklink.com") {
openURL(url)
}
}
}
.background(Color.primary.opacity(0.03))
.cornerRadius(12)
.overlay(RoundedRectangle(cornerRadius: 12).stroke(Color.primary.opacity(0.05), lineWidth: 1))
// MARK: -
VStack(alignment: .leading, spacing: 0) {
AboutRow(title: "隐私政策", icon: "doc.text.magnifyingglass") {
Image(systemName: "arrow.up.right")
.font(.caption)
.foregroundColor(.secondary)
}
.onTapGesture {
/* */
}
Divider().padding(.leading, 44)
AboutRow(title: "服务条款", icon: "scroll") {
Image(systemName: "arrow.up.right")
.font(.caption)
.foregroundColor(.secondary)
}
.onTapGesture {
/* */
}
}
.background(Color.primary.opacity(0.03))
.cornerRadius(12)
// MARK: -
VStack(alignment: .leading, spacing: 4) {
Text("© 2024-2026 PunchNet Inc.")
Text("保留所有权利。")
}
.font(.caption2)
.foregroundColor(.secondary)
.padding(.leading, 4)
}
Button {
} label: {
Text("用户反馈")
}
HStack {
Text("隐私政策")
Text("服务条款")
}
.padding(32)
.frame(maxWidth: 600, alignment: .leading)
}
.padding()
}
}
// MARK: -
struct AboutRow<Content: View>: View {
let title: String
let icon: String
let trailingContent: () -> Content
var body: some View {
HStack(spacing: 12) {
Image(systemName: icon)
.foregroundColor(.blue)
.font(.system(size: 14))
.frame(width: 20)
Text(title)
.font(.system(size: 14, weight: .medium))
Spacer()
trailingContent()
}
.padding(.horizontal, 16)
.padding(.vertical, 14)
.contentShape(Rectangle())
}
}

View File

@ -4,22 +4,105 @@
//
// Created by on 2026/1/19.
//
import SwiftUI
struct SettingsSystemView: View {
@State private var isOn: Bool = false
//
@State private var launchAtLogin: Bool = false
@State private var autoConnect: Bool = false
@State private var showMainUI: Bool = true
@State private var autoUpdate: Bool = true
var body: some View {
VStack(alignment: .leading) {
Toggle("开机时启动", isOn: $isOn)
Toggle("启动时候自动连接", isOn: $isOn)
Toggle("启动时显示主界面", isOn: $isOn)
Toggle("自动安装更新", isOn: $isOn)
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading, spacing: 28) {
// MARK: -
systemSectionHeader(title: "启动与运行", icon: "power.circle.fill")
VStack(spacing: 0) {
ToggleRow(icon: "macwindow.badge.plus", title: "开机时自动启动", isOn: $launchAtLogin)
Divider().padding(.leading, 48) //
ToggleRow(icon: "bolt.horizontal.icloud.fill", title: "应用启动后自动连接", isOn: $autoConnect)
Divider().padding(.leading, 48)
ToggleRow(icon: "macwindow", title: "启动时显示主界面", isOn: $showMainUI)
}
.background(Color.primary.opacity(0.03))
.cornerRadius(12)
.overlay(RoundedRectangle(cornerRadius: 12).stroke(Color.primary.opacity(0.05), lineWidth: 1))
// MARK: -
systemSectionHeader(title: "软件更新", icon: "arrow.clockwise.circle.fill")
VStack(spacing: 0) {
ToggleRow(icon: "arrow.down.circle.fill", title: "自动下载并安装更新", isOn: $autoUpdate)
}
.background(Color.primary.opacity(0.03))
.cornerRadius(12)
.overlay(RoundedRectangle(cornerRadius: 12).stroke(Color.primary.opacity(0.05), lineWidth: 1))
// MARK: -
Text("当前版本1.0.4 (Build 202603) - 已是最新版本")
.font(.caption)
.foregroundColor(.secondary)
.padding(.horizontal, 4)
Spacer()
}
.padding(32)
.frame(maxWidth: 600, alignment: .leading)
}
.padding()
}
//
private func systemSectionHeader(title: String, icon: String) -> some View {
HStack {
Image(systemName: icon)
.foregroundColor(.blue)
.font(.system(size: 14, weight: .semibold))
Text(title)
.font(.system(size: 15, weight: .bold))
.foregroundColor(.secondary)
}
.padding(.leading, 4)
}
}
// MARK: -
struct ToggleRow: View {
let icon: String
let title: String
@Binding var isOn: Bool
var body: some View {
HStack(spacing: 16) {
//
ZStack {
RoundedRectangle(cornerRadius: 6, style: .continuous)
.fill(Color.blue.opacity(0.1))
.frame(width: 28, height: 28)
Image(systemName: icon)
.font(.system(size: 14, weight: .medium))
.foregroundColor(.blue)
}
Text(title)
.font(.system(size: 14))
Spacer()
Toggle("", isOn: $isOn)
.toggleStyle(.switch) // 使 macOS
.labelsHidden() // Label 便
}
.padding(.horizontal, 16)
.padding(.vertical, 12)
}
}
#Preview {