Compare commits
3 Commits
36bbcf15f3
...
8aad25bf26
| Author | SHA1 | Date | |
|---|---|---|---|
| 8aad25bf26 | |||
| 9b590dd08f | |||
| 5fc7611108 |
@@ -136,12 +136,16 @@
|
||||
</div>
|
||||
|
||||
<div class="glass rounded-xl p-4">
|
||||
<div class="font-bold mb-3">节点映射</div>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<div class="font-bold">节点映射</div>
|
||||
<button class="btn2" :disabled="busy" @click="saveSDWAN">保存节点映射</button>
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<div v-for="(n,i) in sd.nodes" :key="i" class="grid grid-cols-1 md:grid-cols-5 gap-2">
|
||||
<select class="ipt" v-model="n.node">
|
||||
<option value="">选择节点</option>
|
||||
<option v-for="x in nodes" :key="x.name" :value="x.name">{{ x.name }}</option>
|
||||
<option v-for="x in nodes" :key="x.name" :value="x.name">{{ (x.alias || x.name) }}(在线)</option>
|
||||
<option v-for="x in (sd.nodes||[])" :key="'off'+x.node" v-if="x.node && !isOnline(x.node)" :value="x.node">{{ x.node }}(离线)</option>
|
||||
</select>
|
||||
<input class="ipt md:col-span-2" v-model="n.ip" placeholder="10.10.0.X">
|
||||
<button class="btn2" @click="removeSDWANNode(i)">删除</button>
|
||||
@@ -151,7 +155,10 @@
|
||||
</div>
|
||||
|
||||
<div class="glass rounded-xl p-4">
|
||||
<div class="font-bold mb-3">子网代理(Subnet Proxy)</div>
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<div class="font-bold">子网代理(Subnet Proxy)</div>
|
||||
<button class="btn2" :disabled="busy" @click="saveSDWAN">保存子网代理</button>
|
||||
</div>
|
||||
<div class="text-xs text-slate-400 mb-2">示例:local 192.168.0.0/24 → virtual 10.0.100.0/24(掩码需一致)</div>
|
||||
<div class="space-y-2">
|
||||
<div v-for="(s,i) in sd.subnetProxies" :key="i" class="grid grid-cols-1 md:grid-cols-6 gap-2">
|
||||
@@ -364,6 +371,9 @@ createApp({
|
||||
if (!k) return nodes.value;
|
||||
return nodes.value.filter(n => (n.name||'').toLowerCase().includes(k) || (n.publicIP||'').toLowerCase().includes(k));
|
||||
});
|
||||
const onlineMap = computed(() => new Set((nodes.value || []).map(n => n.name)));
|
||||
const nodeStatus = (name) => (name && onlineMap.value.has(name)) ? '在线' : '离线';
|
||||
const isOnline = (name) => (name && onlineMap.value.has(name));
|
||||
|
||||
const toast = (text, t='ok') => { msg.value = text; msgType.value = t; setTimeout(() => { if (msg.value === text) msg.value = ''; }, 2500); };
|
||||
const bearer = () => ({ Authorization: 'Bearer ' + (localStorage.getItem('t') || '') });
|
||||
@@ -662,6 +672,7 @@ createApp({
|
||||
health, stats, nodes, nodeKeyword, filteredNodes, sd, connectForm,
|
||||
tenants, activeTenant, keys, users, enrolls, tenantForm, keyForm, userForm,
|
||||
settings, audit, auditTenant,
|
||||
onlineMap, nodeStatus, isOnline,
|
||||
natText, uptime, fmtTime,
|
||||
login, logout, refreshAll, saveSDWAN, addSDWANNode, removeSDWANNode, addSubnetProxy, removeSubnetProxy, autoAssignIPs,
|
||||
kickNode, renameNode, changeNodeIP, openAppManager, pushAppConfigs, openConnect, doConnect,
|
||||
|
||||
Reference in New Issue
Block a user