punchnet-macos/punchnet/Views/Privacy/PrivacyDetailView.swift
2026-03-20 21:49:59 +08:00

99 lines
3.2 KiB
Swift

//
// PrivacyDetailView.swift
// punchnet
//
// Created by on 2026/3/20.
//
import SwiftUI
// MARK: - 2.
struct PrivacyDetailView: View {
@Environment(\.dismiss) var dismiss
@AppStorage("hasAcceptedPrivacy") var hasAcceptedPrivacy: Bool = false
@Binding var showPrivacy: Bool
//
@State private var loadingProgress: Double = 0.0
@State private var isPageLoading: Bool = true
let privacyURL = URL(string: "https://www.baidu.com")! //
var body: some View {
VStack(spacing: 0) {
// MARK:
HStack {
VStack(alignment: .leading, spacing: 2) {
Text("隐私政策与服务条款")
.font(.headline)
Text("由 PunchNet 加密传输")
.font(.caption2)
.foregroundColor(.secondary)
}
Spacer()
if isPageLoading {
ProgressView()
.controlSize(.small)
}
Button(action: { dismiss() }) {
Image(systemName: "xmark.circle.fill")
.foregroundColor(.secondary)
.font(.title3)
}
.buttonStyle(.plain)
}
.padding()
.background(.ultraThinMaterial)
// MARK: 线
if isPageLoading {
ProgressView(value: loadingProgress, total: 1.0)
.progressViewStyle(.linear)
.tint(.blue)
.frame(height: 2)
.transition(.opacity)
} else {
Divider().frame(height: 2)
}
// MARK: WebView
PunchNetWebView(url: privacyURL, progress: $loadingProgress, isLoading: $isPageLoading)
.background(Color(NSColor.windowBackgroundColor))
// MARK:
VStack(spacing: 12) {
Divider()
HStack {
Text("继续使用即表示您同意我们的全部条款。")
.font(.caption)
.foregroundColor(.secondary)
Spacer()
Button("拒绝") {
self.showPrivacy = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
NSApplication.shared.terminate(nil)
}
}
.buttonStyle(.bordered)
Button("同意并继续") {
hasAcceptedPrivacy = true
dismiss()
}
.buttonStyle(.borderedProminent)
.tint(.blue)
}
.padding(.horizontal, 20)
.padding(.vertical, 16)
}
.background(.ultraThinMaterial)
}
.frame(minWidth: 600, minHeight: 700)
}
}