punchnet-macos/punchnet/Views/Settings/SettingsView.swift

76 lines
2.1 KiB
Swift

//
// SettingsView.swift
// punchnet
//
// Created by on 2026/1/16.
//
import SwiftUI
struct SettingsView: View {
@State private var state = SettingsState()
var body: some View {
NavigationSplitView {
List {
SettingsMenuItemView(title: "账号", .accout, state: state)
SettingsMenuItemView(title: "网络", .network, state: state)
SettingsMenuItemView(title: "设备", .device, state: state)
SettingsMenuItemView(title: "软件", .system, state: state)
SettingsMenuItemView(title: "关于", .about, state: state)
}
.listStyle(.sidebar)
.border(Color.red)
} detail: {
Group {
switch self.state.currentMeun {
case .accout:
SettingsAccountView(state: self.state)
case .network:
SettingsNetworkView(state: self.state)
case .device:
SettingsDeviceView()
case .system:
SettingsSystemView()
case .about:
SettingsAboutView()
}
}
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
}
}
}
struct SettingsMenuItemView: View {
var title: String
var role: SettingsState.MenuItem
@Bindable var state: SettingsState
init(title: String, _ role: SettingsState.MenuItem, state: SettingsState) {
self.title = title
self.role = role
self.state = state
}
var body: some View {
HStack(alignment: .center) {
Rectangle()
.frame(width: 3, height: 25)
.foregroundColor(self.state.currentMeun == role ? .black : .clear)
Text(title)
.onTapGesture {
self.state.currentMeun = self.role
}
}
}
}
#Preview {
SettingsView()
}