mirror of
https://github.com/yJason/ClashX-Dashboard.git
synced 2026-03-01 00:35:19 +08:00
init
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
//
|
||||
// ConfigView.swift
|
||||
// ClashX Dashboard
|
||||
//
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct ConfigView: View {
|
||||
|
||||
@State var httpPort: Int = 0
|
||||
@State var socks5Port: Int = 0
|
||||
@State var mixedPort: Int = 0
|
||||
@State var redirPort: Int = 0
|
||||
@State var mode: String = "Rule"
|
||||
@State var logLevel: String = "Debug"
|
||||
@State var allowLAN: Bool = false
|
||||
@State var sniffer: Bool = false
|
||||
|
||||
@State var enableTUNDevice: Bool = false
|
||||
@State var tunIPStack: String = "System"
|
||||
@State var deviceName: String = "utun9"
|
||||
@State var interfaceName: String = "en0"
|
||||
|
||||
@State var disableAll = true
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
LazyVGrid(columns: [
|
||||
GridItem(.flexible()),
|
||||
GridItem(.flexible())
|
||||
]) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Http Port")
|
||||
TextField("0", value: $httpPort, formatter: NumberFormatter())
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("Socks5 Port")
|
||||
TextField("0", value: $socks5Port, formatter: NumberFormatter())
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("Mixed Port")
|
||||
TextField("0", value: $mixedPort, formatter: NumberFormatter())
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("Redir Port")
|
||||
TextField("0", value: $redirPort, formatter: NumberFormatter())
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("Mode")
|
||||
Picker("", selection: $mode) {
|
||||
ForEach(["Direct", "Rule", "Script", "Global"], id: \.self) {
|
||||
Text($0)
|
||||
}
|
||||
}
|
||||
.pickerStyle(.menu)
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("Log Level")
|
||||
Picker("", selection: $logLevel) {
|
||||
ForEach(["Silent", "Error", "Warning", "Info", "Debug"], id: \.self) {
|
||||
Text($0)
|
||||
}
|
||||
}
|
||||
.pickerStyle(.menu)
|
||||
.disabled(disableAll)
|
||||
}
|
||||
Toggle("Allow LAN", isOn: $allowLAN)
|
||||
.disabled(disableAll)
|
||||
Toggle("Sniffer", isOn: $sniffer)
|
||||
.disabled(disableAll)
|
||||
}
|
||||
.padding()
|
||||
|
||||
Divider()
|
||||
.padding()
|
||||
|
||||
LazyVGrid(columns: [
|
||||
GridItem(.flexible()),
|
||||
GridItem(.flexible())
|
||||
]) {
|
||||
Toggle("Enable TUN Device", isOn: $enableTUNDevice)
|
||||
.disabled(disableAll)
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("TUN IP Stack")
|
||||
Picker("", selection: $tunIPStack) {
|
||||
ForEach(["gVisor", "System", "LWIP"], id: \.self) {
|
||||
Text($0)
|
||||
}
|
||||
}
|
||||
.pickerStyle(.menu)
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("Device Name")
|
||||
TextField("utun9", text: $deviceName)
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Text("Interface Name")
|
||||
TextField("en0", text: $interfaceName)
|
||||
.disabled(disableAll)
|
||||
}
|
||||
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
.onAppear {
|
||||
ApiRequest.requestConfig { config in
|
||||
httpPort = config.port
|
||||
socks5Port = config.socksPort
|
||||
mixedPort = config.mixedPort
|
||||
redirPort = config.redirPort
|
||||
mode = config.mode.rawValue.capitalized
|
||||
logLevel = config.logLevel.rawValue.capitalized
|
||||
|
||||
allowLAN = config.allowLan
|
||||
sniffer = config.sniffing
|
||||
|
||||
enableTUNDevice = config.tun.enable
|
||||
tunIPStack = config.tun.stack
|
||||
deviceName = config.tun.device
|
||||
interfaceName = config.interfaceName
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//struct ConfigView_Previews: PreviewProvider {
|
||||
// static var previews: some View {
|
||||
// ConfigView()
|
||||
// }
|
||||
//}
|
||||
Reference in New Issue
Block a user