简化network
This commit is contained in:
parent
9b8d7c78f6
commit
a18d07924f
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -56,9 +56,6 @@ class NetworkModel {
|
|||||||
var connectState: ConnectState = .disconnected
|
var connectState: ConnectState = .disconnected
|
||||||
var showModel: ShowMode = .device
|
var showModel: ShowMode = .device
|
||||||
|
|
||||||
// 登陆后的网络会话
|
|
||||||
let networkSession: UserContext.NetworkSession
|
|
||||||
|
|
||||||
// 网络连接开关
|
// 网络连接开关
|
||||||
var isOn: Bool = false {
|
var isOn: Bool = false {
|
||||||
didSet {
|
didSet {
|
||||||
@ -85,9 +82,7 @@ class NetworkModel {
|
|||||||
var devices: [Device] = [
|
var devices: [Device] = [
|
||||||
]
|
]
|
||||||
|
|
||||||
init(networkSession: UserContext.NetworkSession) {
|
init() {
|
||||||
self.networkSession = networkSession
|
|
||||||
|
|
||||||
self.devices = [
|
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: 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),
|
.init(id: 2, status: 1, name: "test2", ipv4: "192.168.1.2", ipv6: "fa9d.fa9d.fa9d.fa9d", system: "MacOS 12", resources: self.resources),
|
||||||
|
|||||||
@ -9,11 +9,7 @@ import SwiftUI
|
|||||||
|
|
||||||
struct NetworkView: View {
|
struct NetworkView: View {
|
||||||
@Environment(UserContext.self) var userContext: UserContext
|
@Environment(UserContext.self) var userContext: UserContext
|
||||||
@State private var networkModel: NetworkModel
|
@State private var networkModel = NetworkModel()
|
||||||
|
|
||||||
init() {
|
|
||||||
self.networkModel = NetworkModel(networkSession: self.userContext.networkSession!)
|
|
||||||
}
|
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
@ -21,7 +17,7 @@ struct NetworkView: View {
|
|||||||
|
|
||||||
VStack {
|
VStack {
|
||||||
HStack(alignment: .center) {
|
HStack(alignment: .center) {
|
||||||
Text(networkModel.networkSession.networkName)
|
Text(userContext.networkSession?.networkName ?? "未知")
|
||||||
Text(">")
|
Text(">")
|
||||||
Spacer()
|
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 {
|
#Preview {
|
||||||
NetworkView()
|
NetworkView()
|
||||||
|
|||||||
@ -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("等待确认中")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user