简化network

This commit is contained in:
anlicheng 2026-02-26 14:15:47 +08:00
parent 9b8d7c78f6
commit a18d07924f
4 changed files with 165 additions and 184 deletions

View File

@ -1,154 +0,0 @@
//
// NetworkConnctedView.swift
// punchnet
//
// Created by on 2026/1/16.
//
import SwiftUI
struct NetworkConnctedView: View {
@Bindable var networkModel: NetworkModel
var body: some View {
Group {
switch networkModel.showModel {
case .resource:
NetworkResourceGroupView(networkModel: self.networkModel)
case .device:
NetworkDeviceGroupView(networkModel: self.networkModel)
}
}
}
}
//
struct NetworkResourceGroupView: View {
@Bindable var networkModel: NetworkModel
var body: some View {
LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 3), spacing: 8) {
ForEach(self.networkModel.resources, id: \.id) { resource in
NetworkResourceView(resource: resource)
}
}
}
}
struct NetworkResourceView: View {
var resource: NetworkModel.Resource
var body: some View {
VStack {
HStack {
Text(resource.status == 1 ? "yes" : "no")
Text(resource.name)
.font(.system(size: 14, weight: .regular))
}
Text(resource.schema)
.font(.system(size: 14, weight: .regular))
.padding(.leading, 30)
}
}
}
//
struct NetworkDeviceGroupView: View {
@Bindable var networkModel: NetworkModel
@State private var selectedId: Int?
var body: some View {
NavigationSplitView {
List(self.networkModel.devices, id: \.id, selection: $selectedId) { device in
NetworkDeviceHeadView(device: device)
}
.listStyle(.sidebar)
.onChange(of: selectedId) {
self.networkModel.changeSelectedDevice(deviceId: selectedId)
}
.onAppear {
if selectedId == nil {
selectedId = self.networkModel.devices.first?.id
}
}
} detail: {
NetworkDeviceDetailView(device: $networkModel.selectedDevice)
}
}
}
struct NetworkDeviceHeadView: View {
var device: NetworkModel.Device
var body: some View {
VStack {
HStack {
Text(device.status == 1 ? "yes" : "no")
Text(device.name)
.font(.system(size: 14, weight: .regular))
}
Text(device.ipv4)
.font(.system(size: 14, weight: .regular))
.padding(.leading, 30)
}
}
}
struct NetworkDeviceDetailView: View {
@Binding var device: NetworkModel.Device?
var body: some View {
Group {
if let device {
List {
Section {
HStack {
Text("连接状态")
Text("\(device.status)")
Spacer()
}
HStack {
Text("虚拟IPv4")
Text("\(device.ipv4)")
Spacer()
}
HStack {
Text("虚拟IPv6")
Text("\(device.ipv6)")
Spacer()
}
HStack {
Text("操作系统")
Text("\(device.system)")
Spacer()
}
}
Section("服务列表") {
ForEach(device.resources, id: \.id) { resource in
HStack {
Text("\(resource.name)")
Text("\(resource.schema)")
}
}
}
}
} else {
EmptyView()
}
}
}
}

View File

@ -56,9 +56,6 @@ class NetworkModel {
var connectState: ConnectState = .disconnected
var showModel: ShowMode = .device
//
let networkSession: UserContext.NetworkSession
//
var isOn: Bool = false {
didSet {
@ -85,9 +82,7 @@ class NetworkModel {
var devices: [Device] = [
]
init(networkSession: UserContext.NetworkSession) {
self.networkSession = networkSession
init() {
self.devices = [
.init(id: 1, status: 1, name: "test1", ipv4: "192.168.1.1", ipv6: "fa9d.fa9d.fa9d.fa9d", system: "MacOS 12", resources: self.resources),
.init(id: 2, status: 1, name: "test2", ipv4: "192.168.1.2", ipv6: "fa9d.fa9d.fa9d.fa9d", system: "MacOS 12", resources: self.resources),

View File

@ -9,11 +9,7 @@ import SwiftUI
struct NetworkView: View {
@Environment(UserContext.self) var userContext: UserContext
@State private var networkModel: NetworkModel
init() {
self.networkModel = NetworkModel(networkSession: self.userContext.networkSession!)
}
@State private var networkModel = NetworkModel()
var body: some View {
VStack {
@ -21,7 +17,7 @@ struct NetworkView: View {
VStack {
HStack(alignment: .center) {
Text(networkModel.networkSession.networkName)
Text(userContext.networkSession?.networkName ?? "未知")
Text(">")
Spacer()
}
@ -145,6 +141,168 @@ struct NetworkDisconnctedView: View {
}
//
struct NetworkConnctedView: View {
@Bindable var networkModel: NetworkModel
var body: some View {
Group {
switch networkModel.showModel {
case .resource:
NetworkResourceGroupView(networkModel: self.networkModel)
case .device:
NetworkDeviceGroupView(networkModel: self.networkModel)
}
}
}
}
extension NetworkConnctedView {
//
struct NetworkResourceGroupView: View {
@Bindable var networkModel: NetworkModel
var body: some View {
LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 3), spacing: 8) {
ForEach(self.networkModel.resources, id: \.id) { resource in
NetworkResourceView(resource: resource)
}
}
}
}
struct NetworkResourceView: View {
var resource: NetworkModel.Resource
var body: some View {
VStack {
HStack {
Text(resource.status == 1 ? "yes" : "no")
Text(resource.name)
.font(.system(size: 14, weight: .regular))
}
Text(resource.schema)
.font(.system(size: 14, weight: .regular))
.padding(.leading, 30)
}
}
}
//
struct NetworkDeviceGroupView: View {
@Bindable var networkModel: NetworkModel
@State private var selectedId: Int?
var body: some View {
NavigationSplitView {
List(self.networkModel.devices, id: \.id, selection: $selectedId) { device in
NetworkDeviceHeadView(device: device)
}
.listStyle(.sidebar)
.onChange(of: selectedId) {
self.networkModel.changeSelectedDevice(deviceId: selectedId)
}
.onAppear {
if selectedId == nil {
selectedId = self.networkModel.devices.first?.id
}
}
} detail: {
NetworkDeviceDetailView(device: $networkModel.selectedDevice)
}
}
}
struct NetworkDeviceHeadView: View {
var device: NetworkModel.Device
var body: some View {
VStack {
HStack {
Text(device.status == 1 ? "yes" : "no")
Text(device.name)
.font(.system(size: 14, weight: .regular))
}
Text(device.ipv4)
.font(.system(size: 14, weight: .regular))
.padding(.leading, 30)
}
}
}
struct NetworkDeviceDetailView: View {
@Binding var device: NetworkModel.Device?
var body: some View {
Group {
if let device {
List {
Section {
HStack {
Text("连接状态")
Text("\(device.status)")
Spacer()
}
HStack {
Text("虚拟IPv4")
Text("\(device.ipv4)")
Spacer()
}
HStack {
Text("虚拟IPv6")
Text("\(device.ipv6)")
Spacer()
}
HStack {
Text("操作系统")
Text("\(device.system)")
Spacer()
}
}
Section("服务列表") {
ForEach(device.resources, id: \.id) { resource in
HStack {
Text("\(resource.name)")
Text("\(resource.schema)")
}
}
}
}
} else {
EmptyView()
}
}
}
}
}
struct NetworkWaitAuthView: View {
@Bindable var networkModel: NetworkModel
var body: some View {
Color.clear
.overlay {
Text("等待确认中")
}
}
}
#Preview {
NetworkView()

View File

@ -1,18 +0,0 @@
//
// NetworkWaitAuthView.swift
// punchnet
//
// Created by on 2026/1/16.
//
import SwiftUI
struct NetworkWaitAuthView: View {
@Bindable var networkModel: NetworkModel
var body: some View {
Color.clear
.overlay {
Text("等待确认中")
}
}
}