diff --git a/linker.web/src/views/full/devices/TuntapDHCP.vue b/linker.web/src/views/full/devices/TuntapDHCP.vue
new file mode 100644
index 00000000..ac66d5ed
--- /dev/null
+++ b/linker.web/src/views/full/devices/TuntapDHCP.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+ 赐予此设备IP,其它设备可通过此IP访问
+
+
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linker.web/src/views/full/devices/tuntap.js b/linker.web/src/views/full/devices/tuntap.js
index 341bab12..ed80b878 100644
--- a/linker.web/src/views/full/devices/tuntap.js
+++ b/linker.web/src/views/full/devices/tuntap.js
@@ -11,7 +11,9 @@ export const provideTuntap = () => {
showEdit: false,
current: null,
list: {},
- hashcode: 0
+ hashcode: 0,
+
+ showDHCP: false,
});
provide(tuntapSymbol, tuntap);
diff --git a/linker.web/src/views/full/install/Client.vue b/linker.web/src/views/full/install/Client.vue
index 78ad3eb4..247b8eb9 100644
--- a/linker.web/src/views/full/install/Client.vue
+++ b/linker.web/src/views/full/install/Client.vue
@@ -14,8 +14,8 @@
-
-
+
+
@@ -28,8 +28,8 @@
-
-
+
+
@@ -37,13 +37,22 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -107,7 +116,8 @@ export default {
const state = reactive({
form: {
name:step.value.form.client.name || globalData.value.config.Client.Name,
- groupid: step.value.form.client.groupid ||globalData.value.config.Client.GroupId,
+ groupid: step.value.form.client.groupid ||globalData.value.config.Client.Group.Id,
+ groupPassword: step.value.form.client.groupPassword ||globalData.value.config.Client.GroupPassword,
api: step.value.form.client.api ||globalData.value.config.Client.CApi.ApiPort,
web: step.value.form.client.web ||globalData.value.config.Client.CApi.WebPort,
password:step.value.form.client.password || globalData.value.config.Client.CApi.ApiPassword,
@@ -122,6 +132,7 @@ export default {
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }],
groupid: [{ required: true, message: "必填", trigger: "blur" }],
+ groupPassword: [{ required: true, message: "必填", trigger: "blur" }],
password: [{ required: true, message: "必填", trigger: "blur" }],
api: [
{ required: true, message: "必填", trigger: "blur" },
@@ -161,6 +172,7 @@ export default {
Client:{
name: state.form.name,
groupid: state.form.groupid,
+ groupPassword: state.form.groupPassword,
api: +state.form.api,
web: +state.form.web,
password: state.form.password,
diff --git a/linker.web/src/views/full/install/Server.vue b/linker.web/src/views/full/install/Server.vue
index 7eb90195..9161e6fa 100644
--- a/linker.web/src/views/full/install/Server.vue
+++ b/linker.web/src/views/full/install/Server.vue
@@ -32,15 +32,6 @@
-
-
-
-
-
-
-
-
-
@@ -57,7 +48,12 @@
-
+
+
+
+
+
+
diff --git a/linker.web/src/views/full/server/Groups.vue b/linker.web/src/views/full/server/Groups.vue
new file mode 100644
index 00000000..69c5433d
--- /dev/null
+++ b/linker.web/src/views/full/server/Groups.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.Name }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Id }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linker.web/src/views/full/server/Index.vue b/linker.web/src/views/full/server/Index.vue
index c7b649b7..9f1f69ce 100644
--- a/linker.web/src/views/full/server/Index.vue
+++ b/linker.web/src/views/full/server/Index.vue
@@ -16,12 +16,19 @@ export default {
components:{},
setup(props) {
- const excludes = ['./Index.vue','./Version.vue','./TunnelServers.vue']
+ const globalData = injectGlobalData();
+ const hasConfig = computed(()=>globalData.value.hasAccess('Config'))
+ const hasSync = computed(()=>globalData.value.hasAccess('Sync'));
+
+ const excludes = ['./Index.vue','./Version.vue','./TunnelServers.vue'];
+ if(hasSync.value == false){
+ excludes.push('./Async.vue');
+ }
+
const files = require.context('./', true, /.+\.vue/);
const settingComponents = files.keys().filter(c=>excludes.includes(c)==false).map(c => files(c).default).sort((a,b)=>a.order-b.order);
- const globalData = injectGlobalData();
- const hasConfig = computed(()=>globalData.value.hasAccess('Config'))
+
const state = reactive({
tab:settingComponents[0].name
});
diff --git a/linker.web/src/views/full/server/RelayServers.vue b/linker.web/src/views/full/server/RelayServers.vue
index 3655f6c3..04bc615a 100644
--- a/linker.web/src/views/full/server/RelayServers.vue
+++ b/linker.web/src/views/full/server/RelayServers.vue
@@ -86,7 +86,7 @@ import { Delete,Plus,Top,Bottom } from '@element-plus/icons-vue';
export default {
label:'中继服务器',
name:'relayServers',
- order:4,
+ order:2,
components:{Delete,Plus,Top,Bottom},
setup(props) {
const globalData = injectGlobalData();
diff --git a/linker.web/src/views/full/server/SForward.vue b/linker.web/src/views/full/server/SForward.vue
index bb837da7..2b673ba8 100644
--- a/linker.web/src/views/full/server/SForward.vue
+++ b/linker.web/src/views/full/server/SForward.vue
@@ -16,7 +16,7 @@ import {onMounted, reactive } from 'vue'
export default {
label:'服务器穿透',
name:'sforward',
- order:5,
+ order:3,
setup(props) {
const globalData = injectGlobalData();
const state = reactive({
diff --git a/linker.web/src/views/full/server/Updater.vue b/linker.web/src/views/full/server/Updater.vue
index ed5b68f1..dac33610 100644
--- a/linker.web/src/views/full/server/Updater.vue
+++ b/linker.web/src/views/full/server/Updater.vue
@@ -16,7 +16,7 @@ import { computed, inject, onMounted, reactive } from 'vue'
export default {
label:'服务器更新',
name:'updater',
- order:6,
+ order:4,
setup(props) {
const globalData = injectGlobalData();
const state = reactive({
diff --git a/linker.web/src/views/full/status/server/ServerConfig.vue b/linker.web/src/views/full/status/server/ServerConfig.vue
index 7489ae6f..96d4695e 100644
--- a/linker.web/src/views/full/status/server/ServerConfig.vue
+++ b/linker.web/src/views/full/status/server/ServerConfig.vue
@@ -9,7 +9,9 @@
-
+
+
+
@@ -26,9 +28,9 @@ import { setSignIn } from '@/apis/signin';
import { injectGlobalData } from '@/provide';
import { ElMessage } from 'element-plus';
import { computed, reactive, ref } from 'vue';
-import {Promotion} from '@element-plus/icons-vue'
+import {Promotion,CirclePlus} from '@element-plus/icons-vue'
export default {
- components:{Promotion},
+ components:{Promotion,CirclePlus},
props:['config'],
setup(props) {
@@ -38,9 +40,10 @@ export default {
show: false,
loading: false,
connected: computed(() => globalData.value.signin.Connected),
+ groupid: globalData.value.config.Client.Group.Id,
form: {
name: globalData.value.config.Client.Name,
- groupid: globalData.value.config.Client.GroupId,
+ groups: globalData.value.config.Client.Groups,
},
rules: {},
});
@@ -50,9 +53,22 @@ export default {
return;
}
state.form.name = globalData.value.config.Client.Name;
- state.form.groupid = globalData.value.config.Client.GroupId;
+ state.form.groups = globalData.value.config.Client.Groups;
+
+ state.groupid = globalData.value.config.Client.Group.Id;
state.show = true;
}
+
+ const handleGroupChange = (value)=>{
+ const index = state.form.groups.map((item,index)=>{
+ item.$index = index;
+ return item;
+ }).filter(c=>c.Id == value)[0].$index;
+ const temp = state.form.groups[index];
+ state.form.groups[index] = state.form.groups[0];
+ state.form.groups[0] = temp;
+ console.log(state.form.groups);
+ }
const handleSave = () => {
state.loading = true;
setSignIn(state.form).then(() => {
@@ -68,7 +84,7 @@ export default {
});
}
return {
- config:props.config, state, handleConfig, handleSave
+ config:props.config, state, handleConfig, handleSave,handleGroupChange
}
}
}
diff --git a/linker.web/src/views/full/status/server/ServerFlow.vue b/linker.web/src/views/full/status/server/ServerFlow.vue
index 1571c728..c5ada169 100644
--- a/linker.web/src/views/full/status/server/ServerFlow.vue
+++ b/linker.web/src/views/full/status/server/ServerFlow.vue
@@ -1,9 +1,9 @@