fix
This commit is contained in:
parent
fd22574db1
commit
176d3ebe45
@ -34,7 +34,6 @@ struct SDLAPIClient {
|
||||
NSLog("response is: \(String(bytes: data, encoding: .utf8))")
|
||||
|
||||
let apiResponse = try JSONDecoder().decode(SDLAPIResponse<T>.self, from: data)
|
||||
|
||||
if apiResponse.code == 0, let data = apiResponse.data {
|
||||
return data
|
||||
} else if let message = apiResponse.message {
|
||||
|
||||
@ -8,6 +8,77 @@
|
||||
import Foundation
|
||||
import Observation
|
||||
|
||||
// 资源列表
|
||||
struct Resource: Codable {
|
||||
var id: Int
|
||||
var name: String
|
||||
var url: String
|
||||
var connectionStatus: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case name
|
||||
case url
|
||||
case connectionStatus = "connection_status"
|
||||
}
|
||||
}
|
||||
|
||||
// 设备列表
|
||||
struct Node: Codable {
|
||||
var id: Int
|
||||
var name: String
|
||||
var ip: String
|
||||
var system: String?
|
||||
var connectionStatus: String
|
||||
|
||||
func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(id)
|
||||
}
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case name
|
||||
case ip
|
||||
case system
|
||||
case connectionStatus = "connection_status"
|
||||
}
|
||||
|
||||
static func == (lhs: Self, rhs: Self) -> Bool {
|
||||
return lhs.id == rhs.id
|
||||
}
|
||||
}
|
||||
|
||||
struct NetworkContext: Codable {
|
||||
let ip: String
|
||||
let resourceList: [Resource]
|
||||
let nodeList: [Node]
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case ip
|
||||
case resourceList = "resource_list"
|
||||
case nodeList = "node_list"
|
||||
}
|
||||
}
|
||||
|
||||
// 节点详情
|
||||
struct NodeDetail: Codable {
|
||||
let id: Int
|
||||
let name: String
|
||||
let ip: String
|
||||
let system: String?
|
||||
let connectionStatus: String
|
||||
let resourceList: [Resource]
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case name
|
||||
case ip
|
||||
case system
|
||||
case connectionStatus = "connection_status"
|
||||
case resourceList = "resource_list"
|
||||
}
|
||||
}
|
||||
|
||||
@Observable
|
||||
class NetworkModel {
|
||||
|
||||
@ -18,59 +89,6 @@ class NetworkModel {
|
||||
case disconnected
|
||||
}
|
||||
|
||||
// 资源列表
|
||||
struct Resource: Codable {
|
||||
var id: Int
|
||||
var name: String
|
||||
var url: String
|
||||
var connectionStatus: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case name
|
||||
case url
|
||||
case connectionStatus = "connection_status"
|
||||
}
|
||||
}
|
||||
|
||||
// 设备列表
|
||||
struct Node: Codable {
|
||||
var id: Int
|
||||
var name: String
|
||||
var ip: String
|
||||
var system: String
|
||||
var connectStatus: Int
|
||||
|
||||
func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(id)
|
||||
}
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case name
|
||||
case ip
|
||||
case system
|
||||
case connectStatus = "connect_status"
|
||||
}
|
||||
|
||||
static func == (lhs: Self, rhs: Self) -> Bool {
|
||||
return lhs.id == rhs.id
|
||||
}
|
||||
}
|
||||
|
||||
struct NetworkContext: Codable {
|
||||
let ip: String
|
||||
let resourceList: [Resource]
|
||||
let nodeList: [Node]
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case ip
|
||||
case resourceList = "resource_list"
|
||||
case nodeList = "node_list"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 状态管理
|
||||
var connectState: ConnectState = .disconnected
|
||||
|
||||
@ -104,7 +122,6 @@ class NetworkModel {
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func connect(networkSession: UserContext.NetworkSession) async throws {
|
||||
let params: [String: Any] = [
|
||||
"client_id": SystemConfig.getClientId(),
|
||||
|
||||
@ -159,13 +159,15 @@ struct NetworkDisconnctedView: View {
|
||||
|
||||
// 执行登陆操作
|
||||
private func startVpn() async throws {
|
||||
let clientId = SystemConfig.getClientId()
|
||||
guard let networkSession = userContext.networkSession else {
|
||||
return
|
||||
}
|
||||
|
||||
let options = SystemConfig.getOptions(networkId: 8,
|
||||
networkDomain: "punchnet.com",
|
||||
ip: "10.211.179.1",
|
||||
let options = SystemConfig.getOptions(networkId: UInt32(networkSession.networkId),
|
||||
networkDomain: networkSession.networkDomain,
|
||||
ip: "",
|
||||
maskLen: 24,
|
||||
accessToken: "accessToken1234",
|
||||
accessToken: networkSession.accessToken,
|
||||
identityId: 1234,
|
||||
hostname: "mysql",
|
||||
noticePort: 1234)
|
||||
@ -191,7 +193,7 @@ struct NetworkResourceGroupView: View {
|
||||
}
|
||||
|
||||
struct NetworkResourceView: View {
|
||||
var resource: NetworkModel.Resource
|
||||
var resource: Resource
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
@ -237,12 +239,12 @@ struct NetworkDeviceGroupView: View {
|
||||
}
|
||||
|
||||
struct NetworkNodeHeadView: View {
|
||||
var node: NetworkModel.Node
|
||||
var node: Node
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(node.connectStatus == 1 ? "yes" : "no")
|
||||
Text(node.connectionStatus)
|
||||
|
||||
Text(node.name)
|
||||
.font(.system(size: 14, weight: .regular))
|
||||
@ -256,8 +258,10 @@ struct NetworkNodeHeadView: View {
|
||||
}
|
||||
|
||||
struct NetworkNodeDetailView: View {
|
||||
@Binding var node: NetworkModel.Node?
|
||||
|
||||
@Environment(UserContext.self) var userContext: UserContext
|
||||
@Binding var node: Node?
|
||||
@State private var resources: [Resource] = []
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if let node {
|
||||
@ -265,40 +269,56 @@ struct NetworkNodeDetailView: View {
|
||||
Section {
|
||||
HStack {
|
||||
Text("连接状态")
|
||||
|
||||
Text("\(node.connectStatus)")
|
||||
|
||||
Text("\(node.connectionStatus)")
|
||||
Spacer()
|
||||
}
|
||||
|
||||
HStack {
|
||||
Text("虚拟IPv4")
|
||||
|
||||
Text("\(node.ip)")
|
||||
Spacer()
|
||||
}
|
||||
|
||||
HStack {
|
||||
Text("操作系统")
|
||||
Text("\(node.system)")
|
||||
Text(node.system ?? "未知")
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
|
||||
// Section("服务列表") {
|
||||
// ForEach(device.resources, id: \.id) { resource in
|
||||
// HStack {
|
||||
// Text("\(resource.name)")
|
||||
// Text("\(resource.schema)")
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
Section("服务列表") {
|
||||
ForEach(resources, id: \.id) { resource in
|
||||
HStack {
|
||||
Text("\(resource.name)")
|
||||
Text("\(resource.url)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.task {
|
||||
await self.loadNodeResources()
|
||||
}
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func loadNodeResources() async {
|
||||
guard let networkSession = userContext.networkSession, let id = self.node?.id else {
|
||||
return
|
||||
}
|
||||
|
||||
let params: [String: Any] = [
|
||||
"client_id": SystemConfig.getClientId(),
|
||||
"access_token": networkSession.accessToken,
|
||||
"id": id
|
||||
]
|
||||
|
||||
if let nodeDetail = try? await SDLAPIClient.doPost(path: "/get_node_resources", params: params, as: NodeDetail.self) {
|
||||
self.resources = nodeDetail.resourceList
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct NetworkWaitAuthView: View {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user