diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index 808e76a8..3a941bc9 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -37,7 +37,7 @@ jobs:
release_name: v1.7.3.${{ steps.date.outputs.today }}
draft: false
prerelease: false
- body: "1. 优化自动分配IP\r\n2. 优化网卡,排除不明数据包\r\n3. 虚拟网卡点对网IP映射,用于解决网段冲突"
+ body: "1. 优化自动分配IP\r\n2. 优化网卡,排除不明数据包\r\n3. 虚拟网卡点对网IP映射,用于解决网段冲突\r\n4. 内置应用层SNAT,用于无法使用系统NAT的windows系统"
- name: publish projects
run: ./publish.bat "C:\\Android\\android-sdk"
- name: upload-win-x86-oss
diff --git a/src/linker.tray.win/web/css/163.78703523.css b/src/linker.app/public/web/css/743.0511d33e.css
similarity index 90%
rename from src/linker.tray.win/web/css/163.78703523.css
rename to src/linker.app/public/web/css/743.0511d33e.css
index 4721da4f..83390f3d 100644
--- a/src/linker.tray.win/web/css/163.78703523.css
+++ b/src/linker.app/public/web/css/743.0511d33e.css
@@ -1 +1 @@
-#file-input[data-v-4892cd3c]{opacity:0;position:absolute;z-index:-1}.el-icon[data-v-4892cd3c]{font-size:1.6rem;vertical-align:middle;color:#555}body.sunny{background-image:url(../img/bg.a2158f12.jpg);background-repeat:no-repeat;background-size:cover;background-position:bottom;position:absolute;left:0;top:0;right:0;bottom:0}body.sunny .status-wrap{background-color:hsla(0,0%,100%,.5)}body.sunny .head-wrap{background-color:hsla(0,0%,100%,.7)}body.sunny .net-list-wrap ul li,body.sunny .net-wrap{background-color:hsla(0,0%,98%,.5)}.head-wrap[data-v-1fd9ef80]{background-color:#fafafa;padding:1rem;border-bottom:1px solid #ddd;box-shadow:1px 2px 3px rgba(0,0,0,.05);font-size:1.4rem}.head-wrap span.label[data-v-1fd9ef80]{line-height:2.4rem;margin-right:.6rem;color:#555}a[data-v-56c0e8be]{color:#666;text-decoration:underline}a.green[data-v-56c0e8be]{color:green;font-weight:700}a.download[data-v-56c0e8be]{margin-left:.6rem}a.download .el-icon[data-v-56c0e8be]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-56c0e8be]{animation:loading-56c0e8be 1s linear infinite}a.download+a.download[data-v-56c0e8be]{margin-left:.2rem}@keyframes loading-56c0e8be{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-9f58a72e]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-9f58a72e]{color:#d400ff}.self .el-icon[data-v-9f58a72e]{vertical-align:text-bottom}div.point[data-v-41d1beca]{margin:-.2rem .3rem 0 -1.3rem;position:absolute}span.point[data-v-41d1beca]{width:.8rem;height:.8rem;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#eee;border:1px solid #ddd;cursor:pointer;transition:.3s}span.point[data-v-41d1beca]:hover{transform:scale(2)}span.point.p2p[data-v-41d1beca]{background-color:#01c901;border:1px solid #049538}span.point.relay[data-v-41d1beca]{background-color:#e3e811;border:1px solid #b3c410}span.point.node[data-v-41d1beca]{background-color:#09dda9;border:1px solid #0cac90}.el-icon.loading[data-v-5ce8d590],a.loading[data-v-5ce8d590]{vertical-align:middle;font-weight:700;animation:loading-5ce8d590 1s linear infinite}.el-switch.is-disabled[data-v-5ce8d590]{opacity:1}.el-input[data-v-5ce8d590]{width:8rem}.delay[data-v-5ce8d590]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-5ce8d590]{font-size:1.5rem}.any[data-v-5ce8d590]{position:absolute;left:-7px;top:-2px;line-height:normal}.any.green[data-v-5ce8d590]{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}@keyframes loading-5ce8d590{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.net-list-wrap ul[data-v-68d1c30a]{padding:2rem 2rem 1rem 2rem}.net-list-wrap ul li[data-v-68d1c30a]{margin-bottom:1rem;border:1px solid #ddd;background-color:#fff;font-size:1.3rem;border-radius:.4rem}.net-list-wrap ul li dt[data-v-68d1c30a]{padding:.6rem;border-bottom:1px solid #ddd}.net-list-wrap ul li dd.tuntap[data-v-68d1c30a]{padding:1rem;position:relative}.net-list-wrap .page[data-v-68d1c30a]{padding:.6rem 0;border-top:1px solid #ddd;background-color:hsla(0,0%,98%,.5);box-shadow:-1px -2px 3px rgba(0,0,0,.05)}.net-list-wrap .page-wrap[data-v-68d1c30a]{display:inline-block}.status-api-wrap[data-v-439c62dc]{padding-right:2rem}.status-api-wrap a[data-v-439c62dc]{color:#333}.status-api-wrap span[data-v-439c62dc]{border-radius:1rem;background-color:rgba(0,0,0,.1);padding:0 .6rem;margin-left:.2rem}.status-api-wrap.connected a[data-v-439c62dc]{color:green;font-weight:700}.status-api-wrap.connected span[data-v-439c62dc]{background-color:green;color:#fff}.status-api-wrap .el-icon[data-v-439c62dc]{vertical-align:text-top}.el-dropdown[data-v-10d34f3c]{vertical-align:inherit;margin-right:1rem}.connected[data-v-10d34f3c]{color:green;font-weight:700}.el-icon[data-v-10d34f3c]{vertical-align:bottom}a[data-v-80718c08]{font-weight:700;position:absolute;right:1rem;bottom:90%;border:1px solid #ddd;background-color:#fff;z-index:9}a p[data-v-80718c08]{line-height:normal;white-space:nowrap}.head[data-v-f73b7458]{padding-bottom:1rem;text-align:center}.head .el-input[data-v-f73b7458]{width:20rem}.page[data-v-f73b7458]{padding-top:1rem}.page-wrap[data-v-f73b7458]{display:inline-block}.head[data-v-019c1d95]{padding-bottom:1rem;text-align:center}.head .el-input[data-v-019c1d95]{width:20rem}.page[data-v-019c1d95]{padding-top:1rem}.page-wrap[data-v-019c1d95]{display:inline-block}#map[data-v-3c0782be],#map[data-v-6f5477f6]{height:60rem}.flow-wrap[data-v-12cd5250]{padding:.4rem;font-weight:700;position:absolute;right:1rem;bottom:80%;border:1px solid #ddd;background-color:#fff;z-index:9}.flow-wrap>a[data-v-12cd5250],.flow-wrap>p[data-v-12cd5250]{line-height:normal;white-space:nowrap;display:block}a[data-v-75ffaf8a]{font-weight:700}a .el-icon[data-v-75ffaf8a]{vertical-align:text-bottom}a.download .el-icon[data-v-75ffaf8a]{font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-75ffaf8a]{animation:loading-75ffaf8a 1s linear infinite}@keyframes loading-75ffaf8a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.status-server-wrap[data-v-2d85a782]{position:relative;padding-right:.5rem}.status-server-wrap a[data-v-2d85a782]{color:#333}.status-server-wrap a+a[data-v-2d85a782]{margin-left:.6rem}.status-server-wrap .el-icon[data-v-2d85a782]{vertical-align:text-bottom}.el-col[data-v-7a697708]{text-align:left}.status-export-wrap[data-v-b1c8c77a]{padding-right:2rem}.status-export-wrap a[data-v-b1c8c77a]{color:#333}.status-export-wrap .el-icon[data-v-b1c8c77a]{vertical-align:text-top}.status-export-wrap .el-col[data-v-b1c8c77a]{text-align:left}.status-wrap[data-v-bb76583c]{border-top:1px solid #ddd;background-color:#f5f5f5;height:3rem;line-height:3rem;font-size:1.2rem;color:#555}.status-wrap .pay[data-v-bb76583c]{font-size:xxx-large}.status-wrap .pay img[data-v-bb76583c]{width:100%;margin:0}.status-wrap .copy[data-v-bb76583c]{padding-left:.5rem}.status-wrap .copy a[data-v-bb76583c]{color:#555;margin-right:1rem}.status-wrap a.memory[data-v-bb76583c]{margin-right:.6rem}.status-wrap a.memory img[data-v-bb76583c]{height:3rem;vertical-align:bottom;margin-right:.1rem}.net-wrap[data-v-6a3f3b43]{box-sizing:border-box;background-color:#fafafa;border:1px solid #d0d7de;width:calc(100% - 40px);height:calc(100% - 40px);position:absolute;left:20px;top:20px}
\ No newline at end of file
+#file-input[data-v-4892cd3c]{opacity:0;position:absolute;z-index:-1}.el-icon[data-v-4892cd3c]{font-size:1.6rem;vertical-align:middle;color:#555}body.sunny{background-image:url(../img/bg.a2158f12.jpg);background-repeat:no-repeat;background-size:cover;background-position:bottom;position:absolute;left:0;top:0;right:0;bottom:0}body.sunny .status-wrap{background-color:hsla(0,0%,100%,.5)}body.sunny .head-wrap{background-color:hsla(0,0%,100%,.7)}body.sunny .net-list-wrap ul li,body.sunny .net-wrap{background-color:hsla(0,0%,98%,.5)}.head-wrap[data-v-1fd9ef80]{background-color:#fafafa;padding:1rem;border-bottom:1px solid #ddd;box-shadow:1px 2px 3px rgba(0,0,0,.05);font-size:1.4rem}.head-wrap span.label[data-v-1fd9ef80]{line-height:2.4rem;margin-right:.6rem;color:#555}a[data-v-56c0e8be]{color:#666;text-decoration:underline}a.green[data-v-56c0e8be]{color:green;font-weight:700}a.download[data-v-56c0e8be]{margin-left:.6rem}a.download .el-icon[data-v-56c0e8be]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-56c0e8be]{animation:loading-56c0e8be 1s linear infinite}a.download+a.download[data-v-56c0e8be]{margin-left:.2rem}@keyframes loading-56c0e8be{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-9f58a72e]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-9f58a72e]{color:#d400ff}.self .el-icon[data-v-9f58a72e]{vertical-align:text-bottom}div.point[data-v-41d1beca]{margin:-.2rem .3rem 0 -1.3rem;position:absolute}span.point[data-v-41d1beca]{width:.8rem;height:.8rem;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#eee;border:1px solid #ddd;cursor:pointer;transition:.3s}span.point[data-v-41d1beca]:hover{transform:scale(2)}span.point.p2p[data-v-41d1beca]{background-color:#01c901;border:1px solid #049538}span.point.relay[data-v-41d1beca]{background-color:#e3e811;border:1px solid #b3c410}span.point.node[data-v-41d1beca]{background-color:#09dda9;border:1px solid #0cac90}.el-icon.loading[data-v-36b3b9ac],a.loading[data-v-36b3b9ac]{vertical-align:middle;font-weight:700;animation:loading-36b3b9ac 1s linear infinite}.el-switch.is-disabled[data-v-36b3b9ac]{opacity:1}.el-input[data-v-36b3b9ac]{width:8rem}.delay[data-v-36b3b9ac]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-36b3b9ac]{font-size:1.5rem}.any[data-v-36b3b9ac]{position:absolute;left:-7px;top:-2px;line-height:normal}.any.green[data-v-36b3b9ac]{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}@keyframes loading-36b3b9ac{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.net-list-wrap ul[data-v-68d1c30a]{padding:2rem 2rem 1rem 2rem}.net-list-wrap ul li[data-v-68d1c30a]{margin-bottom:1rem;border:1px solid #ddd;background-color:#fff;font-size:1.3rem;border-radius:.4rem}.net-list-wrap ul li dt[data-v-68d1c30a]{padding:.6rem;border-bottom:1px solid #ddd}.net-list-wrap ul li dd.tuntap[data-v-68d1c30a]{padding:1rem;position:relative}.net-list-wrap .page[data-v-68d1c30a]{padding:.6rem 0;border-top:1px solid #ddd;background-color:hsla(0,0%,98%,.5);box-shadow:-1px -2px 3px rgba(0,0,0,.05)}.net-list-wrap .page-wrap[data-v-68d1c30a]{display:inline-block}.status-api-wrap[data-v-439c62dc]{padding-right:2rem}.status-api-wrap a[data-v-439c62dc]{color:#333}.status-api-wrap span[data-v-439c62dc]{border-radius:1rem;background-color:rgba(0,0,0,.1);padding:0 .6rem;margin-left:.2rem}.status-api-wrap.connected a[data-v-439c62dc]{color:green;font-weight:700}.status-api-wrap.connected span[data-v-439c62dc]{background-color:green;color:#fff}.status-api-wrap .el-icon[data-v-439c62dc]{vertical-align:text-top}.el-dropdown[data-v-10d34f3c]{vertical-align:inherit;margin-right:1rem}.connected[data-v-10d34f3c]{color:green;font-weight:700}.el-icon[data-v-10d34f3c]{vertical-align:bottom}a[data-v-80718c08]{font-weight:700;position:absolute;right:1rem;bottom:90%;border:1px solid #ddd;background-color:#fff;z-index:9}a p[data-v-80718c08]{line-height:normal;white-space:nowrap}.head[data-v-f73b7458]{padding-bottom:1rem;text-align:center}.head .el-input[data-v-f73b7458]{width:20rem}.page[data-v-f73b7458]{padding-top:1rem}.page-wrap[data-v-f73b7458]{display:inline-block}.head[data-v-019c1d95]{padding-bottom:1rem;text-align:center}.head .el-input[data-v-019c1d95]{width:20rem}.page[data-v-019c1d95]{padding-top:1rem}.page-wrap[data-v-019c1d95]{display:inline-block}#map[data-v-3c0782be],#map[data-v-6f5477f6]{height:60rem}.flow-wrap[data-v-12cd5250]{padding:.4rem;font-weight:700;position:absolute;right:1rem;bottom:80%;border:1px solid #ddd;background-color:#fff;z-index:9}.flow-wrap>a[data-v-12cd5250],.flow-wrap>p[data-v-12cd5250]{line-height:normal;white-space:nowrap;display:block}a[data-v-75ffaf8a]{font-weight:700}a .el-icon[data-v-75ffaf8a]{vertical-align:text-bottom}a.download .el-icon[data-v-75ffaf8a]{font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-75ffaf8a]{animation:loading-75ffaf8a 1s linear infinite}@keyframes loading-75ffaf8a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.status-server-wrap[data-v-2d85a782]{position:relative;padding-right:.5rem}.status-server-wrap a[data-v-2d85a782]{color:#333}.status-server-wrap a+a[data-v-2d85a782]{margin-left:.6rem}.status-server-wrap .el-icon[data-v-2d85a782]{vertical-align:text-bottom}.el-col[data-v-7a697708]{text-align:left}.status-export-wrap[data-v-b1c8c77a]{padding-right:2rem}.status-export-wrap a[data-v-b1c8c77a]{color:#333}.status-export-wrap .el-icon[data-v-b1c8c77a]{vertical-align:text-top}.status-export-wrap .el-col[data-v-b1c8c77a]{text-align:left}.status-wrap[data-v-bb76583c]{border-top:1px solid #ddd;background-color:#f5f5f5;height:3rem;line-height:3rem;font-size:1.2rem;color:#555}.status-wrap .pay[data-v-bb76583c]{font-size:xxx-large}.status-wrap .pay img[data-v-bb76583c]{width:100%;margin:0}.status-wrap .copy[data-v-bb76583c]{padding-left:.5rem}.status-wrap .copy a[data-v-bb76583c]{color:#555;margin-right:1rem}.status-wrap a.memory[data-v-bb76583c]{margin-right:.6rem}.status-wrap a.memory img[data-v-bb76583c]{height:3rem;vertical-align:bottom;margin-right:.1rem}.net-wrap[data-v-6a3f3b43]{box-sizing:border-box;background-color:#fafafa;border:1px solid #d0d7de;width:calc(100% - 40px);height:calc(100% - 40px);position:absolute;left:20px;top:20px}
\ No newline at end of file
diff --git a/src/linker.tray.win/web/css/144.f476ecfa.css b/src/linker.app/public/web/css/968.f5edca10.css
similarity index 88%
rename from src/linker.tray.win/web/css/144.f476ecfa.css
rename to src/linker.app/public/web/css/968.f5edca10.css
index 03840c38..fa22ec22 100644
--- a/src/linker.tray.win/web/css/144.f476ecfa.css
+++ b/src/linker.app/public/web/css/968.f5edca10.css
@@ -1 +1 @@
-.table-sort th[data-v-107f04ae]{border-bottom:0}.show-columns[data-v-107f04ae]{vertical-align:middle;font-size:1.2rem}.show-columns .el-icon[data-v-107f04ae]{vertical-align:bottom;font-size:1.2rem}.dropdown[data-v-2f0ed5e0]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-2f0ed5e0]{vertical-align:middle}.dropdown .badge[data-v-2f0ed5e0]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}a[data-v-56c0e8be]{color:#666;text-decoration:underline}a.green[data-v-56c0e8be]{color:green;font-weight:700}a.download[data-v-56c0e8be]{margin-left:.6rem}a.download .el-icon[data-v-56c0e8be]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-56c0e8be]{animation:loading-56c0e8be 1s linear infinite}a.download+a.download[data-v-56c0e8be]{margin-left:.2rem}@keyframes loading-56c0e8be{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-9f58a72e]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-9f58a72e]{color:#d400ff}.self .el-icon[data-v-9f58a72e]{vertical-align:text-bottom}.ipaddress span[data-v-5db71b03]{vertical-align:middle}.el-input[data-v-5db71b03]{width:12rem;margin-right:.6rem}.el-col[data-v-7a697708]{text-align:left}div.point[data-v-41d1beca]{margin:-.2rem .3rem 0 -1.3rem;position:absolute}span.point[data-v-41d1beca]{width:.8rem;height:.8rem;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#eee;border:1px solid #ddd;cursor:pointer;transition:.3s}span.point[data-v-41d1beca]:hover{transform:scale(2)}span.point.p2p[data-v-41d1beca]{background-color:#01c901;border:1px solid #049538}span.point.relay[data-v-41d1beca]{background-color:#e3e811;border:1px solid #b3c410}span.point.node[data-v-41d1beca]{background-color:#09dda9;border:1px solid #0cac90}.el-icon.loading[data-v-5ce8d590],a.loading[data-v-5ce8d590]{vertical-align:middle;font-weight:700;animation:loading-5ce8d590 1s linear infinite}.el-switch.is-disabled[data-v-5ce8d590]{opacity:1}.el-input[data-v-5ce8d590]{width:8rem}.delay[data-v-5ce8d590]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-5ce8d590]{font-size:1.5rem}.any[data-v-5ce8d590]{position:absolute;left:-7px;top:-2px;line-height:normal}.any.green[data-v-5ce8d590]{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}@keyframes loading-5ce8d590{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.wrap[data-v-1541c712]{padding:0 1rem 1rem 0}.remark[data-v-1541c712]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wrap[data-v-1cfaa7f4]{padding:0 1rem 1rem 0}.el-switch.is-disabled[data-v-54c17b5d]{opacity:1}.upgrade-wrap[data-v-54c17b5d]{border:1px solid #ddd;margin-bottom:2rem}.el-switch.is-disabled[data-v-67ed3552]{opacity:1}.calc span[data-v-67ed3552]{display:inline-block}.calc span.label[data-v-67ed3552]{width:6rem}.el-icon.loading[data-v-3a4bfe6c],a.loading[data-v-3a4bfe6c]{vertical-align:middle;font-weight:700;animation:loading-3a4bfe6c 1s linear infinite}.el-switch.is-disabled[data-v-3a4bfe6c]{opacity:1}.el-input[data-v-3a4bfe6c]{width:8rem}.switch-btn[data-v-3a4bfe6c]{font-size:1.5rem}@keyframes loading-3a4bfe6c{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-switch.is-disabled[data-v-022e3781]{opacity:1}.upgrade-wrap[data-v-022e3781]{border:1px solid #ddd;margin-bottom:2rem;padding:1rem 0 1rem 0}.lan-item[data-v-022e3781]{margin-bottom:0}.el-switch.is-disabled[data-v-64b81c5b]{opacity:1}.green[data-v-64b81c5b]{font-weight:700}img.system[data-v-64b81c5b]{height:1.4rem;margin-right:.4rem;border:1px solid #eee}.el-switch.is-disabled[data-v-6941c158]{opacity:1}ul li[data-v-6941c158]{padding-left:2rem}a[data-v-2ee190a4]{text-decoration:underline}a+a[data-v-2ee190a4]{margin-left:1rem}a.green[data-v-2ee190a4]{font-weight:700}.head[data-v-190226d8]{padding-bottom:1rem}.green[data-v-190226d8]{color:green;font-weight:700}.error[data-v-190226d8]{font-weight:700}.error .el-icon[data-v-190226d8]{vertical-align:text-bottom}.head[data-v-359a437c]{padding-bottom:1rem}.error[data-v-359a437c]{font-weight:700}.error .el-icon[data-v-359a437c]{vertical-align:text-bottom}.plan .el-icon[data-v-359a437c]{vertical-align:middle;margin-right:.4rem}.head[data-v-8c388c86]{padding-bottom:1rem}.blue[data-v-8c388c86]{color:#409eff}.dropdown[data-v-8c388c86]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-8c388c86]{vertical-align:middle}.dropdown .badge[data-v-8c388c86]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}.table-sort.el-table th.el-table__cell.is-leaf{border-bottom:0}.table-sort.el-table .el-table__inner-wrapper:before{height:0}.home-list-wrap[data-v-4766ad40]{padding:1rem}.home-list-wrap .page[data-v-4766ad40]{padding-top:1rem}.home-list-wrap .page-wrap[data-v-4766ad40]{display:inline-block}
\ No newline at end of file
+.table-sort th[data-v-107f04ae]{border-bottom:0}.show-columns[data-v-107f04ae]{vertical-align:middle;font-size:1.2rem}.show-columns .el-icon[data-v-107f04ae]{vertical-align:bottom;font-size:1.2rem}.dropdown[data-v-2f0ed5e0]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-2f0ed5e0]{vertical-align:middle}.dropdown .badge[data-v-2f0ed5e0]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}a[data-v-56c0e8be]{color:#666;text-decoration:underline}a.green[data-v-56c0e8be]{color:green;font-weight:700}a.download[data-v-56c0e8be]{margin-left:.6rem}a.download .el-icon[data-v-56c0e8be]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-56c0e8be]{animation:loading-56c0e8be 1s linear infinite}a.download+a.download[data-v-56c0e8be]{margin-left:.2rem}@keyframes loading-56c0e8be{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-9f58a72e]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-9f58a72e]{color:#d400ff}.self .el-icon[data-v-9f58a72e]{vertical-align:text-bottom}.ipaddress span[data-v-5db71b03]{vertical-align:middle}.el-input[data-v-5db71b03]{width:12rem;margin-right:.6rem}.el-col[data-v-7a697708]{text-align:left}div.point[data-v-41d1beca]{margin:-.2rem .3rem 0 -1.3rem;position:absolute}span.point[data-v-41d1beca]{width:.8rem;height:.8rem;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#eee;border:1px solid #ddd;cursor:pointer;transition:.3s}span.point[data-v-41d1beca]:hover{transform:scale(2)}span.point.p2p[data-v-41d1beca]{background-color:#01c901;border:1px solid #049538}span.point.relay[data-v-41d1beca]{background-color:#e3e811;border:1px solid #b3c410}span.point.node[data-v-41d1beca]{background-color:#09dda9;border:1px solid #0cac90}.el-icon.loading[data-v-36b3b9ac],a.loading[data-v-36b3b9ac]{vertical-align:middle;font-weight:700;animation:loading-36b3b9ac 1s linear infinite}.el-switch.is-disabled[data-v-36b3b9ac]{opacity:1}.el-input[data-v-36b3b9ac]{width:8rem}.delay[data-v-36b3b9ac]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-36b3b9ac]{font-size:1.5rem}.any[data-v-36b3b9ac]{position:absolute;left:-7px;top:-2px;line-height:normal}.any.green[data-v-36b3b9ac]{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}@keyframes loading-36b3b9ac{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.wrap[data-v-1541c712]{padding:0 1rem 1rem 0}.remark[data-v-1541c712]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wrap[data-v-1cfaa7f4]{padding:0 1rem 1rem 0}.el-switch.is-disabled[data-v-54c17b5d]{opacity:1}.upgrade-wrap[data-v-54c17b5d]{border:1px solid #ddd;margin-bottom:2rem}.el-switch.is-disabled[data-v-67ed3552]{opacity:1}.calc span[data-v-67ed3552]{display:inline-block}.calc span.label[data-v-67ed3552]{width:6rem}.el-icon.loading[data-v-3a4bfe6c],a.loading[data-v-3a4bfe6c]{vertical-align:middle;font-weight:700;animation:loading-3a4bfe6c 1s linear infinite}.el-switch.is-disabled[data-v-3a4bfe6c]{opacity:1}.el-input[data-v-3a4bfe6c]{width:8rem}.switch-btn[data-v-3a4bfe6c]{font-size:1.5rem}@keyframes loading-3a4bfe6c{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-switch.is-disabled[data-v-022e3781]{opacity:1}.upgrade-wrap[data-v-022e3781]{border:1px solid #ddd;margin-bottom:2rem;padding:1rem 0 1rem 0}.lan-item[data-v-022e3781]{margin-bottom:0}.el-switch.is-disabled[data-v-64b81c5b]{opacity:1}.green[data-v-64b81c5b]{font-weight:700}img.system[data-v-64b81c5b]{height:1.4rem;margin-right:.4rem;border:1px solid #eee}.el-switch.is-disabled[data-v-6941c158]{opacity:1}ul li[data-v-6941c158]{padding-left:2rem}a[data-v-2ee190a4]{text-decoration:underline}a+a[data-v-2ee190a4]{margin-left:1rem}a.green[data-v-2ee190a4]{font-weight:700}.head[data-v-190226d8]{padding-bottom:1rem}.green[data-v-190226d8]{color:green;font-weight:700}.error[data-v-190226d8]{font-weight:700}.error .el-icon[data-v-190226d8]{vertical-align:text-bottom}.head[data-v-359a437c]{padding-bottom:1rem}.error[data-v-359a437c]{font-weight:700}.error .el-icon[data-v-359a437c]{vertical-align:text-bottom}.plan .el-icon[data-v-359a437c]{vertical-align:middle;margin-right:.4rem}.head[data-v-8c388c86]{padding-bottom:1rem}.blue[data-v-8c388c86]{color:#409eff}.dropdown[data-v-8c388c86]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-8c388c86]{vertical-align:middle}.dropdown .badge[data-v-8c388c86]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}.table-sort.el-table th.el-table__cell.is-leaf{border-bottom:0}.table-sort.el-table .el-table__inner-wrapper:before{height:0}.home-list-wrap[data-v-4766ad40]{padding:1rem}.home-list-wrap .page[data-v-4766ad40]{padding-top:1rem}.home-list-wrap .page-wrap[data-v-4766ad40]{display:inline-block}
\ No newline at end of file
diff --git a/src/linker.app/public/web/css/app.73965826.css b/src/linker.app/public/web/css/app.73965826.css
new file mode 100644
index 00000000..356bb80d
--- /dev/null
+++ b/src/linker.app/public/web/css/app.73965826.css
@@ -0,0 +1 @@
+.status-api-wrap[data-v-08aa73f8]{padding-right:2rem}.status-api-wrap a[data-v-08aa73f8]{color:#333}.status-api-wrap span[data-v-08aa73f8]{border-radius:1rem;background-color:rgba(0,0,0,.1);padding:0 .6rem;margin-left:.2rem}.status-api-wrap.connected a[data-v-08aa73f8]{color:green;font-weight:700}.status-api-wrap.connected span[data-v-08aa73f8]{background-color:green;color:#fff}.status-api-wrap .el-icon[data-v-08aa73f8]{vertical-align:text-top}*{margin:0;padding:0;list-style:none}a{text-decoration:none;color:#666;background-image:linear-gradient(92deg,red,#ff9000,#ffdc00,#23bf08,#00ffb2,#0072ff,#fd00ff);background-size:0 2px;background-position:0 100%;background-repeat:no-repeat;transition:.3s}a:hover{background-size:100% 2px;background-position:100% 100%}:root{--foot-menu-dropdown-color:#f5f5f5}a.a-line{text-decoration:underline}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.flex{display:flex;display:-ms-flex;display:-o-flex;flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-column{flex-direction:column}.flex-row{flex-direction:row}.flex-1{flex:1 1 0%}.absolute{position:absolute;left:0;top:0;right:0;bottom:0}.relative{position:relative}.h-100{height:100%}.w-100{width:100%}.t-c{text-align:center}.t-r{text-align:right}.t-l{text-align:left!important}.pdl-6{padding-left:.6rem}.pdb-6{padding-bottom:.6rem}.pdl-10{padding-left:1rem}.pdl-20{padding-left:2rem}.pdt-10{padding-top:1rem}.pdr-10{padding-right:1rem}.mgr-1{margin-right:1rem!important}.mgl-1{margin-left:1rem}.mgl-2{margin-left:2rem}.mgl-3{margin-left:3rem}.mgb-0{margin-bottom:0!important}.mgb-3{margin-bottom:3rem}.mgt-1{margin-top:1rem}.mgt-3{margin-top:3rem}table{border-spacing:0;border-collapse:collapse}html{font-size:10px;background-color:#f4f4f4}body{overflow:hidden}span.split{width:.6rem}span.split-pad{padding:0 .3rem}span.split-pad10{padding:0 1rem}.middle{vertical-align:middle}.red{color:red!important}.green{color:green!important}.app-nat{color:#018a81!important}.yellow{color:#e68906!important}.disable{color:#ddd!important}.gateway{&.green{transition:.3s;&:hover{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}}}.scrollbar,.scrollbar-1,.scrollbar-10,.scrollbar-4{overflow:auto}.scrollbar-1::-webkit-scrollbar{width:0;height:1px}.scrollbar-1::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar::-webkit-scrollbar{width:1px;height:1px}.scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar-4::-webkit-scrollbar{width:4px;height:4px}.scrollbar-4::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar-10::-webkit-scrollbar{width:10px;height:1px}.scrollbar-10::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}:root{--el-color-primary:var(--el-color-success)!important;--el-color-primary-light-3:var(--el-color-success-light-3)!important;--el-color-primary-light-5:var(--el-color-success-light-5)!important;--el-color-primary-light-7:var(--el-color-success-light-7)!important;--el-color-primary-light-8:var(--el-color-success-light-8)!important;--el-color-primary-light-9:var(--el-color-success-light-9)!important;--el-color-primary-dark-2:var(--el-color-success-dark-2)!important}.el-table{--el-table-header-text-color:var(--el-text-color-regular)!important}.el-input-number--small{width:100%!important}.el-table .cell{overflow:visible!important}.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar{background:#f5f5f5}.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar-thumb{background:#ddd}.el-collapse-item__header{background-color:#fafafa!important;border-left:1px solid #ebeef5;border-right:1px solid #ebeef5;padding:0 2rem}.el-collapse-item__content{padding:1rem;border:1px solid #ebeef5;border-bottom:0}.el-input.w-search,.el-input.w-search .el-input__inner,.el-select.w-search{width:10rem}.el-form-item.w-search .el-form-item__label{font-size:1.2rem}.table-search .el-form--inline .el-form-item{margin-bottom:0}.el-dropdown,.el-dropdown-menu__item{font-size:1.3rem}.el-dropdown-menu__item a{color:#333}.el-input__inner:focus{border-color:var(--main-color)}.el-date-editor.el-input.w-auto,.el-date-editor.el-input__inner.w-auto{width:auto}.el-table .active-row{background:rgba(0,0,0,.15)}.el-table .table-green-row{background:rgba(0,255,0,.15)}.el-table .table-red-row{background:rgba(255,0,0,.15)}.el-table .table-green-row td,.el-table .table-red-row td{background:transparent!important}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:auto}.el-table .active-row td{background:transparent!important}.el-table--border th{background-color:#fafafa}.el-table thead.is-group th.el-table__cell{background:var(--el-table-header-bg-color)!important}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:var(--main-color)}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:var(--main-color)}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{width:inherit}.el-dialog{max-width:96%}.el-dialog__body .el-form-item:last-child{margin-bottom:0}.el-input-group__append,.el-input-group__prepend{padding:0 6px!important}.el-checkbox__label .el-icon{vertical-align:middle;margin-top:-2px}.el-color-picker{vertical-align:middle}.el-color-picker__trigger{border:0!important}.el-color-picker__color{border:0!important;border-radius:2px}.el-color-picker__color-inner{border-radius:2px}.el-message{min-width:10rem!important}.card-header{font-size:1.4rem}.forward-wrap .el-table--small.el-table .el-table__expanded-cell[class*=cell]{padding:20px 50px 20px 50px}h3.title{font-size:1.6rem;padding-bottom:.6rem;color:#555}.el-message-box{max-width:90%!important;width:-moz-fit-content!important;width:fit-content!important}.el-select-dropdown__item{padding-right:2rem!important}.el-form-item--default{--font-size:13px!important}.el-input__inner{font-size:13px}.el-dialog--center .el-dialog__body{padding-top:1rem!important;padding-bottom:1rem!important}@media screen and (max-width:1000px){body .phone-hide{display:none}}
\ No newline at end of file
diff --git a/src/linker.app/public/web/index.html b/src/linker.app/public/web/index.html
index 30f19ebb..2c80eeee 100644
--- a/src/linker.app/public/web/index.html
+++ b/src/linker.app/public/web/index.html
@@ -1 +1 @@
-
linker.web
\ No newline at end of file
+linker.web
\ No newline at end of file
diff --git a/src/linker.app/public/web/js/538.7180135c.js b/src/linker.app/public/web/js/538.7180135c.js
new file mode 100644
index 00000000..9b31c516
--- /dev/null
+++ b/src/linker.app/public/web/js/538.7180135c.js
@@ -0,0 +1 @@
+"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[538],{7716:function(e,t,n){n.d(t,{H1:function(){return a},Oy:function(){return o},V1:function(){return u},dS:function(){return d},lE:function(){return h},nH:function(){return l},o2:function(){return s},we:function(){return r},xD:function(){return c}});var i=n(4);const a=(e="0")=>(0,i.zG)("forward/connections",e),s=e=>(0,i.zG)("forward/removeconnection",e),u=(e="0")=>(0,i.zG)("forward/getcount",e),o=(e="0")=>(0,i.zG)("forward/get",e),c=()=>(0,i.zG)("forward/bindips"),r=e=>(0,i.zG)("forward/remove",e),l=e=>(0,i.zG)("forward/add",e),d=()=>(0,i.zG)("forward/refresh"),h=e=>(0,i.zG)("forward/Test",e)},2173:function(e,t,n){n.d(t,{$y:function(){return u},L1:function(){return s},QP:function(){return l},R2:function(){return c},_Q:function(){return r},im:function(){return a},qH:function(){return o}});var i=n(4);const a=(e="0")=>(0,i.zG)("socks5/connections",e),s=e=>(0,i.zG)("socks5/removeconnection",e),u=(e="0")=>(0,i.zG)("socks5/get",e),o=e=>(0,i.zG)("socks5/run",e),c=e=>(0,i.zG)("socks5/stop",e),r=e=>(0,i.zG)("socks5/update",e),l=()=>(0,i.zG)("socks5/refresh")},5241:function(e,t,n){n.d(t,{AE:function(){return f},Jd:function(){return d},Nj:function(){return v},PR:function(){return c},Yh:function(){return l},_:function(){return h},ac:function(){return r},en:function(){return o},kl:function(){return a},vB:function(){return s},w0:function(){return m},zi:function(){return u}});var i=n(4);const a=(e="0")=>(0,i.zG)("tuntap/connections",e),s=e=>(0,i.zG)("tuntap/removeconnection",e),u=(e="0")=>(0,i.zG)("tuntap/get",e),o=e=>(0,i.zG)("tuntap/run",e),c=e=>(0,i.zG)("tuntap/stop",e),r=e=>(0,i.zG)("tuntap/update",e),l=()=>(0,i.zG)("tuntap/refresh"),d=()=>(0,i.zG)("tuntap/SubscribePing"),h=e=>(0,i.zG)("tuntap/SubscribeForwardTest",e),m=e=>(0,i.zG)("tuntap/CalcNetwork",e),v=()=>(0,i.zG)("tuntap/GetNetwork"),f=e=>(0,i.zG)("tuntap/AddNetwork",e)},9983:function(e,t,n){n.d(t,{FG:function(){return f},L2:function(){return h},ZY:function(){return m},bB:function(){return p},mx:function(){return v}});var i=n(7716),a=n(5241),s=n(2173),u=n(144),o=n(6768);const c=Symbol(),r=Symbol(),l=Symbol(),d=Symbol(),h=()=>{const e=(0,u.KR)({showEdit:!1,speedCache:{},current:"",currentName:"",hashcode:0,hashcode1:0,_updateRealTime:!1,updateRealTime:t=>{e.value.hashcode=0,e.value.hashcode1=0,e.value._updateRealTime=t}});(0,o.Gt)(c,e);const t=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(r,t);const n=()=>{clearTimeout(t.value.timer),(0,i.H1)(e.value.hashcode.toString()).then((a=>{0==e.value._updateRealTime&&(e.value.hashcode=a.HashCode),a.List&&(p(a.List,i.o2),t.value.list=a.List),t.value.timer=setTimeout(n,1e3)})).catch((e=>{t.value.timer=setTimeout(n,1e3)}))},h=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(l,h);const m=()=>{clearTimeout(h.value.timer),(0,a.kl)(e.value.hashcode1.toString()).then((t=>{0==e.value._updateRealTime&&(e.value.hashcode1=t.HashCode),t.List&&(p(t.List,a.vB),h.value.list=t.List),h.value.timer=setTimeout(m,1e3)})).catch((e=>{h.value.timer=setTimeout(m,1e3)}))},v=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(d,v);const f=()=>{clearTimeout(v.value.timer),(0,s.im)(e.value.hashcode1.toString()).then((t=>{0==e.value._updateRealTime&&(e.value.hashcode1=t.HashCode),t.List&&(p(t.List,s.L1),v.value.list=t.List),v.value.timer=setTimeout(f,1e3)})).catch((e=>{v.value.timer=setTimeout(f,1e3)}))},p=(t,n)=>{const i=e.value.speedCache;for(let e in t){const a=t[e];a.removeFunc=n;const s=`${a.RemoteMachineId}-${a.TransactionId}`,u=i[s]||{SendBytes:0,ReceiveBytes:0};a.SendBytesText=g(a.SendBytes-u.SendBytes),a.ReceiveBytesText=g(a.ReceiveBytes-u.ReceiveBytes),u.SendBytes=a.SendBytes,u.ReceiveBytes=a.ReceiveBytes,i[s]=u}},g=e=>{let t=0;while(e>=1024)e/=1024,t++;return`${e.toFixed(2)}${["B/s","KB/s","MB/s","GB/s","TB/s"][t]}`},I=t=>{e.value.current=t.MachineId,e.value.currentName=t.MachineName,e.value.showEdit=!0},y=()=>{clearTimeout(t.value.timer),clearTimeout(h.value.timer),clearTimeout(v.value.timer)};return{connections:e,forwardConnections:t,_getForwardConnections:n,tuntapConnections:h,_getTuntapConnections:m,socks5Connections:v,_getSocks5Connections:f,handleTunnelConnections:I,clearConnectionsTimeout:y}},m=()=>(0,o.WQ)(c),v=()=>(0,o.WQ)(r),f=()=>(0,o.WQ)(l),p=()=>(0,o.WQ)(d)},7985:function(e,t,n){n.d(t,{r:function(){return r}});n(4114);var i=n(9299),a=n(3830),s=n(6768),u=n(144);const o=[],c=Symbol(),r=()=>{const e=(0,a.B)(),t=(0,s.EW)((()=>e.value.config.Client.Id)),n=(0,u.Kh)({timer:0,page:{Request:{Page:1,Size:+(localStorage.getItem("ps")||"10"),Name:"",Ids:[],Prop:"",Asc:!0},Count:0,List:[]},showDeviceEdit:!1,showAccessEdit:!1,deviceInfo:null});(0,s.Gt)(c,n);const r=()=>{(0,i.nD)(n.page.Request).then((i=>{n.page.Request=i.Request,n.page.Count=i.Count;for(let n in i.List)Object.assign(i.List[n],{showDel:t.value!=i.List[n].MachineId&&0==i.List[n].Connected,showAccess:t.value!=i.List[n].MachineId&&i.List[n].Connected,showReboot:i.List[n].Connected,isSelf:t.value==i.List[n].MachineId,showip:!1}),i.List[n].isSelf&&(e.value.self=i.List[n]);n.page.List=i.List;for(let e=0;e{}))},l=()=>{clearTimeout(n.timer),(0,i.nD)(n.page.Request).then((i=>{for(let a in i.List){const s=n.page.List.filter((e=>e.MachineId==i.List[a].MachineId))[0];s&&(Object.assign(s,{Connected:i.List[a].Connected,Version:i.List[a].Version,LastSignIn:i.List[a].LastSignIn,Args:i.List[a].Args,showDel:t.value!=i.List[a].MachineId&&0==i.List[a].Connected,showAccess:t.value!=i.List[a].MachineId&&i.List[a].Connected,showReboot:i.List[a].Connected,isSelf:t.value==i.List[a].MachineId}),s.isSelf&&(e.value.self=s))}n.timer=setTimeout(l,5e3)})).catch((e=>{n.timer=setTimeout(l,5e3)}))},d=e=>{n.deviceInfo=e,n.showDeviceEdit=!0},h=e=>{n.deviceInfo=e,n.showAccessEdit=!0},m=e=>{e&&(n.page.Request.Page=e),r()},v=e=>{e&&(n.page.Request.Size=e,localStorage.setItem("ps",e)),r()},f=e=>{(0,i.Se)(e).then((()=>{r()}))},p=()=>{clearTimeout(n.timer),n.timer=0},g=e=>(0,i.VN)(e);return{devices:n,machineId:t,_getSignList:r,_getSignList1:l,handleDeviceEdit:d,handleAccessEdit:h,handlePageChange:m,handlePageSizeChange:v,handleDel:f,clearDevicesTimeout:p,setSort:g}}},8104:function(e,t,n){n.d(t,{O:function(){return o},W:function(){return c}});var i=n(144),a=n(6768),s=n(5241);const u=Symbol(),o=()=>{const e=(0,i.KR)({show:!0,timer:0,showEdit:!1,current:null,list:{},hashcode:0,showLease:!1});(0,a.Gt)(u,e);const t={linux:["debian","ubuntu","alpine","rocky","centos","fedora","archlinux"],armbian:["armbian"],openwrt:["openwrt"],ubuntu:["ubuntu"],windows:["windows"],android:["android"],ios:["ios"]},n=()=>{clearTimeout(e.value.timer),(0,s.zi)(e.value.hashcode.toString()).then((i=>{if(e.value.hashcode=i.HashCode,i.List){for(let e in i.List){let n="system";const a=i.List[e].SystemInfo.toLowerCase();for(let e in t)if(a.indexOf(e)>=0){const i=t[e];if(1==i.length)n=i[0];else for(let e=0;e=0){n=i[e];break}break}Object.assign(i.List[e],{running:2==i.List[e].Status,loading:1==i.List[e].Status,system:n,systemDocker:a.indexOf("docker")>=0})}e.value.list=i.List}e.value.timer=setTimeout(n,1100),(0,s.Jd)()})).catch((t=>{e.value.timer=setTimeout(n,1100)}))},o=t=>{e.value.current=t,e.value.showEdit=!0},c=()=>{(0,s.Yh)()},r=()=>{clearTimeout(e.value.timer),e.value.timer=0},l=t=>Object.values(e.value.list).filter((e=>e.IP.indexOf(t)>=0||e.Lans.filter((e=>e.IP.indexOf(t)>=0)).length>0)).map((e=>e.MachineId)),d=t=>{const n=Object.values(e.value.list).filter((e=>e.IP)).sort(((e,t)=>{const n=e.IP.split(".").map((e=>Number(e))),i=t.IP.split(".").map((e=>Number(e)));for(let a=0;ae.MachineId))};return{tuntap:e,_getTuntapInfo:n,handleTuntapEdit:o,handleTuntapRefresh:c,clearTuntapTimeout:r,getTuntapMachines:l,sortTuntapIP:d}},c=()=>(0,a.WQ)(u)},2109:function(e,t,n){n.d(t,{A:function(){return v}});var i=n(6768);const a={key:0,class:"point p2p",title:"打洞直连"},s={key:1,class:"point relay",title:"中继连接"},u={key:2,class:"point node",title:"节点连接"},o={key:1,class:"point",title:"未连接"};function c(e,t,n,c,r,l){return(0,i.uX)(),(0,i.CE)("div",{class:"point",onClick:t[0]||(t[0]=(...e)=>c.handleShow&&c.handleShow(...e))},[c.state.connection&&c.state.connection.Connected?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[0==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",a)):1==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",s)):2==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",u)):(0,i.Q3)("",!0)],64)):((0,i.uX)(),(0,i.CE)("span",o))])}var r=n(144),l=n(9983),d={props:["data","row"],setup(e){const t=(0,l.ZY)(),n=(0,r.Kh)({connection:e.data});(0,i.wB)((()=>e.data),(()=>{n.connection=e.data}));const a=()=>{t.value.current=e.row.MachineId,t.value.currentName=e.row.MachineName,t.value.showEdit=!0};return{state:n,handleShow:a}}},h=n(1241);const m=(0,h.A)(d,[["render",c],["__scopeId","data-v-41d1beca"]]);var v=m},6588:function(e,t,n){n.d(t,{A:function(){return p}});var i=n(6768),a=n(4232);const s=["title"],u=["src"],o={key:0,class:"system",src:"./docker.svg"},c={key:1,class:"self gateway"};function r(e,t,n,r,l,d){const h=(0,i.g2)("StarFilled"),m=(0,i.g2)("el-icon");return(0,i.uX)(),(0,i.CE)("div",null,[r.tuntap.list[r.item.MachineId]&&r.tuntap.list[r.item.MachineId].system?((0,i.uX)(),(0,i.CE)("span",{key:0,title:r.tuntap.list[r.item.MachineId].SystemInfo},[(0,i.Lk)("img",{class:"system",src:`./${r.tuntap.list[r.item.MachineId].system}.svg`},null,8,u),r.tuntap.list[r.item.MachineId].systemDocker?((0,i.uX)(),(0,i.CE)("img",o)):(0,i.Q3)("",!0)],8,s)):(0,i.Q3)("",!0),(0,i.Lk)("a",{href:"javascript:;",onClick:t[0]||(t[0]=(...e)=>r.handleEdit&&r.handleEdit(...e)),title:"此客户端的设备名",class:"a-line"},[(0,i.Lk)("strong",{class:(0,a.C4)(["gateway",{green:r.item.Connected}])},(0,a.v_)(r.item.MachineName||"null"),3)]),r.item.isSelf?((0,i.uX)(),(0,i.CE)("strong",c,[(0,i.eW)("("),(0,i.bF)(m,{size:"16"},{default:(0,i.k6)((()=>[(0,i.bF)(h)])),_:1}),(0,i.eW)(") ")])):(0,i.Q3)("",!0)])}var l=n(3830),d=n(8104),h=n(7477),m={props:["item","config"],emits:["edit","refresh"],components:{StarFilled:h.BQ2},setup(e,{emit:t}){const n=(0,d.W)(),a=(0,l.B)(),s=(0,i.EW)((()=>a.value.hasAccess("RenameSelf"))),u=(0,i.EW)((()=>a.value.hasAccess("RenameOther"))),o=(0,i.EW)((()=>a.value.config.Client.Id)),c=()=>{if(e.config){if(o.value===e.item.MachineId){if(!s.value)return}else if(!u.value)return;t("edit",e.item)}};return{item:(0,i.EW)((()=>e.item)),tuntap:n,handleEdit:c}}},v=n(1241);const f=(0,v.A)(m,[["render",r],["__scopeId","data-v-9f58a72e"]]);var p=f},7163:function(e,t,n){n.d(t,{A:function(){return _}});var i=n(6768),a=n(4232);const s={class:"flex"},u={class:"flex-1"},o=["title"],c=["title"],r={key:2,class:"app-nat",title:"虚拟网卡IP,系统NAT失败,已启用内置应用层SNAT"},l={key:0,class:"green gateway"},d={key:1},h={key:0},m={key:0,class:"flex disable",title:"已禁用"},v={key:1,class:"flex yellow",title:"与其它设备填写IP、或本机局域网IP有冲突"},f={key:2,class:"flex green",title:"正常使用"},p={key:0,class:"any green"},g={key:0,class:"delay green"},I={class:"delay yellow"};function y(e,t,n,y,C,L){const k=(0,i.g2)("ConnectionShow"),w=(0,i.g2)("Loading"),E=(0,i.g2)("el-icon"),S=(0,i.g2)("el-switch"),T=(0,i.g2)("Share");return(0,i.uX)(),(0,i.CE)("div",null,[(0,i.Lk)("div",s,[(0,i.Lk)("div",u,[(0,i.bF)(k,{data:y.connections.list[y.item.MachineId],row:y.item},null,8,["data","row"]),(0,i.Lk)("a",{href:"javascript:;",class:"a-line",onClick:t[0]||(t[0]=e=>y.handleTuntapIP(y.tuntap.list[y.item.MachineId])),title:"虚拟网卡IP"},[y.tuntap.list[y.item.MachineId].SetupError?((0,i.uX)(),(0,i.CE)("strong",{key:0,class:"red",title:y.tuntap.list[y.item.MachineId].SetupError},(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),9,o)):y.tuntap.list[y.item.MachineId].Upgrade&&y.tuntap.list[y.item.MachineId].NatError?((0,i.uX)(),(0,i.CE)("strong",{key:1,class:"yellow",title:y.tuntap.list[y.item.MachineId].NatError},(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),9,c)):y.tuntap.list[y.item.MachineId].AppNat?((0,i.uX)(),(0,i.CE)("strong",r,(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),1)):((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[y.item.Connected&&y.tuntap.list[y.item.MachineId].running?((0,i.uX)(),(0,i.CE)("strong",l,(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),1)):((0,i.uX)(),(0,i.CE)("strong",d,(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),1))],64))])]),y.tuntap.list[y.item.MachineId].loading?((0,i.uX)(),(0,i.CE)("div",h,[(0,i.bF)(E,{size:"14",class:"loading"},{default:(0,i.k6)((()=>[(0,i.bF)(w)])),_:1})])):((0,i.uX)(),(0,i.Wv)(S,{key:1,"model-value":y.item.Connected&&y.tuntap.list[y.item.MachineId].running,loading:y.tuntap.list[y.item.MachineId].loading,disabled:"",onClick:t[1]||(t[1]=e=>y.handleTuntap(y.tuntap.list[y.item.MachineId])),size:"small","inline-prompt":"","active-text":"😀","inactive-text":"😣"},null,8,["model-value","loading"]))]),(0,i.Lk)("div",null,[(0,i.Lk)("div",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(y.tuntap.list[y.item.MachineId].Lans,((e,t)=>((0,i.uX)(),(0,i.CE)(i.FK,{key:t},[e.Disabled?((0,i.uX)(),(0,i.CE)("div",m,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1)):e.Exists?((0,i.uX)(),(0,i.CE)("div",v,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1)):((0,i.uX)(),(0,i.CE)("div",f,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1))],64)))),128))]),y.tuntap.list[y.item.MachineId].Any?((0,i.uX)(),(0,i.CE)("div",p,[(0,i.bF)(E,null,{default:(0,i.k6)((()=>[(0,i.bF)(T)])),_:1})])):(0,i.Q3)("",!0),y.showDelay?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[y.tuntap.list[y.item.MachineId].Delay>=0&&y.tuntap.list[y.item.MachineId].Delay<=100?((0,i.uX)(),(0,i.CE)("div",g,(0,a.v_)(y.tuntap.list[y.item.MachineId].Delay)+"ms",1)):(0,i.Q3)("",!0),(0,i.Lk)("template",null,[(0,i.Lk)("div",I,(0,a.v_)(y.tuntap.list[y.item.MachineId].Delay)+"ms",1)])],64)):(0,i.Q3)("",!0)])])}var C=n(5241),L=n(1219),k=n(8104),w=n(7477),E=n(3830),S=n(9983),T=n(2109),M={props:["item","config"],emits:["edit","refresh"],components:{Loading:w.Rhj,Share:w.SYj,ConnectionShow:T.A},setup(e,{emit:t}){const n=(0,k.W)(),a=(0,E.B)(),s=(0,i.EW)((()=>a.value.config.Client.Id)),u=(0,i.EW)((()=>a.value.hasAccess("TuntapChangeSelf"))),o=(0,i.EW)((()=>a.value.hasAccess("TuntapChangeOther"))),c=(0,i.EW)((()=>a.value.hasAccess("TuntapStatusSelf"))),r=(0,i.EW)((()=>a.value.hasAccess("TuntapStatusOther"))),l=(0,S.FG)(),d=(0,i.EW)((()=>2==(2&(a.value.config.Running.Tuntap||{Switch:0}).Switch))),h=t=>{if(!e.config)return;if(s.value===t.MachineId){if(!c.value)return}else if(!r.value)return;const n=e.item.Connected&&t.running?(0,C.PR)(t.MachineId):(0,C.en)(t.MachineId);t.loading=!0,n.then((()=>{L.nk.success("操作成功!")})).catch((e=>{console.log(e),L.nk.error("操作失败!")}))},m=n=>{if(e.config||s.value==n.MachineId){if(s.value===n.MachineId){if(!u.value)return}else if(!o.value)return;n.device=e.item,t("edit",n)}},v=()=>{t("refresh")};return{item:(0,i.EW)((()=>e.item)),tuntap:n,showDelay:d,connections:l,handleTuntap:h,handleTuntapIP:m,handleTuntapRefresh:v}}},b=n(1241);const G=(0,b.A)(M,[["render",y],["__scopeId","data-v-36b3b9ac"]]);var _=G}}]);
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/163.f3306092.js b/src/linker.app/public/web/js/743.767cfe7e.js
similarity index 97%
rename from src/linker.tray.win/web/js/163.f3306092.js
rename to src/linker.app/public/web/js/743.767cfe7e.js
index b1bacd65..f4987479 100644
--- a/src/linker.tray.win/web/js/163.f3306092.js
+++ b/src/linker.app/public/web/js/743.767cfe7e.js
@@ -1 +1 @@
-"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[163],{427:function(e,n,a){a.r(n),a.d(n,{default:function(){return O}});var t=a(6768);const s={class:"net-wrap app-wrap"},l={class:"inner absolute flex flex-column flex-nowrap"},i={class:"head"},o={class:"body flex-1 relative"},c={class:"status"};function r(e,n,a,r,u,d){const g=(0,t.g2)("Head"),p=(0,t.g2)("List"),v=(0,t.g2)("Status");return(0,t.uX)(),(0,t.CE)("div",s,[(0,t.Lk)("div",l,[(0,t.Lk)("div",i,[(0,t.bF)(g)]),(0,t.Lk)("div",o,[(0,t.bF)(p)]),(0,t.Lk)("div",c,[(0,t.bF)(v,{config:!1})])])])}a(4114);const u=e=>((0,t.Qi)("data-v-1fd9ef80"),e=e(),(0,t.jt)(),e),d={class:"head-wrap"},g={class:"tools flex"},p=u((()=>(0,t.Lk)("span",{class:"label"},"服务器 ",-1))),v=u((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1))),h={style:{"margin-left":"1rem"}};function f(e,n,a,s,l,i){const o=(0,t.g2)("el-input"),c=(0,t.g2)("Refresh"),r=(0,t.g2)("el-icon"),u=(0,t.g2)("el-button"),f=(0,t.g2)("Background");return(0,t.uX)(),(0,t.CE)("div",d,[(0,t.Lk)("div",g,[p,(0,t.bF)(o,{modelValue:s.state.server,"onUpdate:modelValue":n[0]||(n[0]=e=>s.state.server=e),readonly:"",style:{width:"14rem"},size:"small"},null,8,["modelValue"]),v,(0,t.bF)(u,{size:"small",onClick:s.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)(" 刷新(F5)"),(0,t.bF)(r,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1})])),_:1},8,["onClick"]),(0,t.Lk)("div",h,[(0,t.bF)(f,{name:"net"})])])])}var k=a(3830),m=a(144),C=a(7477),b=a(5096),L={components:{Edit:C.ffu,Refresh:C.C42,Background:b.A},setup(){const e=(0,k.B)(),n=(0,m.Kh)({server:(0,t.EW)((()=>e.value.config.Client.Server.Host))}),a=()=>{window.location.reload()};return{state:n,handleRefresh:a}}},_=a(1241);const w=(0,_.A)(L,[["render",f],["__scopeId","data-v-1fd9ef80"]]);var F=w;const S=e=>((0,t.Qi)("data-v-68d1c30a"),e=e(),(0,t.jt)(),e),x={class:"net-list-wrap flex flex-column absolute"},T={class:"flex-1 scrollbar"},z={class:"flex"},E=S((()=>(0,t.Lk)("div",{class:"flex-1"},null,-1))),A={class:"tuntap"},I={class:"page t-c"},P={class:"page-wrap t-c"};function B(e,n,a,s,l,i){const o=(0,t.g2)("DeviceName"),c=(0,t.g2)("UpdaterBtn"),r=(0,t.g2)("TuntapShow"),u=(0,t.g2)("el-pagination");return(0,t.uX)(),(0,t.CE)("div",x,[(0,t.Lk)("div",T,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(s.devices.page.List,((e,n)=>((0,t.uX)(),(0,t.CE)("li",{key:n},[(0,t.Lk)("dl",null,[(0,t.Lk)("dt",z,[(0,t.Lk)("div",null,[(0,t.bF)(o,{item:e},null,8,["item"])]),E,(0,t.Lk)("div",null,[(0,t.bF)(c,{config:!1,item:e},null,8,["item"])])]),(0,t.Lk)("dd",A,[s.tuntap.list[e.MachineId]?((0,t.uX)(),(0,t.Wv)(r,{key:0,item:e},null,8,["item"])):(0,t.Q3)("",!0)])])])))),128))])]),(0,t.Lk)("div",I,[(0,t.Lk)("div",P,[(0,t.bF)(u,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var y=a(8104),R=a(7985),D=a(9383),U=a(7115),X=a(6588),V=a(9273),N=a(9983),Q={components:{StarFilled:C.BQ2,UpdaterBtn:U.A,DeviceName:X.A,TuntapShow:V.A},setup(e){(0,k.B)();const n=(0,m.Kh)({}),{devices:a,machineId:s,_getSignList:l,_getSignList1:i,handleDeviceEdit:o,handlePageChange:c,handlePageSizeChange:r,handleDel:u,clearDevicesTimeout:d}=(0,R.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:C}=(0,y.O)(),{_getUpdater:b,_subscribeUpdater:L,clearUpdaterTimeout:_}=(0,D.d)(),{connections:w,forwardConnections:F,_getForwardConnections:S,tuntapConnections:x,_getTuntapConnections:T,socks5Connections:z,_getSocks5Connections:E,handleTunnelConnections:A,clearConnectionsTimeout:I}=(0,N.L2)();return(0,t.sV)((()=>{c(),v(),l(),i(),p(),b(),L()})),(0,t.hi)((()=>{d(),h(),_()})),{state:n,devices:a,machineId:s,handlePageChange:c,handlePageSizeChange:r,tuntap:g}}};const H=(0,_.A)(Q,[["render",B],["__scopeId","data-v-68d1c30a"]]);var K=H,W=a(6743),j=a(1387),q={components:{Head:F,List:K,Status:W.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,k.B)(),n=(0,j.rd)();return(0,t.sV)((()=>{0==e.value.hasAccess("NetManager")&&n.push({name:"NoPermission"})})),{}}};const M=(0,_.A)(q,[["render",r],["__scopeId","data-v-6a3f3b43"]]);var O=M}}]);
\ No newline at end of file
+"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[743],{427:function(e,n,a){a.r(n),a.d(n,{default:function(){return O}});var t=a(6768);const s={class:"net-wrap app-wrap"},l={class:"inner absolute flex flex-column flex-nowrap"},i={class:"head"},o={class:"body flex-1 relative"},c={class:"status"};function r(e,n,a,r,u,d){const g=(0,t.g2)("Head"),p=(0,t.g2)("List"),v=(0,t.g2)("Status");return(0,t.uX)(),(0,t.CE)("div",s,[(0,t.Lk)("div",l,[(0,t.Lk)("div",i,[(0,t.bF)(g)]),(0,t.Lk)("div",o,[(0,t.bF)(p)]),(0,t.Lk)("div",c,[(0,t.bF)(v,{config:!1})])])])}a(4114);const u=e=>((0,t.Qi)("data-v-1fd9ef80"),e=e(),(0,t.jt)(),e),d={class:"head-wrap"},g={class:"tools flex"},p=u((()=>(0,t.Lk)("span",{class:"label"},"服务器 ",-1))),v=u((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1))),h={style:{"margin-left":"1rem"}};function f(e,n,a,s,l,i){const o=(0,t.g2)("el-input"),c=(0,t.g2)("Refresh"),r=(0,t.g2)("el-icon"),u=(0,t.g2)("el-button"),f=(0,t.g2)("Background");return(0,t.uX)(),(0,t.CE)("div",d,[(0,t.Lk)("div",g,[p,(0,t.bF)(o,{modelValue:s.state.server,"onUpdate:modelValue":n[0]||(n[0]=e=>s.state.server=e),readonly:"",style:{width:"14rem"},size:"small"},null,8,["modelValue"]),v,(0,t.bF)(u,{size:"small",onClick:s.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)(" 刷新(F5)"),(0,t.bF)(r,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1})])),_:1},8,["onClick"]),(0,t.Lk)("div",h,[(0,t.bF)(f,{name:"net"})])])])}var k=a(3830),m=a(144),C=a(7477),b=a(5096),L={components:{Edit:C.ffu,Refresh:C.C42,Background:b.A},setup(){const e=(0,k.B)(),n=(0,m.Kh)({server:(0,t.EW)((()=>e.value.config.Client.Server.Host))}),a=()=>{window.location.reload()};return{state:n,handleRefresh:a}}},_=a(1241);const w=(0,_.A)(L,[["render",f],["__scopeId","data-v-1fd9ef80"]]);var F=w;const S=e=>((0,t.Qi)("data-v-68d1c30a"),e=e(),(0,t.jt)(),e),x={class:"net-list-wrap flex flex-column absolute"},T={class:"flex-1 scrollbar"},z={class:"flex"},E=S((()=>(0,t.Lk)("div",{class:"flex-1"},null,-1))),A={class:"tuntap"},I={class:"page t-c"},P={class:"page-wrap t-c"};function B(e,n,a,s,l,i){const o=(0,t.g2)("DeviceName"),c=(0,t.g2)("UpdaterBtn"),r=(0,t.g2)("TuntapShow"),u=(0,t.g2)("el-pagination");return(0,t.uX)(),(0,t.CE)("div",x,[(0,t.Lk)("div",T,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(s.devices.page.List,((e,n)=>((0,t.uX)(),(0,t.CE)("li",{key:n},[(0,t.Lk)("dl",null,[(0,t.Lk)("dt",z,[(0,t.Lk)("div",null,[(0,t.bF)(o,{item:e},null,8,["item"])]),E,(0,t.Lk)("div",null,[(0,t.bF)(c,{config:!1,item:e},null,8,["item"])])]),(0,t.Lk)("dd",A,[s.tuntap.list[e.MachineId]?((0,t.uX)(),(0,t.Wv)(r,{key:0,item:e},null,8,["item"])):(0,t.Q3)("",!0)])])])))),128))])]),(0,t.Lk)("div",I,[(0,t.Lk)("div",P,[(0,t.bF)(u,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var y=a(8104),R=a(7985),D=a(9383),U=a(7115),X=a(6588),V=a(7163),N=a(9983),Q={components:{StarFilled:C.BQ2,UpdaterBtn:U.A,DeviceName:X.A,TuntapShow:V.A},setup(e){(0,k.B)();const n=(0,m.Kh)({}),{devices:a,machineId:s,_getSignList:l,_getSignList1:i,handleDeviceEdit:o,handlePageChange:c,handlePageSizeChange:r,handleDel:u,clearDevicesTimeout:d}=(0,R.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:C}=(0,y.O)(),{_getUpdater:b,_subscribeUpdater:L,clearUpdaterTimeout:_}=(0,D.d)(),{connections:w,forwardConnections:F,_getForwardConnections:S,tuntapConnections:x,_getTuntapConnections:T,socks5Connections:z,_getSocks5Connections:E,handleTunnelConnections:A,clearConnectionsTimeout:I}=(0,N.L2)();return(0,t.sV)((()=>{c(),v(),l(),i(),p(),b(),L()})),(0,t.hi)((()=>{d(),h(),_()})),{state:n,devices:a,machineId:s,handlePageChange:c,handlePageSizeChange:r,tuntap:g}}};const H=(0,_.A)(Q,[["render",B],["__scopeId","data-v-68d1c30a"]]);var K=H,W=a(6743),j=a(1387),q={components:{Head:F,List:K,Status:W.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,k.B)(),n=(0,j.rd)();return(0,t.sV)((()=>{0==e.value.hasAccess("NetManager")&&n.push({name:"NoPermission"})})),{}}};const M=(0,_.A)(q,[["render",r],["__scopeId","data-v-6a3f3b43"]]);var O=M}}]);
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/144.e46fa2ab.js b/src/linker.app/public/web/js/968.855ee1b4.js
similarity index 99%
rename from src/linker.tray.win/web/js/144.e46fa2ab.js
rename to src/linker.app/public/web/js/968.855ee1b4.js
index 5bbcc349..8cfd2538 100644
--- a/src/linker.tray.win/web/js/144.e46fa2ab.js
+++ b/src/linker.app/public/web/js/968.855ee1b4.js
@@ -1 +1 @@
-"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[144],{9232:function(e,l,a){a.d(l,{$1:function(){return i},W4:function(){return o},X2:function(){return u},XU:function(){return d},_5:function(){return c},mI:function(){return h},pM:function(){return m},q:function(){return n},uD:function(){return s},uQ:function(){return r},xp:function(){return p}});var t=a(4);const n=e=>(0,t.zG)("relay/SetServers",e),o=()=>(0,t.zG)("relay/Subscribe"),r=e=>(0,t.zG)("relay/Connect",e),s=()=>(0,t.zG)("relay/AccessCdkey"),d=e=>(0,t.zG)("relay/PageCdkey",e),u=e=>(0,t.zG)("relay/AddCdkey",e),i=e=>(0,t.zG)("relay/DelCdkey",e),c=e=>(0,t.zG)("relay/MyCdkey",e),h=e=>(0,t.zG)("relay/TestCdkey",e),m=e=>(0,t.zG)("relay/ImportCdkey",e),p=e=>(0,t.zG)("relay/UpdateNode",e)},743:function(e,l,a){a.d(l,{Ap:function(){return n},Co:function(){return o},DY:function(){return u},JT:function(){return m},Qs:function(){return i},a9:function(){return s},eX:function(){return c},gz:function(){return d},nP:function(){return h},pY:function(){return r}});var t=a(4);const n=()=>(0,t.zG)("sforward/GetSecretKey"),o=e=>(0,t.zG)("sforward/SetSecretKey",e),r=e=>(0,t.zG)("sforward/get",e),s=()=>(0,t.zG)("sforward/refresh"),d=(e="0")=>(0,t.zG)("sforward/getcount",e),u=e=>(0,t.zG)("sforward/remove",e),i=e=>(0,t.zG)("sforward/add",e),c=e=>(0,t.zG)("sforward/TestLocal",e),h=e=>(0,t.zG)("sforward/start",e),m=e=>(0,t.zG)("sforward/stop",e)},6874:function(e,l,a){a.r(l),a.d(l,{default:function(){return Ln}});var t=a(6768);const n={class:"home-list-wrap absolute"},o={class:"page t-c"},r={class:"page-wrap"};function s(e,l,a,s,d,u){const i=(0,t.g2)("Sort"),c=(0,t.g2)("Device"),h=(0,t.g2)("Tunnel"),m=(0,t.g2)("Tuntap"),p=(0,t.g2)("Socks5"),g=(0,t.g2)("Forward"),w=(0,t.g2)("Oper"),k=(0,t.g2)("el-table"),v=(0,t.g2)("el-pagination"),f=(0,t.g2)("DeviceEdit"),b=(0,t.g2)("AccessEdit"),C=(0,t.g2)("TunnelEdit"),F=(0,t.g2)("ConnectionsEdit"),y=(0,t.g2)("TuntapEdit"),V=(0,t.g2)("Socks5Edit"),_=(0,t.g2)("TuntapLease"),E=(0,t.g2)("ForwardEdit"),L=(0,t.g2)("SForwardEdit"),P=(0,t.g2)("UpdaterConfirm"),I=(0,t.g2)("Stopwatch");return(0,t.uX)(),(0,t.CE)("div",n,[(0,t.bF)(i,{onSort:s.handleSortChange},null,8,["onSort"]),(0,t.bF)(k,{data:s.devices.page.List,stripe:"",border:"",style:{width:"100%"},height:`${s.state.height}px`,size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{onEdit:s.handleDeviceEdit,onRefresh:s.handlePageRefresh},null,8,["onEdit","onRefresh"]),(0,t.bF)(h,{onEdit:s.handleTunnelEdit,onRefresh:s.handleTunnelRefresh,onConnections:s.handleTunnelConnections},null,8,["onEdit","onRefresh","onConnections"]),s.tuntap.show?((0,t.uX)(),(0,t.Wv)(m,{key:0,onEdit:s.handleTuntapEdit,onRefresh:s.handleTuntapRefresh},null,8,["onEdit","onRefresh"])):(0,t.Q3)("",!0),s.socks5.show?((0,t.uX)(),(0,t.Wv)(p,{key:1,onEdit:s.handleSocks5Edit,onRefresh:s.handleSocks5Refresh},null,8,["onEdit","onRefresh"])):(0,t.Q3)("",!0),s.forward.show?((0,t.uX)(),(0,t.Wv)(g,{key:2,onEdit:s.handleForwardEdit,onSedit:s.handleSForwardEdit},null,8,["onEdit","onSedit"])):(0,t.Q3)("",!0),(0,t.bF)(w,{onRefresh:s.handlePageRefresh,onAccess:s.handleAccessEdit},null,8,["onRefresh","onAccess"])])),_:1},8,["data","height"]),(0,t.Lk)("div",o,[(0,t.Lk)("div",r,[(0,t.bF)(v,{small:"",background:"",layout:"total,sizes,prev,pager, next",total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])]),s.devices.showDeviceEdit?((0,t.uX)(),(0,t.Wv)(f,{key:0,modelValue:s.devices.showDeviceEdit,"onUpdate:modelValue":l[0]||(l[0]=e=>s.devices.showDeviceEdit=e),onChange:s.handlePageChange,data:s.devices.deviceInfo},null,8,["modelValue","onChange","data"])):(0,t.Q3)("",!0),s.devices.showAccessEdit?((0,t.uX)(),(0,t.Wv)(b,{key:1,modelValue:s.devices.showAccessEdit,"onUpdate:modelValue":l[1]||(l[1]=e=>s.devices.showAccessEdit=e),onChange:s.handlePageChange,data:s.devices.deviceInfo},null,8,["modelValue","onChange","data"])):(0,t.Q3)("",!0),s.tunnel.showEdit?((0,t.uX)(),(0,t.Wv)(C,{key:2,modelValue:s.tunnel.showEdit,"onUpdate:modelValue":l[2]||(l[2]=e=>s.tunnel.showEdit=e),onChange:s.handleTunnelRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.connections.showEdit?((0,t.uX)(),(0,t.Wv)(F,{key:3,modelValue:s.connections.showEdit,"onUpdate:modelValue":l[3]||(l[3]=e=>s.connections.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.tuntap.showEdit?((0,t.uX)(),(0,t.Wv)(y,{key:4,modelValue:s.tuntap.showEdit,"onUpdate:modelValue":l[4]||(l[4]=e=>s.tuntap.showEdit=e),onChange:s.handleTuntapRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.socks5.showEdit?((0,t.uX)(),(0,t.Wv)(V,{key:5,modelValue:s.socks5.showEdit,"onUpdate:modelValue":l[5]||(l[5]=e=>s.socks5.showEdit=e),onChange:s.handleSocks5Refresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.tuntap.showLease?((0,t.uX)(),(0,t.Wv)(_,{key:6,modelValue:s.tuntap.showLease,"onUpdate:modelValue":l[6]||(l[6]=e=>s.tuntap.showLease=e),onChange:s.handleTuntapRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.forward.showEdit?((0,t.uX)(),(0,t.Wv)(E,{key:7,modelValue:s.forward.showEdit,"onUpdate:modelValue":l[7]||(l[7]=e=>s.forward.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.sforward.showEdit?((0,t.uX)(),(0,t.Wv)(L,{key:8,modelValue:s.sforward.showEdit,"onUpdate:modelValue":l[8]||(l[8]=e=>s.sforward.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.updater.show?((0,t.uX)(),(0,t.Wv)(P,{key:9,modelValue:s.updater.show,"onUpdate:modelValue":l[9]||(l[9]=e=>s.updater.show=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.flow.show?((0,t.uX)(),(0,t.Wv)(I,{key:10,modelValue:s.flow.show,"onUpdate:modelValue":l[10]||(l[10]=e=>s.flow.show=e)},null,8,["modelValue"])):(0,t.Q3)("",!0)])}a(4114);var d=a(3830),u=a(144),i=a(1219);const c={class:"el-dropdown-link"};function h(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("ArrowDownBold"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-checkbox"),h=(0,t.g2)("el-dropdown-item"),m=(0,t.g2)("el-dropdown-menu"),p=(0,t.g2)("el-dropdown"),g=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.Wv)(g,{border:"",style:{width:"100%"},height:"32px",size:"small",onSortChange:n.handleSortChange,class:"table-sort"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"MachineId",label:"设备名",width:"110",sortable:"custom"}),(0,t.bF)(s,{prop:"Version",label:"版本",width:"110",sortable:"custom"}),(0,t.bF)(s,{prop:"tunnel",label:"网络",width:"76",sortable:"custom"}),n.tuntap.show?((0,t.uX)(),(0,t.Wv)(s,{key:0,prop:"tuntap",label:"网卡IP",width:"160",sortable:"custom"})):(0,t.Q3)("",!0),n.socks5.show?((0,t.uX)(),(0,t.Wv)(s,{key:1,prop:"socks5",label:"代理转发",width:"160",sortable:"custom"})):(0,t.Q3)("",!0),(0,t.bF)(s,{label:"columns",fixed:"right"},{header:(0,t.k6)((()=>[(0,t.bF)(p,{class:"show-columns"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(m,null,{default:(0,t.k6)((()=>[(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.tuntap.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.tuntap.show=e),onChange:n.handleTuntapShow,size:"small",style:{"margin-right":"1rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("网卡")])),_:1},8,["modelValue","onChange"])])),_:1}),(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.socks5.show,"onUpdate:modelValue":l[1]||(l[1]=e=>n.socks5.show=e),onChange:n.handleSocks5Show,size:"small",style:{"margin-right":"1rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("代理")])),_:1},8,["modelValue","onChange"])])),_:1}),(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.forward.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.forward.show=e),onChange:n.handleForwardShow,size:"small",style:{"margin-right":"0rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("转发")])),_:1},8,["modelValue","onChange"])])),_:1})])),_:1})])),default:(0,t.k6)((()=>[(0,t.Lk)("span",c,[(0,t.eW)("显示项"),(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])])),_:1})])),_:1})])),_:1},8,["onSortChange"])}var m=a(7716);const p=Symbol(),g=()=>{(0,d.B)();const e=(0,u.KR)({show:!0,timer:0,showEdit:!1,machineId:null,list:{},hashcode:0});(0,t.Gt)(p,e);const l=()=>{(0,m.dS)()},a=()=>{clearTimeout(e.value.timer),(0,m.V1)(e.value.hashcode.toString()).then((l=>{e.value.hashcode=l.HashCode,l.List&&(e.value.list=l.List),e.value.timer=setTimeout(a,1020)})).catch((()=>{e.value.timer=setTimeout(a,1020)}))},n=l=>{e.value.machineId=l[0],e.value.machineName=l[1],e.value.showEdit=!0},o=()=>{clearTimeout(e.value.timer)};return{forward:e,_getForwardCountInfo:a,handleForwardEdit:n,clearForwardTimeout:o,handleForwardRefresh:l}},w=()=>(0,t.WQ)(p);var k=a(2173);const v=Symbol(),f=()=>{const e=(0,u.KR)({show:!0,timer:0,showEdit:!1,current:null,list:{},hashcode:0});(0,t.Gt)(v,e);const l=()=>{clearTimeout(e.value.timer),(0,k.$y)(e.value.hashcode.toString()).then((a=>{if(e.value.hashcode=a.HashCode,a.List){for(let e in a.List)Object.assign(a.List[e],{running:2==a.List[e].Status,loading:1==a.List[e].Status});e.value.list=a.List}e.value.timer=setTimeout(l,1100)})).catch((a=>{e.value.timer=setTimeout(l,1100)}))},a=l=>{e.value.current=l,e.value.showEdit=!0},n=()=>{(0,k.QP)()},o=()=>{clearTimeout(e.value.timer),e.value.timer=0},r=l=>Object.values(e.value.list).filter((e=>e.Port.toString().indexOf(l)>=0||e.Lans.filter((e=>e.IP.indexOf(l)>=0)).length>0)).map((e=>e.MachineId)),s=l=>{const a=Object.values(e.value.list).sort(((e,l)=>e.Port-l.Port));return a.map((e=>e.MachineId))};return{socks5:e,_getSocks5Info:l,handleSocks5Edit:a,handleSocks5Refresh:n,clearSocks5Timeout:o,getSocks5Machines:r,sortSocks5:s}},b=()=>(0,t.WQ)(v);var C=a(8104),F=a(7477),y={emits:["sort"],components:{ArrowDownBold:F.$bU},setup(e,{emit:l}){const a=(0,C.W)();a.value.show="false"!=localStorage.getItem("tuntap.show");const t=b();t.value.show="false"!=localStorage.getItem("socks5.show");const n=w();n.value.show="false"!=localStorage.getItem("forward.show");const o=e=>{l("sort",e)},r=()=>{localStorage.setItem("tuntap.show",a.value.show)},s=()=>{localStorage.setItem("socks5.show",t.value.show)},d=()=>{localStorage.setItem("forward.show",n.value.show)};return{tuntap:a,socks5:t,forward:n,handleSortChange:o,handleTuntapShow:r,handleSocks5Show:s,handleForwardShow:d}}},V=a(1241);const _=(0,V.A)(y,[["render",h],["__scopeId","data-v-107f04ae"]]);var E=_;const L=e=>((0,t.Qi)("data-v-2f0ed5e0"),e=e(),(0,t.jt)(),e),P={class:"dropdown"},I=L((()=>(0,t.Lk)("span",null,"操作",-1)));function T(e,l,a,n,o,r){const s=(0,t.g2)("ArrowDown"),d=(0,t.g2)("el-icon"),u=(0,t.g2)("SwitchButton"),i=(0,t.g2)("el-dropdown-item"),c=(0,t.g2)("Delete"),h=(0,t.g2)("Flag"),m=(0,t.g2)("HelpFilled"),p=(0,t.g2)("Platform"),g=(0,t.g2)("el-dropdown-menu"),w=(0,t.g2)("el-dropdown"),k=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(k,{label:"操作",fixed:"right"},{default:(0,t.k6)((a=>[(0,t.bF)(w,{size:"small"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(g,null,{default:(0,t.k6)((()=>[a.row.showReboot&&n.hasReboot?((0,t.uX)(),(0,t.Wv)(i,{key:0,onClick:e=>n.handleExit(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(u)])),_:1}),(0,t.eW)(" 重启")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),a.row.showDel&&n.hasRemove?((0,t.uX)(),(0,t.Wv)(i,{key:1,onClick:e=>n.handleDel(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1}),(0,t.eW)(" 删除")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),n.handleShowAccess(a.row,n.accessList[a.row.MachineId]||0)?((0,t.uX)(),(0,t.Wv)(i,{key:2,onClick:e=>n.handleAccess(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(h)])),_:1}),(0,t.eW)(" 权限")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),a.row.isSelf&&n.hasApiPassword?((0,t.uX)(),(0,t.Wv)(i,{key:3,onClick:e=>n.handleApiPassword(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.eW)(" 管理接口")])),_:2},1032,["onClick"])):n.hasApiPasswordOther?((0,t.uX)(),(0,t.Wv)(i,{key:4,onClick:e=>n.handleApiPassword(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.eW)(" 管理接口")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),(0,t.bF)(i,{onClick:e=>n.handleStopwatch(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1}),(0,t.eW)("它的信标")])),_:2},1032,["onClick"]),(0,t.bF)(i,{onClick:l[0]||(l[0]=l=>n.handleStopwatch("",e.$t("status.messenger")))},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1}),(0,t.eW)("服务器信标")])),_:1})])),_:2},1024)])),default:(0,t.k6)((()=>[(0,t.Lk)("div",P,[I,(0,t.bF)(d,{class:"el-icon--right"},{default:(0,t.k6)((()=>[(0,t.bF)(s)])),_:1})])])),_:2},1024)])),_:1})}var S=a(9299),M=a(920),W=a(2933),A=a(5962),R=a(3363);const X=Symbol(),N=()=>{const e=(0,u.KR)({device:{},show:!1});return(0,t.Gt)(X,e),{flow:e}},U=()=>(0,t.WQ)(X);var B={emits:["refresh","access"],components:{Delete:F.epd,SwitchButton:F.L$q,ArrowDown:F.yd$,Flag:F.lNU,HelpFilled:F.adD,Platform:F.ODD},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,A.q)(),o=(0,t.EW)((()=>a.value.config.Client.Access)),r=(0,t.EW)((()=>a.value.hasAccess("Access"))),s=(0,t.EW)((()=>n.value.list)),u=(0,t.EW)((()=>a.value.hasAccess("Reboot"))),c=(0,t.EW)((()=>a.value.hasAccess("Remove"))),h=(0,t.EW)((()=>a.value.hasAccess("SetApiPassword"))),m=(0,t.EW)((()=>a.value.hasAccess("SetApiPasswordOther"))),p=U(),g=(e,a)=>{W.s.confirm(`确认删除[${a}]?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{(0,S.Se)(e).then((()=>{l("refresh")}))})).catch((()=>{}))},w=(e,a)=>{W.s.confirm(`确认关闭[${a}]?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{(0,M.NS)(e).then((()=>{l("refresh")}))})).catch((()=>{}))},k=(e,l)=>e.showAccess&&r.value&&l>=0&&0==+(~BigInt(o.value)&BigInt(l)).toString(),v=e=>{l("access",e)},f=e=>{W.s.prompt("输入新的管理接口密码",`重置【${e.MachineName}】的接口密码`,{confirmButtonText:"确定",cancelButtonText:"取消",inputPattern:/^[0-9a-zA-Z]{1,32}$/,inputErrorMessage:"数字字母1-32位"}).then((({value:l})=>{(0,R.gv)({machineId:e.MachineId,password:l}).then((()=>{i.nk.success("操作成功,重启后生效~")})).catch((()=>{i.nk.error("操作失败~")}))})).catch((()=>{}))},b=(e,l)=>{p.value.device.id=e,p.value.device.name=l,p.value.show=!0};return{accessList:s,handleDel:g,handleExit:w,hasReboot:u,hasRemove:c,hasAccess:r,handleShowAccess:k,handleAccess:v,hasApiPassword:h,hasApiPasswordOther:m,handleApiPassword:f,handleStopwatch:b}}};const x=(0,V.A)(B,[["render",T],["__scopeId","data-v-2f0ed5e0"]]);var $=x,z=a(4232);const D=e=>((0,t.Qi)("data-v-5db71b03"),e=e(),(0,t.jt)(),e),K={class:"flex"},Q=D((()=>(0,t.Lk)("span",{class:"flex-1"},"设备",-1))),O={class:"flex"},G=["onClick"],j=["onClick"],q=D((()=>(0,t.Lk)("span",null,"😴㊙.㊙.㊙.㊙",-1))),H=[q],J=D((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1)));function Z(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Search"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-button"),c=(0,t.g2)("DeviceName"),h=(0,t.g2)("UpdaterBtn"),m=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(m,{prop:"MachineId",label:"设备",width:"220"},{header:(0,t.k6)((()=>[(0,t.Lk)("div",K,[Q,(0,t.Lk)("span",null,[(0,t.bF)(s,{size:"small",modelValue:n.name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.name=e),clearable:"",onInput:n.handleRefresh,placeholder:"设备/虚拟网卡/端口转发"},null,8,["modelValue","onInput"])]),(0,t.Lk)("span",null,[(0,t.bF)(i,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1},8,["onClick"])])])])),default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,[(0,t.bF)(c,{onEdit:n.handleEdit,config:!0,item:e.row},null,8,["onEdit","item"])]),(0,t.Lk)("p",O,[e.row.showip?((0,t.uX)(),(0,t.CE)("span",{key:0,title:"此设备的外网IP",class:"ipaddress",onClick:l=>n.handleExternal(e.row)},[(0,t.Lk)("span",null,"😀"+(0,z.v_)(e.row.IP),1)],8,G)):((0,t.uX)(),(0,t.CE)("span",{key:1,title:"此设备的外网IP",class:"ipaddress",onClick:l=>n.handleExternal(e.row)},H,8,j)),J,0==e.row.showip?((0,t.uX)(),(0,t.Wv)(h,{key:2,config:!0,item:e.row},null,8,["item"])):(0,t.Q3)("",!0)])])])),_:1})}var Y=a(7115),ee=a(6588),le={emits:["edit","refresh"],components:{Search:F.vji,UpdaterBtn:Y.A,DeviceName:ee.A},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.hasAccess("ExternalShow"))),o=(0,u.KR)(sessionStorage.getItem("search-name")||""),r=e=>{n.value&&(e.showip=!e.showip)},s=e=>{l("edit",e)},i=()=>{sessionStorage.setItem("search-name",o.value),l("refresh",o.value)};return{handleEdit:s,handleRefresh:i,name:o,handleExternal:r}}};const ae=(0,V.A)(le,[["render",Z],["__scopeId","data-v-5db71b03"]]);var te=ae;const ne=(0,t.Lk)("div",null,"修改后最好能重启一次客户端",-1),oe={class:"t-c w-100"};function re(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-button"),i=(0,t.g2)("el-form"),c=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(c,{modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.ruleForm.MachineName}]设备`,width:"360"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(i,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[ne])),_:1}),(0,t.bF)(s,{label:"设备名",prop:"MachineName"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{maxlength:"32","show-word-limit":"",modelValue:n.state.ruleForm.MachineName,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.MachineName=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",oe,[(0,t.bF)(u,{onClick:l[1]||(l[1]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(u,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var se={props:["data","modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=(0,u.KR)(null),n=(0,u.Kh)({show:!0,ruleForm:{MachineName1:e.data.MachineName,MachineName:e.data.MachineName},rules:{}});(0,t.wB)((()=>n.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const o=()=>{e.data.MachineName!=n.ruleForm.MachineName&&(0,S.gC)({Id:e.data.MachineId,newName:n.ruleForm.MachineName}).then((()=>{n.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:n,ruleFormRef:a,handleSave:o}}};const de=(0,V.A)(se,[["render",re]]);var ue=de,ie=a(7985);function ce(e,l,a,n,o,r){const s=(0,t.g2)("Access"),d=(0,t.g2)("el-button"),u=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(u,{modelValue:n.state.show,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.show=e),"close-on-click-modal":!1,center:"","append-to":".app-wrap",title:`设置[${n.machineName}]的权限`,width:"580",top:"1vh"},{footer:(0,t.k6)((()=>[(0,t.bF)(d,{plain:"",onClick:l[0]||(l[0]=e=>n.state.show=!1),loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1},8,["loading"]),(0,t.bF)(d,{type:"success",plain:"",onClick:n.handleSave,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("确定保存")])),_:1},8,["onClick","loading"])])),default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(s,{machineid:n.machineid,ref:"accessDom"},null,8,["machineid"])])])),_:1},8,["modelValue","title"])}var he=a(6158),me={props:["data","modelValue"],emits:["change","update:modelValue"],components:{Access:he.A},setup(e,{emit:l}){const a=(0,u.Kh)({show:!0,loading:!1});(0,t.wB)((()=>a.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const n=(0,u.KR)(null),o=()=>{a.loading=!0,(0,R.ZK)({ToMachineId:e.data.MachineId,Access:n.value.getValue()}).then((()=>{a.loading=!1,a.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),a.loading=!1,i.nk.error("操作失败!")}))};return{machineName:e.data.MachineName,machineid:e.data.MachineId,state:a,accessDom:n,handleSave:o}}};const pe=(0,V.A)(me,[["render",ce]]);var ge=pe;const we={key:0};function ke(e,l,a,n,o,r){const s=(0,t.g2)("TuntapShow"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"tuntap",label:"虚拟网卡",width:"160"},{header:(0,t.k6)((()=>[(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=(...e)=>n.handleShowLease&&n.handleShowLease(...e))},"虚拟网卡")])),default:(0,t.k6)((e=>[n.tuntap.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("div",we,[(0,t.bF)(s,{config:!0,item:e.row,onEdit:n.handleTuntapIP,onRefresh:n.handleTuntapRefresh},null,8,["item","onEdit","onRefresh"])])):(0,t.Q3)("",!0)])),_:1})}var ve=a(9273),fe={emits:["edit","refresh"],components:{TuntapShow:ve.A},setup(e,{emit:l}){const a=(0,C.W)(),t=e=>{l("edit",e)},n=()=>{l("refresh")},o=()=>{a.value.showLease=!0};return{tuntap:a,handleTuntapIP:t,handleTuntapRefresh:n,handleShowLease:o}}};const be=(0,V.A)(fe,[["render",ke]]);var Ce=be;const Fe=e=>((0,t.Qi)("data-v-54c17b5d"),e=e(),(0,t.jt)(),e),ye=Fe((()=>(0,t.Lk)("span",null,"留空则使用【本组网络】的设置",-1))),Ve=Fe((()=>(0,t.Lk)("span",null,"/",-1))),_e={key:0,class:"upgrade-wrap"},Ee={class:"w-100 t-c"};function Le(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("el-form-item"),u=(0,t.g2)("el-checkbox"),i=(0,t.g2)("TuntapLan"),c=(0,t.g2)("TuntapForward"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[11]||(l[11]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]组网`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"8rem"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{label:"网卡名",prop:"Name"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{modelValue:n.state.ruleForm.Name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Name=e),style:{width:"14rem"}},null,8,["modelValue"]),(0,t.eW)(),ye])),_:1}),(0,t.bF)(d,{label:"网卡IP",prop:"IP",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{modelValue:n.state.ruleForm.IP,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.IP=e),style:{width:"14rem"}},null,8,["modelValue"]),Ve,(0,t.bF)(s,{onChange:n.handlePrefixLengthChange,modelValue:n.state.ruleForm.PrefixLength,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PrefixLength=e),style:{width:"4rem"}},null,8,["onChange","modelValue"])])),_:1}),(0,t.bF)(d,{label:"",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.ShowDelay,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleForm.ShowDelay=e),label:"显示延迟",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.AutoConnect,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.ruleForm.AutoConnect=e),label:"自动连接",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.Multicast,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.ruleForm.Multicast=e),label:"禁用广播",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.Nat,"onUpdate:modelValue":l[6]||(l[6]=e=>n.state.ruleForm.Nat=e),label:"禁用NAT",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.TcpMerge,"onUpdate:modelValue":l[7]||(l[7]=e=>n.state.ruleForm.TcpMerge=e),label:"TCP包合并",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{modelValue:n.state.ruleForm.InterfaceOrder,"onUpdate:modelValue":l[8]||(l[8]=e=>n.state.ruleForm.InterfaceOrder=e),label:"调整网卡顺序",size:"large"},null,8,["modelValue"])])),_:1}),(0,t.bF)(d,{prop:"upgrade",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{modelValue:n.state.ruleForm.Upgrade,"onUpdate:modelValue":l[9]||(l[9]=e=>n.state.ruleForm.Upgrade=e),label:"我很懂,我要使用高级功能(点对网和网对网)",size:"large"},null,8,["modelValue"])])),_:1}),n.state.ruleForm.Upgrade?((0,t.uX)(),(0,t.CE)("div",_e,[(0,t.bF)(d,{label:"局域网IP",prop:"LanIP",class:"m-b-0",style:{"border-bottom":"1px solid #ddd"}},{default:(0,t.k6)((()=>[(0,t.bF)(i,{ref:"lanDom"},null,512)])),_:1}),(0,t.bF)(d,{label:"端口转发",prop:"forwards"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{ref:"forwardDom"},null,512)])),_:1})])):(0,t.Q3)("",!0),(0,t.bF)(d,{label:"",prop:"Btns","label-width":"0"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ee,[(0,t.bF)(h,{onClick:l[10]||(l[10]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var Pe=a(5241);const Ie=e=>((0,t.Qi)("data-v-1541c712"),e=e(),(0,t.jt)(),e),Te={class:"w-100"},Se=Ie((()=>(0,t.Lk)("span",{class:"yellow"},"此设备无法使用NAT转发,或只想使用端口转发",-1))),Me={key:0,class:"green"},We={class:"wrap"},Ae=["title"],Re={key:1},Xe=["onClick"],Ne=["title"],Ue={key:1},Be=["onClick"],xe=["title"],$e={key:1},ze=["onClick"],De={key:1,class:"remark"};function Ke(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-table-column"),c=(0,t.g2)("el-button"),h=(0,t.g2)("el-popconfirm"),m=(0,t.g2)("Plus"),p=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.CE)("div",Te,[(0,t.Lk)("div",null,[Se,n.state.testing?((0,t.uX)(),(0,t.CE)("span",Me,"、testing")):(0,t.Q3)("",!0)]),(0,t.Lk)("div",We,[(0,t.bF)(p,{stripe:"",data:n.state.forwards,border:"",size:"small",width:"100%",height:"200px",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(i,{prop:"ListenPort",label:"源端口",width:"60"},{default:(0,t.k6)((e=>[e.row.ListenPortEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ListenPort,"onUpdate:modelValue":l=>e.row.ListenPort=l,onBlur:l=>n.handleEditBlur(e.row,"ListenPort")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ListenPort),9,Ae)):((0,t.uX)(),(0,t.CE)("span",Re,[(0,t.eW)((0,z.v_)(e.row.ListenPort)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ListenPort=0},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,Xe)]))],64))])),_:1}),(0,t.bF)(i,{prop:"ConnectAddr",label:"目标IP",width:"120"},{default:(0,t.k6)((e=>[e.row.ConnectAddrEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ConnectAddr,"onUpdate:modelValue":l=>e.row.ConnectAddr=l,onBlur:l=>n.handleEditBlur(e.row,"ConnectAddr")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ConnectAddr),9,Ne)):((0,t.uX)(),(0,t.CE)("span",Ue,[(0,t.eW)((0,z.v_)(e.row.ConnectAddr)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ConnectAddr="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,Be)]))],64))])),_:1}),(0,t.bF)(i,{prop:"ConnectPort",label:"目标端口",width:"80"},{default:(0,t.k6)((e=>[e.row.ConnectPortEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ConnectPort,"onUpdate:modelValue":l=>e.row.ConnectPort=l,onBlur:l=>n.handleEditBlur(e.row,"ConnectPort")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ConnectPort),9,xe)):((0,t.uX)(),(0,t.CE)("span",$e,[(0,t.eW)((0,z.v_)(e.row.ConnectPort)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ConnectPort=0},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,ze)]))],64))])),_:1}),(0,t.bF)(i,{prop:"Remark",label:"备注"},{default:(0,t.k6)((e=>[e.row.RemarkEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.Remark,"onUpdate:modelValue":l=>e.row.Remark=l,onBlur:l=>n.handleEditBlur(e.row,"Remark")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)("div",De,(0,z.v_)(e.row.Remark),1))])),_:1}),(0,t.bF)(i,{prop:"Oper",label:"操作",width:"110"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.$index)},{reference:(0,t.k6)((()=>[(0,t.bF)(c,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"]),(0,t.bF)(c,{type:"primary",size:"small",onClick:l=>n.handleAdd(e.$index)},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1})])),_:2},1032,["onClick"])])])),_:1})])),_:1},8,["data","onCellDblclick"])])])}var Qe={props:["modelValue"],emits:["update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42},setup(e){const l=(0,C.W)(),a=(0,u.Kh)({machineName:l.value.current.device.MachineName,forwards:0==l.value.current.Forwards.length?[{ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""}]:l.value.current.Forwards.slice(0),timer:0,testing:!1}),n=(e,l)=>{o(e,l.property)},o=(e,l)=>{a.forwards.forEach((e=>{e["ListenAddrEditing"]=!1,e["ListenPortEditing"]=!1,e["ConnectAddrEditing"]=!1,e["ConnectPortEditing"]=!1,e["RemarkEditing"]=!1})),e[`${l}Editing`]=!0,e["__editing"]=!0},r=(e,l)=>{e[`${l}Editing`]=!1,e["__editing"]=!1},s=e=>{1==a.forwards.length?a.forwards[0]={ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""}:a.forwards.splice(e,1)},d=e=>{a.forwards.filter((e=>"0.0.0.0"==e.ConnectAddr||0==e.ConnectPort||0==e.ListenPort)).length>0||a.forwards.splice(e+1,0,{ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""})},i=()=>{clearTimeout(a.timer),a.testing=!0,(0,Pe._)({MachineId:l.value.current.MachineId,List:a.forwards.map((e=>({ListenAddr:e.ListenAddr,ListenPort:+e.ListenPort,ConnectAddr:e.ConnectAddr,ConnectPort:+e.ConnectPort})))}).then((e=>{var l=e.List;for(let t=0;t${e.ConnectAddr}:${e.ConnectPort}`,o=a.forwards.filter((e=>`${e.ListenPort}->${e.ConnectAddr}:${e.ConnectPort}`==n));for(let l=0;l{a.testing=!1,a.timer=setTimeout(i,3e3)}))};(0,t.sV)((()=>{i()})),(0,t.hi)((()=>{clearTimeout(a.timer)}));const c=()=>a.forwards.map((e=>(e.ListenPort=+e.ListenPort,e.ConnectPort=+e.ConnectPort,e)));return{state:a,handleCellClick:n,handleEditBlur:r,handleDel:s,handleAdd:d,getData:c}}};const Oe=(0,V.A)(Qe,[["render",Ke],["__scopeId","data-v-1541c712"]]);var Ge=Oe;const je=e=>((0,t.Qi)("data-v-1cfaa7f4"),e=e(),(0,t.jt)(),e),qe={class:"w-100"},He=je((()=>(0,t.Lk)("div",null,[(0,t.Lk)("span",{class:"yellow"},"填写局域网IP,使用NAT转发")],-1))),Je={class:"wrap"},Ze=["title"],Ye={key:1},el=["onClick"],ll=["title"],al={key:1},tl=["title"],nl={key:1},ol=["onClick"],rl=["title"],sl={key:1};function dl(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-table-column"),c=(0,t.g2)("el-checkbox"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-popconfirm"),p=(0,t.g2)("Plus"),g=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.CE)("div",qe,[He,(0,t.Lk)("div",Je,[(0,t.bF)(g,{stripe:"",data:n.state.lans,border:"",size:"small",width:"100%",height:"200px",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(i,{prop:"IP",label:"路由IP",width:"120"},{default:(0,t.k6)((e=>[e.row.IPEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.IP,"onUpdate:modelValue":l=>e.row.IP=l,onBlur:l=>n.handleEditBlur(e.row,"IP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.IP),9,Ze)):((0,t.uX)(),(0,t.CE)("span",Ye,[(0,t.eW)((0,z.v_)(e.row.IP)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.IP="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,el)]))],64))])),_:1}),(0,t.bF)(i,{prop:"PrefixLength",label:"路由掩码",width:"80"},{default:(0,t.k6)((e=>[e.row.PrefixLengthEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.PrefixLength,"onUpdate:modelValue":l=>e.row.PrefixLength=l,onBlur:l=>n.handleEditBlur(e.row,"PrefixLength")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.PrefixLength),9,ll)):((0,t.uX)(),(0,t.CE)("span",al,(0,z.v_)(e.row.PrefixLength),1))],64))])),_:1}),(0,t.bF)(i,{prop:"MapIP",label:"目标IP",width:"120"},{default:(0,t.k6)((e=>[e.row.MapIPEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.MapIP,"onUpdate:modelValue":l=>e.row.MapIP=l,onBlur:l=>n.handleEditBlur(e.row,"MapIP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.MapIP),9,tl)):((0,t.uX)(),(0,t.CE)("span",nl,[(0,t.eW)((0,z.v_)(e.row.MapIP)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.MapIP="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,ol)]))],64))])),_:1}),(0,t.bF)(i,{prop:"MapPrefixLength",label:"目标掩码",width:"80"},{default:(0,t.k6)((e=>[e.row.MapPrefixLengthEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.MapPrefixLength,"onUpdate:modelValue":l=>e.row.MapPrefixLength=l,onBlur:l=>n.handleEditBlur(e.row,"MapPrefixLength")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.MapPrefixLength),9,rl)):((0,t.uX)(),(0,t.CE)("span",sl,(0,z.v_)(e.row.MapPrefixLength),1))],64))])),_:1}),(0,t.bF)(i,{prop:"Disabled",label:"禁用"},{default:(0,t.k6)((e=>[(0,t.bF)(c,{modelValue:e.row.Disabled,"onUpdate:modelValue":l=>e.row.Disabled=l,label:"禁用记录"},null,8,["modelValue","onUpdate:modelValue"])])),_:1}),(0,t.bF)(i,{prop:"Oper",label:"操作",width:"110"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.$index)},{reference:(0,t.k6)((()=>[(0,t.bF)(h,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"]),(0,t.bF)(h,{type:"primary",size:"small",onClick:l=>n.handleAdd(e.$index)},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})])),_:2},1032,["onClick"])])])),_:1})])),_:1},8,["data","onCellDblclick"])])])}var ul={props:["modelValue"],emits:["update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42},setup(e){const l=(0,C.W)(),a=(0,u.Kh)({lans:l.value.current.Lans.slice(0).map((e=>(e.MapIP=e.MapIP||"0.0.0.0",e.MapPrefixLength=e.MapPrefixLength||24,e)))});0==a.lans.length&&a.lans.push({IP:"0.0.0.0",PrefixLength:24,MapIP:"0.0.0.0",MapPrefixLength:24});const t=(e,l)=>{n(e,l.property)},n=(e,l)=>{a.lans.forEach((e=>{e["IPEditing"]=!1,e["PrefixLengthEditing"]=!1,e["MapIPEditing"]=!1,e["MapPrefixLengthEditing"]=!1})),e[`${l}Editing`]=!0,e["__editing"]=!0},o=(e,l)=>{if(e[`${l}Editing`]=!1,e["__editing"]=!1,"PrefixLength"==l||"MapPrefixLength"==l){var a=+e[l];(a>32||a<0||isNaN(a))&&(a=24),e[l]=a}},r=e=>{a.lans.splice(e,1),0==a.lans.length&&s(0)},s=e=>{a.lans.splice(e+1,0,{IP:"0.0.0.0",PrefixLength:24,MapIP:"0.0.0.0",MapPrefixLength:24})},d=()=>a.lans.map((e=>(e.PrefixLength=+e.PrefixLength,e)));return{state:a,handleDel:r,handleAdd:s,getData:d,handleCellClick:t,handleEditBlur:o}}};const il=(0,V.A)(ul,[["render",dl],["__scopeId","data-v-1cfaa7f4"]]);var cl=il,hl={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42,TuntapForward:Ge,TuntapLan:cl},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,C.W)(),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,machineName:n.value.current.device.MachineName,bufferSize:a.value.bufferSize,ruleForm:{IP:n.value.current.IP,PrefixLength:n.value.current.PrefixLength||24,Gateway:n.value.current.Gateway,ShowDelay:n.value.current.ShowDelay,AutoConnect:n.value.current.AutoConnect,Upgrade:n.value.current.Upgrade,Multicast:n.value.current.Multicast,Nat:n.value.current.Nat,TcpMerge:n.value.current.TcpMerge,InterfaceOrder:n.value.current.InterfaceOrder,Forwards:n.value.current.Forwards,Name:n.value.current.Name},rules:{Name:{type:"string",pattern:/^$|^[A-Za-z][A-Za-z0-9]{0,31}$/,message:"请输入正确的网卡名",transform(e){return e.trim()}}}});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{var e=+r.ruleForm.PrefixLength;(e>32||e<16||isNaN(e))&&(e=24),r.ruleForm.PrefixLength=e},c=(0,u.KR)(null),h=(0,u.KR)(null),m=()=>{const e=JSON.parse(JSON.stringify(n.value.current));e.IP=r.ruleForm.IP.replace(/\s/g,"")||"0.0.0.0",e.Lans=c.value?c.value.getData():n.value.current.Lans,e.PrefixLength=+r.ruleForm.PrefixLength,e.Gateway=r.ruleForm.Gateway,e.ShowDelay=r.ruleForm.ShowDelay,e.AutoConnect=r.ruleForm.AutoConnect,e.Upgrade=r.ruleForm.Upgrade,e.Multicast=r.ruleForm.Multicast,e.Nat=r.ruleForm.Nat,e.TcpMerge=r.ruleForm.TcpMerge,e.InterfaceOrder=r.ruleForm.InterfaceOrder,e.Forwards=h.value?h.value.getData():n.value.current.Forwards,e.Name=r.ruleForm.Name,(0,Pe.ac)(e).then((()=>{r.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:r,ruleFormRef:o,handlePrefixLengthChange:s,handleSave:m,lanDom:c,forwardDom:h}}};const ml=(0,V.A)(hl,[["render",Le],["__scopeId","data-v-54c17b5d"]]);var pl=ml;const gl=e=>((0,t.Qi)("data-v-67ed3552"),e=e(),(0,t.jt)(),e),wl=gl((()=>(0,t.Lk)("p",null,"网络租期30天、IP租期7天",-1))),kl=gl((()=>(0,t.Lk)("span",null,"/",-1))),vl=gl((()=>(0,t.Lk)("span",{style:{width:"1rem"}},null,-1))),fl={class:"calc"},bl=gl((()=>(0,t.Lk)("span",{class:"label"},"网络号",-1))),Cl={class:"value"},Fl=gl((()=>(0,t.Lk)("span",{class:"label"},"网关",-1))),yl={class:"value"},Vl=gl((()=>(0,t.Lk)("span",{class:"label"},"开始IP",-1))),_l={class:"value"},El=gl((()=>(0,t.Lk)("span",{class:"label"},"结束IP",-1))),Ll={class:"value"},Pl=gl((()=>(0,t.Lk)("span",{class:"label"},"广播号",-1))),Il={class:"value"},Tl=gl((()=>(0,t.Lk)("span",{class:"label"},"IP数量",-1))),Sl={class:"value"};function Ml(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-button"),i=(0,t.g2)("el-form"),c=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(c,{modelValue:n.state.show,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:"配置本组的网络",top:"1vh",width:"400"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(i,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"100"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"gateway"},{default:(0,t.k6)((()=>[wl])),_:1}),(0,t.bF)(s,{label:"网卡名",prop:"Name"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Name=e),style:{width:"14rem"}},null,8,["modelValue"])])),_:1}),(0,t.bF)(s,{label:"网络前缀",prop:"IP"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.IP,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.IP=e),style:{width:"14rem"},onChange:n.handlePrefixLengthChange},null,8,["modelValue","onChange"]),kl,(0,t.bF)(d,{onChange:n.handlePrefixLengthChange,modelValue:n.state.ruleForm.PrefixLength,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PrefixLength=e),style:{width:"4rem"}},null,8,["onChange","modelValue"]),vl,(0,t.bF)(u,{onClick:n.handleClear},{default:(0,t.k6)((()=>[(0,t.eW)("重置")])),_:1},8,["onClick"])])),_:1}),(0,t.bF)(s,{label:"",prop:"IP1"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",fl,[(0,t.Lk)("p",null,[bl,(0,t.Lk)("span",Cl,(0,z.v_)(n.state.values.Network),1)]),(0,t.Lk)("p",null,[Fl,(0,t.Lk)("span",yl,(0,z.v_)(n.state.values.Gateway),1)]),(0,t.Lk)("p",null,[Vl,(0,t.Lk)("span",_l,(0,z.v_)(n.state.values.Start),1)]),(0,t.Lk)("p",null,[El,(0,t.Lk)("span",Ll,(0,z.v_)(n.state.values.End),1)]),(0,t.Lk)("p",null,[Pl,(0,t.Lk)("span",Il,(0,z.v_)(n.state.values.Broadcast),1)]),(0,t.Lk)("p",null,[Tl,(0,t.Lk)("span",Sl,(0,z.v_)(n.state.values.Count),1)])])])),_:1}),n.hasLease?((0,t.uX)(),(0,t.Wv)(s,{key:0,label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(u,{onClick:l[3]||(l[3]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(u,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})):(0,t.Q3)("",!0)])),_:1},8,["model","rules"])])])),_:1},8,["modelValue"])}var Wl={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.hasAccess("Lease"))),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,ruleForm:{Name:"",IP:"0.0.0.0",PrefixLength:24},rules:{Name:{type:"string",pattern:/^$|^[A-Za-z][A-Za-z0-9]{0,31}$/,message:"请输入正确的网卡名",transform(e){return e.trim()}}},values:{}});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{(0,Pe.w0)(r.ruleForm).then((e=>{r.values=e}))},c=()=>{(0,Pe.Nj)().then((e=>{r.ruleForm.Name=e.Name,r.ruleForm.IP=e.IP,r.ruleForm.PrefixLength=e.PrefixLength,s()}))},h=()=>{var e=+r.ruleForm.PrefixLength;(e>32||e<16||isNaN(e))&&(e=24),r.ruleForm.PrefixLength=e,s()},m=()=>{(0,Pe.AE)(r.ruleForm).then((()=>{i.nk.success("已操作"),r.show=!1})).catch((e=>{console.log(e),i.nk.error("操作失败")}))},p=()=>{(0,Pe.AE)({Name:"",IP:"0.0.0.0",PrefixLength:24}).then((()=>{i.nk.success("已操作"),c()})).catch((e=>{console.log(e),i.nk.error("操作失败")}))};return(0,t.sV)((()=>{c()})),{state:r,hasLease:n,ruleFormRef:o,handleSave:m,handlePrefixLengthChange:h,handleClear:p}}};const Al=(0,V.A)(Wl,[["render",Ml],["__scopeId","data-v-67ed3552"]]);var Rl=Al;const Xl={key:0};function Nl(e,l,a,n,o,r){const s=(0,t.g2)("Socks5Show"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"socks5",label:"代理转发",width:"160"},{default:(0,t.k6)((e=>[n.socks5.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("div",Xl,[(0,t.bF)(s,{config:!0,item:e.row,onEdit:n.handleSocks5,onRefresh:n.handleSocks5Refresh},null,8,["item","onEdit","onRefresh"])])):(0,t.Q3)("",!0)])),_:1})}const Ul={class:"flex"},Bl={class:"flex-1"},xl=["title"],$l={key:0,class:"green gateway"},zl={key:1},Dl={key:0},Kl={key:0,class:"flex yellow",title:"已禁用"},Ql={key:1,class:"flex red",title:"与其它设备填写IP、或本机局域网IP有冲突"};function Ol(e,l,a,n,o,r){const s=(0,t.g2)("ConnectionShow"),d=(0,t.g2)("Loading"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-switch");return(0,t.uX)(),(0,t.CE)("div",null,[(0,t.Lk)("div",Ul,[(0,t.Lk)("div",Bl,[(0,t.bF)(s,{data:n.connections.list[n.item.MachineId],row:n.item},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=e=>n.handleSocks5Port(n.socks5.list[n.item.MachineId])),title:"此设备的socks5代理"},[n.socks5.list[n.item.MachineId].SetupError?((0,t.uX)(),(0,t.CE)("strong",{key:0,class:"red",title:n.socks5.list[n.item.MachineId].SetupError}," socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),9,xl)):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[n.item.Connected&&n.socks5.list[n.item.MachineId].running?((0,t.uX)(),(0,t.CE)("strong",$l,"socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),1)):((0,t.uX)(),(0,t.CE)("span",zl,"socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),1))],64))])]),n.socks5.list[n.item.MachineId].loading?((0,t.uX)(),(0,t.CE)("div",Dl,[(0,t.bF)(u,{size:"14",class:"loading"},{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])):((0,t.uX)(),(0,t.Wv)(i,{key:1,"model-value":n.item.Connected&&n.socks5.list[n.item.MachineId].running,loading:n.socks5.list[n.item.MachineId].loading,disabled:"",onClick:l[1]||(l[1]=e=>n.handleSocks5(n.socks5.list[n.item.MachineId])),size:"small","inline-prompt":"","active-text":"😀","inactive-text":"😣"},null,8,["model-value","loading"]))]),(0,t.Lk)("div",null,[(0,t.Lk)("div",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.socks5.list[n.item.MachineId].Lans,((e,l)=>((0,t.uX)(),(0,t.CE)(t.FK,{key:l},[e.Disabled?((0,t.uX)(),(0,t.CE)("div",Kl,(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),1)):e.Exists?((0,t.uX)(),(0,t.CE)("div",Ql,(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),1)):((0,t.uX)(),(0,t.CE)("div",{key:2,class:(0,z.C4)(["flex",{green:n.item.Connected&&n.socks5.list[n.item.MachineId].running}]),title:"正常使用"},(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),3))],64)))),128))])])])}var Gl=a(9983),jl=a(2109),ql={props:["item","config"],emits:["edit","refresh"],components:{Loading:F.Rhj,ConnectionShow:jl.A},setup(e,{emit:l}){const a=b(),n=(0,d.B)(),o=(0,t.EW)((()=>n.value.config.Client.Id)),r=(0,t.EW)((()=>n.value.hasAccess("Socks5ChangeSelf"))),s=(0,t.EW)((()=>n.value.hasAccess("Socks5ChangeOther"))),u=(0,t.EW)((()=>n.value.hasAccess("Socks5StatusSelf"))),c=(0,t.EW)((()=>n.value.hasAccess("Socks5StatusOther"))),h=(0,Gl.bB)(),m=l=>{if(!e.config)return;if(o.value===l.MachineId){if(!u.value)return}else if(!c.value)return;const a=e.item.Connected&&l.running?(0,k.R2)(l.MachineId):(0,k.qH)(l.MachineId);l.loading=!0,a.then((()=>{i.nk.success("操作成功!")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))},p=a=>{if(e.config||o.value==a.MachineId){if(o.value===a.MachineId){if(!r.value)return}else if(!s.value)return;a.device=e.item,l("edit",a)}},g=()=>{l("refresh")};return{item:(0,t.EW)((()=>e.item)),socks5:a,connections:h,handleSocks5:m,handleSocks5Port:p,handleSocks5Refresh:g}}};const Hl=(0,V.A)(ql,[["render",Ol],["__scopeId","data-v-3a4bfe6c"]]);var Jl=Hl,Zl={emits:["edit","refresh"],components:{Socks5Show:Jl},setup(e,{emit:l}){const a=b(),t=e=>{l("edit",e)},n=()=>{l("refresh")};return{socks5:a,handleSocks5:t,handleSocks5Refresh:n}}};const Yl=(0,V.A)(Zl,[["render",Nl]]);var ea=Yl;const la=e=>((0,t.Qi)("data-v-022e3781"),e=e(),(0,t.jt)(),e),aa={class:"upgrade-wrap"},ta={class:"flex-1"},na=la((()=>(0,t.Lk)("span",null,"/",-1))),oa={class:"pdl-10"},ra={class:"pdl-10"};function sa(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-checkbox"),i=(0,t.g2)("Delete"),c=(0,t.g2)("el-icon"),h=(0,t.g2)("el-button"),m=(0,t.g2)("Plus"),p=(0,t.g2)("el-form"),g=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(g,{modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]代理`,top:"1vh",width:"600"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(p,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"140"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"gateway",style:{"margin-bottom":"0"}},{default:(0,t.k6)((()=>[(0,t.eW)(" 配置代理,通过代理访问其它设备 ")])),_:1}),(0,t.bF)(s,{label:"代理端口",prop:"Port"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Port,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Port=e),style:{width:"14rem"}},null,8,["modelValue"])])),_:1}),(0,t.Lk)("div",aa,[(0,t.bF)(s,{label:"此设备局域网IP",prop:"LanIP",class:"lan-item"},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.ruleForm.Lans,((e,l)=>((0,t.uX)(),(0,t.CE)("div",{key:l,class:"flex",style:{"margin-bottom":".6rem"}},[(0,t.Lk)("div",ta,[(0,t.bF)(d,{modelValue:e.IP,"onUpdate:modelValue":l=>e.IP=l,style:{width:"14rem"}},null,8,["modelValue","onUpdate:modelValue"]),na,(0,t.bF)(d,{onChange:e=>n.handleMaskChange(l),modelValue:e.PrefixLength,"onUpdate:modelValue":l=>e.PrefixLength=l,style:{width:"4rem"}},null,8,["onChange","modelValue","onUpdate:modelValue"])]),(0,t.Lk)("div",oa,[(0,t.bF)(u,{modelValue:e.Disabled,"onUpdate:modelValue":l=>e.Disabled=l,label:"禁用记录",size:"large"},null,8,["modelValue","onUpdate:modelValue"])]),(0,t.Lk)("div",ra,[(0,t.bF)(h,{type:"danger",onClick:e=>n.handleDel(l)},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(i)])),_:1})])),_:2},1032,["onClick"]),(0,t.bF)(h,{type:"primary",onClick:e=>n.handleAdd(l)},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1})])),_:2},1032,["onClick"])])])))),128))])),_:1})]),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{onClick:l[1]||(l[1]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var da={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt},setup(e,{emit:l}){const a=(0,d.B)(),n=b(),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,machineName:n.value.current.device.MachineName,bufferSize:a.value.bufferSize,ruleForm:{Port:n.value.current.Port,Lans:n.value.current.Lans.slice(0)},rules:{}});0==r.ruleForm.Lans.length&&r.ruleForm.Lans.push({IP:"0.0.0.0",PrefixLength:24}),(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=e=>{var l=+r.ruleForm.Lans[e].PrefixLength;(l>32||l<16||isNaN(l))&&(l=24),r.ruleForm.Lans[e].PrefixLength=l},c=e=>{r.ruleForm.Lans.splice(e,1),0==r.ruleForm.Lans.length&&h(0)},h=e=>{r.ruleForm.Lans.splice(e+1,0,{IP:"0.0.0.0",PrefixLength:24})},m=()=>{const e=JSON.parse(JSON.stringify(n.value.current));e.Port=+(r.ruleForm.Port||"1805"),e.Lans=r.ruleForm.Lans.map((e=>(e.PrefixLength=+e.PrefixLength,e))),(0,k._Q)(e).then((()=>{r.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:r,ruleFormRef:o,handleMaskChange:s,handleDel:c,handleAdd:h,handleSave:m}}};const ua=(0,V.A)(da,[["render",sa],["__scopeId","data-v-022e3781"]]);var ia=ua;const ca=["title","src"],ha={key:1,title:"?",class:"system",src:"/system.svg"},ma=["title","src"],pa={key:3,title:"?",class:"system",src:"/system.svg"},ga={class:"flex"},wa=["title","onClick"];function ka(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(s,{prop:"tunnel",label:"网络",width:"76"},{default:(0,t.k6)((e=>[n.tunnel.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[(0,t.Lk)("div",null,[n.tunnel.list[e.row.MachineId].Net.CountryCode?((0,t.uX)(),(0,t.CE)("img",{key:0,title:`${n.tunnel.list[e.row.MachineId].Net.CountryCode}、${n.tunnel.list[e.row.MachineId].Net.City}`,class:"system",src:`https://unpkg.com/flag-icons@7.2.3/flags/4x3/${n.tunnel.list[e.row.MachineId].Net.CountryCode.toLowerCase()}.svg`},null,8,ca)):((0,t.uX)(),(0,t.CE)("img",ha)),n.tunnel.list[e.row.MachineId].Net.Isp?((0,t.uX)(),(0,t.CE)("img",{key:2,title:`${n.tunnel.list[e.row.MachineId].Net.Isp}`,class:"system",src:n.netImg(n.tunnel.list[e.row.MachineId].Net)},null,8,ma)):((0,t.uX)(),(0,t.CE)("img",pa))]),(0,t.Lk)("div",ga,[(0,t.Lk)("a",{href:"javascript:;",class:(0,z.C4)(["a-line",{yellow:n.tunnel.list[e.row.MachineId].NeedReboot}]),title:n.title(n.tunnel.list[e.row.MachineId]),onClick:l=>n.handleTunnel(n.tunnel.list[e.row.MachineId],e.row)},[(0,t.Lk)("span",null,"跳点 : "+(0,z.v_)(n.tunnel.list[e.row.MachineId].RouteLevel)+"+"+(0,z.v_)(n.tunnel.list[e.row.MachineId].RouteLevelPlus),1)],10,wa)])],64)):(0,t.Q3)("",!0)])),_:1})}var va=a(83);const fa=Symbol(),ba=()=>{(0,d.B)();const e=(0,u.KR)({timer:0,showEdit:!1,current:null,list:{},hashcode:0,showMap:!1});(0,t.Gt)(fa,e);const l=()=>{clearTimeout(e.value.timer),(0,va.r7)(e.value.hashcode.toString()).then((a=>{e.value.hashcode=a.HashCode,a.List&&(e.value.list=a.List),e.value.timer=setTimeout(l,1060)})).catch((()=>{e.value.timer=setTimeout(l,1060)}))},a=l=>{e.value.current=l,e.value.showEdit=!0},n=()=>{(0,va.gM)()},o=()=>{clearTimeout(e.value.timer)},r=l=>Object.values(e.value.list).sort(((e,l)=>e.RouteLevel+e.RouteLevelPlus-l.RouteLevel+l.RouteLevelPlus)).map((e=>e.MachineId));return{tunnel:e,_getTunnelInfo:l,handleTunnelEdit:a,handleTunnelRefresh:n,clearTunnelTimeout:o,sortTunnel:r}},Ca=()=>(0,t.WQ)(fa);var Fa={emits:["edit","refresh"],setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.config.Client.Id)),o=(0,t.EW)((()=>a.value.hasAccess("TunnelChangeSelf"))),r=(0,t.EW)((()=>a.value.hasAccess("TunnelChangeOther"))),s=Ca(),u=((0,Gl.ZY)(),(0,Gl.mx)()),i=(0,Gl.FG)(),c=(0,Gl.bB)(),h=e=>{let l=["调整网关层级有助于打洞成功"];return e.NeedReboot?"需要重启":l.join("\r\n")},m={chinanet:"chinanet.svg",china169:"chinanet.svg","china telecom":"chinanet.svg","china unicom":"chinaunicom.svg","china mobile":"chinamobile.svg",huawei:"huawei.svg",amazon:"amazon.svg",aliyun:"aliyun.svg",alibaba:"aliyun.svg"},p=new RegExp(Object.keys(m).map((e=>`\\b${e}\\b`)).join("|")),g=e=>{const l=e.Isp.toLowerCase();if(l){const e=l.match(p);if(e)return`./${m[e[0]]}`}return"./system.svg"},w=e=>{const l=[u.value.list[e],i.value.list[e],c.value.list[e]].filter((e=>!!e&&e.Connected)).length;return l},k=(e,a)=>{if(n.value===e.MachineId){if(!o.value)return}else if(!r.value)return;e.device=a,l("edit",e)},v=()=>{l("refresh")},f=e=>{l("connections",e)};return{tunnel:s,handleTunnel:k,handleTunnelRefresh:v,connectionCount:w,handleConnections:f,title:h,netImg:g}}};const ya=(0,V.A)(Fa,[["render",ka],["__scopeId","data-v-64b81c5b"]]);var Va=ya;const _a=e=>((0,t.Qi)("data-v-6941c158"),e=e(),(0,t.jt)(),e),Ea=_a((()=>(0,t.Lk)("div",null,"网关层级为你的设备与外网的距离,你可以手动调整数值",-1))),La={class:"pdl-20"},Pa=_a((()=>(0,t.Lk)("h3",null,"跳跃点",-1))),Ia={class:"pdl-20"},Ta={class:"t-c w-100"};function Sa(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-col"),i=(0,t.g2)("el-input-number"),c=(0,t.g2)("el-row"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]网关`,width:"560",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"",prop:"alert"},{default:(0,t.k6)((()=>[Ea])),_:1}),(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"网关层级",prop:"RouteLevel"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{readonly:"",modelValue:n.state.ruleForm.RouteLevel,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.RouteLevel=e),style:{width:"15rem"}},null,8,["modelValue"])])),_:1})])),_:1}),(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"加上",prop:"RouteLevelPlus"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.RouteLevelPlus,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.RouteLevelPlus=e)},null,8,["modelValue"])])),_:1})])),_:1})])),_:1})])),_:1}),(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"外网端口",prop:"PortMapWan"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.PortMapWan,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PortMapWan=e)},null,8,["modelValue"])])),_:1})])),_:1}),(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"内网端口",prop:"PortMapLan"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.PortMapLan,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleForm.PortMapLan=e)},null,8,["modelValue"])])),_:1})])),_:1})])),_:1})])),_:1}),n.state.net.HostName?((0,t.uX)(),(0,t.Wv)(s,{key:0,label:"",prop:"alert"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("h3",null,(0,z.v_)(n.state.net.HostName),1),(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.net.Lans.filter((e=>e.Ips.length>0)),((e,l)=>((0,t.uX)(),(0,t.CE)("li",null,[(0,t.Lk)("div",null,"【"+(0,z.v_)(e.Mac||"00-00-00-00-00-00")+"】"+(0,z.v_)(e.Desc),1),(0,t.Lk)("div",La,(0,z.v_)(e.Ips.join("、")),1)])))),256))]),Pa,(0,t.Lk)("div",Ia,(0,z.v_)(n.state.net.Routes.join("、")),1)])])),_:1})):(0,t.Q3)("",!0),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ta,[(0,t.bF)(h,{onClick:l[4]||(l[4]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var Ma={props:["modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=Ca(),n=(0,u.KR)(null),o=(0,u.Kh)({show:!0,machineName:a.value.current.device.MachineName,ruleForm:{RouteLevel:a.value.current.RouteLevel,RouteLevelPlus:a.value.current.RouteLevelPlus,PortMapWan:a.value.current.PortMapWan,PortMapLan:a.value.current.PortMapLan},rules:{},net:{}});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{const e=JSON.parse(JSON.stringify(a.value.current));e.RouteLevel=+o.ruleForm.RouteLevel,e.RouteLevelPlus=+o.ruleForm.RouteLevelPlus,e.PortMapWan=+o.ruleForm.PortMapWan,e.PortMapLan=+o.ruleForm.PortMapLan,(0,va.KW)(e).then((()=>{o.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return(0,t.sV)((()=>{(0,va.Zu)(a.value.current.MachineId).then((e=>{o.net=e})).catch((()=>{}))})),{state:o,ruleFormRef:n,handleSave:r,tunnel:a}}};const Wa=(0,V.A)(Ma,[["render",Sa],["__scopeId","data-v-6941c158"]]);var Aa=Wa;const Ra=["onClick"],Xa=["onClick"],Na=["onClick"],Ua=["onClick"];function Ba(e,l,a,n,o,r){const s=(0,t.g2)("ConnectionShow"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"forward",label:"转发/穿透"},{default:(0,t.k6)((l=>[l.row.Connected?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[l.row.isSelf&&(n.hasForwardShowSelf||e.hasForwardSelf)?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[(0,t.Lk)("div",null,[(0,t.bF)(s,{data:n.connections.list[l.row.MachineId],row:l.row},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的端口转发",class:(0,z.C4)({green:n.forward.list[l.row.MachineId]>0}),onClick:e=>n.handleEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.forward.list[l.row.MachineId]>0})},"端口转发("+(0,z.v_)(n.forward.list[l.row.MachineId]>99?"99+":n.forward.list[l.row.MachineId])+")",3)],10,Ra)]),(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的内网穿透",class:(0,z.C4)({green:n.sforward.list[l.row.MachineId]>0}),onClick:e=>n.handleSEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.sforward.list[l.row.MachineId]>0})},"内网穿透("+(0,z.v_)(n.sforward.list[l.row.MachineId]>99?"99+":n.sforward.list[l.row.MachineId])+")",3)],10,Xa)])],64)):n.hasForwardShowOther||e.hasForwardOther?((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.Lk)("div",null,[(0,t.bF)(s,{data:n.connections.list[l.row.MachineId],row:l.row},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的端口转发",class:(0,z.C4)({green:n.forward.list[l.row.MachineId]>0}),onClick:e=>n.handleEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.forward.list[l.row.MachineId]>0})},"端口转发("+(0,z.v_)(n.forward.list[l.row.MachineId]>99?"99+":n.forward.list[l.row.MachineId])+")",3)],10,Na)]),(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的内网穿透",class:(0,z.C4)({green:n.sforward.list[l.row.MachineId]>0}),onClick:e=>n.handleSEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.sforward.list[l.row.MachineId]>0})},"内网穿透("+(0,z.v_)(n.sforward.list[l.row.MachineId]>99?"99+":n.sforward.list[l.row.MachineId])+")",3)],10,Ua)])],64)):(0,t.Q3)("",!0)],64)):(0,t.Q3)("",!0)])),_:1})}var xa=a(743);const $a=Symbol(),za=()=>{const e=(0,d.B)(),l=((0,t.EW)((()=>e.value.config.Client.Id)),(0,u.KR)({timer:0,showEdit:!1,showCopy:!1,list:{},testTimer:0,hashcode:0,machineid:"",machineName:""}));(0,t.Gt)($a,l);const a=()=>{(0,xa.a9)()},n=()=>{clearTimeout(l.value.timer),(0,xa.gz)(l.value.hashcode.toString()).then((e=>{l.value.hashcode=e.HashCode,e.List&&(l.value.list=e.List),l.value.timer=setTimeout(n,1020)})).catch((()=>{l.value.timer=setTimeout(n,1020)}))},o=e=>{l.value.machineid=e[0],l.value.machineName=e[1],l.value.showEdit=!0},r=()=>{clearTimeout(l.value.timer),clearTimeout(l.value.testTimer)};return{sforward:l,_getSForwardCountInfo:n,handleSForwardEdit:o,clearSForwardTimeout:r,handleSForwardRefresh:a}},Da=()=>(0,t.WQ)($a);var Ka={emits:["edit","sedit"],components:{ConnectionShow:jl.A},setup(e,{emit:l}){const a=w(),n=Da(),o=(0,d.B)(),r=(0,t.EW)((()=>o.value.config.Client.Id)),s=(0,t.EW)((()=>o.value.hasAccess("ForwardShowSelf"))),u=(0,t.EW)((()=>o.value.hasAccess("ForwardShowOther"))),i=(0,t.EW)((()=>o.value.hasAccess("ForwardSelf"))),c=(0,t.EW)((()=>o.value.hasAccess("ForwardOther"))),h=(0,Gl.mx)(),m=(e,a)=>{if(r.value===e){if(!i.value)return}else if(!c.value)return;l("edit",[e,a])},p=(e,a)=>{if(r.value===e){if(!i.value)return}else if(!c.value)return;l("sedit",[e,a])},g=()=>{l("refresh")};return{forward:a,sforward:n,hasForwardShowSelf:s,hasForwardShowOther:u,connections:h,handleEdit:m,handleSEdit:p,handleForwardRefresh:g}}};const Qa=(0,V.A)(Ka,[["render",Ba],["__scopeId","data-v-2ee190a4"]]);var Oa=Qa;const Ga={class:"t-c head"},ja=["title"],qa={class:"t-c"},Ha={class:"page-wrap"},Ja={key:0},Za={key:1,class:"error red",title:"off line"},Ya=["title"];function et(e,l,a,n,o,r){const s=(0,t.g2)("el-button"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-table-column"),i=(0,t.g2)("el-option"),c=(0,t.g2)("el-select"),h=(0,t.g2)("el-pagination"),m=(0,t.g2)("el-switch"),p=(0,t.g2)("Delete"),g=(0,t.g2)("el-icon"),w=(0,t.g2)("el-popconfirm"),k=(0,t.g2)("el-table"),v=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(v,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),onOpen:n.handleOnShowList,"append-to":".app-wrap",title:`【${n.state.machineName}】的端口转发`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("div",Ga,[(0,t.bF)(s,{type:"success",size:"small",onClick:n.handleAdd,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("添加")])),_:1},8,["onClick","loading"]),(0,t.bF)(s,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)("刷新")])),_:1},8,["onClick"])]),(0,t.bF)(k,{data:n.state.data,size:"small",border:"",height:"500",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(u,{property:"Name",label:"名称",width:"100"},{default:(0,t.k6)((e=>[e.row.NameEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Name,"onUpdate:modelValue":l=>e.row.Name=l,onBlur:l=>n.handleEditBlur(e.row,"Name")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.Name),1)],64))])),_:1}),(0,t.bF)(u,{prop:"BufferSize",label:"缓冲区",width:"80"},{default:(0,t.k6)((e=>[e.row.BufferSizeEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.BufferSize,"onUpdate:modelValue":l=>e.row.BufferSize=l,placeholder:"Select",size:"small",disabled:e.row.Started,onChange:l=>n.handleEditBlur(e.row,"BufferSize")},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.bufferSize,((e,l)=>((0,t.uX)(),(0,t.Wv)(i,{key:l,label:e,value:l},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","disabled","onChange"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(n.state.bufferSize[e.row.BufferSize]),1)],64))])),_:1}),(0,t.bF)(u,{property:"BindIPAddress",label:"监听IP",width:"140"},{default:(0,t.k6)((e=>[e.row.BindIPAddressEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.BindIPAddress,"onUpdate:modelValue":l=>e.row.BindIPAddress=l,size:"small",disabled:e.row.Started,onChange:l=>n.handleEditBlur(e.row,"BindIPAddress")},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.ips,(e=>((0,t.uX)(),(0,t.Wv)(i,{key:e,label:e,value:e},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","disabled","onChange"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.BindIPAddress),1)],64))])),_:1}),(0,t.bF)(u,{property:"Port",label:"监听端口",width:"80"},{default:(0,t.k6)((e=>[e.row.PortEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,type:"number",autofocus:"",size:"small",modelValue:e.row.Port,"onUpdate:modelValue":l=>e.row.Port=l,onBlur:l=>n.handleEditBlur(e.row,"Port")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Msg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.Msg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.Port),1)],8,ja)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.Port),3))],64))])),_:1}),(0,t.bF)(u,{property:"MachineId",label:"目标"},{default:(0,t.k6)((e=>[e.row.MachineIdEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.MachineId,"onUpdate:modelValue":l=>e.row.MachineId=l,onChange:l=>n.handleEditBlur(e.row,"MachineId"),filterable:"",remote:"",loading:n.state.loading,"remote-method":n.handleSearch},{header:(0,t.k6)((()=>[(0,t.Lk)("div",qa,[(0,t.Lk)("div",Ha,[(0,t.bF)(h,{small:"",background:"",layout:"prev, pager, next","page-size":n.state.machineIds.Request.Size,total:n.state.machineIds.Count,"pager-count":5,"current-page":n.state.machineIds.Request.Page,onCurrentChange:n.handlePageChange},null,8,["page-size","total","current-page","onCurrentChange"])])])])),default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.machineIds.List,((e,l)=>((0,t.uX)(),(0,t.Wv)(i,{key:l,label:e.MachineName,value:e.MachineId},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","onChange","loading","remote-method"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[n.state.names[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("span",Ja,(0,z.v_)(e.row.MachineName),1)):((0,t.uX)(),(0,t.CE)("span",Za,(0,z.v_)(e.row.MachineName),1))],64))])),_:1}),(0,t.bF)(u,{property:"TargetEP",label:"目标服务",width:"140"},{default:(0,t.k6)((e=>[e.row.TargetEPEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.TargetEP,"onUpdate:modelValue":l=>e.row.TargetEP=l,onBlur:l=>n.handleEditBlur(e.row,"TargetEP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.TargetMsg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.TargetMsg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.TargetEP),1)],8,Ya)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.TargetEP),3))],64))])),_:1}),(0,t.bF)(u,{property:"Started",label:"状态",width:"60"},{default:(0,t.k6)((e=>[(0,t.bF)(m,{modelValue:e.row.Started,"onUpdate:modelValue":l=>e.row.Started=l,onChange:l=>n.handleStartChange(e.row),"inline-prompt":"","active-text":"开","inactive-text":"关"},null,8,["modelValue","onUpdate:modelValue","onChange"])])),_:1}),(0,t.bF)(u,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.bF)(w,{"confirm-button-text":"确认","cancel-button-text":"取消",title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.row.Id)},{reference:(0,t.k6)((()=>[(0,t.bF)(s,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(g,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])])),_:1})])),_:1},8,["data","onCellDblclick"])])])),_:1},8,["modelValue","onOpen","title"])}var lt={props:["data","modelValue"],emits:["update:modelValue"],components:{Delete:F.epd},setup(e,{emit:l}){const a=(0,d.B)(),n=w(),o=(0,u.Kh)({show:!0,machineId:n.value.machineId,machineName:n.value.machineName,data:[],ips:[],bufferSize:a.value.bufferSize,loading:!1,machineIds:{Request:{Page:1,Size:10,Name:""},Count:0,List:[]},timer:0,timer1:0,editing:!1,names:{}});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{clearTimeout(o.timer),(0,m.lE)(n.value.machineId).then((e=>{o.timer=setTimeout(r,1e3)})).catch((()=>{o.timer=setTimeout(r,1e3)}))},s=()=>{(0,m.xD)().then((e=>{e.splice(0,0,"127.0.0.1"),e.splice(0,0,"0.0.0.0"),o.ips=e})).catch((()=>{}))},c=()=>{clearTimeout(o.timer1),0==o.editing?(0,m.Oy)(o.machineId).then((e=>{o.data=e,o.timer1=setTimeout(c,1e3)})).catch((()=>{o.timer1=setTimeout(c,1e3)})):o.timer1=setTimeout(c,1e3)},h=()=>{c(),i.nk.success("已刷新")},p=()=>{(0,S.NT)().then((e=>{o.names=e.filter((e=>e.Online)).reduce(((e,l)=>(e[l.MachineId]=!0,e)),{})})).catch((()=>{}))},g=e=>{o.machineIds.Request.Name=e,k()},k=()=>{o.loading=!0,(0,S.BS)(o.machineIds.Request).then((e=>{o.loading=!1,o.machineIds.Request=e.Request,o.machineIds.Count=e.Count,o.machineIds.List=e.List})).catch((e=>{o.loading=!1}))},v=e=>{o.machineIds.Request.Page=e,k()},f=()=>{k()},b=(e,l)=>{F(e,l.property)},C=()=>{E({ID:0,Name:"",Port:0,TargetEP:"127.0.0.1:80",machineId:""})},F=(e,l)=>{e.Started?i.nk.error("请先停止"):(o.data.forEach((e=>{e["NameEditing"]=!1,e["PortEditing"]=!1,e["TargetEPEditing"]=!1,e["BindIPAddressEditing"]=!1,e["BufferSizeEditing"]=!1,e["MachineIdEditing"]=!1})),e[`${l}Editing`]=!0,o.editing=!0)},y=(e,l)=>{if(e.Started)return void i.nk.error("请先停止");e[`${l}Editing`]=!1,o.editing=!1;const a=o.machineIds.List.find((l=>l.MachineId==e.MachineId));a&&(e.MachineName=a.MachineName),E(e)},V=e=>{(0,m.we)({machineId:o.machineId,Id:e}).then((()=>{c()}))},_=e=>{E(e)},E=e=>{o.loading=!0,e.Port=parseInt(e.Port),(0,m.nH)({machineId:o.machineId,data:e}).then((()=>{o.loading=!1,c()})).catch((e=>{o.loading=!1,i.nk.error(e)}))};return(0,t.sV)((()=>{c(),s(),r(),p()})),(0,t.hi)((()=>{clearTimeout(o.timer),clearTimeout(o.timer1)})),{state:o,handleOnShowList:f,handleCellClick:b,handleRefresh:h,handleAdd:C,handleEdit:F,handleEditBlur:y,handleDel:V,handleStartChange:_,handleSearch:g,handlePageChange:v}}};const at=(0,V.A)(lt,[["render",et],["__scopeId","data-v-190226d8"]]);var tt=at;const nt={class:"t-c head"},ot={class:"plan"},rt=["title"],st=["title"];function dt(e,l,a,n,o,r){const s=(0,t.g2)("el-button"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-table-column"),i=(0,t.g2)("Select"),c=(0,t.g2)("el-icon"),h=(0,t.g2)("PlanShow"),m=(0,t.g2)("CloseBold"),p=(0,t.g2)("WarnTriangleFilled"),g=(0,t.g2)("el-switch"),w=(0,t.g2)("Delete"),k=(0,t.g2)("el-popconfirm"),v=(0,t.g2)("el-table"),f=(0,t.g2)("el-dialog"),b=(0,t.g2)("PlanList");return(0,t.uX)(),(0,t.Wv)(b,{ref:"planDom",machineid:n.machineId,category:"sforward",handles:n.state.handles},{default:(0,t.k6)((()=>[(0,t.bF)(f,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),onOpen:n.handleOnShowList,"append-to":".app-wrap",title:`【${n.machineName}】的内网穿透`,top:"2vh",width:"760"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("div",nt,[(0,t.bF)(s,{type:"success",size:"small",onClick:n.handleAdd,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("添加")])),_:1},8,["onClick","loading"]),(0,t.bF)(s,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)("刷新")])),_:1},8,["onClick"])]),(0,t.bF)(v,{data:n.state.data,size:"small",border:"",height:"500",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(u,{property:"Name",label:"名称"},{default:(0,t.k6)((e=>[e.row.NameEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Name,"onUpdate:modelValue":l=>e.row.Name=l,onBlur:l=>n.handleEditBlur(e.row,"Name")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.Name),1)],64))])),_:1}),(0,t.bF)(u,{prop:"Plan",label:"开启和关闭计划",width:"200"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",ot,[(0,t.Lk)("p",null,[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(i)])),_:1}),(0,t.bF)(h,{handle:"start",keyid:e.row.Id},null,8,["keyid"])]),(0,t.Lk)("p",null,[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.bF)(h,{handle:"stop",keyid:e.row.Id},null,8,["keyid"])])])])),_:1}),(0,t.bF)(u,{property:"Temp",label:"服务器端口/域名",width:"160"},{default:(0,t.k6)((e=>[e.row.TempEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Temp,"onUpdate:modelValue":l=>e.row.Temp=l,onBlur:l=>n.handleEditBlur(e.row,"Temp")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Msg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.Msg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.Temp),1),(0,t.bF)(c,{size:"20"},{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})],8,rt)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.Temp),3))],64))])),_:1}),(0,t.bF)(u,{property:"LocalEP",label:"本机服务",width:"140"},{default:(0,t.k6)((e=>[e.row.LocalEPEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.LocalEP,"onUpdate:modelValue":l=>e.row.LocalEP=l,onBlur:l=>n.handleEditBlur(e.row,"LocalEP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.LocalMsg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.LocalMsg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.LocalEP),1),(0,t.bF)(c,{size:"20"},{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})],8,st)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.LocalEP),3))],64))])),_:1}),(0,t.bF)(u,{property:"Started",label:"状态",width:"60"},{default:(0,t.k6)((e=>[(0,t.bF)(g,{disabled:"",modelValue:e.row.Started,"onUpdate:modelValue":l=>e.row.Started=l,"inline-prompt":"","active-text":"是","inactive-text":"否",onClick:l=>n.handleStartChange(e.row)},null,8,["modelValue","onUpdate:modelValue","onClick"])])),_:1}),(0,t.bF)(u,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.bF)(k,{"confirm-button-text":"确认","cancel-button-text":"取消",title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.row.Id)},{reference:(0,t.k6)((()=>[(0,t.bF)(s,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(w)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])])),_:1})])),_:1},8,["data","onCellDblclick"])])])),_:1},8,["modelValue","onOpen","title"])])),_:1},8,["machineid","handles"])}function ut(e,l,a,n,o,r){const s=(0,t.g2)("PlanEdit");return(0,t.uX)(),(0,t.CE)("div",null,[(0,t.RG)(e.$slots,"default"),n.plan.showEdit?((0,t.uX)(),(0,t.Wv)(s,{key:0,modelValue:n.plan.showEdit,"onUpdate:modelValue":l[0]||(l[0]=e=>n.plan.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0)])}var it=a(4);const ct=(e,l)=>(0,it.zG)("plan/get",{machineId:e,category:l}),ht=(e,l)=>(0,it.zG)("plan/add",{machineId:e,plan:l}),mt=(e,l)=>(0,it.zG)("plan/remove",{machineId:e,planId:l}),pt={key:0,class:"mgl-2"},gt={class:"w-100"},wt=(0,t.Lk)("span",null,"的",-1),kt={class:"w-100 mgt-1"},vt={class:"w-100"},ft={class:"w-100 mgt-1"},bt={class:"w-100"},Ct={class:"w-100 mgt-1"},Ft={class:"w-100"},yt=(0,t.Lk)("span",null,"的",-1),Vt={class:"mgt-1 w-100"},_t={class:"mgt-1 w-100"},Et=(0,t.Lk)("span",null,"后",-1),Lt={class:"t-c w-100"};function Pt(e,l,a,n,o,r){const s=(0,t.g2)("el-option"),d=(0,t.g2)("el-select"),u=(0,t.g2)("el-form-item"),i=(0,t.g2)("el-input"),c=(0,t.g2)("el-switch"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[30]||(l[30]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:"计划任务",top:"2vh",width:"450"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{label:"执行操作",prop:"Handle"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Handle,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Handle=e),style:{width:"10rem"},disabled:""},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.handles,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"执行方式",prop:"Method"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Method,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.Method=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.methods,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue","onChange"]),n.state.ruleForm.Method>=2?((0,t.uX)(),(0,t.CE)("strong",pt,(0,z.v_)(n.state.ruleForm.Rule),1)):(0,t.Q3)("",!0)])),_:1}),2==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:0,label:"在",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",gt,[(0,t.bF)(d,{modelValue:n.state.ruleAt.type,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleAt.type=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[(0,t.bF)(s,{value:2,label:"每月"}),(0,t.bF)(s,{value:3,label:"每日"}),(0,t.bF)(s,{value:4,label:"每时"}),(0,t.bF)(s,{value:5,label:"每分"})])),_:1},8,["modelValue","onChange"]),(0,t.eW)(),wt]),(0,t.Lk)("div",kt,[n.state.ruleAt.type<2?((0,t.uX)(),(0,t.Wv)(i,{key:0,onChange:n.handleChange,modelValue:n.state.ruleAt.month,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleAt.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<3?((0,t.uX)(),(0,t.Wv)(i,{key:1,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<2}),modelValue:n.state.ruleAt.day,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.ruleAt.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<4?((0,t.uX)(),(0,t.Wv)(i,{key:2,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<3}),modelValue:n.state.ruleAt.hour,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.ruleAt.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<5?((0,t.uX)(),(0,t.Wv)(i,{key:3,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<4}),modelValue:n.state.ruleAt.min,"onUpdate:modelValue":l[6]||(l[6]=e=>n.state.ruleAt.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),(0,t.bF)(i,{onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<5}),modelValue:n.state.ruleAt.sec,"onUpdate:modelValue":l[7]||(l[7]=e=>n.state.ruleAt.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","class","modelValue"])])])),_:1})):(0,t.Q3)("",!0),4==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:1,label:"每",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",vt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTimer.year,"onUpdate:modelValue":l[8]||(l[8]=e=>n.state.ruleTimer.year=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("年")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.month,"onUpdate:modelValue":l[9]||(l[9]=e=>n.state.ruleTimer.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.day,"onUpdate:modelValue":l[10]||(l[10]=e=>n.state.ruleTimer.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",ft,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTimer.hour,"onUpdate:modelValue":l[11]||(l[11]=e=>n.state.ruleTimer.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.min,"onUpdate:modelValue":l[12]||(l[12]=e=>n.state.ruleTimer.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.sec,"onUpdate:modelValue":l[13]||(l[13]=e=>n.state.ruleTimer.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"])])])),_:1})):(0,t.Q3)("",!0),8==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:2,label:"Cron",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",bt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleCron.sec,"onUpdate:modelValue":l[14]||(l[14]=e=>n.state.ruleCron.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.min,"onUpdate:modelValue":l[15]||(l[15]=e=>n.state.ruleCron.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.hour,"onUpdate:modelValue":l[16]||(l[16]=e=>n.state.ruleCron.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",Ct,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleCron.day,"onUpdate:modelValue":l[17]||(l[17]=e=>n.state.ruleCron.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.month,"onUpdate:modelValue":l[18]||(l[18]=e=>n.state.ruleCron.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.week,"onUpdate:modelValue":l[19]||(l[19]=e=>n.state.ruleCron.week=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("周")])),_:1},8,["onChange","modelValue"])])])),_:1})):(0,t.Q3)("",!0),16==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:3,label:"在",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ft,[(0,t.bF)(d,{modelValue:n.state.ruleForm.TriggerHandle,"onUpdate:modelValue":l[20]||(l[20]=e=>n.state.ruleForm.TriggerHandle=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.triggers,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue","onChange"]),(0,t.eW)(),yt]),(0,t.Lk)("div",Vt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTrigger.year,"onUpdate:modelValue":l[21]||(l[21]=e=>n.state.ruleTrigger.year=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("年")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.month,"onUpdate:modelValue":l[22]||(l[22]=e=>n.state.ruleTrigger.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.day,"onUpdate:modelValue":l[23]||(l[23]=e=>n.state.ruleTrigger.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",_t,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTrigger.hour,"onUpdate:modelValue":l[24]||(l[24]=e=>n.state.ruleTrigger.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.min,"onUpdate:modelValue":l[25]||(l[25]=e=>n.state.ruleTrigger.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.sec,"onUpdate:modelValue":l[26]||(l[26]=e=>n.state.ruleTrigger.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"]),Et])])),_:1})):(0,t.Q3)("",!0),(0,t.bF)(u,{label:"内容",prop:"Value"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{type:"textarea",resize:"none",rows:"5",modelValue:n.state.ruleForm.Value,"onUpdate:modelValue":l[27]||(l[27]=e=>n.state.ruleForm.Value=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"禁用",prop:"Disabled"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{modelValue:n.state.ruleForm.Disabled,"onUpdate:modelValue":l[28]||(l[28]=e=>n.state.ruleForm.Disabled=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Lt,[(0,t.bF)(h,{onClick:l[29]||(l[29]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick","loading"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue"])}var It={props:["data","modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=/(\d+|\*)-(\d+|\*)-(\d+|\*)\s+(\d+|\*):(\d+|\*):(\d+|\*)/,n=/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/,o=/(.+)\s+(.+)\s+(.+)\s+(.+)\s+(.+)\s+(.+)/,r=(0,u.KR)(null),s=(0,t.WQ)("plan");!s.value.current.TriggerHandle&&s.value.triggers.length>0&&(s.value.current.TriggerHandle=s.value.triggers[0].value);const d=(0,u.Kh)({show:!0,loading:!1,ruleCron:{week:"*",month:"*",day:"*",hour:"*",min:"*",sec:"30"},ruleAt:{type:3,month:"*",day:"*",hour:0,min:0,sec:0},ruleTimer:{year:0,month:0,day:0,hour:0,min:0,sec:30},ruleTrigger:{year:0,month:0,day:0,hour:0,min:0,sec:30},ruleForm:{Id:s.value.current.Id,Category:s.value.current.Category,Key:s.value.current.Key,Value:s.value.current.Value,Rule:s.value.current.Rule,Handle:s.value.current.Handle,Method:s.value.current.Method,Disabled:s.value.current.Disabled,TriggerHandle:s.value.current.TriggerHandle},rules:{}});(0,t.wB)((()=>d.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const i={2:e=>{if(e=e||"*-*-* 0:0:0",0==a.test(e))return;const[,l,t,n,o,r,s]=e.match(a);"*"==r?d.ruleAt.type=5:"*"==o?d.ruleAt.type=4:"*"==n?d.ruleAt.type=3:"*"==t&&(d.ruleAt.type=2),d.ruleAt.year=l,d.ruleAt.month=t,d.ruleAt.day=n,d.ruleAt.hour=o,d.ruleAt.min=r,d.ruleAt.sec=s},4:e=>{if(e=e||"0-0-0 0:0:30",0==n.test(e))return;const[,l,a,t,o,r,s]=e.match(n);d.ruleTimer.year=l,d.ruleTimer.month=a,d.ruleTimer.day=t,d.ruleTimer.hour=o,d.ruleTimer.min=r,d.ruleTimer.sec=s},8:e=>{if(e=e||"30 * * * * ?",0==o.test(e))return;const[,l,a,t,n,r,s]=e.match(o);d.ruleCron.sec=l,d.ruleCron.min=a,d.ruleCron.hour=t,d.ruleCron.day=n,d.ruleCron.month=r,d.ruleCron.week=s},16:e=>{if(e=e||"0-0-0 0:0:30",0==n.test(e))return;const[,l,a,t,o,r,s]=e.match(n);d.ruleTrigger.year=l,d.ruleTrigger.month=a,d.ruleTrigger.day=t,d.ruleTrigger.hour=o,d.ruleTrigger.min=r,d.ruleTrigger.sec=s}},c=()=>{d.ruleForm.Method in i&&i[d.ruleForm.Method](d.ruleForm.Rule)},h={2:()=>{switch(d.ruleAt.type){case 2:return`*-*-${d.ruleAt.day} ${d.ruleAt.hour}:${d.ruleAt.min}:${d.ruleAt.sec}`;case 3:return`*-*-* ${d.ruleAt.hour}:${d.ruleAt.min}:${d.ruleAt.sec}`;case 4:return`*-*-* *:${d.ruleAt.min}:${d.ruleAt.sec}`;case 5:return`*-*-* *:*:${d.ruleAt.sec}`}return""},4:()=>`${d.ruleTimer.year}-${d.ruleTimer.month}-${d.ruleTimer.day} ${d.ruleTimer.hour}:${d.ruleTimer.min}:${d.ruleTimer.sec}`,8:()=>`${d.ruleCron.sec} ${d.ruleCron.min} ${d.ruleCron.hour} ${d.ruleCron.day} ${d.ruleCron.month} ${d.ruleCron.week}`,16:()=>`${d.ruleTrigger.year}-${d.ruleTrigger.month}-${d.ruleTrigger.day} ${d.ruleTrigger.hour}:${d.ruleTrigger.min}:${d.ruleTrigger.sec}`},m=()=>{d.ruleForm.Method in h&&(d.ruleForm.Rule=h[d.ruleForm.Method]())},p=()=>{m()},g=()=>{const e=JSON.parse(JSON.stringify(d.ruleForm));d.loading=!0,ht(s.value.machineid,e).then((e=>{d.loading=!1,d.show=!1})).catch((()=>{d.loading=!1}))};return(0,t.sV)((()=>{c(),p()})),{state:d,ruleFormRef:r,plan:s,handleChange:p,handleSave:g}}};const Tt=(0,V.A)(It,[["render",Pt]]);var St=Tt,Mt={components:{PlanEdit:St},props:["machineid","category","handles"],setup(e){const l=(0,u.KR)({machineid:e.machineid,timer:0,list:{},current:{},showEdit:!1,category:e.category||"",handles:e.handles||[],handleJson:(e.handles||[]).reduce(((e,l,a)=>(e[l.value]=l.label,e)),{}),triggers:[],methods:[{label:"手动",value:0},{label:"启动后",value:1},{label:"到点",value:2},{label:"定时",value:4},{label:"Cron",value:8},{label:"触发",value:16}]});(0,t.Gt)("plan",l);const a=()=>{clearTimeout(l.value.timer),ct(l.value.machineid,e.category).then((e=>{l.value.list=e.reduce(((e,l,a)=>(e[`${l.Key}-${l.Handle}`]=l,e)),{}),l.value.timer=setTimeout(a,1e3)})).catch((()=>{l.value.timer=setTimeout(a,1e3)}))},n=(e,t)=>{const n=l.value.list[`${e}-${t}`];n&&mt(l.value.machineid,n.Id).then((()=>{a()}))};return(0,t.sV)((()=>{a()})),(0,t.hi)((()=>{clearTimeout(l.value.timer)})),{plan:l,remove:n}}};const Wt=(0,V.A)(Mt,[["render",ut]]);var At=Wt;const Rt={key:0},Xt={key:1};function Nt(e,l,a,n,o,r){return(0,t.uX)(),(0,t.CE)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=(...e)=>n.handleEdit&&n.handleEdit(...e))},[n.item?((0,t.uX)(),(0,t.CE)("span",Rt,(0,z.v_)(n.rule),1)):((0,t.uX)(),(0,t.CE)("span",Xt,"未设置"))])}var Ut={props:["keyid","handle"],setup(e){const l=/(\d+|\*)-(\d+|\*)-(\d+|\*)\s+(\d+|\*):(\d+|\*):(\d+|\*)/,a=/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/,n={0:()=>"手动",1:()=>"网络启动后",2:(e,a)=>{if(0==l.test(a))return a;const[,t,n,o,r,s,d]=a.match(l);return"*"==s?`每分钟的${d}秒`:"*"==r?`每小时的${s}分${d}秒`:"*"==o?`每天的${r}时${s}分${d}秒`:"*"==n?`每月的${o}日${r}时${s}分${d}秒`:"*"==t?`每年的${n}月${o}日${r}时${s}分${d}秒`:void 0},4:(e,l)=>{if(0==a.test(l))return l;const[,t,n,o,r,s,d]=l.match(a),u=[];return"0"!=t&&u.push(`${t}年`),"0"!=n&&u.push(`${n}月`),"0"!=o&&u.push(`${o}日`),"0"!=r&&u.push(`${r}时`),"0"!=s&&u.push(`${s}分`),"0"!=d&&u.push(`${d}秒`),`每${u.join("")}`},8:(e,l)=>`Cron : ${l}`,16:(e,l)=>{if(0==a.test(l))return l;const[,t,n,r,s,d,u]=l.match(a),i=[];return"0"!=t&&i.push(`${t}年`),"0"!=n&&i.push(`${n}月`),"0"!=r&&i.push(`${r}日`),"0"!=s&&i.push(`${s}时`),"0"!=d&&i.push(`${d}分`),"0"!=u&&i.push(`${u}秒`),`在【${o.value.handleJson[e.TriggerHandle]}】的${i.join("")}后`}},o=(0,t.WQ)("plan"),r=(0,t.EW)((()=>o.value.list[`${e.keyid}-${e.handle}`])),s=(0,t.EW)((()=>{if(!r.value)return"";const e=r.value.Method;return n[e]?n[e](r.value,r.value.Rule):r.value.Rule})),d=()=>{o.value.current=r.value||{Id:0,Category:o.value.category,Key:`${e.keyid}`,Handle:e.handle,Value:"",Disabled:!1,TriggerHandle:"",Method:2,Rule:""},o.value.triggers=JSON.parse(JSON.stringify(o.value.handles.filter((l=>l.value!=e.handle)))),o.value.showEdit=!0};return{item:r,rule:s,handleEdit:d}}};const Bt=(0,V.A)(Ut,[["render",Nt]]);var xt=Bt,$t={props:["data","modelValue"],emits:["update:modelValue"],components:{WarnTriangleFilled:F.DtC,Delete:F.epd,Select:F.l6P,CloseBold:F.QBJ,PlanList:At,PlanShow:xt},setup(e,{emit:l}){const a=(0,u.KR)(null),n=(0,d.B)(),o=Da(),r=(0,u.Kh)({bufferSize:n.value.bufferSize,show:!0,data:[],timer:0,timer1:0,editing:!1,loading:!1,handles:[{label:"开启",value:"start"},{label:"关闭",value:"stop"}]});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{clearTimeout(r.timer),(0,xa.eX)(o.value.machineid).then((e=>{r.timer=setTimeout(s,1e3)})).catch((()=>{r.timer=setTimeout(s,1e3)}))},c=()=>{clearTimeout(r.timer1),0==r.editing?(0,xa.pY)(o.value.machineid).then((e=>{e.forEach((e=>{e.Temp=(e.Domain||e.RemotePort).toString(),e.RemotePort=0,e.Domain=""})),r.data=e,r.timer1=setTimeout(c,1e3)})).catch((()=>{r.timer1=setTimeout(c,1e3)})):r.timer1=setTimeout(c,1e3)},h=()=>{c()},m=(e,l)=>{w(e,l.property)},p=()=>{c(),i.nk.success("已刷新")},g=()=>{r.loading=!0;const e={Id:0,Name:"",RemotePort:0,LocalEP:"127.0.0.1:80",Domain:"",Temp:""};(0,xa.Qs)({machineid:o.value.machineid,data:e}).then((()=>{r.loading=!1,setTimeout((()=>{c()}),100)})).catch((e=>{r.loading=!1,i.nk.error(e)}))},w=(e,l)=>{e.Started?i.nk.error("请先停止运行"):(r.data.forEach((e=>{e["NameEditing"]=!1,e["RemotePortEditing"]=!1,e["LocalEPEditing"]=!1,e["DomainEditing"]=!1,e["TempEditing"]=!1})),e[`${l}Editing`]=!0,r.editing=!0)},k=(e,l)=>{e.Started?i.nk.error("请先停止运行"):(e[`${l}Editing`]=!1,r.editing=!1,b(e))},v=e=>{a.value.remove(e,"start"),a.value.remove(e,"stop"),(0,xa.DY)({machineid:o.value.machineid,id:e}).then((()=>{r.loading=!1,c()})).catch((e=>{r.loading=!1,i.nk.error(e)}))},f=e=>{r.loading=!0;const l=e.Started?(0,xa.JT)({machineid:o.value.machineid,id:e.Id}):(0,xa.nP)({machineid:o.value.machineid,id:e.Id});l.then((()=>{r.loading=!1,c()})).catch((e=>{r.loading=!1,i.nk.error(e)}))},b=e=>{e.Temp&&(/^\d+$/.test(e.Temp)?e.RemotePort=parseInt(e.Temp):e.Domain=e.Temp,r.loading=!0,(0,xa.Qs)({machineid:o.value.machineid,data:e}).then((e=>{r.loading=!1,0==e&&i.nk.error("操作失败,可能存在相同值"),c()})).catch((e=>{r.loading=!1,i.nk.error(e)})))};return(0,t.sV)((()=>{c(),s()})),(0,t.hi)((()=>{clearTimeout(r.timer),clearTimeout(r.timer1)})),{state:r,planDom:a,machineName:o.value.machineName,machineId:o.value.machineid,handleOnShowList:h,handleCellClick:m,handleRefresh:p,handleAdd:g,handleEdit:w,handleEditBlur:k,handleDel:v,handleStartChange:f}}};const zt=(0,V.A)($t,[["render",dt],["__scopeId","data-v-359a437c"]]);var Dt=zt;const Kt=e=>((0,t.Qi)("data-v-8c388c86"),e=e(),(0,t.jt)(),e),Qt=["onClick"],Ot=["href"],Gt={href:"javascript:;",class:"a-line"},jt={key:0},qt={key:1},Ht={key:0},Jt={key:1},Zt={key:0},Yt={key:1},en=Kt((()=>(0,t.Lk)("span",null,"/",-1))),ln={key:0},an={key:1},tn={class:"dropdown"};function nn(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-button"),c=(0,t.g2)("el-popconfirm"),h=(0,t.g2)("el-table"),m=(0,t.g2)("el-dialog"),p=(0,t.g2)("el-switch"),g=(0,t.g2)("ArrowDown"),w=(0,t.g2)("el-dropdown-item"),k=(0,t.g2)("el-dropdown-menu"),v=(0,t.g2)("el-dropdown");return(0,t.uX)(),(0,t.CE)(t.FK,null,[(0,t.bF)(m,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),"append-to":".app-wrap",title:`与[${n.state.machineName}]的链接`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{data:n.state.data,size:"small",border:"",height:"500"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{property:"RemoteMachineId",label:"目标/服务器"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",{class:(0,z.C4)({green:e.row.Connected})},[(0,t.Lk)("p",null,(0,z.v_)(e.row.IPEndPoint),1),(0,t.Lk)("p",null,"ssl : "+(0,z.v_)(e.row.SSL),1)],2)])),_:1}),(0,t.bF)(s,{property:"TransactionId",label:"事务",width:"80"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(n.state.transactions[e.row.TransactionId]),1)])),_:1}),(0,t.bF)(s,{property:"TransportName",label:"协议"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,(0,z.v_)(e.row.TransportName)+"("+(0,z.v_)(n.state.protocolTypes[e.row.ProtocolType])+")",1),(0,t.Lk)("p",null,(0,z.v_)(n.state.types[e.row.Type])+" - "+(0,z.v_)(1<[(0,t.Lk)("span",null,(0,z.v_)(e.row.Delay)+"ms",1)])),_:1}),(0,t.bF)(s,{property:"Bytes",label:"通信"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,"up : "+(0,z.v_)(e.row.SendBytesText),1),(0,t.Lk)("p",null,"down : "+(0,z.v_)(e.row.ReceiveBytesText),1)])])),_:1}),(0,t.bF)(s,{property:"relay",label:"中继节点"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l=>n.handleNode(e.row)},(0,z.v_)(n.state.nodesDic[e.row.NodeId]||"选择节点"),9,Qt)])])),_:1}),(0,t.bF)(s,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[n.hasTunnelRemove?((0,t.uX)(),(0,t.Wv)(c,{key:0,"confirm-button-text":"确认","cancel-button-text":"取消",title:"确定关闭此连接?",onConfirm:l=>n.handleDel(e.row)},{reference:(0,t.k6)((()=>[(0,t.bF)(i,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])):(0,t.Q3)("",!0)])])),_:1})])),_:1},8,["data"])])])),_:1},8,["modelValue","title"]),(0,t.bF)(m,{modelValue:n.state.showNodes,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.showNodes=e),title:e.$t("server.relayTitle"),width:"760",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{data:n.state.nodes,size:"small",border:"",height:"600"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{property:"Name",label:e.$t("server.relayName")},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:e.row.Url,class:"a-line blue",target:"_blank"},(0,z.v_)(e.row.Name),9,Ot),(0,t.Lk)("a",Gt,[1==(1&e.row.AllowProtocol)?((0,t.uX)(),(0,t.CE)("span",jt,",tcp")):(0,t.Q3)("",!0),2==(2&e.row.AllowProtocol)?((0,t.uX)(),(0,t.CE)("span",qt,",udp")):(0,t.Q3)("",!0)])])])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxGbTotal",label:e.$t("server.relayFlow"),width:"140"},{default:(0,t.k6)((e=>[0==e.row.MaxGbTotal?((0,t.uX)(),(0,t.CE)("span",Ht,"--")):((0,t.uX)(),(0,t.CE)("span",Jt,(0,z.v_)((e.row.MaxGbTotalLastBytes/1024/1024/1024).toFixed(2))+"GB / "+(0,z.v_)(e.row.MaxGbTotal)+"GB ",1))])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxBandwidth",label:e.$t("server.relaySpeed"),width:"80"},{default:(0,t.k6)((e=>[0==e.row.MaxBandwidth?((0,t.uX)(),(0,t.CE)("span",Zt,"--")):((0,t.uX)(),(0,t.CE)("span",Yt,(0,z.v_)(e.row.MaxBandwidth)+"Mbps",1))])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxBandwidthTotal",label:`${e.$t("server.relaySpeed2")}/${e.$t("server.relaySpeed1")}`,width:"120"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,[(0,t.Lk)("span",null,(0,z.v_)(e.row.BandwidthRatio)+"Mbps",1),en,0==e.row.MaxBandwidthTotal?((0,t.uX)(),(0,t.CE)("span",ln,"--")):((0,t.uX)(),(0,t.CE)("span",an,(0,z.v_)(e.row.MaxBandwidthTotal)+"Mbps",1))])])),_:1},8,["label"]),(0,t.bF)(s,{property:"ConnectionRatio",label:e.$t("server.relayConnection"),width:"80"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,[(0,t.Lk)("strong",null,(0,z.v_)(e.row.ConnectionRatio),1),(0,t.eW)("/"+(0,z.v_)(e.row.MaxConnection),1)])])),_:1},8,["label"]),(0,t.bF)(s,{property:"Delay",label:e.$t("server.relayDelay"),width:"60"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.Delay)+"ms",1)])),_:1},8,["label"]),(0,t.bF)(s,{property:"Public",label:e.$t("server.relayPublic"),width:"50"},{default:(0,t.k6)((e=>[(0,t.bF)(p,{disabled:"",modelValue:e.row.Public,"onUpdate:modelValue":l=>e.row.Public=l,size:"small"},null,8,["modelValue","onUpdate:modelValue"])])),_:1},8,["label"]),(0,t.bF)(s,{property:"Oper",label:e.$t("server.relayOper"),width:"75"},{default:(0,t.k6)((l=>[(0,t.bF)(v,{size:"small"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(k,null,{default:(0,t.k6)((()=>[1==(1&l.row.AllowProtocol)?((0,t.uX)(),(0,t.Wv)(w,{key:0,onClick:e=>n.handleConnect(l.row.Id,1)},{default:(0,t.k6)((()=>[(0,t.eW)("TCP")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),2==(2&l.row.AllowProtocol)?((0,t.uX)(),(0,t.Wv)(w,{key:1,onClick:e=>n.handleConnect(l.row.Id,2)},{default:(0,t.k6)((()=>[(0,t.eW)("UDP")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0)])),_:2},1024)])),default:(0,t.k6)((()=>[(0,t.Lk)("div",tn,[(0,t.Lk)("span",null,(0,z.v_)(e.$t("server.relayUse")),1),(0,t.bF)(u,{class:"el-icon--right"},{default:(0,t.k6)((()=>[(0,t.bF)(g)])),_:1})])])),_:2},1024)])),_:1},8,["label"])])),_:1},8,["data"])])])),_:1},8,["modelValue","title"])],64)}var on=a(9232),rn=a(5931),sn={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Select:F.l6P,ArrowDown:F.yd$},setup(e,{emit:l}){const{t:a}=(0,rn.s9)(),n=(0,d.B)(),o=(0,t.EW)((()=>n.value.hasAccess("TunnelRemove"))),r=(0,Gl.ZY)(),s=(0,Gl.mx)(),c=(0,Gl.FG)(),h=(0,Gl.bB)(),m=(0,u.Kh)({show:!0,protocolTypes:{1:"tcp",2:"udp",4:"msquic"},types:{0:"打洞",1:"中继",2:"节点"},transactions:{forward:"端口转发",tuntap:"虚拟网卡",socks5:"代理转发"},machineName:r.value.currentName,currentRow:{},data:(0,t.EW)((()=>[s.value.list[r.value.current],c.value.list[r.value.current],h.value.list[r.value.current]].filter((e=>!!e)))),showNodes:!1,nodes:[],nodesDic:{},timer:0});(0,t.wB)((()=>m.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e),l("change")}),300)}));const p=e=>{o.value&&e.removeFunc(e.RemoteMachineId).then((()=>{i.nk.success(a("common.oper"))})).catch((()=>{}))},g=()=>{clearTimeout(m.timer),(0,on.W4)().then((e=>{m.nodes=e,m.nodesDic=e.reduce(((e,l)=>(e[l.Id]=l.Name,e)),{}),m.timer=setTimeout(g,1e3)})).catch((()=>{m.timer=setTimeout(g,1e3)}))},w=e=>{m.currentRow=e,m.showNodes=!0},k=(e,l)=>{const t={FromMachineId:n.value.config.Client.Id,TransactionId:m.currentRow.TransactionId,ToMachineId:m.currentRow.RemoteMachineId,NodeId:e,Protocol:l};(0,on.uQ)(t).then((()=>{i.nk.success(a("common.oper"))})).catch((()=>{i.nk.success(a("common.operFail"))})),m.showNodes=!1};return(0,t.sV)((()=>{r.value.updateRealTime(!0),g()})),(0,t.hi)((()=>{r.value.updateRealTime(!1),clearTimeout(m.timer)})),{state:m,handleDel:p,hasTunnelRemove:o,handleNode:w,handleConnect:k}}};const dn=(0,V.A)(sn,[["render",nn],["__scopeId","data-v-8c388c86"]]);var un=dn,cn=a(9383);const hn={class:"updater-wrap t-c"},mn={class:"t-l"},pn={class:"flex mgt-1"},gn={class:"mgt-1 t-c"};function wn(e,l,a,n,o,r){const s=(0,t.g2)("el-option"),d=(0,t.g2)("el-select"),u=(0,t.g2)("el-col"),i=(0,t.g2)("el-row"),c=(0,t.g2)("el-button"),h=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(h,{class:"options-center",title:"更新","destroy-on-close":"",modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),width:"40rem",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",hn,[(0,t.Lk)("div",mn,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.msg,(e=>((0,t.uX)(),(0,t.CE)("li",null,(0,z.v_)(e),1)))),256))])]),(0,t.Lk)("div",pn,[(0,t.bF)(i,{class:"w-100"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:10},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.type,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.type=e),size:"large"},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.types,(e=>((0,t.uX)(),(0,t.Wv)(s,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.bF)(u,{span:4},{default:(0,t.k6)((()=>[(0,t.eW)(" -> ")])),_:1}),(0,t.bF)(u,{span:10},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.version,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.version=e),size:"large",filterable:"","allow-create":"","default-first-option":""},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.versions,(e=>((0,t.uX)(),(0,t.Wv)(s,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1})])),_:1})]),(0,t.Lk)("div",gn,[(0,t.bF)(c,{type:"success",onClick:n.handleUpdate,plain:""},{default:(0,t.k6)((()=>[(0,t.eW)("确 定")])),_:1},8,["onClick"])])])])),_:1},8,["modelValue"])}var kn={props:["modelValue"],emits:["update:modelValue"],setup(e,{emit:l}){const a=(0,d.B)(),n=((0,t.EW)((()=>a.value.hasAccess("UpdateSelf"))),(0,t.EW)((()=>a.value.hasAccess("UpdateOther")))),o=(0,cn.T)(),r=(0,t.EW)((()=>a.value.signin.Version)),s=(0,t.EW)((()=>o.value.current.Version)),i=[{label:`仅【${o.value.device.MachineName}】`,value:o.value.device.MachineId},n.value?{label:"本组所有",value:"g-all"}:{},n.value?{label:"本服务器所有",value:"s-all"}:{}].filter((e=>e.value)),c=[{label:`${s.value}【最新版本】`,value:s.value},{label:`${r.value}【服务器版本】`,value:r.value}].filter((e=>e.value)),h=(0,u.Kh)({show:!0,type:i[0]||"",version:c[0]||"",types:i,versions:c,msg:[]});(0,t.wB)((()=>h.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const m=()=>{const e={MachineId:o.value.device.MachineId,Version:h.version.value||h.version,GroupAll:"g-all"==h.type,All:"s-all"==h.type};(e.All||e.GroupAll)&&(e.MachineId=""),(0,M.lJ)(e).then((()=>{})).catch((()=>{})),h.show=!1};return(0,t.sV)((()=>{(0,M.rL)().then((e=>{h.msg=e.Msg}))})),{state:h,updater:o,handleUpdate:m}}};const vn=(0,V.A)(kn,[["render",wn]]);var fn=vn;function bn(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("el-table"),u=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(u,{title:`${n.flow.device.name}->${e.$t("status.messengerName")}`,class:"options-center",top:"1vh","destroy-on-close":"",modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),width:"480"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(d,{data:n.state.list,stripe:"",border:"",size:"small",width:"100%",height:"60vh"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"id",label:"id",width:"200"}),(0,t.bF)(s,{prop:"request",label:"request",sortable:""},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.request)+"ms / "+(0,z.v_)(e.row.requestMax)+"ms",1)])),_:1}),(0,t.bF)(s,{prop:"response",label:"response",sortable:""},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.response)+"ms / "+(0,z.v_)(e.row.responseMax)+"ms",1)])),_:1})])),_:1},8,["data"])])])),_:1},8,["title","modelValue"])}var Cn=a(4921),Fn={props:["modelValue"],emits:["update:modelValue"],setup(e,{emit:l}){const{t:a}=(0,rn.s9)(),n=U(),o=(0,u.Kh)({show:!0,timer:0,list:[]});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{clearTimeout(o.timer),(0,Cn.iN)(n.value.device.id).then((e=>{o.list=Object.keys(e).map((l=>({id:`${a(`status.messenger${l}`)}(${l})`,request:(BigInt(e[l].SendtBytes)&BigInt(4294967295)).toString(),requestMax:(BigInt(e[l].SendtBytes)>>BigInt(32)).toString(),response:(BigInt(e[l].ReceiveBytes)&BigInt(4294967295)).toString(),responseMax:(BigInt(e[l].ReceiveBytes)>>BigInt(32)).toString()}))),o.timer=setTimeout(r,3e3)})).catch((e=>{o.timer=setTimeout(r,3e3)}))};return(0,t.sV)((()=>{r()})),(0,t.hi)((()=>{clearTimeout(o.timer)})),{state:o,flow:n}}};const yn=(0,V.A)(Fn,[["render",bn]]);var Vn=yn,_n={components:{Sort:E,Oper:$,Device:te,DeviceEdit:ue,AccessEdit:ge,Tunnel:Va,TunnelEdit:Aa,ConnectionsEdit:un,Tuntap:Ce,TuntapEdit:pl,TuntapLease:Rl,Socks5:ea,Socks5Edit:ia,Forward:Oa,ForwardEdit:tt,SForwardEdit:Dt,UpdaterConfirm:fn,Stopwatch:Vn},setup(e){const l=(0,d.B)(),a=(0,u.Kh)({height:(0,t.EW)((()=>l.value.height-90))}),{devices:n,machineId:o,_getSignList:r,_getSignList1:s,handleDeviceEdit:c,handleAccessEdit:h,handlePageChange:m,handlePageSizeChange:p,handleDel:w,clearDevicesTimeout:k,setSort:v}=(0,ie.r)(),{tuntap:b,_getTuntapInfo:F,handleTuntapEdit:y,handleTuntapRefresh:V,clearTuntapTimeout:_,getTuntapMachines:E,sortTuntapIP:L}=(0,C.O)(),{socks5:P,_getSocks5Info:I,handleSocks5Edit:T,handleSocks5Refresh:S,clearSocks5Timeout:M,getSocks5Machines:W,sortSocks5:R}=f(),{tunnel:X,_getTunnelInfo:U,handleTunnelEdit:B,handleTunnelRefresh:x,clearTunnelTimeout:$,sortTunnel:z}=ba(),{forward:D,_getForwardCountInfo:K,handleForwardEdit:Q,clearForwardTimeout:O,handleForwardRefresh:G}=g(),{sforward:j,_getSForwardCountInfo:q,handleSForwardEdit:H,clearSForwardTimeout:J,handleSForwardRefresh:Z}=za(),{connections:Y,forwardConnections:ee,_getForwardConnections:le,tuntapConnections:ae,_getTuntapConnections:te,socks5Connections:ne,_getSocks5Connections:oe,handleTunnelConnections:re,clearConnectionsTimeout:se}=(0,Gl.L2)(),{updater:de,_getUpdater:ue,_subscribeUpdater:ce,clearUpdaterTimeout:he}=(0,cn.d)(),{flow:me}=N(),{_getAccessInfo:pe,clearAccessTimeout:ge,handleAccesssRefresh:we}=(0,A.Y)(),ke=e=>{n.page.Request.Prop=e.prop,n.page.Request.Asc="ascending"==e.order;let l=new Promise(((e,l)=>{e()}));if("tunnel"==e.prop){const e=z(n.page.Request.Asc);e.length>0&&(l=v(e))}else if("tuntap"==e.prop){const e=L(n.page.Request.Asc);e.length>0&&(l=v(e))}else if("socks5"==e.prop){const e=R(n.page.Request.Asc);e.length>0&&(l=v(e))}l.then((()=>{m()})).catch((()=>{}))},ve=e=>{n.page.Request.Name=e||"",n.page.Request.Name?n.page.Request.Ids=E(n.page.Request.Name).concat(W(n.page.Request.Name)).reduce(((e,l)=>(-1==e.indexOf(l)&&e.push(l),e)),[]):n.page.Request.Ids=[],m(),x(),V(),S(),G(),Z(),we(),i.nk.success({message:"刷新成功",grouping:!0})},fe=()=>{m(),x(),V(),S(),we(),i.nk.success({message:"刷新成功",grouping:!0})};return(0,t.sV)((()=>{m(),x(),V(),S(),G(),Z(),we(),r(),s(),F(),I(),U(),le(),te(),oe(),K(),q(),ue(),ce(),pe()})),(0,t.hi)((()=>{k(),se(),_(),M(),$(),O(),J(),he(),ge()})),{state:a,devices:n,machineId:o,handleSortChange:ke,handleDeviceEdit:c,handleAccessEdit:h,handlePageRefresh:ve,handlePageSearch:fe,handlePageChange:m,handlePageSizeChange:p,handleDel:w,tuntap:b,handleTuntapEdit:y,handleTuntapRefresh:V,socks5:P,handleSocks5Edit:T,handleSocks5Refresh:S,tunnel:X,connections:Y,handleTunnelEdit:B,handleTunnelRefresh:x,handleTunnelConnections:re,forward:D,handleForwardEdit:Q,sforward:j,handleSForwardEdit:H,updater:de,flow:me}}};const En=(0,V.A)(_n,[["render",s],["__scopeId","data-v-4766ad40"]]);var Ln=En}}]);
\ No newline at end of file
+"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[968],{9232:function(e,l,a){a.d(l,{$1:function(){return i},W4:function(){return o},X2:function(){return u},XU:function(){return d},_5:function(){return c},mI:function(){return h},pM:function(){return m},q:function(){return n},uD:function(){return s},uQ:function(){return r},xp:function(){return p}});var t=a(4);const n=e=>(0,t.zG)("relay/SetServers",e),o=()=>(0,t.zG)("relay/Subscribe"),r=e=>(0,t.zG)("relay/Connect",e),s=()=>(0,t.zG)("relay/AccessCdkey"),d=e=>(0,t.zG)("relay/PageCdkey",e),u=e=>(0,t.zG)("relay/AddCdkey",e),i=e=>(0,t.zG)("relay/DelCdkey",e),c=e=>(0,t.zG)("relay/MyCdkey",e),h=e=>(0,t.zG)("relay/TestCdkey",e),m=e=>(0,t.zG)("relay/ImportCdkey",e),p=e=>(0,t.zG)("relay/UpdateNode",e)},743:function(e,l,a){a.d(l,{Ap:function(){return n},Co:function(){return o},DY:function(){return u},JT:function(){return m},Qs:function(){return i},a9:function(){return s},eX:function(){return c},gz:function(){return d},nP:function(){return h},pY:function(){return r}});var t=a(4);const n=()=>(0,t.zG)("sforward/GetSecretKey"),o=e=>(0,t.zG)("sforward/SetSecretKey",e),r=e=>(0,t.zG)("sforward/get",e),s=()=>(0,t.zG)("sforward/refresh"),d=(e="0")=>(0,t.zG)("sforward/getcount",e),u=e=>(0,t.zG)("sforward/remove",e),i=e=>(0,t.zG)("sforward/add",e),c=e=>(0,t.zG)("sforward/TestLocal",e),h=e=>(0,t.zG)("sforward/start",e),m=e=>(0,t.zG)("sforward/stop",e)},6874:function(e,l,a){a.r(l),a.d(l,{default:function(){return Ln}});var t=a(6768);const n={class:"home-list-wrap absolute"},o={class:"page t-c"},r={class:"page-wrap"};function s(e,l,a,s,d,u){const i=(0,t.g2)("Sort"),c=(0,t.g2)("Device"),h=(0,t.g2)("Tunnel"),m=(0,t.g2)("Tuntap"),p=(0,t.g2)("Socks5"),g=(0,t.g2)("Forward"),w=(0,t.g2)("Oper"),k=(0,t.g2)("el-table"),v=(0,t.g2)("el-pagination"),f=(0,t.g2)("DeviceEdit"),b=(0,t.g2)("AccessEdit"),C=(0,t.g2)("TunnelEdit"),F=(0,t.g2)("ConnectionsEdit"),y=(0,t.g2)("TuntapEdit"),V=(0,t.g2)("Socks5Edit"),_=(0,t.g2)("TuntapLease"),E=(0,t.g2)("ForwardEdit"),L=(0,t.g2)("SForwardEdit"),P=(0,t.g2)("UpdaterConfirm"),I=(0,t.g2)("Stopwatch");return(0,t.uX)(),(0,t.CE)("div",n,[(0,t.bF)(i,{onSort:s.handleSortChange},null,8,["onSort"]),(0,t.bF)(k,{data:s.devices.page.List,stripe:"",border:"",style:{width:"100%"},height:`${s.state.height}px`,size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{onEdit:s.handleDeviceEdit,onRefresh:s.handlePageRefresh},null,8,["onEdit","onRefresh"]),(0,t.bF)(h,{onEdit:s.handleTunnelEdit,onRefresh:s.handleTunnelRefresh,onConnections:s.handleTunnelConnections},null,8,["onEdit","onRefresh","onConnections"]),s.tuntap.show?((0,t.uX)(),(0,t.Wv)(m,{key:0,onEdit:s.handleTuntapEdit,onRefresh:s.handleTuntapRefresh},null,8,["onEdit","onRefresh"])):(0,t.Q3)("",!0),s.socks5.show?((0,t.uX)(),(0,t.Wv)(p,{key:1,onEdit:s.handleSocks5Edit,onRefresh:s.handleSocks5Refresh},null,8,["onEdit","onRefresh"])):(0,t.Q3)("",!0),s.forward.show?((0,t.uX)(),(0,t.Wv)(g,{key:2,onEdit:s.handleForwardEdit,onSedit:s.handleSForwardEdit},null,8,["onEdit","onSedit"])):(0,t.Q3)("",!0),(0,t.bF)(w,{onRefresh:s.handlePageRefresh,onAccess:s.handleAccessEdit},null,8,["onRefresh","onAccess"])])),_:1},8,["data","height"]),(0,t.Lk)("div",o,[(0,t.Lk)("div",r,[(0,t.bF)(v,{small:"",background:"",layout:"total,sizes,prev,pager, next",total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])]),s.devices.showDeviceEdit?((0,t.uX)(),(0,t.Wv)(f,{key:0,modelValue:s.devices.showDeviceEdit,"onUpdate:modelValue":l[0]||(l[0]=e=>s.devices.showDeviceEdit=e),onChange:s.handlePageChange,data:s.devices.deviceInfo},null,8,["modelValue","onChange","data"])):(0,t.Q3)("",!0),s.devices.showAccessEdit?((0,t.uX)(),(0,t.Wv)(b,{key:1,modelValue:s.devices.showAccessEdit,"onUpdate:modelValue":l[1]||(l[1]=e=>s.devices.showAccessEdit=e),onChange:s.handlePageChange,data:s.devices.deviceInfo},null,8,["modelValue","onChange","data"])):(0,t.Q3)("",!0),s.tunnel.showEdit?((0,t.uX)(),(0,t.Wv)(C,{key:2,modelValue:s.tunnel.showEdit,"onUpdate:modelValue":l[2]||(l[2]=e=>s.tunnel.showEdit=e),onChange:s.handleTunnelRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.connections.showEdit?((0,t.uX)(),(0,t.Wv)(F,{key:3,modelValue:s.connections.showEdit,"onUpdate:modelValue":l[3]||(l[3]=e=>s.connections.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.tuntap.showEdit?((0,t.uX)(),(0,t.Wv)(y,{key:4,modelValue:s.tuntap.showEdit,"onUpdate:modelValue":l[4]||(l[4]=e=>s.tuntap.showEdit=e),onChange:s.handleTuntapRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.socks5.showEdit?((0,t.uX)(),(0,t.Wv)(V,{key:5,modelValue:s.socks5.showEdit,"onUpdate:modelValue":l[5]||(l[5]=e=>s.socks5.showEdit=e),onChange:s.handleSocks5Refresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.tuntap.showLease?((0,t.uX)(),(0,t.Wv)(_,{key:6,modelValue:s.tuntap.showLease,"onUpdate:modelValue":l[6]||(l[6]=e=>s.tuntap.showLease=e),onChange:s.handleTuntapRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.forward.showEdit?((0,t.uX)(),(0,t.Wv)(E,{key:7,modelValue:s.forward.showEdit,"onUpdate:modelValue":l[7]||(l[7]=e=>s.forward.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.sforward.showEdit?((0,t.uX)(),(0,t.Wv)(L,{key:8,modelValue:s.sforward.showEdit,"onUpdate:modelValue":l[8]||(l[8]=e=>s.sforward.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.updater.show?((0,t.uX)(),(0,t.Wv)(P,{key:9,modelValue:s.updater.show,"onUpdate:modelValue":l[9]||(l[9]=e=>s.updater.show=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.flow.show?((0,t.uX)(),(0,t.Wv)(I,{key:10,modelValue:s.flow.show,"onUpdate:modelValue":l[10]||(l[10]=e=>s.flow.show=e)},null,8,["modelValue"])):(0,t.Q3)("",!0)])}a(4114);var d=a(3830),u=a(144),i=a(1219);const c={class:"el-dropdown-link"};function h(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("ArrowDownBold"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-checkbox"),h=(0,t.g2)("el-dropdown-item"),m=(0,t.g2)("el-dropdown-menu"),p=(0,t.g2)("el-dropdown"),g=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.Wv)(g,{border:"",style:{width:"100%"},height:"32px",size:"small",onSortChange:n.handleSortChange,class:"table-sort"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"MachineId",label:"设备名",width:"110",sortable:"custom"}),(0,t.bF)(s,{prop:"Version",label:"版本",width:"110",sortable:"custom"}),(0,t.bF)(s,{prop:"tunnel",label:"网络",width:"76",sortable:"custom"}),n.tuntap.show?((0,t.uX)(),(0,t.Wv)(s,{key:0,prop:"tuntap",label:"网卡IP",width:"160",sortable:"custom"})):(0,t.Q3)("",!0),n.socks5.show?((0,t.uX)(),(0,t.Wv)(s,{key:1,prop:"socks5",label:"代理转发",width:"160",sortable:"custom"})):(0,t.Q3)("",!0),(0,t.bF)(s,{label:"columns",fixed:"right"},{header:(0,t.k6)((()=>[(0,t.bF)(p,{class:"show-columns"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(m,null,{default:(0,t.k6)((()=>[(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.tuntap.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.tuntap.show=e),onChange:n.handleTuntapShow,size:"small",style:{"margin-right":"1rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("网卡")])),_:1},8,["modelValue","onChange"])])),_:1}),(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.socks5.show,"onUpdate:modelValue":l[1]||(l[1]=e=>n.socks5.show=e),onChange:n.handleSocks5Show,size:"small",style:{"margin-right":"1rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("代理")])),_:1},8,["modelValue","onChange"])])),_:1}),(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.forward.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.forward.show=e),onChange:n.handleForwardShow,size:"small",style:{"margin-right":"0rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("转发")])),_:1},8,["modelValue","onChange"])])),_:1})])),_:1})])),default:(0,t.k6)((()=>[(0,t.Lk)("span",c,[(0,t.eW)("显示项"),(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])])),_:1})])),_:1})])),_:1},8,["onSortChange"])}var m=a(7716);const p=Symbol(),g=()=>{(0,d.B)();const e=(0,u.KR)({show:!0,timer:0,showEdit:!1,machineId:null,list:{},hashcode:0});(0,t.Gt)(p,e);const l=()=>{(0,m.dS)()},a=()=>{clearTimeout(e.value.timer),(0,m.V1)(e.value.hashcode.toString()).then((l=>{e.value.hashcode=l.HashCode,l.List&&(e.value.list=l.List),e.value.timer=setTimeout(a,1020)})).catch((()=>{e.value.timer=setTimeout(a,1020)}))},n=l=>{e.value.machineId=l[0],e.value.machineName=l[1],e.value.showEdit=!0},o=()=>{clearTimeout(e.value.timer)};return{forward:e,_getForwardCountInfo:a,handleForwardEdit:n,clearForwardTimeout:o,handleForwardRefresh:l}},w=()=>(0,t.WQ)(p);var k=a(2173);const v=Symbol(),f=()=>{const e=(0,u.KR)({show:!0,timer:0,showEdit:!1,current:null,list:{},hashcode:0});(0,t.Gt)(v,e);const l=()=>{clearTimeout(e.value.timer),(0,k.$y)(e.value.hashcode.toString()).then((a=>{if(e.value.hashcode=a.HashCode,a.List){for(let e in a.List)Object.assign(a.List[e],{running:2==a.List[e].Status,loading:1==a.List[e].Status});e.value.list=a.List}e.value.timer=setTimeout(l,1100)})).catch((a=>{e.value.timer=setTimeout(l,1100)}))},a=l=>{e.value.current=l,e.value.showEdit=!0},n=()=>{(0,k.QP)()},o=()=>{clearTimeout(e.value.timer),e.value.timer=0},r=l=>Object.values(e.value.list).filter((e=>e.Port.toString().indexOf(l)>=0||e.Lans.filter((e=>e.IP.indexOf(l)>=0)).length>0)).map((e=>e.MachineId)),s=l=>{const a=Object.values(e.value.list).sort(((e,l)=>e.Port-l.Port));return a.map((e=>e.MachineId))};return{socks5:e,_getSocks5Info:l,handleSocks5Edit:a,handleSocks5Refresh:n,clearSocks5Timeout:o,getSocks5Machines:r,sortSocks5:s}},b=()=>(0,t.WQ)(v);var C=a(8104),F=a(7477),y={emits:["sort"],components:{ArrowDownBold:F.$bU},setup(e,{emit:l}){const a=(0,C.W)();a.value.show="false"!=localStorage.getItem("tuntap.show");const t=b();t.value.show="false"!=localStorage.getItem("socks5.show");const n=w();n.value.show="false"!=localStorage.getItem("forward.show");const o=e=>{l("sort",e)},r=()=>{localStorage.setItem("tuntap.show",a.value.show)},s=()=>{localStorage.setItem("socks5.show",t.value.show)},d=()=>{localStorage.setItem("forward.show",n.value.show)};return{tuntap:a,socks5:t,forward:n,handleSortChange:o,handleTuntapShow:r,handleSocks5Show:s,handleForwardShow:d}}},V=a(1241);const _=(0,V.A)(y,[["render",h],["__scopeId","data-v-107f04ae"]]);var E=_;const L=e=>((0,t.Qi)("data-v-2f0ed5e0"),e=e(),(0,t.jt)(),e),P={class:"dropdown"},I=L((()=>(0,t.Lk)("span",null,"操作",-1)));function T(e,l,a,n,o,r){const s=(0,t.g2)("ArrowDown"),d=(0,t.g2)("el-icon"),u=(0,t.g2)("SwitchButton"),i=(0,t.g2)("el-dropdown-item"),c=(0,t.g2)("Delete"),h=(0,t.g2)("Flag"),m=(0,t.g2)("HelpFilled"),p=(0,t.g2)("Platform"),g=(0,t.g2)("el-dropdown-menu"),w=(0,t.g2)("el-dropdown"),k=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(k,{label:"操作",fixed:"right"},{default:(0,t.k6)((a=>[(0,t.bF)(w,{size:"small"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(g,null,{default:(0,t.k6)((()=>[a.row.showReboot&&n.hasReboot?((0,t.uX)(),(0,t.Wv)(i,{key:0,onClick:e=>n.handleExit(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(u)])),_:1}),(0,t.eW)(" 重启")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),a.row.showDel&&n.hasRemove?((0,t.uX)(),(0,t.Wv)(i,{key:1,onClick:e=>n.handleDel(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1}),(0,t.eW)(" 删除")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),n.handleShowAccess(a.row,n.accessList[a.row.MachineId]||0)?((0,t.uX)(),(0,t.Wv)(i,{key:2,onClick:e=>n.handleAccess(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(h)])),_:1}),(0,t.eW)(" 权限")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),a.row.isSelf&&n.hasApiPassword?((0,t.uX)(),(0,t.Wv)(i,{key:3,onClick:e=>n.handleApiPassword(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.eW)(" 管理接口")])),_:2},1032,["onClick"])):n.hasApiPasswordOther?((0,t.uX)(),(0,t.Wv)(i,{key:4,onClick:e=>n.handleApiPassword(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.eW)(" 管理接口")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),(0,t.bF)(i,{onClick:e=>n.handleStopwatch(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1}),(0,t.eW)("它的信标")])),_:2},1032,["onClick"]),(0,t.bF)(i,{onClick:l[0]||(l[0]=l=>n.handleStopwatch("",e.$t("status.messenger")))},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1}),(0,t.eW)("服务器信标")])),_:1})])),_:2},1024)])),default:(0,t.k6)((()=>[(0,t.Lk)("div",P,[I,(0,t.bF)(d,{class:"el-icon--right"},{default:(0,t.k6)((()=>[(0,t.bF)(s)])),_:1})])])),_:2},1024)])),_:1})}var S=a(9299),M=a(920),W=a(2933),A=a(5962),R=a(3363);const X=Symbol(),N=()=>{const e=(0,u.KR)({device:{},show:!1});return(0,t.Gt)(X,e),{flow:e}},U=()=>(0,t.WQ)(X);var B={emits:["refresh","access"],components:{Delete:F.epd,SwitchButton:F.L$q,ArrowDown:F.yd$,Flag:F.lNU,HelpFilled:F.adD,Platform:F.ODD},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,A.q)(),o=(0,t.EW)((()=>a.value.config.Client.Access)),r=(0,t.EW)((()=>a.value.hasAccess("Access"))),s=(0,t.EW)((()=>n.value.list)),u=(0,t.EW)((()=>a.value.hasAccess("Reboot"))),c=(0,t.EW)((()=>a.value.hasAccess("Remove"))),h=(0,t.EW)((()=>a.value.hasAccess("SetApiPassword"))),m=(0,t.EW)((()=>a.value.hasAccess("SetApiPasswordOther"))),p=U(),g=(e,a)=>{W.s.confirm(`确认删除[${a}]?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{(0,S.Se)(e).then((()=>{l("refresh")}))})).catch((()=>{}))},w=(e,a)=>{W.s.confirm(`确认关闭[${a}]?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{(0,M.NS)(e).then((()=>{l("refresh")}))})).catch((()=>{}))},k=(e,l)=>e.showAccess&&r.value&&l>=0&&0==+(~BigInt(o.value)&BigInt(l)).toString(),v=e=>{l("access",e)},f=e=>{W.s.prompt("输入新的管理接口密码",`重置【${e.MachineName}】的接口密码`,{confirmButtonText:"确定",cancelButtonText:"取消",inputPattern:/^[0-9a-zA-Z]{1,32}$/,inputErrorMessage:"数字字母1-32位"}).then((({value:l})=>{(0,R.gv)({machineId:e.MachineId,password:l}).then((()=>{i.nk.success("操作成功,重启后生效~")})).catch((()=>{i.nk.error("操作失败~")}))})).catch((()=>{}))},b=(e,l)=>{p.value.device.id=e,p.value.device.name=l,p.value.show=!0};return{accessList:s,handleDel:g,handleExit:w,hasReboot:u,hasRemove:c,hasAccess:r,handleShowAccess:k,handleAccess:v,hasApiPassword:h,hasApiPasswordOther:m,handleApiPassword:f,handleStopwatch:b}}};const x=(0,V.A)(B,[["render",T],["__scopeId","data-v-2f0ed5e0"]]);var $=x,z=a(4232);const D=e=>((0,t.Qi)("data-v-5db71b03"),e=e(),(0,t.jt)(),e),K={class:"flex"},Q=D((()=>(0,t.Lk)("span",{class:"flex-1"},"设备",-1))),O={class:"flex"},G=["onClick"],j=["onClick"],q=D((()=>(0,t.Lk)("span",null,"😴㊙.㊙.㊙.㊙",-1))),H=[q],J=D((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1)));function Z(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Search"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-button"),c=(0,t.g2)("DeviceName"),h=(0,t.g2)("UpdaterBtn"),m=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(m,{prop:"MachineId",label:"设备",width:"220"},{header:(0,t.k6)((()=>[(0,t.Lk)("div",K,[Q,(0,t.Lk)("span",null,[(0,t.bF)(s,{size:"small",modelValue:n.name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.name=e),clearable:"",onInput:n.handleRefresh,placeholder:"设备/虚拟网卡/端口转发"},null,8,["modelValue","onInput"])]),(0,t.Lk)("span",null,[(0,t.bF)(i,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1},8,["onClick"])])])])),default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,[(0,t.bF)(c,{onEdit:n.handleEdit,config:!0,item:e.row},null,8,["onEdit","item"])]),(0,t.Lk)("p",O,[e.row.showip?((0,t.uX)(),(0,t.CE)("span",{key:0,title:"此设备的外网IP",class:"ipaddress",onClick:l=>n.handleExternal(e.row)},[(0,t.Lk)("span",null,"😀"+(0,z.v_)(e.row.IP),1)],8,G)):((0,t.uX)(),(0,t.CE)("span",{key:1,title:"此设备的外网IP",class:"ipaddress",onClick:l=>n.handleExternal(e.row)},H,8,j)),J,0==e.row.showip?((0,t.uX)(),(0,t.Wv)(h,{key:2,config:!0,item:e.row},null,8,["item"])):(0,t.Q3)("",!0)])])])),_:1})}var Y=a(7115),ee=a(6588),le={emits:["edit","refresh"],components:{Search:F.vji,UpdaterBtn:Y.A,DeviceName:ee.A},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.hasAccess("ExternalShow"))),o=(0,u.KR)(sessionStorage.getItem("search-name")||""),r=e=>{n.value&&(e.showip=!e.showip)},s=e=>{l("edit",e)},i=()=>{sessionStorage.setItem("search-name",o.value),l("refresh",o.value)};return{handleEdit:s,handleRefresh:i,name:o,handleExternal:r}}};const ae=(0,V.A)(le,[["render",Z],["__scopeId","data-v-5db71b03"]]);var te=ae;const ne=(0,t.Lk)("div",null,"修改后最好能重启一次客户端",-1),oe={class:"t-c w-100"};function re(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-button"),i=(0,t.g2)("el-form"),c=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(c,{modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.ruleForm.MachineName}]设备`,width:"360"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(i,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[ne])),_:1}),(0,t.bF)(s,{label:"设备名",prop:"MachineName"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{maxlength:"32","show-word-limit":"",modelValue:n.state.ruleForm.MachineName,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.MachineName=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",oe,[(0,t.bF)(u,{onClick:l[1]||(l[1]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(u,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var se={props:["data","modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=(0,u.KR)(null),n=(0,u.Kh)({show:!0,ruleForm:{MachineName1:e.data.MachineName,MachineName:e.data.MachineName},rules:{}});(0,t.wB)((()=>n.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const o=()=>{e.data.MachineName!=n.ruleForm.MachineName&&(0,S.gC)({Id:e.data.MachineId,newName:n.ruleForm.MachineName}).then((()=>{n.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:n,ruleFormRef:a,handleSave:o}}};const de=(0,V.A)(se,[["render",re]]);var ue=de,ie=a(7985);function ce(e,l,a,n,o,r){const s=(0,t.g2)("Access"),d=(0,t.g2)("el-button"),u=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(u,{modelValue:n.state.show,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.show=e),"close-on-click-modal":!1,center:"","append-to":".app-wrap",title:`设置[${n.machineName}]的权限`,width:"580",top:"1vh"},{footer:(0,t.k6)((()=>[(0,t.bF)(d,{plain:"",onClick:l[0]||(l[0]=e=>n.state.show=!1),loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1},8,["loading"]),(0,t.bF)(d,{type:"success",plain:"",onClick:n.handleSave,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("确定保存")])),_:1},8,["onClick","loading"])])),default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(s,{machineid:n.machineid,ref:"accessDom"},null,8,["machineid"])])])),_:1},8,["modelValue","title"])}var he=a(6158),me={props:["data","modelValue"],emits:["change","update:modelValue"],components:{Access:he.A},setup(e,{emit:l}){const a=(0,u.Kh)({show:!0,loading:!1});(0,t.wB)((()=>a.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const n=(0,u.KR)(null),o=()=>{a.loading=!0,(0,R.ZK)({ToMachineId:e.data.MachineId,Access:n.value.getValue()}).then((()=>{a.loading=!1,a.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),a.loading=!1,i.nk.error("操作失败!")}))};return{machineName:e.data.MachineName,machineid:e.data.MachineId,state:a,accessDom:n,handleSave:o}}};const pe=(0,V.A)(me,[["render",ce]]);var ge=pe;const we={key:0};function ke(e,l,a,n,o,r){const s=(0,t.g2)("TuntapShow"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"tuntap",label:"虚拟网卡",width:"160"},{header:(0,t.k6)((()=>[(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=(...e)=>n.handleShowLease&&n.handleShowLease(...e))},"虚拟网卡")])),default:(0,t.k6)((e=>[n.tuntap.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("div",we,[(0,t.bF)(s,{config:!0,item:e.row,onEdit:n.handleTuntapIP,onRefresh:n.handleTuntapRefresh},null,8,["item","onEdit","onRefresh"])])):(0,t.Q3)("",!0)])),_:1})}var ve=a(7163),fe={emits:["edit","refresh"],components:{TuntapShow:ve.A},setup(e,{emit:l}){const a=(0,C.W)(),t=e=>{l("edit",e)},n=()=>{l("refresh")},o=()=>{a.value.showLease=!0};return{tuntap:a,handleTuntapIP:t,handleTuntapRefresh:n,handleShowLease:o}}};const be=(0,V.A)(fe,[["render",ke]]);var Ce=be;const Fe=e=>((0,t.Qi)("data-v-54c17b5d"),e=e(),(0,t.jt)(),e),ye=Fe((()=>(0,t.Lk)("span",null,"留空则使用【本组网络】的设置",-1))),Ve=Fe((()=>(0,t.Lk)("span",null,"/",-1))),_e={key:0,class:"upgrade-wrap"},Ee={class:"w-100 t-c"};function Le(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("el-form-item"),u=(0,t.g2)("el-checkbox"),i=(0,t.g2)("TuntapLan"),c=(0,t.g2)("TuntapForward"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[11]||(l[11]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]组网`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"8rem"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{label:"网卡名",prop:"Name"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{modelValue:n.state.ruleForm.Name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Name=e),style:{width:"14rem"}},null,8,["modelValue"]),(0,t.eW)(),ye])),_:1}),(0,t.bF)(d,{label:"网卡IP",prop:"IP",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{modelValue:n.state.ruleForm.IP,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.IP=e),style:{width:"14rem"}},null,8,["modelValue"]),Ve,(0,t.bF)(s,{onChange:n.handlePrefixLengthChange,modelValue:n.state.ruleForm.PrefixLength,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PrefixLength=e),style:{width:"4rem"}},null,8,["onChange","modelValue"])])),_:1}),(0,t.bF)(d,{label:"",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.ShowDelay,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleForm.ShowDelay=e),label:"显示延迟",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.AutoConnect,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.ruleForm.AutoConnect=e),label:"自动连接",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.Multicast,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.ruleForm.Multicast=e),label:"禁用广播",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.Nat,"onUpdate:modelValue":l[6]||(l[6]=e=>n.state.ruleForm.Nat=e),label:"禁用NAT",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.TcpMerge,"onUpdate:modelValue":l[7]||(l[7]=e=>n.state.ruleForm.TcpMerge=e),label:"TCP包合并",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{modelValue:n.state.ruleForm.InterfaceOrder,"onUpdate:modelValue":l[8]||(l[8]=e=>n.state.ruleForm.InterfaceOrder=e),label:"调整网卡顺序",size:"large"},null,8,["modelValue"])])),_:1}),(0,t.bF)(d,{prop:"upgrade",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{modelValue:n.state.ruleForm.Upgrade,"onUpdate:modelValue":l[9]||(l[9]=e=>n.state.ruleForm.Upgrade=e),label:"我很懂,我要使用高级功能(点对网和网对网)",size:"large"},null,8,["modelValue"])])),_:1}),n.state.ruleForm.Upgrade?((0,t.uX)(),(0,t.CE)("div",_e,[(0,t.bF)(d,{label:"局域网IP",prop:"LanIP",class:"m-b-0",style:{"border-bottom":"1px solid #ddd"}},{default:(0,t.k6)((()=>[(0,t.bF)(i,{ref:"lanDom"},null,512)])),_:1}),(0,t.bF)(d,{label:"端口转发",prop:"forwards"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{ref:"forwardDom"},null,512)])),_:1})])):(0,t.Q3)("",!0),(0,t.bF)(d,{label:"",prop:"Btns","label-width":"0"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ee,[(0,t.bF)(h,{onClick:l[10]||(l[10]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var Pe=a(5241);const Ie=e=>((0,t.Qi)("data-v-1541c712"),e=e(),(0,t.jt)(),e),Te={class:"w-100"},Se=Ie((()=>(0,t.Lk)("span",{class:"yellow"},"此设备无法使用NAT转发,或只想使用端口转发",-1))),Me={key:0,class:"green"},We={class:"wrap"},Ae=["title"],Re={key:1},Xe=["onClick"],Ne=["title"],Ue={key:1},Be=["onClick"],xe=["title"],$e={key:1},ze=["onClick"],De={key:1,class:"remark"};function Ke(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-table-column"),c=(0,t.g2)("el-button"),h=(0,t.g2)("el-popconfirm"),m=(0,t.g2)("Plus"),p=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.CE)("div",Te,[(0,t.Lk)("div",null,[Se,n.state.testing?((0,t.uX)(),(0,t.CE)("span",Me,"、testing")):(0,t.Q3)("",!0)]),(0,t.Lk)("div",We,[(0,t.bF)(p,{stripe:"",data:n.state.forwards,border:"",size:"small",width:"100%",height:"200px",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(i,{prop:"ListenPort",label:"源端口",width:"60"},{default:(0,t.k6)((e=>[e.row.ListenPortEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ListenPort,"onUpdate:modelValue":l=>e.row.ListenPort=l,onBlur:l=>n.handleEditBlur(e.row,"ListenPort")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ListenPort),9,Ae)):((0,t.uX)(),(0,t.CE)("span",Re,[(0,t.eW)((0,z.v_)(e.row.ListenPort)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ListenPort=0},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,Xe)]))],64))])),_:1}),(0,t.bF)(i,{prop:"ConnectAddr",label:"目标IP",width:"120"},{default:(0,t.k6)((e=>[e.row.ConnectAddrEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ConnectAddr,"onUpdate:modelValue":l=>e.row.ConnectAddr=l,onBlur:l=>n.handleEditBlur(e.row,"ConnectAddr")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ConnectAddr),9,Ne)):((0,t.uX)(),(0,t.CE)("span",Ue,[(0,t.eW)((0,z.v_)(e.row.ConnectAddr)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ConnectAddr="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,Be)]))],64))])),_:1}),(0,t.bF)(i,{prop:"ConnectPort",label:"目标端口",width:"80"},{default:(0,t.k6)((e=>[e.row.ConnectPortEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ConnectPort,"onUpdate:modelValue":l=>e.row.ConnectPort=l,onBlur:l=>n.handleEditBlur(e.row,"ConnectPort")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ConnectPort),9,xe)):((0,t.uX)(),(0,t.CE)("span",$e,[(0,t.eW)((0,z.v_)(e.row.ConnectPort)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ConnectPort=0},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,ze)]))],64))])),_:1}),(0,t.bF)(i,{prop:"Remark",label:"备注"},{default:(0,t.k6)((e=>[e.row.RemarkEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.Remark,"onUpdate:modelValue":l=>e.row.Remark=l,onBlur:l=>n.handleEditBlur(e.row,"Remark")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)("div",De,(0,z.v_)(e.row.Remark),1))])),_:1}),(0,t.bF)(i,{prop:"Oper",label:"操作",width:"110"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.$index)},{reference:(0,t.k6)((()=>[(0,t.bF)(c,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"]),(0,t.bF)(c,{type:"primary",size:"small",onClick:l=>n.handleAdd(e.$index)},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1})])),_:2},1032,["onClick"])])])),_:1})])),_:1},8,["data","onCellDblclick"])])])}var Qe={props:["modelValue"],emits:["update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42},setup(e){const l=(0,C.W)(),a=(0,u.Kh)({machineName:l.value.current.device.MachineName,forwards:0==l.value.current.Forwards.length?[{ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""}]:l.value.current.Forwards.slice(0),timer:0,testing:!1}),n=(e,l)=>{o(e,l.property)},o=(e,l)=>{a.forwards.forEach((e=>{e["ListenAddrEditing"]=!1,e["ListenPortEditing"]=!1,e["ConnectAddrEditing"]=!1,e["ConnectPortEditing"]=!1,e["RemarkEditing"]=!1})),e[`${l}Editing`]=!0,e["__editing"]=!0},r=(e,l)=>{e[`${l}Editing`]=!1,e["__editing"]=!1},s=e=>{1==a.forwards.length?a.forwards[0]={ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""}:a.forwards.splice(e,1)},d=e=>{a.forwards.filter((e=>"0.0.0.0"==e.ConnectAddr||0==e.ConnectPort||0==e.ListenPort)).length>0||a.forwards.splice(e+1,0,{ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""})},i=()=>{clearTimeout(a.timer),a.testing=!0,(0,Pe._)({MachineId:l.value.current.MachineId,List:a.forwards.map((e=>({ListenAddr:e.ListenAddr,ListenPort:+e.ListenPort,ConnectAddr:e.ConnectAddr,ConnectPort:+e.ConnectPort})))}).then((e=>{var l=e.List;for(let t=0;t${e.ConnectAddr}:${e.ConnectPort}`,o=a.forwards.filter((e=>`${e.ListenPort}->${e.ConnectAddr}:${e.ConnectPort}`==n));for(let l=0;l{a.testing=!1,a.timer=setTimeout(i,3e3)}))};(0,t.sV)((()=>{i()})),(0,t.hi)((()=>{clearTimeout(a.timer)}));const c=()=>a.forwards.map((e=>(e.ListenPort=+e.ListenPort,e.ConnectPort=+e.ConnectPort,e)));return{state:a,handleCellClick:n,handleEditBlur:r,handleDel:s,handleAdd:d,getData:c}}};const Oe=(0,V.A)(Qe,[["render",Ke],["__scopeId","data-v-1541c712"]]);var Ge=Oe;const je=e=>((0,t.Qi)("data-v-1cfaa7f4"),e=e(),(0,t.jt)(),e),qe={class:"w-100"},He=je((()=>(0,t.Lk)("div",null,[(0,t.Lk)("span",{class:"yellow"},"填写局域网IP,使用NAT转发")],-1))),Je={class:"wrap"},Ze=["title"],Ye={key:1},el=["onClick"],ll=["title"],al={key:1},tl=["title"],nl={key:1},ol=["onClick"],rl=["title"],sl={key:1};function dl(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-table-column"),c=(0,t.g2)("el-checkbox"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-popconfirm"),p=(0,t.g2)("Plus"),g=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.CE)("div",qe,[He,(0,t.Lk)("div",Je,[(0,t.bF)(g,{stripe:"",data:n.state.lans,border:"",size:"small",width:"100%",height:"200px",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(i,{prop:"IP",label:"路由IP",width:"120"},{default:(0,t.k6)((e=>[e.row.IPEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.IP,"onUpdate:modelValue":l=>e.row.IP=l,onBlur:l=>n.handleEditBlur(e.row,"IP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.IP),9,Ze)):((0,t.uX)(),(0,t.CE)("span",Ye,[(0,t.eW)((0,z.v_)(e.row.IP)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.IP="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,el)]))],64))])),_:1}),(0,t.bF)(i,{prop:"PrefixLength",label:"路由掩码",width:"80"},{default:(0,t.k6)((e=>[e.row.PrefixLengthEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.PrefixLength,"onUpdate:modelValue":l=>e.row.PrefixLength=l,onBlur:l=>n.handleEditBlur(e.row,"PrefixLength")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.PrefixLength),9,ll)):((0,t.uX)(),(0,t.CE)("span",al,(0,z.v_)(e.row.PrefixLength),1))],64))])),_:1}),(0,t.bF)(i,{prop:"MapIP",label:"目标IP",width:"120"},{default:(0,t.k6)((e=>[e.row.MapIPEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.MapIP,"onUpdate:modelValue":l=>e.row.MapIP=l,onBlur:l=>n.handleEditBlur(e.row,"MapIP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.MapIP),9,tl)):((0,t.uX)(),(0,t.CE)("span",nl,[(0,t.eW)((0,z.v_)(e.row.MapIP)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.MapIP="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,ol)]))],64))])),_:1}),(0,t.bF)(i,{prop:"MapPrefixLength",label:"目标掩码",width:"80"},{default:(0,t.k6)((e=>[e.row.MapPrefixLengthEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.MapPrefixLength,"onUpdate:modelValue":l=>e.row.MapPrefixLength=l,onBlur:l=>n.handleEditBlur(e.row,"MapPrefixLength")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.MapPrefixLength),9,rl)):((0,t.uX)(),(0,t.CE)("span",sl,(0,z.v_)(e.row.MapPrefixLength),1))],64))])),_:1}),(0,t.bF)(i,{prop:"Disabled",label:"禁用"},{default:(0,t.k6)((e=>[(0,t.bF)(c,{modelValue:e.row.Disabled,"onUpdate:modelValue":l=>e.row.Disabled=l,label:"禁用记录"},null,8,["modelValue","onUpdate:modelValue"])])),_:1}),(0,t.bF)(i,{prop:"Oper",label:"操作",width:"110"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.$index)},{reference:(0,t.k6)((()=>[(0,t.bF)(h,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"]),(0,t.bF)(h,{type:"primary",size:"small",onClick:l=>n.handleAdd(e.$index)},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})])),_:2},1032,["onClick"])])])),_:1})])),_:1},8,["data","onCellDblclick"])])])}var ul={props:["modelValue"],emits:["update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42},setup(e){const l=(0,C.W)(),a=(0,u.Kh)({lans:l.value.current.Lans.slice(0).map((e=>(e.MapIP=e.MapIP||"0.0.0.0",e.MapPrefixLength=e.MapPrefixLength||24,e)))});0==a.lans.length&&a.lans.push({IP:"0.0.0.0",PrefixLength:24,MapIP:"0.0.0.0",MapPrefixLength:24});const t=(e,l)=>{n(e,l.property)},n=(e,l)=>{a.lans.forEach((e=>{e["IPEditing"]=!1,e["PrefixLengthEditing"]=!1,e["MapIPEditing"]=!1,e["MapPrefixLengthEditing"]=!1})),e[`${l}Editing`]=!0,e["__editing"]=!0},o=(e,l)=>{if(e[`${l}Editing`]=!1,e["__editing"]=!1,"PrefixLength"==l||"MapPrefixLength"==l){var a=+e[l];(a>32||a<0||isNaN(a))&&(a=24),e[l]=a}},r=e=>{a.lans.splice(e,1),0==a.lans.length&&s(0)},s=e=>{a.lans.splice(e+1,0,{IP:"0.0.0.0",PrefixLength:24,MapIP:"0.0.0.0",MapPrefixLength:24})},d=()=>a.lans.map((e=>(e.PrefixLength=+e.PrefixLength,e)));return{state:a,handleDel:r,handleAdd:s,getData:d,handleCellClick:t,handleEditBlur:o}}};const il=(0,V.A)(ul,[["render",dl],["__scopeId","data-v-1cfaa7f4"]]);var cl=il,hl={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42,TuntapForward:Ge,TuntapLan:cl},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,C.W)(),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,machineName:n.value.current.device.MachineName,bufferSize:a.value.bufferSize,ruleForm:{IP:n.value.current.IP,PrefixLength:n.value.current.PrefixLength||24,Gateway:n.value.current.Gateway,ShowDelay:n.value.current.ShowDelay,AutoConnect:n.value.current.AutoConnect,Upgrade:n.value.current.Upgrade,Multicast:n.value.current.Multicast,Nat:n.value.current.Nat,TcpMerge:n.value.current.TcpMerge,InterfaceOrder:n.value.current.InterfaceOrder,Forwards:n.value.current.Forwards,Name:n.value.current.Name},rules:{Name:{type:"string",pattern:/^$|^[A-Za-z][A-Za-z0-9]{0,31}$/,message:"请输入正确的网卡名",transform(e){return e.trim()}}}});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{var e=+r.ruleForm.PrefixLength;(e>32||e<16||isNaN(e))&&(e=24),r.ruleForm.PrefixLength=e},c=(0,u.KR)(null),h=(0,u.KR)(null),m=()=>{const e=JSON.parse(JSON.stringify(n.value.current));e.IP=r.ruleForm.IP.replace(/\s/g,"")||"0.0.0.0",e.Lans=c.value?c.value.getData():n.value.current.Lans,e.PrefixLength=+r.ruleForm.PrefixLength,e.Gateway=r.ruleForm.Gateway,e.ShowDelay=r.ruleForm.ShowDelay,e.AutoConnect=r.ruleForm.AutoConnect,e.Upgrade=r.ruleForm.Upgrade,e.Multicast=r.ruleForm.Multicast,e.Nat=r.ruleForm.Nat,e.TcpMerge=r.ruleForm.TcpMerge,e.InterfaceOrder=r.ruleForm.InterfaceOrder,e.Forwards=h.value?h.value.getData():n.value.current.Forwards,e.Name=r.ruleForm.Name,(0,Pe.ac)(e).then((()=>{r.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:r,ruleFormRef:o,handlePrefixLengthChange:s,handleSave:m,lanDom:c,forwardDom:h}}};const ml=(0,V.A)(hl,[["render",Le],["__scopeId","data-v-54c17b5d"]]);var pl=ml;const gl=e=>((0,t.Qi)("data-v-67ed3552"),e=e(),(0,t.jt)(),e),wl=gl((()=>(0,t.Lk)("p",null,"网络租期30天、IP租期7天",-1))),kl=gl((()=>(0,t.Lk)("span",null,"/",-1))),vl=gl((()=>(0,t.Lk)("span",{style:{width:"1rem"}},null,-1))),fl={class:"calc"},bl=gl((()=>(0,t.Lk)("span",{class:"label"},"网络号",-1))),Cl={class:"value"},Fl=gl((()=>(0,t.Lk)("span",{class:"label"},"网关",-1))),yl={class:"value"},Vl=gl((()=>(0,t.Lk)("span",{class:"label"},"开始IP",-1))),_l={class:"value"},El=gl((()=>(0,t.Lk)("span",{class:"label"},"结束IP",-1))),Ll={class:"value"},Pl=gl((()=>(0,t.Lk)("span",{class:"label"},"广播号",-1))),Il={class:"value"},Tl=gl((()=>(0,t.Lk)("span",{class:"label"},"IP数量",-1))),Sl={class:"value"};function Ml(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-button"),i=(0,t.g2)("el-form"),c=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(c,{modelValue:n.state.show,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:"配置本组的网络",top:"1vh",width:"400"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(i,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"100"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"gateway"},{default:(0,t.k6)((()=>[wl])),_:1}),(0,t.bF)(s,{label:"网卡名",prop:"Name"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Name=e),style:{width:"14rem"}},null,8,["modelValue"])])),_:1}),(0,t.bF)(s,{label:"网络前缀",prop:"IP"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.IP,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.IP=e),style:{width:"14rem"},onChange:n.handlePrefixLengthChange},null,8,["modelValue","onChange"]),kl,(0,t.bF)(d,{onChange:n.handlePrefixLengthChange,modelValue:n.state.ruleForm.PrefixLength,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PrefixLength=e),style:{width:"4rem"}},null,8,["onChange","modelValue"]),vl,(0,t.bF)(u,{onClick:n.handleClear},{default:(0,t.k6)((()=>[(0,t.eW)("重置")])),_:1},8,["onClick"])])),_:1}),(0,t.bF)(s,{label:"",prop:"IP1"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",fl,[(0,t.Lk)("p",null,[bl,(0,t.Lk)("span",Cl,(0,z.v_)(n.state.values.Network),1)]),(0,t.Lk)("p",null,[Fl,(0,t.Lk)("span",yl,(0,z.v_)(n.state.values.Gateway),1)]),(0,t.Lk)("p",null,[Vl,(0,t.Lk)("span",_l,(0,z.v_)(n.state.values.Start),1)]),(0,t.Lk)("p",null,[El,(0,t.Lk)("span",Ll,(0,z.v_)(n.state.values.End),1)]),(0,t.Lk)("p",null,[Pl,(0,t.Lk)("span",Il,(0,z.v_)(n.state.values.Broadcast),1)]),(0,t.Lk)("p",null,[Tl,(0,t.Lk)("span",Sl,(0,z.v_)(n.state.values.Count),1)])])])),_:1}),n.hasLease?((0,t.uX)(),(0,t.Wv)(s,{key:0,label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(u,{onClick:l[3]||(l[3]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(u,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})):(0,t.Q3)("",!0)])),_:1},8,["model","rules"])])])),_:1},8,["modelValue"])}var Wl={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.hasAccess("Lease"))),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,ruleForm:{Name:"",IP:"0.0.0.0",PrefixLength:24},rules:{Name:{type:"string",pattern:/^$|^[A-Za-z][A-Za-z0-9]{0,31}$/,message:"请输入正确的网卡名",transform(e){return e.trim()}}},values:{}});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{(0,Pe.w0)(r.ruleForm).then((e=>{r.values=e}))},c=()=>{(0,Pe.Nj)().then((e=>{r.ruleForm.Name=e.Name,r.ruleForm.IP=e.IP,r.ruleForm.PrefixLength=e.PrefixLength,s()}))},h=()=>{var e=+r.ruleForm.PrefixLength;(e>32||e<16||isNaN(e))&&(e=24),r.ruleForm.PrefixLength=e,s()},m=()=>{(0,Pe.AE)(r.ruleForm).then((()=>{i.nk.success("已操作"),r.show=!1})).catch((e=>{console.log(e),i.nk.error("操作失败")}))},p=()=>{(0,Pe.AE)({Name:"",IP:"0.0.0.0",PrefixLength:24}).then((()=>{i.nk.success("已操作"),c()})).catch((e=>{console.log(e),i.nk.error("操作失败")}))};return(0,t.sV)((()=>{c()})),{state:r,hasLease:n,ruleFormRef:o,handleSave:m,handlePrefixLengthChange:h,handleClear:p}}};const Al=(0,V.A)(Wl,[["render",Ml],["__scopeId","data-v-67ed3552"]]);var Rl=Al;const Xl={key:0};function Nl(e,l,a,n,o,r){const s=(0,t.g2)("Socks5Show"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"socks5",label:"代理转发",width:"160"},{default:(0,t.k6)((e=>[n.socks5.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("div",Xl,[(0,t.bF)(s,{config:!0,item:e.row,onEdit:n.handleSocks5,onRefresh:n.handleSocks5Refresh},null,8,["item","onEdit","onRefresh"])])):(0,t.Q3)("",!0)])),_:1})}const Ul={class:"flex"},Bl={class:"flex-1"},xl=["title"],$l={key:0,class:"green gateway"},zl={key:1},Dl={key:0},Kl={key:0,class:"flex yellow",title:"已禁用"},Ql={key:1,class:"flex red",title:"与其它设备填写IP、或本机局域网IP有冲突"};function Ol(e,l,a,n,o,r){const s=(0,t.g2)("ConnectionShow"),d=(0,t.g2)("Loading"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-switch");return(0,t.uX)(),(0,t.CE)("div",null,[(0,t.Lk)("div",Ul,[(0,t.Lk)("div",Bl,[(0,t.bF)(s,{data:n.connections.list[n.item.MachineId],row:n.item},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=e=>n.handleSocks5Port(n.socks5.list[n.item.MachineId])),title:"此设备的socks5代理"},[n.socks5.list[n.item.MachineId].SetupError?((0,t.uX)(),(0,t.CE)("strong",{key:0,class:"red",title:n.socks5.list[n.item.MachineId].SetupError}," socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),9,xl)):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[n.item.Connected&&n.socks5.list[n.item.MachineId].running?((0,t.uX)(),(0,t.CE)("strong",$l,"socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),1)):((0,t.uX)(),(0,t.CE)("span",zl,"socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),1))],64))])]),n.socks5.list[n.item.MachineId].loading?((0,t.uX)(),(0,t.CE)("div",Dl,[(0,t.bF)(u,{size:"14",class:"loading"},{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])):((0,t.uX)(),(0,t.Wv)(i,{key:1,"model-value":n.item.Connected&&n.socks5.list[n.item.MachineId].running,loading:n.socks5.list[n.item.MachineId].loading,disabled:"",onClick:l[1]||(l[1]=e=>n.handleSocks5(n.socks5.list[n.item.MachineId])),size:"small","inline-prompt":"","active-text":"😀","inactive-text":"😣"},null,8,["model-value","loading"]))]),(0,t.Lk)("div",null,[(0,t.Lk)("div",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.socks5.list[n.item.MachineId].Lans,((e,l)=>((0,t.uX)(),(0,t.CE)(t.FK,{key:l},[e.Disabled?((0,t.uX)(),(0,t.CE)("div",Kl,(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),1)):e.Exists?((0,t.uX)(),(0,t.CE)("div",Ql,(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),1)):((0,t.uX)(),(0,t.CE)("div",{key:2,class:(0,z.C4)(["flex",{green:n.item.Connected&&n.socks5.list[n.item.MachineId].running}]),title:"正常使用"},(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),3))],64)))),128))])])])}var Gl=a(9983),jl=a(2109),ql={props:["item","config"],emits:["edit","refresh"],components:{Loading:F.Rhj,ConnectionShow:jl.A},setup(e,{emit:l}){const a=b(),n=(0,d.B)(),o=(0,t.EW)((()=>n.value.config.Client.Id)),r=(0,t.EW)((()=>n.value.hasAccess("Socks5ChangeSelf"))),s=(0,t.EW)((()=>n.value.hasAccess("Socks5ChangeOther"))),u=(0,t.EW)((()=>n.value.hasAccess("Socks5StatusSelf"))),c=(0,t.EW)((()=>n.value.hasAccess("Socks5StatusOther"))),h=(0,Gl.bB)(),m=l=>{if(!e.config)return;if(o.value===l.MachineId){if(!u.value)return}else if(!c.value)return;const a=e.item.Connected&&l.running?(0,k.R2)(l.MachineId):(0,k.qH)(l.MachineId);l.loading=!0,a.then((()=>{i.nk.success("操作成功!")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))},p=a=>{if(e.config||o.value==a.MachineId){if(o.value===a.MachineId){if(!r.value)return}else if(!s.value)return;a.device=e.item,l("edit",a)}},g=()=>{l("refresh")};return{item:(0,t.EW)((()=>e.item)),socks5:a,connections:h,handleSocks5:m,handleSocks5Port:p,handleSocks5Refresh:g}}};const Hl=(0,V.A)(ql,[["render",Ol],["__scopeId","data-v-3a4bfe6c"]]);var Jl=Hl,Zl={emits:["edit","refresh"],components:{Socks5Show:Jl},setup(e,{emit:l}){const a=b(),t=e=>{l("edit",e)},n=()=>{l("refresh")};return{socks5:a,handleSocks5:t,handleSocks5Refresh:n}}};const Yl=(0,V.A)(Zl,[["render",Nl]]);var ea=Yl;const la=e=>((0,t.Qi)("data-v-022e3781"),e=e(),(0,t.jt)(),e),aa={class:"upgrade-wrap"},ta={class:"flex-1"},na=la((()=>(0,t.Lk)("span",null,"/",-1))),oa={class:"pdl-10"},ra={class:"pdl-10"};function sa(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-checkbox"),i=(0,t.g2)("Delete"),c=(0,t.g2)("el-icon"),h=(0,t.g2)("el-button"),m=(0,t.g2)("Plus"),p=(0,t.g2)("el-form"),g=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(g,{modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]代理`,top:"1vh",width:"600"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(p,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"140"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"gateway",style:{"margin-bottom":"0"}},{default:(0,t.k6)((()=>[(0,t.eW)(" 配置代理,通过代理访问其它设备 ")])),_:1}),(0,t.bF)(s,{label:"代理端口",prop:"Port"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Port,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Port=e),style:{width:"14rem"}},null,8,["modelValue"])])),_:1}),(0,t.Lk)("div",aa,[(0,t.bF)(s,{label:"此设备局域网IP",prop:"LanIP",class:"lan-item"},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.ruleForm.Lans,((e,l)=>((0,t.uX)(),(0,t.CE)("div",{key:l,class:"flex",style:{"margin-bottom":".6rem"}},[(0,t.Lk)("div",ta,[(0,t.bF)(d,{modelValue:e.IP,"onUpdate:modelValue":l=>e.IP=l,style:{width:"14rem"}},null,8,["modelValue","onUpdate:modelValue"]),na,(0,t.bF)(d,{onChange:e=>n.handleMaskChange(l),modelValue:e.PrefixLength,"onUpdate:modelValue":l=>e.PrefixLength=l,style:{width:"4rem"}},null,8,["onChange","modelValue","onUpdate:modelValue"])]),(0,t.Lk)("div",oa,[(0,t.bF)(u,{modelValue:e.Disabled,"onUpdate:modelValue":l=>e.Disabled=l,label:"禁用记录",size:"large"},null,8,["modelValue","onUpdate:modelValue"])]),(0,t.Lk)("div",ra,[(0,t.bF)(h,{type:"danger",onClick:e=>n.handleDel(l)},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(i)])),_:1})])),_:2},1032,["onClick"]),(0,t.bF)(h,{type:"primary",onClick:e=>n.handleAdd(l)},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1})])),_:2},1032,["onClick"])])])))),128))])),_:1})]),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{onClick:l[1]||(l[1]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var da={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt},setup(e,{emit:l}){const a=(0,d.B)(),n=b(),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,machineName:n.value.current.device.MachineName,bufferSize:a.value.bufferSize,ruleForm:{Port:n.value.current.Port,Lans:n.value.current.Lans.slice(0)},rules:{}});0==r.ruleForm.Lans.length&&r.ruleForm.Lans.push({IP:"0.0.0.0",PrefixLength:24}),(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=e=>{var l=+r.ruleForm.Lans[e].PrefixLength;(l>32||l<16||isNaN(l))&&(l=24),r.ruleForm.Lans[e].PrefixLength=l},c=e=>{r.ruleForm.Lans.splice(e,1),0==r.ruleForm.Lans.length&&h(0)},h=e=>{r.ruleForm.Lans.splice(e+1,0,{IP:"0.0.0.0",PrefixLength:24})},m=()=>{const e=JSON.parse(JSON.stringify(n.value.current));e.Port=+(r.ruleForm.Port||"1805"),e.Lans=r.ruleForm.Lans.map((e=>(e.PrefixLength=+e.PrefixLength,e))),(0,k._Q)(e).then((()=>{r.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:r,ruleFormRef:o,handleMaskChange:s,handleDel:c,handleAdd:h,handleSave:m}}};const ua=(0,V.A)(da,[["render",sa],["__scopeId","data-v-022e3781"]]);var ia=ua;const ca=["title","src"],ha={key:1,title:"?",class:"system",src:"/system.svg"},ma=["title","src"],pa={key:3,title:"?",class:"system",src:"/system.svg"},ga={class:"flex"},wa=["title","onClick"];function ka(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(s,{prop:"tunnel",label:"网络",width:"76"},{default:(0,t.k6)((e=>[n.tunnel.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[(0,t.Lk)("div",null,[n.tunnel.list[e.row.MachineId].Net.CountryCode?((0,t.uX)(),(0,t.CE)("img",{key:0,title:`${n.tunnel.list[e.row.MachineId].Net.CountryCode}、${n.tunnel.list[e.row.MachineId].Net.City}`,class:"system",src:`https://unpkg.com/flag-icons@7.2.3/flags/4x3/${n.tunnel.list[e.row.MachineId].Net.CountryCode.toLowerCase()}.svg`},null,8,ca)):((0,t.uX)(),(0,t.CE)("img",ha)),n.tunnel.list[e.row.MachineId].Net.Isp?((0,t.uX)(),(0,t.CE)("img",{key:2,title:`${n.tunnel.list[e.row.MachineId].Net.Isp}`,class:"system",src:n.netImg(n.tunnel.list[e.row.MachineId].Net)},null,8,ma)):((0,t.uX)(),(0,t.CE)("img",pa))]),(0,t.Lk)("div",ga,[(0,t.Lk)("a",{href:"javascript:;",class:(0,z.C4)(["a-line",{yellow:n.tunnel.list[e.row.MachineId].NeedReboot}]),title:n.title(n.tunnel.list[e.row.MachineId]),onClick:l=>n.handleTunnel(n.tunnel.list[e.row.MachineId],e.row)},[(0,t.Lk)("span",null,"跳点 : "+(0,z.v_)(n.tunnel.list[e.row.MachineId].RouteLevel)+"+"+(0,z.v_)(n.tunnel.list[e.row.MachineId].RouteLevelPlus),1)],10,wa)])],64)):(0,t.Q3)("",!0)])),_:1})}var va=a(83);const fa=Symbol(),ba=()=>{(0,d.B)();const e=(0,u.KR)({timer:0,showEdit:!1,current:null,list:{},hashcode:0,showMap:!1});(0,t.Gt)(fa,e);const l=()=>{clearTimeout(e.value.timer),(0,va.r7)(e.value.hashcode.toString()).then((a=>{e.value.hashcode=a.HashCode,a.List&&(e.value.list=a.List),e.value.timer=setTimeout(l,1060)})).catch((()=>{e.value.timer=setTimeout(l,1060)}))},a=l=>{e.value.current=l,e.value.showEdit=!0},n=()=>{(0,va.gM)()},o=()=>{clearTimeout(e.value.timer)},r=l=>Object.values(e.value.list).sort(((e,l)=>e.RouteLevel+e.RouteLevelPlus-l.RouteLevel+l.RouteLevelPlus)).map((e=>e.MachineId));return{tunnel:e,_getTunnelInfo:l,handleTunnelEdit:a,handleTunnelRefresh:n,clearTunnelTimeout:o,sortTunnel:r}},Ca=()=>(0,t.WQ)(fa);var Fa={emits:["edit","refresh"],setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.config.Client.Id)),o=(0,t.EW)((()=>a.value.hasAccess("TunnelChangeSelf"))),r=(0,t.EW)((()=>a.value.hasAccess("TunnelChangeOther"))),s=Ca(),u=((0,Gl.ZY)(),(0,Gl.mx)()),i=(0,Gl.FG)(),c=(0,Gl.bB)(),h=e=>{let l=["调整网关层级有助于打洞成功"];return e.NeedReboot?"需要重启":l.join("\r\n")},m={chinanet:"chinanet.svg",china169:"chinanet.svg","china telecom":"chinanet.svg","china unicom":"chinaunicom.svg","china mobile":"chinamobile.svg",huawei:"huawei.svg",amazon:"amazon.svg",aliyun:"aliyun.svg",alibaba:"aliyun.svg"},p=new RegExp(Object.keys(m).map((e=>`\\b${e}\\b`)).join("|")),g=e=>{const l=e.Isp.toLowerCase();if(l){const e=l.match(p);if(e)return`./${m[e[0]]}`}return"./system.svg"},w=e=>{const l=[u.value.list[e],i.value.list[e],c.value.list[e]].filter((e=>!!e&&e.Connected)).length;return l},k=(e,a)=>{if(n.value===e.MachineId){if(!o.value)return}else if(!r.value)return;e.device=a,l("edit",e)},v=()=>{l("refresh")},f=e=>{l("connections",e)};return{tunnel:s,handleTunnel:k,handleTunnelRefresh:v,connectionCount:w,handleConnections:f,title:h,netImg:g}}};const ya=(0,V.A)(Fa,[["render",ka],["__scopeId","data-v-64b81c5b"]]);var Va=ya;const _a=e=>((0,t.Qi)("data-v-6941c158"),e=e(),(0,t.jt)(),e),Ea=_a((()=>(0,t.Lk)("div",null,"网关层级为你的设备与外网的距离,你可以手动调整数值",-1))),La={class:"pdl-20"},Pa=_a((()=>(0,t.Lk)("h3",null,"跳跃点",-1))),Ia={class:"pdl-20"},Ta={class:"t-c w-100"};function Sa(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-col"),i=(0,t.g2)("el-input-number"),c=(0,t.g2)("el-row"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]网关`,width:"560",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"",prop:"alert"},{default:(0,t.k6)((()=>[Ea])),_:1}),(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"网关层级",prop:"RouteLevel"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{readonly:"",modelValue:n.state.ruleForm.RouteLevel,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.RouteLevel=e),style:{width:"15rem"}},null,8,["modelValue"])])),_:1})])),_:1}),(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"加上",prop:"RouteLevelPlus"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.RouteLevelPlus,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.RouteLevelPlus=e)},null,8,["modelValue"])])),_:1})])),_:1})])),_:1})])),_:1}),(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"外网端口",prop:"PortMapWan"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.PortMapWan,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PortMapWan=e)},null,8,["modelValue"])])),_:1})])),_:1}),(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"内网端口",prop:"PortMapLan"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.PortMapLan,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleForm.PortMapLan=e)},null,8,["modelValue"])])),_:1})])),_:1})])),_:1})])),_:1}),n.state.net.HostName?((0,t.uX)(),(0,t.Wv)(s,{key:0,label:"",prop:"alert"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("h3",null,(0,z.v_)(n.state.net.HostName),1),(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.net.Lans.filter((e=>e.Ips.length>0)),((e,l)=>((0,t.uX)(),(0,t.CE)("li",null,[(0,t.Lk)("div",null,"【"+(0,z.v_)(e.Mac||"00-00-00-00-00-00")+"】"+(0,z.v_)(e.Desc),1),(0,t.Lk)("div",La,(0,z.v_)(e.Ips.join("、")),1)])))),256))]),Pa,(0,t.Lk)("div",Ia,(0,z.v_)(n.state.net.Routes.join("、")),1)])])),_:1})):(0,t.Q3)("",!0),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ta,[(0,t.bF)(h,{onClick:l[4]||(l[4]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var Ma={props:["modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=Ca(),n=(0,u.KR)(null),o=(0,u.Kh)({show:!0,machineName:a.value.current.device.MachineName,ruleForm:{RouteLevel:a.value.current.RouteLevel,RouteLevelPlus:a.value.current.RouteLevelPlus,PortMapWan:a.value.current.PortMapWan,PortMapLan:a.value.current.PortMapLan},rules:{},net:{}});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{const e=JSON.parse(JSON.stringify(a.value.current));e.RouteLevel=+o.ruleForm.RouteLevel,e.RouteLevelPlus=+o.ruleForm.RouteLevelPlus,e.PortMapWan=+o.ruleForm.PortMapWan,e.PortMapLan=+o.ruleForm.PortMapLan,(0,va.KW)(e).then((()=>{o.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return(0,t.sV)((()=>{(0,va.Zu)(a.value.current.MachineId).then((e=>{o.net=e})).catch((()=>{}))})),{state:o,ruleFormRef:n,handleSave:r,tunnel:a}}};const Wa=(0,V.A)(Ma,[["render",Sa],["__scopeId","data-v-6941c158"]]);var Aa=Wa;const Ra=["onClick"],Xa=["onClick"],Na=["onClick"],Ua=["onClick"];function Ba(e,l,a,n,o,r){const s=(0,t.g2)("ConnectionShow"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"forward",label:"转发/穿透"},{default:(0,t.k6)((l=>[l.row.Connected?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[l.row.isSelf&&(n.hasForwardShowSelf||e.hasForwardSelf)?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[(0,t.Lk)("div",null,[(0,t.bF)(s,{data:n.connections.list[l.row.MachineId],row:l.row},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的端口转发",class:(0,z.C4)({green:n.forward.list[l.row.MachineId]>0}),onClick:e=>n.handleEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.forward.list[l.row.MachineId]>0})},"端口转发("+(0,z.v_)(n.forward.list[l.row.MachineId]>99?"99+":n.forward.list[l.row.MachineId])+")",3)],10,Ra)]),(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的内网穿透",class:(0,z.C4)({green:n.sforward.list[l.row.MachineId]>0}),onClick:e=>n.handleSEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.sforward.list[l.row.MachineId]>0})},"内网穿透("+(0,z.v_)(n.sforward.list[l.row.MachineId]>99?"99+":n.sforward.list[l.row.MachineId])+")",3)],10,Xa)])],64)):n.hasForwardShowOther||e.hasForwardOther?((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.Lk)("div",null,[(0,t.bF)(s,{data:n.connections.list[l.row.MachineId],row:l.row},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的端口转发",class:(0,z.C4)({green:n.forward.list[l.row.MachineId]>0}),onClick:e=>n.handleEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.forward.list[l.row.MachineId]>0})},"端口转发("+(0,z.v_)(n.forward.list[l.row.MachineId]>99?"99+":n.forward.list[l.row.MachineId])+")",3)],10,Na)]),(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的内网穿透",class:(0,z.C4)({green:n.sforward.list[l.row.MachineId]>0}),onClick:e=>n.handleSEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.sforward.list[l.row.MachineId]>0})},"内网穿透("+(0,z.v_)(n.sforward.list[l.row.MachineId]>99?"99+":n.sforward.list[l.row.MachineId])+")",3)],10,Ua)])],64)):(0,t.Q3)("",!0)],64)):(0,t.Q3)("",!0)])),_:1})}var xa=a(743);const $a=Symbol(),za=()=>{const e=(0,d.B)(),l=((0,t.EW)((()=>e.value.config.Client.Id)),(0,u.KR)({timer:0,showEdit:!1,showCopy:!1,list:{},testTimer:0,hashcode:0,machineid:"",machineName:""}));(0,t.Gt)($a,l);const a=()=>{(0,xa.a9)()},n=()=>{clearTimeout(l.value.timer),(0,xa.gz)(l.value.hashcode.toString()).then((e=>{l.value.hashcode=e.HashCode,e.List&&(l.value.list=e.List),l.value.timer=setTimeout(n,1020)})).catch((()=>{l.value.timer=setTimeout(n,1020)}))},o=e=>{l.value.machineid=e[0],l.value.machineName=e[1],l.value.showEdit=!0},r=()=>{clearTimeout(l.value.timer),clearTimeout(l.value.testTimer)};return{sforward:l,_getSForwardCountInfo:n,handleSForwardEdit:o,clearSForwardTimeout:r,handleSForwardRefresh:a}},Da=()=>(0,t.WQ)($a);var Ka={emits:["edit","sedit"],components:{ConnectionShow:jl.A},setup(e,{emit:l}){const a=w(),n=Da(),o=(0,d.B)(),r=(0,t.EW)((()=>o.value.config.Client.Id)),s=(0,t.EW)((()=>o.value.hasAccess("ForwardShowSelf"))),u=(0,t.EW)((()=>o.value.hasAccess("ForwardShowOther"))),i=(0,t.EW)((()=>o.value.hasAccess("ForwardSelf"))),c=(0,t.EW)((()=>o.value.hasAccess("ForwardOther"))),h=(0,Gl.mx)(),m=(e,a)=>{if(r.value===e){if(!i.value)return}else if(!c.value)return;l("edit",[e,a])},p=(e,a)=>{if(r.value===e){if(!i.value)return}else if(!c.value)return;l("sedit",[e,a])},g=()=>{l("refresh")};return{forward:a,sforward:n,hasForwardShowSelf:s,hasForwardShowOther:u,connections:h,handleEdit:m,handleSEdit:p,handleForwardRefresh:g}}};const Qa=(0,V.A)(Ka,[["render",Ba],["__scopeId","data-v-2ee190a4"]]);var Oa=Qa;const Ga={class:"t-c head"},ja=["title"],qa={class:"t-c"},Ha={class:"page-wrap"},Ja={key:0},Za={key:1,class:"error red",title:"off line"},Ya=["title"];function et(e,l,a,n,o,r){const s=(0,t.g2)("el-button"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-table-column"),i=(0,t.g2)("el-option"),c=(0,t.g2)("el-select"),h=(0,t.g2)("el-pagination"),m=(0,t.g2)("el-switch"),p=(0,t.g2)("Delete"),g=(0,t.g2)("el-icon"),w=(0,t.g2)("el-popconfirm"),k=(0,t.g2)("el-table"),v=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(v,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),onOpen:n.handleOnShowList,"append-to":".app-wrap",title:`【${n.state.machineName}】的端口转发`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("div",Ga,[(0,t.bF)(s,{type:"success",size:"small",onClick:n.handleAdd,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("添加")])),_:1},8,["onClick","loading"]),(0,t.bF)(s,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)("刷新")])),_:1},8,["onClick"])]),(0,t.bF)(k,{data:n.state.data,size:"small",border:"",height:"500",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(u,{property:"Name",label:"名称",width:"100"},{default:(0,t.k6)((e=>[e.row.NameEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Name,"onUpdate:modelValue":l=>e.row.Name=l,onBlur:l=>n.handleEditBlur(e.row,"Name")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.Name),1)],64))])),_:1}),(0,t.bF)(u,{prop:"BufferSize",label:"缓冲区",width:"80"},{default:(0,t.k6)((e=>[e.row.BufferSizeEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.BufferSize,"onUpdate:modelValue":l=>e.row.BufferSize=l,placeholder:"Select",size:"small",disabled:e.row.Started,onChange:l=>n.handleEditBlur(e.row,"BufferSize")},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.bufferSize,((e,l)=>((0,t.uX)(),(0,t.Wv)(i,{key:l,label:e,value:l},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","disabled","onChange"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(n.state.bufferSize[e.row.BufferSize]),1)],64))])),_:1}),(0,t.bF)(u,{property:"BindIPAddress",label:"监听IP",width:"140"},{default:(0,t.k6)((e=>[e.row.BindIPAddressEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.BindIPAddress,"onUpdate:modelValue":l=>e.row.BindIPAddress=l,size:"small",disabled:e.row.Started,onChange:l=>n.handleEditBlur(e.row,"BindIPAddress")},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.ips,(e=>((0,t.uX)(),(0,t.Wv)(i,{key:e,label:e,value:e},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","disabled","onChange"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.BindIPAddress),1)],64))])),_:1}),(0,t.bF)(u,{property:"Port",label:"监听端口",width:"80"},{default:(0,t.k6)((e=>[e.row.PortEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,type:"number",autofocus:"",size:"small",modelValue:e.row.Port,"onUpdate:modelValue":l=>e.row.Port=l,onBlur:l=>n.handleEditBlur(e.row,"Port")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Msg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.Msg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.Port),1)],8,ja)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.Port),3))],64))])),_:1}),(0,t.bF)(u,{property:"MachineId",label:"目标"},{default:(0,t.k6)((e=>[e.row.MachineIdEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.MachineId,"onUpdate:modelValue":l=>e.row.MachineId=l,onChange:l=>n.handleEditBlur(e.row,"MachineId"),filterable:"",remote:"",loading:n.state.loading,"remote-method":n.handleSearch},{header:(0,t.k6)((()=>[(0,t.Lk)("div",qa,[(0,t.Lk)("div",Ha,[(0,t.bF)(h,{small:"",background:"",layout:"prev, pager, next","page-size":n.state.machineIds.Request.Size,total:n.state.machineIds.Count,"pager-count":5,"current-page":n.state.machineIds.Request.Page,onCurrentChange:n.handlePageChange},null,8,["page-size","total","current-page","onCurrentChange"])])])])),default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.machineIds.List,((e,l)=>((0,t.uX)(),(0,t.Wv)(i,{key:l,label:e.MachineName,value:e.MachineId},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","onChange","loading","remote-method"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[n.state.names[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("span",Ja,(0,z.v_)(e.row.MachineName),1)):((0,t.uX)(),(0,t.CE)("span",Za,(0,z.v_)(e.row.MachineName),1))],64))])),_:1}),(0,t.bF)(u,{property:"TargetEP",label:"目标服务",width:"140"},{default:(0,t.k6)((e=>[e.row.TargetEPEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.TargetEP,"onUpdate:modelValue":l=>e.row.TargetEP=l,onBlur:l=>n.handleEditBlur(e.row,"TargetEP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.TargetMsg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.TargetMsg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.TargetEP),1)],8,Ya)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.TargetEP),3))],64))])),_:1}),(0,t.bF)(u,{property:"Started",label:"状态",width:"60"},{default:(0,t.k6)((e=>[(0,t.bF)(m,{modelValue:e.row.Started,"onUpdate:modelValue":l=>e.row.Started=l,onChange:l=>n.handleStartChange(e.row),"inline-prompt":"","active-text":"开","inactive-text":"关"},null,8,["modelValue","onUpdate:modelValue","onChange"])])),_:1}),(0,t.bF)(u,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.bF)(w,{"confirm-button-text":"确认","cancel-button-text":"取消",title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.row.Id)},{reference:(0,t.k6)((()=>[(0,t.bF)(s,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(g,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])])),_:1})])),_:1},8,["data","onCellDblclick"])])])),_:1},8,["modelValue","onOpen","title"])}var lt={props:["data","modelValue"],emits:["update:modelValue"],components:{Delete:F.epd},setup(e,{emit:l}){const a=(0,d.B)(),n=w(),o=(0,u.Kh)({show:!0,machineId:n.value.machineId,machineName:n.value.machineName,data:[],ips:[],bufferSize:a.value.bufferSize,loading:!1,machineIds:{Request:{Page:1,Size:10,Name:""},Count:0,List:[]},timer:0,timer1:0,editing:!1,names:{}});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{clearTimeout(o.timer),(0,m.lE)(n.value.machineId).then((e=>{o.timer=setTimeout(r,1e3)})).catch((()=>{o.timer=setTimeout(r,1e3)}))},s=()=>{(0,m.xD)().then((e=>{e.splice(0,0,"127.0.0.1"),e.splice(0,0,"0.0.0.0"),o.ips=e})).catch((()=>{}))},c=()=>{clearTimeout(o.timer1),0==o.editing?(0,m.Oy)(o.machineId).then((e=>{o.data=e,o.timer1=setTimeout(c,1e3)})).catch((()=>{o.timer1=setTimeout(c,1e3)})):o.timer1=setTimeout(c,1e3)},h=()=>{c(),i.nk.success("已刷新")},p=()=>{(0,S.NT)().then((e=>{o.names=e.filter((e=>e.Online)).reduce(((e,l)=>(e[l.MachineId]=!0,e)),{})})).catch((()=>{}))},g=e=>{o.machineIds.Request.Name=e,k()},k=()=>{o.loading=!0,(0,S.BS)(o.machineIds.Request).then((e=>{o.loading=!1,o.machineIds.Request=e.Request,o.machineIds.Count=e.Count,o.machineIds.List=e.List})).catch((e=>{o.loading=!1}))},v=e=>{o.machineIds.Request.Page=e,k()},f=()=>{k()},b=(e,l)=>{F(e,l.property)},C=()=>{E({ID:0,Name:"",Port:0,TargetEP:"127.0.0.1:80",machineId:""})},F=(e,l)=>{e.Started?i.nk.error("请先停止"):(o.data.forEach((e=>{e["NameEditing"]=!1,e["PortEditing"]=!1,e["TargetEPEditing"]=!1,e["BindIPAddressEditing"]=!1,e["BufferSizeEditing"]=!1,e["MachineIdEditing"]=!1})),e[`${l}Editing`]=!0,o.editing=!0)},y=(e,l)=>{if(e.Started)return void i.nk.error("请先停止");e[`${l}Editing`]=!1,o.editing=!1;const a=o.machineIds.List.find((l=>l.MachineId==e.MachineId));a&&(e.MachineName=a.MachineName),E(e)},V=e=>{(0,m.we)({machineId:o.machineId,Id:e}).then((()=>{c()}))},_=e=>{E(e)},E=e=>{o.loading=!0,e.Port=parseInt(e.Port),(0,m.nH)({machineId:o.machineId,data:e}).then((()=>{o.loading=!1,c()})).catch((e=>{o.loading=!1,i.nk.error(e)}))};return(0,t.sV)((()=>{c(),s(),r(),p()})),(0,t.hi)((()=>{clearTimeout(o.timer),clearTimeout(o.timer1)})),{state:o,handleOnShowList:f,handleCellClick:b,handleRefresh:h,handleAdd:C,handleEdit:F,handleEditBlur:y,handleDel:V,handleStartChange:_,handleSearch:g,handlePageChange:v}}};const at=(0,V.A)(lt,[["render",et],["__scopeId","data-v-190226d8"]]);var tt=at;const nt={class:"t-c head"},ot={class:"plan"},rt=["title"],st=["title"];function dt(e,l,a,n,o,r){const s=(0,t.g2)("el-button"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-table-column"),i=(0,t.g2)("Select"),c=(0,t.g2)("el-icon"),h=(0,t.g2)("PlanShow"),m=(0,t.g2)("CloseBold"),p=(0,t.g2)("WarnTriangleFilled"),g=(0,t.g2)("el-switch"),w=(0,t.g2)("Delete"),k=(0,t.g2)("el-popconfirm"),v=(0,t.g2)("el-table"),f=(0,t.g2)("el-dialog"),b=(0,t.g2)("PlanList");return(0,t.uX)(),(0,t.Wv)(b,{ref:"planDom",machineid:n.machineId,category:"sforward",handles:n.state.handles},{default:(0,t.k6)((()=>[(0,t.bF)(f,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),onOpen:n.handleOnShowList,"append-to":".app-wrap",title:`【${n.machineName}】的内网穿透`,top:"2vh",width:"760"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("div",nt,[(0,t.bF)(s,{type:"success",size:"small",onClick:n.handleAdd,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("添加")])),_:1},8,["onClick","loading"]),(0,t.bF)(s,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)("刷新")])),_:1},8,["onClick"])]),(0,t.bF)(v,{data:n.state.data,size:"small",border:"",height:"500",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(u,{property:"Name",label:"名称"},{default:(0,t.k6)((e=>[e.row.NameEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Name,"onUpdate:modelValue":l=>e.row.Name=l,onBlur:l=>n.handleEditBlur(e.row,"Name")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.Name),1)],64))])),_:1}),(0,t.bF)(u,{prop:"Plan",label:"开启和关闭计划",width:"200"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",ot,[(0,t.Lk)("p",null,[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(i)])),_:1}),(0,t.bF)(h,{handle:"start",keyid:e.row.Id},null,8,["keyid"])]),(0,t.Lk)("p",null,[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.bF)(h,{handle:"stop",keyid:e.row.Id},null,8,["keyid"])])])])),_:1}),(0,t.bF)(u,{property:"Temp",label:"服务器端口/域名",width:"160"},{default:(0,t.k6)((e=>[e.row.TempEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Temp,"onUpdate:modelValue":l=>e.row.Temp=l,onBlur:l=>n.handleEditBlur(e.row,"Temp")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Msg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.Msg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.Temp),1),(0,t.bF)(c,{size:"20"},{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})],8,rt)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.Temp),3))],64))])),_:1}),(0,t.bF)(u,{property:"LocalEP",label:"本机服务",width:"140"},{default:(0,t.k6)((e=>[e.row.LocalEPEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.LocalEP,"onUpdate:modelValue":l=>e.row.LocalEP=l,onBlur:l=>n.handleEditBlur(e.row,"LocalEP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.LocalMsg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.LocalMsg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.LocalEP),1),(0,t.bF)(c,{size:"20"},{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})],8,st)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.LocalEP),3))],64))])),_:1}),(0,t.bF)(u,{property:"Started",label:"状态",width:"60"},{default:(0,t.k6)((e=>[(0,t.bF)(g,{disabled:"",modelValue:e.row.Started,"onUpdate:modelValue":l=>e.row.Started=l,"inline-prompt":"","active-text":"是","inactive-text":"否",onClick:l=>n.handleStartChange(e.row)},null,8,["modelValue","onUpdate:modelValue","onClick"])])),_:1}),(0,t.bF)(u,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.bF)(k,{"confirm-button-text":"确认","cancel-button-text":"取消",title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.row.Id)},{reference:(0,t.k6)((()=>[(0,t.bF)(s,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(w)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])])),_:1})])),_:1},8,["data","onCellDblclick"])])])),_:1},8,["modelValue","onOpen","title"])])),_:1},8,["machineid","handles"])}function ut(e,l,a,n,o,r){const s=(0,t.g2)("PlanEdit");return(0,t.uX)(),(0,t.CE)("div",null,[(0,t.RG)(e.$slots,"default"),n.plan.showEdit?((0,t.uX)(),(0,t.Wv)(s,{key:0,modelValue:n.plan.showEdit,"onUpdate:modelValue":l[0]||(l[0]=e=>n.plan.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0)])}var it=a(4);const ct=(e,l)=>(0,it.zG)("plan/get",{machineId:e,category:l}),ht=(e,l)=>(0,it.zG)("plan/add",{machineId:e,plan:l}),mt=(e,l)=>(0,it.zG)("plan/remove",{machineId:e,planId:l}),pt={key:0,class:"mgl-2"},gt={class:"w-100"},wt=(0,t.Lk)("span",null,"的",-1),kt={class:"w-100 mgt-1"},vt={class:"w-100"},ft={class:"w-100 mgt-1"},bt={class:"w-100"},Ct={class:"w-100 mgt-1"},Ft={class:"w-100"},yt=(0,t.Lk)("span",null,"的",-1),Vt={class:"mgt-1 w-100"},_t={class:"mgt-1 w-100"},Et=(0,t.Lk)("span",null,"后",-1),Lt={class:"t-c w-100"};function Pt(e,l,a,n,o,r){const s=(0,t.g2)("el-option"),d=(0,t.g2)("el-select"),u=(0,t.g2)("el-form-item"),i=(0,t.g2)("el-input"),c=(0,t.g2)("el-switch"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[30]||(l[30]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:"计划任务",top:"2vh",width:"450"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{label:"执行操作",prop:"Handle"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Handle,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Handle=e),style:{width:"10rem"},disabled:""},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.handles,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"执行方式",prop:"Method"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Method,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.Method=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.methods,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue","onChange"]),n.state.ruleForm.Method>=2?((0,t.uX)(),(0,t.CE)("strong",pt,(0,z.v_)(n.state.ruleForm.Rule),1)):(0,t.Q3)("",!0)])),_:1}),2==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:0,label:"在",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",gt,[(0,t.bF)(d,{modelValue:n.state.ruleAt.type,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleAt.type=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[(0,t.bF)(s,{value:2,label:"每月"}),(0,t.bF)(s,{value:3,label:"每日"}),(0,t.bF)(s,{value:4,label:"每时"}),(0,t.bF)(s,{value:5,label:"每分"})])),_:1},8,["modelValue","onChange"]),(0,t.eW)(),wt]),(0,t.Lk)("div",kt,[n.state.ruleAt.type<2?((0,t.uX)(),(0,t.Wv)(i,{key:0,onChange:n.handleChange,modelValue:n.state.ruleAt.month,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleAt.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<3?((0,t.uX)(),(0,t.Wv)(i,{key:1,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<2}),modelValue:n.state.ruleAt.day,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.ruleAt.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<4?((0,t.uX)(),(0,t.Wv)(i,{key:2,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<3}),modelValue:n.state.ruleAt.hour,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.ruleAt.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<5?((0,t.uX)(),(0,t.Wv)(i,{key:3,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<4}),modelValue:n.state.ruleAt.min,"onUpdate:modelValue":l[6]||(l[6]=e=>n.state.ruleAt.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),(0,t.bF)(i,{onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<5}),modelValue:n.state.ruleAt.sec,"onUpdate:modelValue":l[7]||(l[7]=e=>n.state.ruleAt.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","class","modelValue"])])])),_:1})):(0,t.Q3)("",!0),4==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:1,label:"每",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",vt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTimer.year,"onUpdate:modelValue":l[8]||(l[8]=e=>n.state.ruleTimer.year=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("年")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.month,"onUpdate:modelValue":l[9]||(l[9]=e=>n.state.ruleTimer.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.day,"onUpdate:modelValue":l[10]||(l[10]=e=>n.state.ruleTimer.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",ft,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTimer.hour,"onUpdate:modelValue":l[11]||(l[11]=e=>n.state.ruleTimer.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.min,"onUpdate:modelValue":l[12]||(l[12]=e=>n.state.ruleTimer.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.sec,"onUpdate:modelValue":l[13]||(l[13]=e=>n.state.ruleTimer.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"])])])),_:1})):(0,t.Q3)("",!0),8==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:2,label:"Cron",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",bt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleCron.sec,"onUpdate:modelValue":l[14]||(l[14]=e=>n.state.ruleCron.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.min,"onUpdate:modelValue":l[15]||(l[15]=e=>n.state.ruleCron.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.hour,"onUpdate:modelValue":l[16]||(l[16]=e=>n.state.ruleCron.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",Ct,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleCron.day,"onUpdate:modelValue":l[17]||(l[17]=e=>n.state.ruleCron.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.month,"onUpdate:modelValue":l[18]||(l[18]=e=>n.state.ruleCron.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.week,"onUpdate:modelValue":l[19]||(l[19]=e=>n.state.ruleCron.week=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("周")])),_:1},8,["onChange","modelValue"])])])),_:1})):(0,t.Q3)("",!0),16==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:3,label:"在",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ft,[(0,t.bF)(d,{modelValue:n.state.ruleForm.TriggerHandle,"onUpdate:modelValue":l[20]||(l[20]=e=>n.state.ruleForm.TriggerHandle=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.triggers,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue","onChange"]),(0,t.eW)(),yt]),(0,t.Lk)("div",Vt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTrigger.year,"onUpdate:modelValue":l[21]||(l[21]=e=>n.state.ruleTrigger.year=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("年")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.month,"onUpdate:modelValue":l[22]||(l[22]=e=>n.state.ruleTrigger.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.day,"onUpdate:modelValue":l[23]||(l[23]=e=>n.state.ruleTrigger.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",_t,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTrigger.hour,"onUpdate:modelValue":l[24]||(l[24]=e=>n.state.ruleTrigger.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.min,"onUpdate:modelValue":l[25]||(l[25]=e=>n.state.ruleTrigger.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.sec,"onUpdate:modelValue":l[26]||(l[26]=e=>n.state.ruleTrigger.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"]),Et])])),_:1})):(0,t.Q3)("",!0),(0,t.bF)(u,{label:"内容",prop:"Value"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{type:"textarea",resize:"none",rows:"5",modelValue:n.state.ruleForm.Value,"onUpdate:modelValue":l[27]||(l[27]=e=>n.state.ruleForm.Value=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"禁用",prop:"Disabled"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{modelValue:n.state.ruleForm.Disabled,"onUpdate:modelValue":l[28]||(l[28]=e=>n.state.ruleForm.Disabled=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Lt,[(0,t.bF)(h,{onClick:l[29]||(l[29]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick","loading"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue"])}var It={props:["data","modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=/(\d+|\*)-(\d+|\*)-(\d+|\*)\s+(\d+|\*):(\d+|\*):(\d+|\*)/,n=/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/,o=/(.+)\s+(.+)\s+(.+)\s+(.+)\s+(.+)\s+(.+)/,r=(0,u.KR)(null),s=(0,t.WQ)("plan");!s.value.current.TriggerHandle&&s.value.triggers.length>0&&(s.value.current.TriggerHandle=s.value.triggers[0].value);const d=(0,u.Kh)({show:!0,loading:!1,ruleCron:{week:"*",month:"*",day:"*",hour:"*",min:"*",sec:"30"},ruleAt:{type:3,month:"*",day:"*",hour:0,min:0,sec:0},ruleTimer:{year:0,month:0,day:0,hour:0,min:0,sec:30},ruleTrigger:{year:0,month:0,day:0,hour:0,min:0,sec:30},ruleForm:{Id:s.value.current.Id,Category:s.value.current.Category,Key:s.value.current.Key,Value:s.value.current.Value,Rule:s.value.current.Rule,Handle:s.value.current.Handle,Method:s.value.current.Method,Disabled:s.value.current.Disabled,TriggerHandle:s.value.current.TriggerHandle},rules:{}});(0,t.wB)((()=>d.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const i={2:e=>{if(e=e||"*-*-* 0:0:0",0==a.test(e))return;const[,l,t,n,o,r,s]=e.match(a);"*"==r?d.ruleAt.type=5:"*"==o?d.ruleAt.type=4:"*"==n?d.ruleAt.type=3:"*"==t&&(d.ruleAt.type=2),d.ruleAt.year=l,d.ruleAt.month=t,d.ruleAt.day=n,d.ruleAt.hour=o,d.ruleAt.min=r,d.ruleAt.sec=s},4:e=>{if(e=e||"0-0-0 0:0:30",0==n.test(e))return;const[,l,a,t,o,r,s]=e.match(n);d.ruleTimer.year=l,d.ruleTimer.month=a,d.ruleTimer.day=t,d.ruleTimer.hour=o,d.ruleTimer.min=r,d.ruleTimer.sec=s},8:e=>{if(e=e||"30 * * * * ?",0==o.test(e))return;const[,l,a,t,n,r,s]=e.match(o);d.ruleCron.sec=l,d.ruleCron.min=a,d.ruleCron.hour=t,d.ruleCron.day=n,d.ruleCron.month=r,d.ruleCron.week=s},16:e=>{if(e=e||"0-0-0 0:0:30",0==n.test(e))return;const[,l,a,t,o,r,s]=e.match(n);d.ruleTrigger.year=l,d.ruleTrigger.month=a,d.ruleTrigger.day=t,d.ruleTrigger.hour=o,d.ruleTrigger.min=r,d.ruleTrigger.sec=s}},c=()=>{d.ruleForm.Method in i&&i[d.ruleForm.Method](d.ruleForm.Rule)},h={2:()=>{switch(d.ruleAt.type){case 2:return`*-*-${d.ruleAt.day} ${d.ruleAt.hour}:${d.ruleAt.min}:${d.ruleAt.sec}`;case 3:return`*-*-* ${d.ruleAt.hour}:${d.ruleAt.min}:${d.ruleAt.sec}`;case 4:return`*-*-* *:${d.ruleAt.min}:${d.ruleAt.sec}`;case 5:return`*-*-* *:*:${d.ruleAt.sec}`}return""},4:()=>`${d.ruleTimer.year}-${d.ruleTimer.month}-${d.ruleTimer.day} ${d.ruleTimer.hour}:${d.ruleTimer.min}:${d.ruleTimer.sec}`,8:()=>`${d.ruleCron.sec} ${d.ruleCron.min} ${d.ruleCron.hour} ${d.ruleCron.day} ${d.ruleCron.month} ${d.ruleCron.week}`,16:()=>`${d.ruleTrigger.year}-${d.ruleTrigger.month}-${d.ruleTrigger.day} ${d.ruleTrigger.hour}:${d.ruleTrigger.min}:${d.ruleTrigger.sec}`},m=()=>{d.ruleForm.Method in h&&(d.ruleForm.Rule=h[d.ruleForm.Method]())},p=()=>{m()},g=()=>{const e=JSON.parse(JSON.stringify(d.ruleForm));d.loading=!0,ht(s.value.machineid,e).then((e=>{d.loading=!1,d.show=!1})).catch((()=>{d.loading=!1}))};return(0,t.sV)((()=>{c(),p()})),{state:d,ruleFormRef:r,plan:s,handleChange:p,handleSave:g}}};const Tt=(0,V.A)(It,[["render",Pt]]);var St=Tt,Mt={components:{PlanEdit:St},props:["machineid","category","handles"],setup(e){const l=(0,u.KR)({machineid:e.machineid,timer:0,list:{},current:{},showEdit:!1,category:e.category||"",handles:e.handles||[],handleJson:(e.handles||[]).reduce(((e,l,a)=>(e[l.value]=l.label,e)),{}),triggers:[],methods:[{label:"手动",value:0},{label:"启动后",value:1},{label:"到点",value:2},{label:"定时",value:4},{label:"Cron",value:8},{label:"触发",value:16}]});(0,t.Gt)("plan",l);const a=()=>{clearTimeout(l.value.timer),ct(l.value.machineid,e.category).then((e=>{l.value.list=e.reduce(((e,l,a)=>(e[`${l.Key}-${l.Handle}`]=l,e)),{}),l.value.timer=setTimeout(a,1e3)})).catch((()=>{l.value.timer=setTimeout(a,1e3)}))},n=(e,t)=>{const n=l.value.list[`${e}-${t}`];n&&mt(l.value.machineid,n.Id).then((()=>{a()}))};return(0,t.sV)((()=>{a()})),(0,t.hi)((()=>{clearTimeout(l.value.timer)})),{plan:l,remove:n}}};const Wt=(0,V.A)(Mt,[["render",ut]]);var At=Wt;const Rt={key:0},Xt={key:1};function Nt(e,l,a,n,o,r){return(0,t.uX)(),(0,t.CE)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=(...e)=>n.handleEdit&&n.handleEdit(...e))},[n.item?((0,t.uX)(),(0,t.CE)("span",Rt,(0,z.v_)(n.rule),1)):((0,t.uX)(),(0,t.CE)("span",Xt,"未设置"))])}var Ut={props:["keyid","handle"],setup(e){const l=/(\d+|\*)-(\d+|\*)-(\d+|\*)\s+(\d+|\*):(\d+|\*):(\d+|\*)/,a=/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/,n={0:()=>"手动",1:()=>"网络启动后",2:(e,a)=>{if(0==l.test(a))return a;const[,t,n,o,r,s,d]=a.match(l);return"*"==s?`每分钟的${d}秒`:"*"==r?`每小时的${s}分${d}秒`:"*"==o?`每天的${r}时${s}分${d}秒`:"*"==n?`每月的${o}日${r}时${s}分${d}秒`:"*"==t?`每年的${n}月${o}日${r}时${s}分${d}秒`:void 0},4:(e,l)=>{if(0==a.test(l))return l;const[,t,n,o,r,s,d]=l.match(a),u=[];return"0"!=t&&u.push(`${t}年`),"0"!=n&&u.push(`${n}月`),"0"!=o&&u.push(`${o}日`),"0"!=r&&u.push(`${r}时`),"0"!=s&&u.push(`${s}分`),"0"!=d&&u.push(`${d}秒`),`每${u.join("")}`},8:(e,l)=>`Cron : ${l}`,16:(e,l)=>{if(0==a.test(l))return l;const[,t,n,r,s,d,u]=l.match(a),i=[];return"0"!=t&&i.push(`${t}年`),"0"!=n&&i.push(`${n}月`),"0"!=r&&i.push(`${r}日`),"0"!=s&&i.push(`${s}时`),"0"!=d&&i.push(`${d}分`),"0"!=u&&i.push(`${u}秒`),`在【${o.value.handleJson[e.TriggerHandle]}】的${i.join("")}后`}},o=(0,t.WQ)("plan"),r=(0,t.EW)((()=>o.value.list[`${e.keyid}-${e.handle}`])),s=(0,t.EW)((()=>{if(!r.value)return"";const e=r.value.Method;return n[e]?n[e](r.value,r.value.Rule):r.value.Rule})),d=()=>{o.value.current=r.value||{Id:0,Category:o.value.category,Key:`${e.keyid}`,Handle:e.handle,Value:"",Disabled:!1,TriggerHandle:"",Method:2,Rule:""},o.value.triggers=JSON.parse(JSON.stringify(o.value.handles.filter((l=>l.value!=e.handle)))),o.value.showEdit=!0};return{item:r,rule:s,handleEdit:d}}};const Bt=(0,V.A)(Ut,[["render",Nt]]);var xt=Bt,$t={props:["data","modelValue"],emits:["update:modelValue"],components:{WarnTriangleFilled:F.DtC,Delete:F.epd,Select:F.l6P,CloseBold:F.QBJ,PlanList:At,PlanShow:xt},setup(e,{emit:l}){const a=(0,u.KR)(null),n=(0,d.B)(),o=Da(),r=(0,u.Kh)({bufferSize:n.value.bufferSize,show:!0,data:[],timer:0,timer1:0,editing:!1,loading:!1,handles:[{label:"开启",value:"start"},{label:"关闭",value:"stop"}]});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{clearTimeout(r.timer),(0,xa.eX)(o.value.machineid).then((e=>{r.timer=setTimeout(s,1e3)})).catch((()=>{r.timer=setTimeout(s,1e3)}))},c=()=>{clearTimeout(r.timer1),0==r.editing?(0,xa.pY)(o.value.machineid).then((e=>{e.forEach((e=>{e.Temp=(e.Domain||e.RemotePort).toString(),e.RemotePort=0,e.Domain=""})),r.data=e,r.timer1=setTimeout(c,1e3)})).catch((()=>{r.timer1=setTimeout(c,1e3)})):r.timer1=setTimeout(c,1e3)},h=()=>{c()},m=(e,l)=>{w(e,l.property)},p=()=>{c(),i.nk.success("已刷新")},g=()=>{r.loading=!0;const e={Id:0,Name:"",RemotePort:0,LocalEP:"127.0.0.1:80",Domain:"",Temp:""};(0,xa.Qs)({machineid:o.value.machineid,data:e}).then((()=>{r.loading=!1,setTimeout((()=>{c()}),100)})).catch((e=>{r.loading=!1,i.nk.error(e)}))},w=(e,l)=>{e.Started?i.nk.error("请先停止运行"):(r.data.forEach((e=>{e["NameEditing"]=!1,e["RemotePortEditing"]=!1,e["LocalEPEditing"]=!1,e["DomainEditing"]=!1,e["TempEditing"]=!1})),e[`${l}Editing`]=!0,r.editing=!0)},k=(e,l)=>{e.Started?i.nk.error("请先停止运行"):(e[`${l}Editing`]=!1,r.editing=!1,b(e))},v=e=>{a.value.remove(e,"start"),a.value.remove(e,"stop"),(0,xa.DY)({machineid:o.value.machineid,id:e}).then((()=>{r.loading=!1,c()})).catch((e=>{r.loading=!1,i.nk.error(e)}))},f=e=>{r.loading=!0;const l=e.Started?(0,xa.JT)({machineid:o.value.machineid,id:e.Id}):(0,xa.nP)({machineid:o.value.machineid,id:e.Id});l.then((()=>{r.loading=!1,c()})).catch((e=>{r.loading=!1,i.nk.error(e)}))},b=e=>{e.Temp&&(/^\d+$/.test(e.Temp)?e.RemotePort=parseInt(e.Temp):e.Domain=e.Temp,r.loading=!0,(0,xa.Qs)({machineid:o.value.machineid,data:e}).then((e=>{r.loading=!1,0==e&&i.nk.error("操作失败,可能存在相同值"),c()})).catch((e=>{r.loading=!1,i.nk.error(e)})))};return(0,t.sV)((()=>{c(),s()})),(0,t.hi)((()=>{clearTimeout(r.timer),clearTimeout(r.timer1)})),{state:r,planDom:a,machineName:o.value.machineName,machineId:o.value.machineid,handleOnShowList:h,handleCellClick:m,handleRefresh:p,handleAdd:g,handleEdit:w,handleEditBlur:k,handleDel:v,handleStartChange:f}}};const zt=(0,V.A)($t,[["render",dt],["__scopeId","data-v-359a437c"]]);var Dt=zt;const Kt=e=>((0,t.Qi)("data-v-8c388c86"),e=e(),(0,t.jt)(),e),Qt=["onClick"],Ot=["href"],Gt={href:"javascript:;",class:"a-line"},jt={key:0},qt={key:1},Ht={key:0},Jt={key:1},Zt={key:0},Yt={key:1},en=Kt((()=>(0,t.Lk)("span",null,"/",-1))),ln={key:0},an={key:1},tn={class:"dropdown"};function nn(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-button"),c=(0,t.g2)("el-popconfirm"),h=(0,t.g2)("el-table"),m=(0,t.g2)("el-dialog"),p=(0,t.g2)("el-switch"),g=(0,t.g2)("ArrowDown"),w=(0,t.g2)("el-dropdown-item"),k=(0,t.g2)("el-dropdown-menu"),v=(0,t.g2)("el-dropdown");return(0,t.uX)(),(0,t.CE)(t.FK,null,[(0,t.bF)(m,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),"append-to":".app-wrap",title:`与[${n.state.machineName}]的链接`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{data:n.state.data,size:"small",border:"",height:"500"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{property:"RemoteMachineId",label:"目标/服务器"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",{class:(0,z.C4)({green:e.row.Connected})},[(0,t.Lk)("p",null,(0,z.v_)(e.row.IPEndPoint),1),(0,t.Lk)("p",null,"ssl : "+(0,z.v_)(e.row.SSL),1)],2)])),_:1}),(0,t.bF)(s,{property:"TransactionId",label:"事务",width:"80"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(n.state.transactions[e.row.TransactionId]),1)])),_:1}),(0,t.bF)(s,{property:"TransportName",label:"协议"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,(0,z.v_)(e.row.TransportName)+"("+(0,z.v_)(n.state.protocolTypes[e.row.ProtocolType])+")",1),(0,t.Lk)("p",null,(0,z.v_)(n.state.types[e.row.Type])+" - "+(0,z.v_)(1<[(0,t.Lk)("span",null,(0,z.v_)(e.row.Delay)+"ms",1)])),_:1}),(0,t.bF)(s,{property:"Bytes",label:"通信"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,"up : "+(0,z.v_)(e.row.SendBytesText),1),(0,t.Lk)("p",null,"down : "+(0,z.v_)(e.row.ReceiveBytesText),1)])])),_:1}),(0,t.bF)(s,{property:"relay",label:"中继节点"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l=>n.handleNode(e.row)},(0,z.v_)(n.state.nodesDic[e.row.NodeId]||"选择节点"),9,Qt)])])),_:1}),(0,t.bF)(s,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[n.hasTunnelRemove?((0,t.uX)(),(0,t.Wv)(c,{key:0,"confirm-button-text":"确认","cancel-button-text":"取消",title:"确定关闭此连接?",onConfirm:l=>n.handleDel(e.row)},{reference:(0,t.k6)((()=>[(0,t.bF)(i,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])):(0,t.Q3)("",!0)])])),_:1})])),_:1},8,["data"])])])),_:1},8,["modelValue","title"]),(0,t.bF)(m,{modelValue:n.state.showNodes,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.showNodes=e),title:e.$t("server.relayTitle"),width:"760",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{data:n.state.nodes,size:"small",border:"",height:"600"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{property:"Name",label:e.$t("server.relayName")},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:e.row.Url,class:"a-line blue",target:"_blank"},(0,z.v_)(e.row.Name),9,Ot),(0,t.Lk)("a",Gt,[1==(1&e.row.AllowProtocol)?((0,t.uX)(),(0,t.CE)("span",jt,",tcp")):(0,t.Q3)("",!0),2==(2&e.row.AllowProtocol)?((0,t.uX)(),(0,t.CE)("span",qt,",udp")):(0,t.Q3)("",!0)])])])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxGbTotal",label:e.$t("server.relayFlow"),width:"140"},{default:(0,t.k6)((e=>[0==e.row.MaxGbTotal?((0,t.uX)(),(0,t.CE)("span",Ht,"--")):((0,t.uX)(),(0,t.CE)("span",Jt,(0,z.v_)((e.row.MaxGbTotalLastBytes/1024/1024/1024).toFixed(2))+"GB / "+(0,z.v_)(e.row.MaxGbTotal)+"GB ",1))])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxBandwidth",label:e.$t("server.relaySpeed"),width:"80"},{default:(0,t.k6)((e=>[0==e.row.MaxBandwidth?((0,t.uX)(),(0,t.CE)("span",Zt,"--")):((0,t.uX)(),(0,t.CE)("span",Yt,(0,z.v_)(e.row.MaxBandwidth)+"Mbps",1))])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxBandwidthTotal",label:`${e.$t("server.relaySpeed2")}/${e.$t("server.relaySpeed1")}`,width:"120"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,[(0,t.Lk)("span",null,(0,z.v_)(e.row.BandwidthRatio)+"Mbps",1),en,0==e.row.MaxBandwidthTotal?((0,t.uX)(),(0,t.CE)("span",ln,"--")):((0,t.uX)(),(0,t.CE)("span",an,(0,z.v_)(e.row.MaxBandwidthTotal)+"Mbps",1))])])),_:1},8,["label"]),(0,t.bF)(s,{property:"ConnectionRatio",label:e.$t("server.relayConnection"),width:"80"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,[(0,t.Lk)("strong",null,(0,z.v_)(e.row.ConnectionRatio),1),(0,t.eW)("/"+(0,z.v_)(e.row.MaxConnection),1)])])),_:1},8,["label"]),(0,t.bF)(s,{property:"Delay",label:e.$t("server.relayDelay"),width:"60"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.Delay)+"ms",1)])),_:1},8,["label"]),(0,t.bF)(s,{property:"Public",label:e.$t("server.relayPublic"),width:"50"},{default:(0,t.k6)((e=>[(0,t.bF)(p,{disabled:"",modelValue:e.row.Public,"onUpdate:modelValue":l=>e.row.Public=l,size:"small"},null,8,["modelValue","onUpdate:modelValue"])])),_:1},8,["label"]),(0,t.bF)(s,{property:"Oper",label:e.$t("server.relayOper"),width:"75"},{default:(0,t.k6)((l=>[(0,t.bF)(v,{size:"small"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(k,null,{default:(0,t.k6)((()=>[1==(1&l.row.AllowProtocol)?((0,t.uX)(),(0,t.Wv)(w,{key:0,onClick:e=>n.handleConnect(l.row.Id,1)},{default:(0,t.k6)((()=>[(0,t.eW)("TCP")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),2==(2&l.row.AllowProtocol)?((0,t.uX)(),(0,t.Wv)(w,{key:1,onClick:e=>n.handleConnect(l.row.Id,2)},{default:(0,t.k6)((()=>[(0,t.eW)("UDP")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0)])),_:2},1024)])),default:(0,t.k6)((()=>[(0,t.Lk)("div",tn,[(0,t.Lk)("span",null,(0,z.v_)(e.$t("server.relayUse")),1),(0,t.bF)(u,{class:"el-icon--right"},{default:(0,t.k6)((()=>[(0,t.bF)(g)])),_:1})])])),_:2},1024)])),_:1},8,["label"])])),_:1},8,["data"])])])),_:1},8,["modelValue","title"])],64)}var on=a(9232),rn=a(5931),sn={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Select:F.l6P,ArrowDown:F.yd$},setup(e,{emit:l}){const{t:a}=(0,rn.s9)(),n=(0,d.B)(),o=(0,t.EW)((()=>n.value.hasAccess("TunnelRemove"))),r=(0,Gl.ZY)(),s=(0,Gl.mx)(),c=(0,Gl.FG)(),h=(0,Gl.bB)(),m=(0,u.Kh)({show:!0,protocolTypes:{1:"tcp",2:"udp",4:"msquic"},types:{0:"打洞",1:"中继",2:"节点"},transactions:{forward:"端口转发",tuntap:"虚拟网卡",socks5:"代理转发"},machineName:r.value.currentName,currentRow:{},data:(0,t.EW)((()=>[s.value.list[r.value.current],c.value.list[r.value.current],h.value.list[r.value.current]].filter((e=>!!e)))),showNodes:!1,nodes:[],nodesDic:{},timer:0});(0,t.wB)((()=>m.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e),l("change")}),300)}));const p=e=>{o.value&&e.removeFunc(e.RemoteMachineId).then((()=>{i.nk.success(a("common.oper"))})).catch((()=>{}))},g=()=>{clearTimeout(m.timer),(0,on.W4)().then((e=>{m.nodes=e,m.nodesDic=e.reduce(((e,l)=>(e[l.Id]=l.Name,e)),{}),m.timer=setTimeout(g,1e3)})).catch((()=>{m.timer=setTimeout(g,1e3)}))},w=e=>{m.currentRow=e,m.showNodes=!0},k=(e,l)=>{const t={FromMachineId:n.value.config.Client.Id,TransactionId:m.currentRow.TransactionId,ToMachineId:m.currentRow.RemoteMachineId,NodeId:e,Protocol:l};(0,on.uQ)(t).then((()=>{i.nk.success(a("common.oper"))})).catch((()=>{i.nk.success(a("common.operFail"))})),m.showNodes=!1};return(0,t.sV)((()=>{r.value.updateRealTime(!0),g()})),(0,t.hi)((()=>{r.value.updateRealTime(!1),clearTimeout(m.timer)})),{state:m,handleDel:p,hasTunnelRemove:o,handleNode:w,handleConnect:k}}};const dn=(0,V.A)(sn,[["render",nn],["__scopeId","data-v-8c388c86"]]);var un=dn,cn=a(9383);const hn={class:"updater-wrap t-c"},mn={class:"t-l"},pn={class:"flex mgt-1"},gn={class:"mgt-1 t-c"};function wn(e,l,a,n,o,r){const s=(0,t.g2)("el-option"),d=(0,t.g2)("el-select"),u=(0,t.g2)("el-col"),i=(0,t.g2)("el-row"),c=(0,t.g2)("el-button"),h=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(h,{class:"options-center",title:"更新","destroy-on-close":"",modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),width:"40rem",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",hn,[(0,t.Lk)("div",mn,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.msg,(e=>((0,t.uX)(),(0,t.CE)("li",null,(0,z.v_)(e),1)))),256))])]),(0,t.Lk)("div",pn,[(0,t.bF)(i,{class:"w-100"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:10},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.type,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.type=e),size:"large"},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.types,(e=>((0,t.uX)(),(0,t.Wv)(s,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.bF)(u,{span:4},{default:(0,t.k6)((()=>[(0,t.eW)(" -> ")])),_:1}),(0,t.bF)(u,{span:10},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.version,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.version=e),size:"large",filterable:"","allow-create":"","default-first-option":""},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.versions,(e=>((0,t.uX)(),(0,t.Wv)(s,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1})])),_:1})]),(0,t.Lk)("div",gn,[(0,t.bF)(c,{type:"success",onClick:n.handleUpdate,plain:""},{default:(0,t.k6)((()=>[(0,t.eW)("确 定")])),_:1},8,["onClick"])])])])),_:1},8,["modelValue"])}var kn={props:["modelValue"],emits:["update:modelValue"],setup(e,{emit:l}){const a=(0,d.B)(),n=((0,t.EW)((()=>a.value.hasAccess("UpdateSelf"))),(0,t.EW)((()=>a.value.hasAccess("UpdateOther")))),o=(0,cn.T)(),r=(0,t.EW)((()=>a.value.signin.Version)),s=(0,t.EW)((()=>o.value.current.Version)),i=[{label:`仅【${o.value.device.MachineName}】`,value:o.value.device.MachineId},n.value?{label:"本组所有",value:"g-all"}:{},n.value?{label:"本服务器所有",value:"s-all"}:{}].filter((e=>e.value)),c=[{label:`${s.value}【最新版本】`,value:s.value},{label:`${r.value}【服务器版本】`,value:r.value}].filter((e=>e.value)),h=(0,u.Kh)({show:!0,type:i[0]||"",version:c[0]||"",types:i,versions:c,msg:[]});(0,t.wB)((()=>h.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const m=()=>{const e={MachineId:o.value.device.MachineId,Version:h.version.value||h.version,GroupAll:"g-all"==h.type,All:"s-all"==h.type};(e.All||e.GroupAll)&&(e.MachineId=""),(0,M.lJ)(e).then((()=>{})).catch((()=>{})),h.show=!1};return(0,t.sV)((()=>{(0,M.rL)().then((e=>{h.msg=e.Msg}))})),{state:h,updater:o,handleUpdate:m}}};const vn=(0,V.A)(kn,[["render",wn]]);var fn=vn;function bn(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("el-table"),u=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(u,{title:`${n.flow.device.name}->${e.$t("status.messengerName")}`,class:"options-center",top:"1vh","destroy-on-close":"",modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),width:"480"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(d,{data:n.state.list,stripe:"",border:"",size:"small",width:"100%",height:"60vh"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"id",label:"id",width:"200"}),(0,t.bF)(s,{prop:"request",label:"request",sortable:""},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.request)+"ms / "+(0,z.v_)(e.row.requestMax)+"ms",1)])),_:1}),(0,t.bF)(s,{prop:"response",label:"response",sortable:""},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.response)+"ms / "+(0,z.v_)(e.row.responseMax)+"ms",1)])),_:1})])),_:1},8,["data"])])])),_:1},8,["title","modelValue"])}var Cn=a(4921),Fn={props:["modelValue"],emits:["update:modelValue"],setup(e,{emit:l}){const{t:a}=(0,rn.s9)(),n=U(),o=(0,u.Kh)({show:!0,timer:0,list:[]});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{clearTimeout(o.timer),(0,Cn.iN)(n.value.device.id).then((e=>{o.list=Object.keys(e).map((l=>({id:`${a(`status.messenger${l}`)}(${l})`,request:(BigInt(e[l].SendtBytes)&BigInt(4294967295)).toString(),requestMax:(BigInt(e[l].SendtBytes)>>BigInt(32)).toString(),response:(BigInt(e[l].ReceiveBytes)&BigInt(4294967295)).toString(),responseMax:(BigInt(e[l].ReceiveBytes)>>BigInt(32)).toString()}))),o.timer=setTimeout(r,3e3)})).catch((e=>{o.timer=setTimeout(r,3e3)}))};return(0,t.sV)((()=>{r()})),(0,t.hi)((()=>{clearTimeout(o.timer)})),{state:o,flow:n}}};const yn=(0,V.A)(Fn,[["render",bn]]);var Vn=yn,_n={components:{Sort:E,Oper:$,Device:te,DeviceEdit:ue,AccessEdit:ge,Tunnel:Va,TunnelEdit:Aa,ConnectionsEdit:un,Tuntap:Ce,TuntapEdit:pl,TuntapLease:Rl,Socks5:ea,Socks5Edit:ia,Forward:Oa,ForwardEdit:tt,SForwardEdit:Dt,UpdaterConfirm:fn,Stopwatch:Vn},setup(e){const l=(0,d.B)(),a=(0,u.Kh)({height:(0,t.EW)((()=>l.value.height-90))}),{devices:n,machineId:o,_getSignList:r,_getSignList1:s,handleDeviceEdit:c,handleAccessEdit:h,handlePageChange:m,handlePageSizeChange:p,handleDel:w,clearDevicesTimeout:k,setSort:v}=(0,ie.r)(),{tuntap:b,_getTuntapInfo:F,handleTuntapEdit:y,handleTuntapRefresh:V,clearTuntapTimeout:_,getTuntapMachines:E,sortTuntapIP:L}=(0,C.O)(),{socks5:P,_getSocks5Info:I,handleSocks5Edit:T,handleSocks5Refresh:S,clearSocks5Timeout:M,getSocks5Machines:W,sortSocks5:R}=f(),{tunnel:X,_getTunnelInfo:U,handleTunnelEdit:B,handleTunnelRefresh:x,clearTunnelTimeout:$,sortTunnel:z}=ba(),{forward:D,_getForwardCountInfo:K,handleForwardEdit:Q,clearForwardTimeout:O,handleForwardRefresh:G}=g(),{sforward:j,_getSForwardCountInfo:q,handleSForwardEdit:H,clearSForwardTimeout:J,handleSForwardRefresh:Z}=za(),{connections:Y,forwardConnections:ee,_getForwardConnections:le,tuntapConnections:ae,_getTuntapConnections:te,socks5Connections:ne,_getSocks5Connections:oe,handleTunnelConnections:re,clearConnectionsTimeout:se}=(0,Gl.L2)(),{updater:de,_getUpdater:ue,_subscribeUpdater:ce,clearUpdaterTimeout:he}=(0,cn.d)(),{flow:me}=N(),{_getAccessInfo:pe,clearAccessTimeout:ge,handleAccesssRefresh:we}=(0,A.Y)(),ke=e=>{n.page.Request.Prop=e.prop,n.page.Request.Asc="ascending"==e.order;let l=new Promise(((e,l)=>{e()}));if("tunnel"==e.prop){const e=z(n.page.Request.Asc);e.length>0&&(l=v(e))}else if("tuntap"==e.prop){const e=L(n.page.Request.Asc);e.length>0&&(l=v(e))}else if("socks5"==e.prop){const e=R(n.page.Request.Asc);e.length>0&&(l=v(e))}l.then((()=>{m()})).catch((()=>{}))},ve=e=>{n.page.Request.Name=e||"",n.page.Request.Name?n.page.Request.Ids=E(n.page.Request.Name).concat(W(n.page.Request.Name)).reduce(((e,l)=>(-1==e.indexOf(l)&&e.push(l),e)),[]):n.page.Request.Ids=[],m(),x(),V(),S(),G(),Z(),we(),i.nk.success({message:"刷新成功",grouping:!0})},fe=()=>{m(),x(),V(),S(),we(),i.nk.success({message:"刷新成功",grouping:!0})};return(0,t.sV)((()=>{m(),x(),V(),S(),G(),Z(),we(),r(),s(),F(),I(),U(),le(),te(),oe(),K(),q(),ue(),ce(),pe()})),(0,t.hi)((()=>{k(),se(),_(),M(),$(),O(),J(),he(),ge()})),{state:a,devices:n,machineId:o,handleSortChange:ke,handleDeviceEdit:c,handleAccessEdit:h,handlePageRefresh:ve,handlePageSearch:fe,handlePageChange:m,handlePageSizeChange:p,handleDel:w,tuntap:b,handleTuntapEdit:y,handleTuntapRefresh:V,socks5:P,handleSocks5Edit:T,handleSocks5Refresh:S,tunnel:X,connections:Y,handleTunnelEdit:B,handleTunnelRefresh:x,handleTunnelConnections:re,forward:D,handleForwardEdit:Q,sforward:j,handleSForwardEdit:H,updater:de,flow:me}}};const En=(0,V.A)(_n,[["render",s],["__scopeId","data-v-4766ad40"]]);var Ln=En}}]);
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/app.644fc91c.js b/src/linker.app/public/web/js/app.1acc2fd0.js
similarity index 80%
rename from src/linker.tray.win/web/js/app.644fc91c.js
rename to src/linker.app/public/web/js/app.1acc2fd0.js
index 048026e9..ebfe2ee7 100644
--- a/src/linker.tray.win/web/js/app.644fc91c.js
+++ b/src/linker.app/public/web/js/app.1acc2fd0.js
@@ -1 +1 @@
-(function(){"use strict";var e={8835:function(e,r,s){s.d(r,{P$:function(){return o},ai:function(){return a},zj:function(){return n}});var t=s(4);const n=()=>(0,t.zG)("config/get"),a=e=>(0,t.zG)("config/install",e),o=e=>(0,t.zG)("config/export",e)},4:function(e,r,s){s.d(r,{a1:function(){return f},e3:function(){return C},jH:function(){return S},zG:function(){return h}});s(4114),s(6573),s(8100),s(7936);var t=s(1219);let n=0,a=null,o="",l=1,u="";const i={},d={connected:!1,connecting:!1},c=()=>{const e=Date.now();for(let r in i){const s=i[r];e-s.time>s.timeout&&(s.reject("超时~"),delete i[r])}setTimeout(c,1e3)};c();const y={subs:{},add:function(e,r){"function"==typeof r&&(this.subs[e]||(this.subs[e]=[]),this.subs[e].push(r))},remove(e,r){let s=this.subs[e]||[];for(let t=s.length-1;t>=0;t--)s[t]==r&&s.splice(t,1)},push(e,r){let s=this.subs[e]||[];for(let t=s.length-1;t>=0;t--)s[t](r)}},v=()=>{d.connected=!0,d.connecting=!1,y.push(k,d.connected)},m=e=>{d.connected=!1,d.connecting=!1,y.push(k,d.connected),setTimeout((()=>{f()}),1e3)},g=e=>{if("string"!=typeof e.data)return void e.data.arrayBuffer().then((r=>{const s=new DataView(r).getInt8(),t=new FileReader;t.readAsText(e.data.slice(4,4+s),"utf8"),t.onload=()=>{let n=JSON.parse(t.result);n.Content={Name:n.Content,Img:e.data.slice(4+s,e.data.length),ArrayBuffer:r},p(n)}}));let r=JSON.parse(e.data);p(r)},p=e=>{let r=i[e.RequestId];r?(0==e.Code?r.resolve(e.Content):1==e.Code?r.reject(e.Content):255==e.Code?(r.reject(e.Content),r.errHandle||t.nk.error(`${r.path}:${e.Content}`)):y.push(e.Path,e.Content),delete i[e.RequestId]):y.push(e.Path,e.Content)},f=(e=o,r=u)=>{if(u=r,o=e,d.connecting||d.connected)return;null!=a&&a.close(),d.connecting=!0;const s=r||"snltty";a=new WebSocket(o,[s]),a.iddd=++l,a.onopen=v,a.onclose=m,a.onmessage=g,a.onerror=e=>{t.nk.error({message:"api接口连接失败,请检查接口地址或密码",grouping:!0})}},C=()=>{a&&a.close()},h=(e,r={},s=!1,t=15e3)=>new Promise(((o,l)=>{let u=++n;try{i[u]={resolve:o,reject:l,errHandle:s,path:e,time:Date.now(),timeout:t};let n=JSON.stringify({Path:e,RequestId:u,Content:"string"==typeof r?r:JSON.stringify(r)});d.connected&&1==a.readyState?a.send(n):l("网络错误~")}catch(c){console.log(c),l("网络错误~"),delete i[u]}})),k=Symbol(),S=e=>{y.add(k,e)}},9299:function(e,r,s){s.d(r,{BS:function(){return i},NT:function(){return v},SZ:function(){return o},Se:function(){return d},VN:function(){return l},gC:function(){return c},jU:function(){return a},nD:function(){return u},rd:function(){return n},zp:function(){return y}});var t=s(4);const n=e=>(0,t.zG)("signIn/set",e),a=e=>(0,t.zG)("signIn/setservers",e),o=()=>(0,t.zG)("signIn/info"),l=e=>(0,t.zG)("signIn/setorder",e),u=e=>(0,t.zG)("signIn/List",e),i=e=>(0,t.zG)("signIn/ids",e),d=e=>(0,t.zG)("signIn/del",e),c=e=>(0,t.zG)("signIn/setname",e),y=e=>(0,t.zG)("signIn/SetGroups",e),v=()=>(0,t.zG)("signIn/names")},9287:function(e,r,s){s.d(r,{Y:function(){return o},A:function(){return u}});var t=s(5931),n={"common.oper":"Operated","common.operFail":"Operation failed","common.confirm":"Confirm","common.cancel":"Cancel","common.setting":"Setting","common.operating":"In operation","common.tips":"Tips","common.option":"Option","common.access":"No access","head.home":"Home","head.server":"Server","head.protocol":"P2P Protocol","head.action":"Action","head.logger":"Logs","logger.list":"List","logger.setting":"Setting","logger.clear":"Clear","logger.refresh":"Refresh","logger.count":"Count","logger.level":"Level","logger.time":"Time","logger.content":"Content","action.text":"Set action static Json parameters","action.jsonError":"Json format error","server.messenger":"Messenger Server","server.group":"Group","server.sync":"Sync","server.messengerAddr":"Messenger Server","server.messengerText":"ip:port or domain:port","server.messengerSecretKey":"Messenger SecretKey","server.messengerSecretKeyText":"Messenger SecretKey","server.messengerUserId":"User Id","server.messengerUserIdText":"Your unique identifier,used to unlock something.","permission.closed":"Closed","permission.simple":"Simple","permission.full":"Full","permission.clear":"Clear connection","status.group":"Group manager","status.groupName":"Name","status.groupPassword":"Password","status.groupOper":"Oper","status.groupDelConfirm":"Are you sure to delete?","status.support":"Support","status.website":"Website","status.doc":"Document","status.cdkey":"CDKEY store","status.export":"Export","status.exportText":"Export the configuration to run elsewhere","status.exportSingle":"Single","status.exportName":"Name","status.exportNamePlease":"Please input device name","status.exportApiPassword":"Api Pwd","status.exportApiPasswordPlease":"Please input api password","status.api":"Manager api","status.apiClear":"Clear","status.apiAlter":"Alter","status.apiAlterConfirm":"Are you sure?","status.messenger":"Messenger server","status.messengerName":"Messenger","status.messengerChange":"change your messenger","status.messengerGroup":"Group","status.serverVersion":"Server version","status.serverNoUpdate":"No updates","status.serverNotNew":"Not latest version","status.serverNew":"Is latest version","status.serverDownloading":"Downloading","status.serverDownloaded":"Downloaded","status.serverUnZipIng":"In unzip","status.serverUnZip":"Unzip","status.serverConfirm":"Are you sure to update server?","status.serverCloseConfirm":"Are you sure to close server?","status.flowOnline":"Online","status.flowUpload":"Up","status.flowDownload":"Down","status.flowThisServer":"This Server","status.flowAllServer":"All Server","status.flowAllSend":"Send","status.flowAllReceive":"Receive","status.flowOnline7Day":"Within seven days","status.flowServer":"Server","status.flowType":"Type","status.flowOper":"Oper","status.flowDetail":"Detail","status.flowMessenger":"Messenger","status.flowRelay":"Relay","status.flowRelayNode":"Relay Node","status.flowWanPort":"Wan Port","status.flowServerForward":"Server Forward","status.flowSearchName":"Name","status.flowRelaySource":"Source","status.flowRelayTarget":"Target","status.flowSearchDomainPort":"Domain/Port","status.flowArea":"Area","status.flowNet":"Network","status.tunnelName":"Name","status.tunnelLabel":"Label","status.tunnelProtocol":"Proto","status.tunnelBuffer":"Buffer","status.tunnelReverse":"Reverse","status.tunnelSSL":"SSL","status.tunnelDisanbled":"Disable","status.tunnelSort":"Index","status.tunnelYes":"Y","status.tunnelNo":"N","server.relaySecretKey":"Relay SecretKey","server.relaySSL":"Use SSL","server.relayDisable":"Disable","server.relayUseCdkey":"Use CDKEY","server.relayUseCdkeyTitle":"If you have a relay SecretKey, ignore it\r\n Without a relay SecretKey, you can choose to use a cdkey or default relay node config","server.relayNodes":"Nodes","server.relayTitle":"Relay Nodes","server.relayName":"Name","server.relayFlow":"Traffic/Month","server.relaySpeed":"Total","server.relaySpeed1":"Single","server.relaySpeed2":"Rate","server.relayConnection":"Conn","server.relayDelay":"Delay","server.relayPublic":"Public","server.relayAllow":"Allow","server.relayUrl":"Url","server.relayOper":"Oper","server.relayUse":"Use","server.relayMyCdkey":"My CDKEY","server.relayCdkey":"Manager CDKEY","server.relayAddCdkey":"Add CDKEY","server.relayCdkeyUserId":"UserId","server.relayCdkeyBandwidth":"Bandwidth","server.relayCdkeyBytes":"Bytes","server.relayCdkeyPay":"Pay","server.relayCdkeyOrder":"Order","server.relayCdkeyPrice":"Price","server.relayCdkeyPayPrice":"Pay price","server.relayCdkeyCostPrice":"Cost price","server.relayCdkeyUserPrice":"User price","server.relayCdkeyOrderId":"OrderNo","server.relayCdkeyContact":"Email","server.relayCdkeyRemark":"Remark","server.relayCdkeyAddTime":"Add","server.relayCdkeyStartTime":"Start","server.relayCdkeyEndTime":"End Time","server.relayCdkeyUseTime":"Use Time","server.relayCdkeyYear":"Year","server.relayCdkeyMonth":"Month","server.relayCdkeyDay":"Day","server.relayCdkeyHour":"Hour","server.relayCdkeyMin":"Min","server.relayCdkeySec":"Sec","server.relayCdkeyDuration":"Duration","server.relayCdkeyOper":"Oper","server.relayCdkeyDelConfirm":"Are you sure to delete?","server.relayCdkeyFlagAll":"All","server.relayCdkeyFlagTimein":"In end time","server.relayCdkeyFlagTimeout":"Out end time","server.relayCdkeyFlagBytesin":"Has bytes","server.relayCdkeyFlagBytesout":"Not have bytes","server.relayCdkeyFlagDeleted":"Deleted","server.relayCdkeyFlagUnDeleted":"Not deleted","server.relayCdkeyTestTitle":"Test CDKEY","server.relayCdkeyTestKey":"CDKEY","server.relayCdkeyTestGB":"GB","server.relayCdkeyTestGBError":"Must > 0","server.relayCdkeyTestSpeed":"Mbps","server.relayCdkeyTestSpeedError":"Must > 0","server.relayCdkeyTestTime":"Time","server.relayCdkeyTestTimeError":"Format error","server.relayCdkeyTestUserId":"UserId","server.relayCdkeyTestUserIdError":"UserId error","server.relayCdkeyTestOrderId":"OrderNo","server.relayCdkeyTestOrderIdError":"OrderNo is empty","server.relayCdkeyTestContact":"Contact","server.relayCdkeyTestCostPrice":"Cost","server.relayCdkeyTestPrice":"Price","server.relayCdkeyTestUserPrice":"User price","server.relayCdkeyTestPayPrice":"Pay","server.relayCdkeyTestCount":"Count","server.relayCdkeyTestCountError":"Must > 0","server.relayCdkeyTestType":"Type","server.relayCdkeyTestTypeError":"Must be relay","server.relayCdkeyTestParseError":"decode fail","server.relayCdkeyImport":"Import CDKEY","server.relayCdkeyImportParse":"Decode fail","server.relayCdkeyImportField":"Field invalid","server.relayCdkeyImportNetwork":"Network error","server.relayCdkeyImportOrderId":"OrderNo has exists","server.sforwardSecretKey":"Server forward secretKey","server.sforwardText":"The server forward can be used when the key is correct","server.updaterSecretKey":"Server update secretKey","server.updaterText":"The server update can be used when the key is correct","server.updaterRate":"Update check interval","server.updaterY":"Year","server.updaterM":"Mmonth","server.updaterD":"Day","server.updaterH":"Hour","server.updaterMM":"Minute","server.updaterS":"Second","server.asyncText":"Synchronize to all clients","server.asyncSelect":"Please select","server.asyncCheckAll":"Check all","server.asyncSignInSecretKey":"Signin secretKey","server.asyncSignInServer":"Signin server","server.asyncGroupSecretKey":"Group secretKey","server.asyncRelaySecretKey":"Relay secretKey","server.asyncSForwardSecretKey":"Server forward secretKey","server.asyncUpdaterSecretKey":"Update secretKey","server.asyncTunnelTransports":"Tunnel transports","server.asyncSignInUserId":"User Id"},a={"common.oper":"已操作","common.operFail":"操作失败","common.confirm":"确认","common.cancel":"取消","common.setting":"设置","common.operating":"正在操作","common.tips":"提示","common.option":"选项","common.access":"无权限","head.home":"首页","head.server":"服务器","head.group":"分组","head.protocol":"打洞协议","head.action":"自定义验证","head.logger":"日志","logger.list":"列表","logger.setting":"设置","logger.clear":"清空","logger.refresh":"刷新","logger.count":"数量","logger.level":"等级","logger.time":"时间","logger.content":"内容","action.text":"设置定义验证的静态Json参数","action.jsonError":"json格式错误","server.messenger":"信标服务器","server.group":"分组","server.sync":"同步","server.messengerAddr":"服务器地址","server.messengerText":"ip:端口 或者 域名:端口","server.messengerSecretKey":"信标密钥","server.messengerSecretKeyText":"密钥正确时可连接服务器","server.messengerUserId":"用户id","server.messengerUserIdText":"你的唯一标识,用于解锁一些限制","permission.closed":"禁止通行","permission.simple":"简单管理","permission.full":"专业管理","permission.clear":"清除连接","status.group":"管理分组","status.groupName":"名称","status.groupPassword":"密码","status.groupOper":"操作","status.groupDelConfirm":"确认删除吗?","status.support":"赞助","status.website":"官网","status.doc":"文档","status.cdkey":"CDKEY商城","status.export":"导出配置","status.exportText":"导出配置,作为子设备运行,如果使用docker,容器映射configs文件夹即可","status.exportSingle":"单设备","status.exportName":"设备名","status.exportNamePlease":"请输入设备名","status.exportApiPassword":"接口密码","status.exportApiPasswordPlease":"请输入接口密码","status.api":"管理接口","status.apiClear":"清除","status.apiAlter":"更改","status.apiAlterConfirm":"确定你的操作?","status.messenger":"信标服务器","status.messengerChange":"更改你的连接设置","status.messengerName":"信标","status.messengerGroup":"分组名","status.messenger0":"登入信标","status.messenger1":"客户端列表","status.messenger2":"客户端删除","status.messenger4":"客户端改名(转发)","status.messenger7":"获取服务器版本","status.messenger8":"客户端搜索ids","status.messenger9":"客户端id列表","status.messenger10":"客户端排序","status.messenger11":"客户端在线","status.messenger12":"生成客户端id","status.messenger13":"登入信标V_1_3_1","status.messenger14":"名字列表","status.messenger2001":"外网端口(转发)","status.messenger2002":"外网端口(转发)","status.messenger2003":"开始打洞(转发)","status.messenger2004":"开始打洞(转发)","status.messenger2005":"打洞失败(转发)","status.messenger2006":"打洞失败(转发)","status.messenger2007":"打洞成功(转发)","status.messenger2008":"打洞成功(转发)","status.messenger2009":"隧道配置(转发)","status.messenger2010":"隧道配置(转发)","status.messenger2012":"隧道同步(转发)","status.messenger2101":"中继通知(转发)","status.messenger2102":"中继通知(转发)","status.messenger2103":"中继请求","status.messenger2105":"中继连通测试","status.messenger2201":"运行网卡(转发)","status.messenger2203":"停止网卡(转发)","status.messenger2204":"更新网卡","status.messenger2205":"更新网卡(转发)","status.messenger2208":"配置网卡网络","status.messenger2209":"获取网卡网络","status.messenger2210":"分配IP","status.messenger2211":"网卡变化","status.messenger2212":"网卡变化(转发)","status.messenger2213":"IP续约","status.messenger2214":"网卡端口转发检测","status.messenger2215":"网卡端口转发检测(转发)","status.messenger2301":"添加内网穿透","status.messenger2302":"移除内网穿透","status.messenger2303":"通知内网穿透(转发)","status.messenger2304":"通知内网穿透UDP(转发)","status.messenger2305":"获取穿透列表(转发)","status.messenger2401":"测试端口转发(转发)","status.messenger2403":"获取端口转发(转发)","status.messenger2507":"同步配置","status.messenger2508":"同步配置(转发)","status.messenger2601":"更新信息(转发)","status.messenger2602":"更新信息(转发)","status.messenger2603":"确认更新(转发)","status.messenger2604":"确认更新(转发)","status.messenger2605":"重启(转发)","status.messenger2606":"重启","status.messenger2607":"服务器更新信息","status.messenger2608":"确认服务器更新","status.messenger2609":"服务器重启","status.messenger2610":"订阅更新信息(转发)","status.messenger2611":"订阅更新信息(转发)","status.messenger2612":"检查更新","status.messenger2613":"检查更新(转发)","status.messenger2701":"服务器流量","status.messenger2702":"服务器信标流量","status.messenger2703":"服务器中继流量","status.messenger2704":"服务器内网穿透流量","status.messenger2807":"同步配置","status.messenger2808":"同步配置(转发)","status.messenger2812":"同步推送","status.messenger2813":"同步拉取","status.messenger2814":"同步通知","status.messenger2815":"同步分页拉取","status.messenger2900":"运行socks5","status.messenger2901":"运行socks5(转发)","status.messenger2902":"停止socks5","status.messenger2903":"停止socks5(转发)","status.messenger2904":"更新socks5","status.messenger2905":"更新socks5(转发)","status.messenger3003":"获取权限","status.messenger3004":"获取权限(转发)","status.messenger3005":"更新权限","status.messenger3006":"更新权限(转发)","status.serverVersion":"服务端的程序版本","status.serverNoUpdate":"未检测到更新","status.serverNotNew":"不是最新版本","status.serverNew":"是最新版本","status.serverDownloading":"正在下载","status.serverDownloaded":"已下载","status.serverUnZipIng":"正在解压","status.serverUnZip":"已解压","status.serverConfirm":"确定更新服务端吗?","status.serverCloseConfirm":"确定关闭服务端吗?","status.flowOnline":"在线","status.flowUpload":"上传","status.flowDownload":"下载","status.flowThisServer":"本服务器","status.flowAllServer":"所有服务器","status.flowAllSend":"发送","status.flowAllReceive":"接收","status.flowOnline7Day":"7天内上线","status.flowServer":"服务器","status.flowType":"类别","status.flowOper":"操作","status.flowDetail":"详情","status.flowMessenger":"信标","status.flowRelay":"中继","status.flowRelayNode":"中继节点","status.flowWanPort":"外网端口","status.flowServerForward":"内网穿透","status.flowSearchName":"名字搜索","status.flowRelaySource":"发起端","status.flowRelayTarget":"目标端","status.flowSearchDomainPort":"域名/端口","status.flowArea":"地区","status.flowNet":"网络","status.tunnelName":"名称","status.tunnelLabel":"说明","status.tunnelProtocol":"协议","status.tunnelBuffer":"缓冲区","status.tunnelReverse":"反向","status.tunnelSSL":"SSL","status.tunnelDisanbled":"禁用","status.tunnelSort":"排序","status.tunnelYes":"是","status.tunnelNo":"否","server.relaySecretKey":"中继密钥","server.relaySSL":"使用ssl","server.relayDisable":"禁用","server.relayUseCdkey":"消耗CDKEY","server.relayUseCdkeyTitle":"如果你有中继密钥,你没有任何限制,也不会消耗CDKEY,可以不管这个\r\n没有中继密钥,有CDKEY,但是不想使用CDKEY,只想使用中继节点默认的限制,就去掉勾选","server.relayNodes":"节点","server.relayTitle":"中继节点","server.relayName":"名称","server.relayFlow":"月流量","server.relayFlowLast":"剩余流量","server.relaySpeed":"带宽","server.relaySpeed1":"总带宽","server.relaySpeed2":"速率","server.relayConnection":"连接数","server.relayDelay":"延迟","server.relayPublic":"公开","server.relayAllow":"支持协议","server.relayUrl":"Url","server.relayOper":"操作","server.relayUse":"使用","server.relayMyCdkey":"我的CDKEY","server.relayCdkey":"管理CDKEY","server.relayAddCdkey":"添加CDKEY","server.relayCdkeyUserId":"用户标识","server.relayCdkeyBandwidth":"带宽","server.relayCdkeyBytes":"流量","server.relayCdkeyPay":"支付","server.relayCdkeyPrice":"原价","server.relayCdkeyPayPrice":"支付","server.relayCdkeyCostPrice":"成本","server.relayCdkeyUserPrice":"会员价","server.relayCdkeyOrder":"订单","server.relayCdkeyOrderId":"订单号","server.relayCdkeyContact":"邮箱","server.relayCdkeyRemark":"备注","server.relayCdkeyAddTime":"添加","server.relayCdkeyStartTime":"开始","server.relayCdkeyEndTime":"有效时间","server.relayCdkeyUseTime":"最后使用","server.relayCdkeyYear":"年","server.relayCdkeyMonth":"月","server.relayCdkeyDay":"日","server.relayCdkeyHour":"时","server.relayCdkeyMin":"分","server.relayCdkeySec":"秒","server.relayCdkeyDuration":"持续时间","server.relayCdkeyOper":"操作","server.relayCdkeyDelConfirm":"确认删除吗?","server.relayCdkeyFlagAll":"全部","server.relayCdkeyFlagTimein":"有效期内","server.relayCdkeyFlagTimeout":"有效期外","server.relayCdkeyFlagBytesin":"剩余","server.relayCdkeyFlagBytesout":"已用完","server.relayCdkeyFlagDeleted":"已删除","server.relayCdkeyFlagUnDeleted":"未删除","server.relayCdkeyTestTitle":"测试解密CDKEY","server.relayCdkeyTestKey":"CDKEY","server.relayCdkeyTestGB":"流量","server.relayCdkeyTestGBError":"流量要大于0","server.relayCdkeyTestSpeed":"带宽Mbps","server.relayCdkeyTestSpeedError":"带宽要大于0","server.relayCdkeyTestTime":"持续时间","server.relayCdkeyTestTimeError":"格式错误","server.relayCdkeyTestUserId":"用户标识","server.relayCdkeyTestUserIdError":"用户标识不正确","server.relayCdkeyTestOrderId":"订单","server.relayCdkeyTestOrderIdError":"订单号不能为空","server.relayCdkeyTestContact":"联系方式","server.relayCdkeyTestCostPrice":"成本","server.relayCdkeyTestPrice":"原价","server.relayCdkeyTestUserPrice":"会员价","server.relayCdkeyTestPayPrice":"支付","server.relayCdkeyTestCount":"数量","server.relayCdkeyTestCountError":"数量要大于0","server.relayCdkeyTestType":"类别","server.relayCdkeyTestTypeError":"类别应该是Relay","server.relayCdkeyTestParseError":"解密失败","server.relayCdkeyImport":"导入CDKEY","server.relayCdkeyImportParse":"解密失败","server.relayCdkeyImportField":"字段有误","server.relayCdkeyImportNetwork":"网络错误","server.relayCdkeyImportOrderId":"订单号已存在","server.sforwardSecretKey":"服务器穿透密钥","server.sforwardText":"当密钥正确是可用","server.updaterSecretKey":"服务器更新密钥","server.updaterText":"当密钥正确是可用","server.updaterRate":"检查更新频率","server.updaterY":"年","server.updaterM":"月","server.updaterD":"日","server.updaterH":"时","server.updaterMM":"分","server.updaterS":"秒","server.asyncText":"同步到所有客户端","server.asyncSelect":"请选择","server.asyncCheckAll":"全选","server.asyncSignInSecretKey":"信标密钥","server.asyncSignInServer":"信标服务器","server.asyncGroupSecretKey":"分组密钥","server.asyncRelaySecretKey":"中继密钥","server.asyncSForwardSecretKey":"服务器穿透密钥","server.asyncUpdaterSecretKey":"更新密钥","server.asyncTunnelTransports":"打洞协议","server.asyncSignInUserId":"用户唯一标识"};const o={"zh-CN":"简体中文","en-US":"English"},l=(0,t.hU)({locale:localStorage.getItem("locale-lang")||navigator.language||navigator.browserLanguage,fallbackLocale:"zh-CN",legacy:!1,allowComposition:!0,messages:{"en-US":n,"zh-CN":a}});var u=l},2773:function(e,r,s){s.d(r,{A:function(){return a}});var t=s(6768),n=s(5931);function a(){const e=(0,n.s9)(),r=(0,t.EW)((()=>e.locale.value)),s=r=>{e.locale.value!==r&&(e.locale.value=r,localStorage.setItem("locale-lang",r))};return{currentLocale:r,changeLocale:s}}},6230:function(e,r,s){var t=s(5130),n=s(6768);function a(e,r,s,t,a,o){const l=(0,n.g2)("router-view"),u=(0,n.g2)("Api"),i=(0,n.g2)("el-config-provider");return(0,n.uX)(),(0,n.CE)("div",null,[(0,n.bF)(i,{locale:t.locale},{default:(0,n.k6)((()=>[t.configed?((0,n.uX)(),(0,n.Wv)(l,{key:0})):(0,n.Q3)("",!0),(0,n.bF)(u)])),_:1},8,["locale"])])}var o=s(3830);const l={class:"port-wrap t-c"},u={class:"pdt-10"},i={class:"pdt-10"};function d(e,r,s,a,o,d){const c=(0,n.g2)("el-input"),y=(0,n.g2)("el-checkbox"),v=(0,n.g2)("el-button"),m=(0,n.g2)("el-dialog");return(0,n.uX)(),(0,n.Wv)(m,{class:"options-center",title:"管理接口","destroy-on-close":"",modelValue:a.showPort,"onUpdate:modelValue":r[3]||(r[3]=e=>a.showPort=e),center:"","show-close":!1,"close-on-click-modal":!1,"align-center":"",width:"200"},{footer:(0,n.k6)((()=>[(0,n.bF)(v,{type:"success",onClick:a.handleConnect1,plain:""},{default:(0,n.k6)((()=>[(0,n.eW)("确 定")])),_:1},8,["onClick"])])),default:(0,n.k6)((()=>[(0,n.Lk)("div",l,[(0,n.Lk)("div",null,[(0,n.eW)(" 接口 : "),(0,n.bF)(c,{modelValue:a.state.api,"onUpdate:modelValue":r[0]||(r[0]=e=>a.state.api=e),style:{width:"70%"},onKeyup:(0,t.jR)(a.handleConnect1,["enter"])},null,8,["modelValue","onKeyup"])]),(0,n.Lk)("div",u,[(0,n.eW)(" 秘钥 : "),(0,n.bF)(c,{"show-password":"",type:"password",modelValue:a.state.psd,"onUpdate:modelValue":r[1]||(r[1]=e=>a.state.psd=e),style:{width:"70%"},onKeyup:(0,t.jR)(a.handleConnect1,["enter"])},null,8,["modelValue","onKeyup"])]),(0,n.Lk)("div",i,[(0,n.bF)(y,{modelValue:a.state.save,"onUpdate:modelValue":r[2]||(r[2]=e=>a.state.save=e)},{default:(0,n.k6)((()=>[(0,n.eW)("保存密码")])),_:1},8,["modelValue"])])])])),_:1},8,["modelValue"])}var c=s(1387),y=s(144),v=s(4),m=s(9299),g=s(8835),p=s(7477),f={components:{Tools:p.S0q},props:["config"],setup(e){const r=(0,o.B)(),s=(0,c.rd)(),t=(0,c.lq)(),a={api:`${window.location.hostname}:1803`,psd:"snltty"},l=JSON.parse(sessionStorage.getItem("api-cache")||localStorage.getItem("api-cache")||JSON.stringify(a)),u=(0,y.Kh)({api:l.api,psd:l.psd,showPort:!1,save:l.save||!1}),i=(0,n.EW)((()=>0==r.value.api.connected&&u.showPort)),d=()=>{l.api=u.api,l.psd=u.psd,l.save=u.save,u.save?localStorage.setItem("api-cache",JSON.stringify(l)):localStorage.setItem("api-cache",""),sessionStorage.setItem("api-cache",JSON.stringify(l)),(0,v.e3)();const e=`ws${"https:"===window.location.protocol?"s":""}://${u.api}`;(0,v.a1)(e,u.psd)},p=()=>{d(),window.location.reload()},f=()=>{(0,g.zj)().then((e=>{r.value.config.Common=e.Common,r.value.config.Client=e.Client,r.value.config.Server=e.Server,r.value.config.Running=e.Running,r.value.config.configed=!0,setTimeout((()=>{f()}),1e3)})).catch((e=>{setTimeout((()=>{f()}),1e3)}))},C=()=>{(0,m.SZ)().then((e=>{r.value.signin.Connected=e.Connected,r.value.signin.Version=e.Version,setTimeout((()=>{C()}),1e3)})).catch((e=>{setTimeout((()=>{C()}),1e3)}))};return(0,n.sV)((()=>{setTimeout((()=>{u.showPort=!0}),500),(0,v.jH)((e=>{e&&(f(),C())})),s.isReady().then((()=>{u.api=t.query.api?`${window.location.hostname}:${t.query.api}`:u.api,u.psd=t.query.psd||u.psd,d()}))})),{state:u,showPort:i,handleConnect1:p}}},C=s(1241);const h=(0,C.A)(f,[["render",d],["__scopeId","data-v-08aa73f8"]]);var k=h,S=s(2721),w=s(6726),T=s(2773),b={components:{Api:k},setup(e){const r=(0,o.v)(),s=(0,n.EW)((()=>r.value.config.configed)),{currentLocale:t}=(0,T.A)(),a=(0,n.EW)((()=>"zh-CN"==t.value?S.A:w.A));return{configed:s,locale:a}}};const P=(0,C.A)(b,[["render",a]]);var I=P;const N=[{path:"/",name:"Full",component:()=>Promise.all([s.e(194),s.e(64),s.e(560)]).then(s.bind(s,4842)),redirect:"/full/index.html",children:[{path:"/full/index.html",name:"FullIndex",component:()=>Promise.all([s.e(194),s.e(16),s.e(144)]).then(s.bind(s,6874))},{path:"/full/servers.html",name:"FullServers",component:()=>s.e(89).then(s.bind(s,8089))},{path:"/full/transport.html",name:"FullTransport",component:()=>s.e(32).then(s.bind(s,4032))},{path:"/full/action.html",name:"FullAction",component:()=>s.e(340).then(s.bind(s,3959))},{path:"/full/logger.html",name:"FullLogger",component:()=>s.e(716).then(s.bind(s,6716))}]},{path:"/net/index.html",name:"Network",component:()=>Promise.all([s.e(194),s.e(64),s.e(16),s.e(163)]).then(s.bind(s,427))},{path:"/no-permission.html",name:"NoPermission",component:()=>s.e(228).then(s.bind(s,6100))}],D=(0,c.aE)({history:(0,c.Bt)(),routes:N});var A=D,K=s(9287),E=s(6161);s(4188),s(2355),s(1862);const U=(0,t.Ef)(I);U.use(K.A),U.use(E.A,{size:"default"}).use(A).mount("#app")},3830:function(e,r,s){s.d(r,{B:function(){return u},v:function(){return l}});var t=s(4),n=s(144),a=s(6768);const o=Symbol(),l=()=>{const e=(0,n.KR)({api:{connected:!1},width:0,height:0,isPhone:(0,a.EW)((()=>e.value.width<800)),isPc:(0,a.EW)((()=>e.value.width>=800)),config:{Common:{},Client:{Servers:[],Accesss:{}},Server:{},Running:{Relay:{Servers:[]},Tuntap:{IP:"",PrefixLength:24},Client:{Servers:[]},AutoSyncs:{}},configed:!1},signin:{Connected:!1,Version:"v1.0.0.0"},bufferSize:["1KB","2KB","4KB","8KB","16KB","32KB","64KB","128KB","256KB","512KB","1024KB"],self:{},hasAccess(e){if(void 0==this.config.Client.Accesss[e])return!1;const r=this.config.Client.Accesss[e].Value||-1,s=this.config.Client.Access||-1;return s>=0&&(0==s||+(BigInt(s)&BigInt(r)).toString()==r)}});return(0,t.jH)((r=>{e.value.api.connected=r})),(0,a.Gt)(o,e),e},u=()=>(0,a.WQ)(o)}},r={};function s(t){var n=r[t];if(void 0!==n)return n.exports;var a=r[t]={id:t,loaded:!1,exports:{}};return e[t].call(a.exports,a,a.exports,s),a.loaded=!0,a.exports}s.m=e,function(){var e=[];s.O=function(r,t,n,a){if(!t){var o=1/0;for(d=0;d=a)&&Object.keys(s.O).every((function(e){return s.O[e](t[u])}))?t.splice(u--,1):(l=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[t,n,a]}}(),function(){s.n=function(e){var r=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(r,{a:r}),r}}(),function(){s.d=function(e,r){for(var t in r)s.o(r,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}}(),function(){s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce((function(r,t){return s.f[t](e,r),r}),[]))}}(),function(){s.u=function(e){return"js/"+e+"."+{16:"0d5bcc87",32:"07324b9c",64:"a78d050d",89:"3ea503b8",144:"e46fa2ab",163:"f3306092",194:"c82648eb",228:"45b76490",340:"9d567527",560:"7e9318c3",716:"cf2a55b5"}[e]+".js"}}(),function(){s.miniCssF=function(e){return"css/"+e+"."+{32:"1374e89e",89:"7620f7e2",144:"f476ecfa",163:"78703523",228:"b2a71eca",340:"f859e18d",560:"41f66c44",716:"ccdaa7f7"}[e]+".css"}}(),function(){s.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){s.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)}}(),function(){var e={},r="linker.web:";s.l=function(t,n,a,o){if(e[t])e[t].push(n);else{var l,u;if(void 0!==a)for(var i=document.getElementsByTagName("script"),d=0;d(0,t.zG)("config/get"),a=e=>(0,t.zG)("config/install",e),o=e=>(0,t.zG)("config/export",e)},4:function(e,r,s){s.d(r,{a1:function(){return f},e3:function(){return C},jH:function(){return S},zG:function(){return h}});s(4114),s(6573),s(8100),s(7936);var t=s(1219);let n=0,a=null,o="",l=1,u="";const i={},d={connected:!1,connecting:!1},c=()=>{const e=Date.now();for(let r in i){const s=i[r];e-s.time>s.timeout&&(s.reject("超时~"),delete i[r])}setTimeout(c,1e3)};c();const y={subs:{},add:function(e,r){"function"==typeof r&&(this.subs[e]||(this.subs[e]=[]),this.subs[e].push(r))},remove(e,r){let s=this.subs[e]||[];for(let t=s.length-1;t>=0;t--)s[t]==r&&s.splice(t,1)},push(e,r){let s=this.subs[e]||[];for(let t=s.length-1;t>=0;t--)s[t](r)}},v=()=>{d.connected=!0,d.connecting=!1,y.push(k,d.connected)},m=e=>{d.connected=!1,d.connecting=!1,y.push(k,d.connected),setTimeout((()=>{f()}),1e3)},g=e=>{if("string"!=typeof e.data)return void e.data.arrayBuffer().then((r=>{const s=new DataView(r).getInt8(),t=new FileReader;t.readAsText(e.data.slice(4,4+s),"utf8"),t.onload=()=>{let n=JSON.parse(t.result);n.Content={Name:n.Content,Img:e.data.slice(4+s,e.data.length),ArrayBuffer:r},p(n)}}));let r=JSON.parse(e.data);p(r)},p=e=>{let r=i[e.RequestId];r?(0==e.Code?r.resolve(e.Content):1==e.Code?r.reject(e.Content):255==e.Code?(r.reject(e.Content),r.errHandle||t.nk.error(`${r.path}:${e.Content}`)):y.push(e.Path,e.Content),delete i[e.RequestId]):y.push(e.Path,e.Content)},f=(e=o,r=u)=>{if(u=r,o=e,d.connecting||d.connected)return;null!=a&&a.close(),d.connecting=!0;const s=r||"snltty";a=new WebSocket(o,[s]),a.iddd=++l,a.onopen=v,a.onclose=m,a.onmessage=g,a.onerror=e=>{t.nk.error({message:"api接口连接失败,请检查接口地址或密码",grouping:!0})}},C=()=>{a&&a.close()},h=(e,r={},s=!1,t=15e3)=>new Promise(((o,l)=>{let u=++n;try{i[u]={resolve:o,reject:l,errHandle:s,path:e,time:Date.now(),timeout:t};let n=JSON.stringify({Path:e,RequestId:u,Content:"string"==typeof r?r:JSON.stringify(r)});d.connected&&1==a.readyState?a.send(n):l("网络错误~")}catch(c){console.log(c),l("网络错误~"),delete i[u]}})),k=Symbol(),S=e=>{y.add(k,e)}},9299:function(e,r,s){s.d(r,{BS:function(){return i},NT:function(){return v},SZ:function(){return o},Se:function(){return d},VN:function(){return l},gC:function(){return c},jU:function(){return a},nD:function(){return u},rd:function(){return n},zp:function(){return y}});var t=s(4);const n=e=>(0,t.zG)("signIn/set",e),a=e=>(0,t.zG)("signIn/setservers",e),o=()=>(0,t.zG)("signIn/info"),l=e=>(0,t.zG)("signIn/setorder",e),u=e=>(0,t.zG)("signIn/List",e),i=e=>(0,t.zG)("signIn/ids",e),d=e=>(0,t.zG)("signIn/del",e),c=e=>(0,t.zG)("signIn/setname",e),y=e=>(0,t.zG)("signIn/SetGroups",e),v=()=>(0,t.zG)("signIn/names")},9287:function(e,r,s){s.d(r,{Y:function(){return o},A:function(){return u}});var t=s(5931),n={"common.oper":"Operated","common.operFail":"Operation failed","common.confirm":"Confirm","common.cancel":"Cancel","common.setting":"Setting","common.operating":"In operation","common.tips":"Tips","common.option":"Option","common.access":"No access","head.home":"Home","head.server":"Server","head.protocol":"P2P Protocol","head.action":"Action","head.logger":"Logs","logger.list":"List","logger.setting":"Setting","logger.clear":"Clear","logger.refresh":"Refresh","logger.count":"Count","logger.level":"Level","logger.time":"Time","logger.content":"Content","action.text":"Set action static Json parameters","action.jsonError":"Json format error","server.messenger":"Messenger Server","server.group":"Group","server.sync":"Sync","server.messengerAddr":"Messenger Server","server.messengerText":"ip:port or domain:port","server.messengerSecretKey":"Messenger SecretKey","server.messengerSecretKeyText":"Messenger SecretKey","server.messengerUserId":"User Id","server.messengerUserIdText":"Your unique identifier,used to unlock something.","permission.closed":"Closed","permission.simple":"Simple","permission.full":"Full","permission.clear":"Clear connection","status.group":"Group manager","status.groupName":"Name","status.groupPassword":"Password","status.groupOper":"Oper","status.groupDelConfirm":"Are you sure to delete?","status.support":"Support","status.website":"Website","status.doc":"Document","status.cdkey":"CDKEY store","status.export":"Export","status.exportText":"Export the configuration to run elsewhere","status.exportSingle":"Single","status.exportName":"Name","status.exportNamePlease":"Please input device name","status.exportApiPassword":"Api Pwd","status.exportApiPasswordPlease":"Please input api password","status.api":"Manager api","status.apiClear":"Clear","status.apiAlter":"Alter","status.apiAlterConfirm":"Are you sure?","status.messenger":"Messenger server","status.messengerName":"Messenger","status.messengerChange":"change your messenger","status.messengerGroup":"Group","status.serverVersion":"Server version","status.serverNoUpdate":"No updates","status.serverNotNew":"Not latest version","status.serverNew":"Is latest version","status.serverDownloading":"Downloading","status.serverDownloaded":"Downloaded","status.serverUnZipIng":"In unzip","status.serverUnZip":"Unzip","status.serverConfirm":"Are you sure to update server?","status.serverCloseConfirm":"Are you sure to close server?","status.flowOnline":"Online","status.flowUpload":"Up","status.flowDownload":"Down","status.flowThisServer":"This Server","status.flowAllServer":"All Server","status.flowAllSend":"Send","status.flowAllReceive":"Receive","status.flowOnline7Day":"Within seven days","status.flowServer":"Server","status.flowType":"Type","status.flowOper":"Oper","status.flowDetail":"Detail","status.flowMessenger":"Messenger","status.flowRelay":"Relay","status.flowRelayNode":"Relay Node","status.flowWanPort":"Wan Port","status.flowServerForward":"Server Forward","status.flowSearchName":"Name","status.flowRelaySource":"Source","status.flowRelayTarget":"Target","status.flowSearchDomainPort":"Domain/Port","status.flowArea":"Area","status.flowNet":"Network","status.tunnelName":"Name","status.tunnelLabel":"Label","status.tunnelProtocol":"Proto","status.tunnelBuffer":"Buffer","status.tunnelReverse":"Reverse","status.tunnelSSL":"SSL","status.tunnelDisanbled":"Disable","status.tunnelSort":"Index","status.tunnelYes":"Y","status.tunnelNo":"N","server.relaySecretKey":"Relay SecretKey","server.relaySSL":"Use SSL","server.relayDisable":"Disable","server.relayUseCdkey":"Use CDKEY","server.relayUseCdkeyTitle":"If you have a relay SecretKey, ignore it\r\n Without a relay SecretKey, you can choose to use a cdkey or default relay node config","server.relayNodes":"Nodes","server.relayTitle":"Relay Nodes","server.relayName":"Name","server.relayFlow":"Traffic/Month","server.relaySpeed":"Total","server.relaySpeed1":"Single","server.relaySpeed2":"Rate","server.relayConnection":"Conn","server.relayDelay":"Delay","server.relayPublic":"Public","server.relayAllow":"Allow","server.relayUrl":"Url","server.relayOper":"Oper","server.relayUse":"Use","server.relayMyCdkey":"My CDKEY","server.relayCdkey":"Manager CDKEY","server.relayAddCdkey":"Add CDKEY","server.relayCdkeyUserId":"UserId","server.relayCdkeyBandwidth":"Bandwidth","server.relayCdkeyBytes":"Bytes","server.relayCdkeyPay":"Pay","server.relayCdkeyOrder":"Order","server.relayCdkeyPrice":"Price","server.relayCdkeyPayPrice":"Pay price","server.relayCdkeyCostPrice":"Cost price","server.relayCdkeyUserPrice":"User price","server.relayCdkeyOrderId":"OrderNo","server.relayCdkeyContact":"Email","server.relayCdkeyRemark":"Remark","server.relayCdkeyAddTime":"Add","server.relayCdkeyStartTime":"Start","server.relayCdkeyEndTime":"End Time","server.relayCdkeyUseTime":"Use Time","server.relayCdkeyYear":"Year","server.relayCdkeyMonth":"Month","server.relayCdkeyDay":"Day","server.relayCdkeyHour":"Hour","server.relayCdkeyMin":"Min","server.relayCdkeySec":"Sec","server.relayCdkeyDuration":"Duration","server.relayCdkeyOper":"Oper","server.relayCdkeyDelConfirm":"Are you sure to delete?","server.relayCdkeyFlagAll":"All","server.relayCdkeyFlagTimein":"In end time","server.relayCdkeyFlagTimeout":"Out end time","server.relayCdkeyFlagBytesin":"Has bytes","server.relayCdkeyFlagBytesout":"Not have bytes","server.relayCdkeyFlagDeleted":"Deleted","server.relayCdkeyFlagUnDeleted":"Not deleted","server.relayCdkeyTestTitle":"Test CDKEY","server.relayCdkeyTestKey":"CDKEY","server.relayCdkeyTestGB":"GB","server.relayCdkeyTestGBError":"Must > 0","server.relayCdkeyTestSpeed":"Mbps","server.relayCdkeyTestSpeedError":"Must > 0","server.relayCdkeyTestTime":"Time","server.relayCdkeyTestTimeError":"Format error","server.relayCdkeyTestUserId":"UserId","server.relayCdkeyTestUserIdError":"UserId error","server.relayCdkeyTestOrderId":"OrderNo","server.relayCdkeyTestOrderIdError":"OrderNo is empty","server.relayCdkeyTestContact":"Contact","server.relayCdkeyTestCostPrice":"Cost","server.relayCdkeyTestPrice":"Price","server.relayCdkeyTestUserPrice":"User price","server.relayCdkeyTestPayPrice":"Pay","server.relayCdkeyTestCount":"Count","server.relayCdkeyTestCountError":"Must > 0","server.relayCdkeyTestType":"Type","server.relayCdkeyTestTypeError":"Must be relay","server.relayCdkeyTestParseError":"decode fail","server.relayCdkeyImport":"Import CDKEY","server.relayCdkeyImportParse":"Decode fail","server.relayCdkeyImportField":"Field invalid","server.relayCdkeyImportNetwork":"Network error","server.relayCdkeyImportOrderId":"OrderNo has exists","server.sforwardSecretKey":"Server forward secretKey","server.sforwardText":"The server forward can be used when the key is correct","server.updaterSecretKey":"Server update secretKey","server.updaterText":"The server update can be used when the key is correct","server.updaterRate":"Update check interval","server.updaterY":"Year","server.updaterM":"Mmonth","server.updaterD":"Day","server.updaterH":"Hour","server.updaterMM":"Minute","server.updaterS":"Second","server.asyncText":"Synchronize to all clients","server.asyncSelect":"Please select","server.asyncCheckAll":"Check all","server.asyncSignInSecretKey":"Signin secretKey","server.asyncSignInServer":"Signin server","server.asyncGroupSecretKey":"Group secretKey","server.asyncRelaySecretKey":"Relay secretKey","server.asyncSForwardSecretKey":"Server forward secretKey","server.asyncUpdaterSecretKey":"Update secretKey","server.asyncTunnelTransports":"Tunnel transports","server.asyncSignInUserId":"User Id"},a={"common.oper":"已操作","common.operFail":"操作失败","common.confirm":"确认","common.cancel":"取消","common.setting":"设置","common.operating":"正在操作","common.tips":"提示","common.option":"选项","common.access":"无权限","head.home":"首页","head.server":"服务器","head.group":"分组","head.protocol":"打洞协议","head.action":"自定义验证","head.logger":"日志","logger.list":"列表","logger.setting":"设置","logger.clear":"清空","logger.refresh":"刷新","logger.count":"数量","logger.level":"等级","logger.time":"时间","logger.content":"内容","action.text":"设置定义验证的静态Json参数","action.jsonError":"json格式错误","server.messenger":"信标服务器","server.group":"分组","server.sync":"同步","server.messengerAddr":"服务器地址","server.messengerText":"ip:端口 或者 域名:端口","server.messengerSecretKey":"信标密钥","server.messengerSecretKeyText":"密钥正确时可连接服务器","server.messengerUserId":"用户id","server.messengerUserIdText":"你的唯一标识,用于解锁一些限制","permission.closed":"禁止通行","permission.simple":"简单管理","permission.full":"专业管理","permission.clear":"清除连接","status.group":"管理分组","status.groupName":"名称","status.groupPassword":"密码","status.groupOper":"操作","status.groupDelConfirm":"确认删除吗?","status.support":"赞助","status.website":"官网","status.doc":"文档","status.cdkey":"CDKEY商城","status.export":"导出配置","status.exportText":"导出配置,作为子设备运行,如果使用docker,容器映射configs文件夹即可","status.exportSingle":"单设备","status.exportName":"设备名","status.exportNamePlease":"请输入设备名","status.exportApiPassword":"接口密码","status.exportApiPasswordPlease":"请输入接口密码","status.api":"管理接口","status.apiClear":"清除","status.apiAlter":"更改","status.apiAlterConfirm":"确定你的操作?","status.messenger":"信标服务器","status.messengerChange":"更改你的连接设置","status.messengerName":"信标","status.messengerGroup":"分组名","status.messenger0":"登入信标","status.messenger1":"客户端列表","status.messenger2":"客户端删除","status.messenger4":"客户端改名(转发)","status.messenger7":"获取服务器版本","status.messenger8":"客户端搜索ids","status.messenger9":"客户端id列表","status.messenger10":"客户端排序","status.messenger11":"客户端在线","status.messenger12":"生成客户端id","status.messenger13":"登入信标V_1_3_1","status.messenger14":"名字列表","status.messenger2001":"外网端口(转发)","status.messenger2002":"外网端口(转发)","status.messenger2003":"开始打洞(转发)","status.messenger2004":"开始打洞(转发)","status.messenger2005":"打洞失败(转发)","status.messenger2006":"打洞失败(转发)","status.messenger2007":"打洞成功(转发)","status.messenger2008":"打洞成功(转发)","status.messenger2009":"隧道配置(转发)","status.messenger2010":"隧道配置(转发)","status.messenger2012":"隧道同步(转发)","status.messenger2101":"中继通知(转发)","status.messenger2102":"中继通知(转发)","status.messenger2103":"中继请求","status.messenger2105":"中继连通测试","status.messenger2201":"运行网卡(转发)","status.messenger2203":"停止网卡(转发)","status.messenger2204":"更新网卡","status.messenger2205":"更新网卡(转发)","status.messenger2208":"配置网卡网络","status.messenger2209":"获取网卡网络","status.messenger2210":"分配IP","status.messenger2211":"网卡变化","status.messenger2212":"网卡变化(转发)","status.messenger2213":"IP续约","status.messenger2214":"网卡端口转发检测","status.messenger2215":"网卡端口转发检测(转发)","status.messenger2301":"添加内网穿透","status.messenger2302":"移除内网穿透","status.messenger2303":"通知内网穿透(转发)","status.messenger2304":"通知内网穿透UDP(转发)","status.messenger2305":"获取穿透列表(转发)","status.messenger2401":"测试端口转发(转发)","status.messenger2403":"获取端口转发(转发)","status.messenger2507":"同步配置","status.messenger2508":"同步配置(转发)","status.messenger2601":"更新信息(转发)","status.messenger2602":"更新信息(转发)","status.messenger2603":"确认更新(转发)","status.messenger2604":"确认更新(转发)","status.messenger2605":"重启(转发)","status.messenger2606":"重启","status.messenger2607":"服务器更新信息","status.messenger2608":"确认服务器更新","status.messenger2609":"服务器重启","status.messenger2610":"订阅更新信息(转发)","status.messenger2611":"订阅更新信息(转发)","status.messenger2612":"检查更新","status.messenger2613":"检查更新(转发)","status.messenger2701":"服务器流量","status.messenger2702":"服务器信标流量","status.messenger2703":"服务器中继流量","status.messenger2704":"服务器内网穿透流量","status.messenger2807":"同步配置","status.messenger2808":"同步配置(转发)","status.messenger2812":"同步推送","status.messenger2813":"同步拉取","status.messenger2814":"同步通知","status.messenger2815":"同步分页拉取","status.messenger2900":"运行socks5","status.messenger2901":"运行socks5(转发)","status.messenger2902":"停止socks5","status.messenger2903":"停止socks5(转发)","status.messenger2904":"更新socks5","status.messenger2905":"更新socks5(转发)","status.messenger3003":"获取权限","status.messenger3004":"获取权限(转发)","status.messenger3005":"更新权限","status.messenger3006":"更新权限(转发)","status.serverVersion":"服务端的程序版本","status.serverNoUpdate":"未检测到更新","status.serverNotNew":"不是最新版本","status.serverNew":"是最新版本","status.serverDownloading":"正在下载","status.serverDownloaded":"已下载","status.serverUnZipIng":"正在解压","status.serverUnZip":"已解压","status.serverConfirm":"确定更新服务端吗?","status.serverCloseConfirm":"确定关闭服务端吗?","status.flowOnline":"在线","status.flowUpload":"上传","status.flowDownload":"下载","status.flowThisServer":"本服务器","status.flowAllServer":"所有服务器","status.flowAllSend":"发送","status.flowAllReceive":"接收","status.flowOnline7Day":"7天内上线","status.flowServer":"服务器","status.flowType":"类别","status.flowOper":"操作","status.flowDetail":"详情","status.flowMessenger":"信标","status.flowRelay":"中继","status.flowRelayNode":"中继节点","status.flowWanPort":"外网端口","status.flowServerForward":"内网穿透","status.flowSearchName":"名字搜索","status.flowRelaySource":"发起端","status.flowRelayTarget":"目标端","status.flowSearchDomainPort":"域名/端口","status.flowArea":"地区","status.flowNet":"网络","status.tunnelName":"名称","status.tunnelLabel":"说明","status.tunnelProtocol":"协议","status.tunnelBuffer":"缓冲区","status.tunnelReverse":"反向","status.tunnelSSL":"SSL","status.tunnelDisanbled":"禁用","status.tunnelSort":"排序","status.tunnelYes":"是","status.tunnelNo":"否","server.relaySecretKey":"中继密钥","server.relaySSL":"使用ssl","server.relayDisable":"禁用","server.relayUseCdkey":"消耗CDKEY","server.relayUseCdkeyTitle":"如果你有中继密钥,你没有任何限制,也不会消耗CDKEY,可以不管这个\r\n没有中继密钥,有CDKEY,但是不想使用CDKEY,只想使用中继节点默认的限制,就去掉勾选","server.relayNodes":"节点","server.relayTitle":"中继节点","server.relayName":"名称","server.relayFlow":"月流量","server.relayFlowLast":"剩余流量","server.relaySpeed":"带宽","server.relaySpeed1":"总带宽","server.relaySpeed2":"速率","server.relayConnection":"连接数","server.relayDelay":"延迟","server.relayPublic":"公开","server.relayAllow":"支持协议","server.relayUrl":"Url","server.relayOper":"操作","server.relayUse":"使用","server.relayMyCdkey":"我的CDKEY","server.relayCdkey":"管理CDKEY","server.relayAddCdkey":"添加CDKEY","server.relayCdkeyUserId":"用户标识","server.relayCdkeyBandwidth":"带宽","server.relayCdkeyBytes":"流量","server.relayCdkeyPay":"支付","server.relayCdkeyPrice":"原价","server.relayCdkeyPayPrice":"支付","server.relayCdkeyCostPrice":"成本","server.relayCdkeyUserPrice":"会员价","server.relayCdkeyOrder":"订单","server.relayCdkeyOrderId":"订单号","server.relayCdkeyContact":"邮箱","server.relayCdkeyRemark":"备注","server.relayCdkeyAddTime":"添加","server.relayCdkeyStartTime":"开始","server.relayCdkeyEndTime":"有效时间","server.relayCdkeyUseTime":"最后使用","server.relayCdkeyYear":"年","server.relayCdkeyMonth":"月","server.relayCdkeyDay":"日","server.relayCdkeyHour":"时","server.relayCdkeyMin":"分","server.relayCdkeySec":"秒","server.relayCdkeyDuration":"持续时间","server.relayCdkeyOper":"操作","server.relayCdkeyDelConfirm":"确认删除吗?","server.relayCdkeyFlagAll":"全部","server.relayCdkeyFlagTimein":"有效期内","server.relayCdkeyFlagTimeout":"有效期外","server.relayCdkeyFlagBytesin":"剩余","server.relayCdkeyFlagBytesout":"已用完","server.relayCdkeyFlagDeleted":"已删除","server.relayCdkeyFlagUnDeleted":"未删除","server.relayCdkeyTestTitle":"测试解密CDKEY","server.relayCdkeyTestKey":"CDKEY","server.relayCdkeyTestGB":"流量","server.relayCdkeyTestGBError":"流量要大于0","server.relayCdkeyTestSpeed":"带宽Mbps","server.relayCdkeyTestSpeedError":"带宽要大于0","server.relayCdkeyTestTime":"持续时间","server.relayCdkeyTestTimeError":"格式错误","server.relayCdkeyTestUserId":"用户标识","server.relayCdkeyTestUserIdError":"用户标识不正确","server.relayCdkeyTestOrderId":"订单","server.relayCdkeyTestOrderIdError":"订单号不能为空","server.relayCdkeyTestContact":"联系方式","server.relayCdkeyTestCostPrice":"成本","server.relayCdkeyTestPrice":"原价","server.relayCdkeyTestUserPrice":"会员价","server.relayCdkeyTestPayPrice":"支付","server.relayCdkeyTestCount":"数量","server.relayCdkeyTestCountError":"数量要大于0","server.relayCdkeyTestType":"类别","server.relayCdkeyTestTypeError":"类别应该是Relay","server.relayCdkeyTestParseError":"解密失败","server.relayCdkeyImport":"导入CDKEY","server.relayCdkeyImportParse":"解密失败","server.relayCdkeyImportField":"字段有误","server.relayCdkeyImportNetwork":"网络错误","server.relayCdkeyImportOrderId":"订单号已存在","server.sforwardSecretKey":"服务器穿透密钥","server.sforwardText":"当密钥正确是可用","server.updaterSecretKey":"服务器更新密钥","server.updaterText":"当密钥正确是可用","server.updaterRate":"检查更新频率","server.updaterY":"年","server.updaterM":"月","server.updaterD":"日","server.updaterH":"时","server.updaterMM":"分","server.updaterS":"秒","server.asyncText":"同步到所有客户端","server.asyncSelect":"请选择","server.asyncCheckAll":"全选","server.asyncSignInSecretKey":"信标密钥","server.asyncSignInServer":"信标服务器","server.asyncGroupSecretKey":"分组密钥","server.asyncRelaySecretKey":"中继密钥","server.asyncSForwardSecretKey":"服务器穿透密钥","server.asyncUpdaterSecretKey":"更新密钥","server.asyncTunnelTransports":"打洞协议","server.asyncSignInUserId":"用户唯一标识"};const o={"zh-CN":"简体中文","en-US":"English"},l=(0,t.hU)({locale:localStorage.getItem("locale-lang")||navigator.language||navigator.browserLanguage,fallbackLocale:"zh-CN",legacy:!1,allowComposition:!0,messages:{"en-US":n,"zh-CN":a}});var u=l},2773:function(e,r,s){s.d(r,{A:function(){return a}});var t=s(6768),n=s(5931);function a(){const e=(0,n.s9)(),r=(0,t.EW)((()=>e.locale.value)),s=r=>{e.locale.value!==r&&(e.locale.value=r,localStorage.setItem("locale-lang",r))};return{currentLocale:r,changeLocale:s}}},6230:function(e,r,s){var t=s(5130),n=s(6768);function a(e,r,s,t,a,o){const l=(0,n.g2)("router-view"),u=(0,n.g2)("Api"),i=(0,n.g2)("el-config-provider");return(0,n.uX)(),(0,n.CE)("div",null,[(0,n.bF)(i,{locale:t.locale},{default:(0,n.k6)((()=>[t.configed?((0,n.uX)(),(0,n.Wv)(l,{key:0})):(0,n.Q3)("",!0),(0,n.bF)(u)])),_:1},8,["locale"])])}var o=s(3830);const l={class:"port-wrap t-c"},u={class:"pdt-10"},i={class:"pdt-10"};function d(e,r,s,a,o,d){const c=(0,n.g2)("el-input"),y=(0,n.g2)("el-checkbox"),v=(0,n.g2)("el-button"),m=(0,n.g2)("el-dialog");return(0,n.uX)(),(0,n.Wv)(m,{class:"options-center",title:"管理接口","destroy-on-close":"",modelValue:a.showPort,"onUpdate:modelValue":r[3]||(r[3]=e=>a.showPort=e),center:"","show-close":!1,"close-on-click-modal":!1,"align-center":"",width:"200"},{footer:(0,n.k6)((()=>[(0,n.bF)(v,{type:"success",onClick:a.handleConnect1,plain:""},{default:(0,n.k6)((()=>[(0,n.eW)("确 定")])),_:1},8,["onClick"])])),default:(0,n.k6)((()=>[(0,n.Lk)("div",l,[(0,n.Lk)("div",null,[(0,n.eW)(" 接口 : "),(0,n.bF)(c,{modelValue:a.state.api,"onUpdate:modelValue":r[0]||(r[0]=e=>a.state.api=e),style:{width:"70%"},onKeyup:(0,t.jR)(a.handleConnect1,["enter"])},null,8,["modelValue","onKeyup"])]),(0,n.Lk)("div",u,[(0,n.eW)(" 秘钥 : "),(0,n.bF)(c,{"show-password":"",type:"password",modelValue:a.state.psd,"onUpdate:modelValue":r[1]||(r[1]=e=>a.state.psd=e),style:{width:"70%"},onKeyup:(0,t.jR)(a.handleConnect1,["enter"])},null,8,["modelValue","onKeyup"])]),(0,n.Lk)("div",i,[(0,n.bF)(y,{modelValue:a.state.save,"onUpdate:modelValue":r[2]||(r[2]=e=>a.state.save=e)},{default:(0,n.k6)((()=>[(0,n.eW)("保存密码")])),_:1},8,["modelValue"])])])])),_:1},8,["modelValue"])}var c=s(1387),y=s(144),v=s(4),m=s(9299),g=s(8835),p=s(7477),f={components:{Tools:p.S0q},props:["config"],setup(e){const r=(0,o.B)(),s=(0,c.rd)(),t=(0,c.lq)(),a={api:`${window.location.hostname}:1803`,psd:"snltty"},l=JSON.parse(sessionStorage.getItem("api-cache")||localStorage.getItem("api-cache")||JSON.stringify(a)),u=(0,y.Kh)({api:l.api,psd:l.psd,showPort:!1,save:l.save||!1}),i=(0,n.EW)((()=>0==r.value.api.connected&&u.showPort)),d=()=>{l.api=u.api,l.psd=u.psd,l.save=u.save,u.save?localStorage.setItem("api-cache",JSON.stringify(l)):localStorage.setItem("api-cache",""),sessionStorage.setItem("api-cache",JSON.stringify(l)),(0,v.e3)();const e=`ws${"https:"===window.location.protocol?"s":""}://${u.api}`;(0,v.a1)(e,u.psd)},p=()=>{d(),window.location.reload()},f=()=>{(0,g.zj)().then((e=>{r.value.config.Common=e.Common,r.value.config.Client=e.Client,r.value.config.Server=e.Server,r.value.config.Running=e.Running,r.value.config.configed=!0,setTimeout((()=>{f()}),1e3)})).catch((e=>{setTimeout((()=>{f()}),1e3)}))},C=()=>{(0,m.SZ)().then((e=>{r.value.signin.Connected=e.Connected,r.value.signin.Version=e.Version,setTimeout((()=>{C()}),1e3)})).catch((e=>{setTimeout((()=>{C()}),1e3)}))};return(0,n.sV)((()=>{setTimeout((()=>{u.showPort=!0}),500),(0,v.jH)((e=>{e&&(f(),C())})),s.isReady().then((()=>{u.api=t.query.api?`${window.location.hostname}:${t.query.api}`:u.api,u.psd=t.query.psd||u.psd,d()}))})),{state:u,showPort:i,handleConnect1:p}}},C=s(1241);const h=(0,C.A)(f,[["render",d],["__scopeId","data-v-08aa73f8"]]);var k=h,S=s(2721),w=s(6726),T=s(2773),b={components:{Api:k},setup(e){const r=(0,o.v)(),s=(0,n.EW)((()=>r.value.config.configed)),{currentLocale:t}=(0,T.A)(),a=(0,n.EW)((()=>"zh-CN"==t.value?S.A:w.A));return{configed:s,locale:a}}};const P=(0,C.A)(b,[["render",a]]);var I=P;const N=[{path:"/",name:"Full",component:()=>Promise.all([s.e(194),s.e(64),s.e(560)]).then(s.bind(s,4842)),redirect:"/full/index.html",children:[{path:"/full/index.html",name:"FullIndex",component:()=>Promise.all([s.e(194),s.e(538),s.e(968)]).then(s.bind(s,6874))},{path:"/full/servers.html",name:"FullServers",component:()=>s.e(89).then(s.bind(s,8089))},{path:"/full/transport.html",name:"FullTransport",component:()=>s.e(32).then(s.bind(s,4032))},{path:"/full/action.html",name:"FullAction",component:()=>s.e(340).then(s.bind(s,3959))},{path:"/full/logger.html",name:"FullLogger",component:()=>s.e(716).then(s.bind(s,6716))}]},{path:"/net/index.html",name:"Network",component:()=>Promise.all([s.e(194),s.e(64),s.e(538),s.e(743)]).then(s.bind(s,427))},{path:"/no-permission.html",name:"NoPermission",component:()=>s.e(228).then(s.bind(s,6100))}],D=(0,c.aE)({history:(0,c.Bt)(),routes:N});var A=D,K=s(9287),E=s(6161);s(4188),s(2355),s(1862);const U=(0,t.Ef)(I);U.use(K.A),U.use(E.A,{size:"default"}).use(A).mount("#app")},3830:function(e,r,s){s.d(r,{B:function(){return u},v:function(){return l}});var t=s(4),n=s(144),a=s(6768);const o=Symbol(),l=()=>{const e=(0,n.KR)({api:{connected:!1},width:0,height:0,isPhone:(0,a.EW)((()=>e.value.width<800)),isPc:(0,a.EW)((()=>e.value.width>=800)),config:{Common:{},Client:{Servers:[],Accesss:{}},Server:{},Running:{Relay:{Servers:[]},Tuntap:{IP:"",PrefixLength:24},Client:{Servers:[]},AutoSyncs:{}},configed:!1},signin:{Connected:!1,Version:"v1.0.0.0"},bufferSize:["1KB","2KB","4KB","8KB","16KB","32KB","64KB","128KB","256KB","512KB","1024KB"],self:{},hasAccess(e){if(void 0==this.config.Client.Accesss[e])return!1;const r=this.config.Client.Accesss[e].Value||-1,s=this.config.Client.Access||-1;return s>=0&&(0==s||+(BigInt(s)&BigInt(r)).toString()==r)}});return(0,t.jH)((r=>{e.value.api.connected=r})),(0,a.Gt)(o,e),e},u=()=>(0,a.WQ)(o)}},r={};function s(t){var n=r[t];if(void 0!==n)return n.exports;var a=r[t]={id:t,loaded:!1,exports:{}};return e[t].call(a.exports,a,a.exports,s),a.loaded=!0,a.exports}s.m=e,function(){var e=[];s.O=function(r,t,n,a){if(!t){var o=1/0;for(d=0;d=a)&&Object.keys(s.O).every((function(e){return s.O[e](t[u])}))?t.splice(u--,1):(l=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[t,n,a]}}(),function(){s.n=function(e){var r=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(r,{a:r}),r}}(),function(){s.d=function(e,r){for(var t in r)s.o(r,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}}(),function(){s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce((function(r,t){return s.f[t](e,r),r}),[]))}}(),function(){s.u=function(e){return"js/"+e+"."+{32:"07324b9c",64:"a78d050d",89:"3ea503b8",194:"c82648eb",228:"45b76490",340:"9d567527",538:"7180135c",560:"7e9318c3",716:"cf2a55b5",743:"767cfe7e",968:"855ee1b4"}[e]+".js"}}(),function(){s.miniCssF=function(e){return"css/"+e+"."+{32:"1374e89e",89:"7620f7e2",228:"b2a71eca",340:"f859e18d",560:"41f66c44",716:"ccdaa7f7",743:"0511d33e",968:"f5edca10"}[e]+".css"}}(),function(){s.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){s.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)}}(),function(){var e={},r="linker.web:";s.l=function(t,n,a,o){if(e[t])e[t].push(n);else{var l,u;if(void 0!==a)for(var i=document.getElementsByTagName("script"),d=0;dMicrosoft Visual C++ 2015-2019 Redistributable 运行库
3. KB3063858 运行库
4. KB3033929 全球化补丁
-5. netframework4.6.2 ICS NAT运行库
-
:::
diff --git a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.2、ICS.md b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.2、ICS.md
deleted file mode 100644
index 59b084a1..00000000
--- a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.2、ICS.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-sidebar_position: 4
----
-
-# 1.1.2、ICS
-
-:::tip[说明]
-1. 如果系统没有netframework4.6.2,就下载安装一下
-2. 需要linker v1.7.0+版本
-3. 剩下的交给linker
-:::
\ No newline at end of file
diff --git a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1、点对网.md b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1、点对网.md
index dd796db0..ed37771d 100644
--- a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1、点对网.md
+++ b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1、点对网.md
@@ -15,9 +15,7 @@ sidebar_position: 2
:::tip[1、情况1,你的设备支持NAT转发时]
1. linux,已经自动添加NAT转发(在`OpenWrt`,需要在`防火墙 - 区域设置`中将`转发`设置为`接受`)
-2. windows,暂时找到两种NAT方式
- 1. NetNat,请参照 1.1.1、NetNat
- 2. ICS,请参照1.1.2、ICS(Internet Connection Sharing)
+2. windows,优先使用系统NetNat,NetNat失败则启用内置的应用层SNAT,但是性能应该没有NetNat好
3. macos,需要你自己在**被访问端**添加NAT转发
```
# 开启ip转发
diff --git a/src/linker.messenger.tuntap/Config.cs b/src/linker.messenger.tuntap/Config.cs
index 84e9b246..9bd9ac9a 100644
--- a/src/linker.messenger.tuntap/Config.cs
+++ b/src/linker.messenger.tuntap/Config.cs
@@ -135,7 +135,6 @@ namespace linker.messenger.tuntap
/// 开关,多个bool集合
///
public TuntapSwitch Switch { get; set; }
-
///
/// 延迟ms
///
@@ -310,6 +309,10 @@ namespace linker.messenger.tuntap
}
}
}
+ ///
+ /// 是否开启了应用层NAT
+ ///
+ public bool AppNat => (Switch & TuntapSwitch.AppNat) == TuntapSwitch.AppNat;
}
public sealed partial class TuntapForwardInfo
@@ -398,6 +401,11 @@ namespace linker.messenger.tuntap
/// 调整网卡顺序
///
InterfaceOrder = 128,
+
+ ///
+ /// 是否开启了应用层NAT
+ ///
+ AppNat = 256,
}
diff --git a/src/linker.messenger.tuntap/TuntapDecenter.cs b/src/linker.messenger.tuntap/TuntapDecenter.cs
index 9d5b4ddf..ca11808f 100644
--- a/src/linker.messenger.tuntap/TuntapDecenter.cs
+++ b/src/linker.messenger.tuntap/TuntapDecenter.cs
@@ -65,7 +65,7 @@ namespace linker.messenger.tuntap
SystemInfo = $"{System.Runtime.InteropServices.RuntimeInformation.OSDescription} {(string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("SNLTTY_LINKER_IS_DOCKER")) == false ? "Docker" : "")}",
Forwards = tuntapConfigTransfer.Info.Forwards,
- Switch = tuntapConfigTransfer.Info.Switch
+ Switch = tuntapConfigTransfer.Info.Switch | (tuntapTransfer.AppNat ? TuntapSwitch.AppNat : 0)
});
}
public void AddData(Memory data)
diff --git a/src/linker.messenger.tuntap/TuntapTransfer.cs b/src/linker.messenger.tuntap/TuntapTransfer.cs
index 9ca61017..af3d6b96 100644
--- a/src/linker.messenger.tuntap/TuntapTransfer.cs
+++ b/src/linker.messenger.tuntap/TuntapTransfer.cs
@@ -14,6 +14,8 @@ namespace linker.messenger.tuntap
public string SetupError => linkerTunDeviceAdapter.SetupError;
public string NatError => linkerTunDeviceAdapter.NatError;
+ public bool AppNat => linkerTunDeviceAdapter.AppNat;
+
public Action OnSetupBefore { get; set; } = () => { };
public Action OnSetupAfter { get; set; } = () => { };
public Action OnSetupSuccess { get; set; } = () => { };
diff --git a/src/linker.tray.win/default.aproj b/src/linker.tray.win/default.aproj
index 19340f9f..ca3df31f 100644
--- a/src/linker.tray.win/default.aproj
+++ b/src/linker.tray.win/default.aproj
@@ -1,5 +1,5 @@
-
+
diff --git a/src/linker.tray.win/dist/linker.tray.win.exe b/src/linker.tray.win/dist/linker.tray.win.exe
index b9f77402..d042a539 100644
Binary files a/src/linker.tray.win/dist/linker.tray.win.exe and b/src/linker.tray.win/dist/linker.tray.win.exe differ
diff --git a/src/linker.tray.win/web/css/743.0511d33e.css b/src/linker.tray.win/web/css/743.0511d33e.css
new file mode 100644
index 00000000..83390f3d
--- /dev/null
+++ b/src/linker.tray.win/web/css/743.0511d33e.css
@@ -0,0 +1 @@
+#file-input[data-v-4892cd3c]{opacity:0;position:absolute;z-index:-1}.el-icon[data-v-4892cd3c]{font-size:1.6rem;vertical-align:middle;color:#555}body.sunny{background-image:url(../img/bg.a2158f12.jpg);background-repeat:no-repeat;background-size:cover;background-position:bottom;position:absolute;left:0;top:0;right:0;bottom:0}body.sunny .status-wrap{background-color:hsla(0,0%,100%,.5)}body.sunny .head-wrap{background-color:hsla(0,0%,100%,.7)}body.sunny .net-list-wrap ul li,body.sunny .net-wrap{background-color:hsla(0,0%,98%,.5)}.head-wrap[data-v-1fd9ef80]{background-color:#fafafa;padding:1rem;border-bottom:1px solid #ddd;box-shadow:1px 2px 3px rgba(0,0,0,.05);font-size:1.4rem}.head-wrap span.label[data-v-1fd9ef80]{line-height:2.4rem;margin-right:.6rem;color:#555}a[data-v-56c0e8be]{color:#666;text-decoration:underline}a.green[data-v-56c0e8be]{color:green;font-weight:700}a.download[data-v-56c0e8be]{margin-left:.6rem}a.download .el-icon[data-v-56c0e8be]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-56c0e8be]{animation:loading-56c0e8be 1s linear infinite}a.download+a.download[data-v-56c0e8be]{margin-left:.2rem}@keyframes loading-56c0e8be{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-9f58a72e]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-9f58a72e]{color:#d400ff}.self .el-icon[data-v-9f58a72e]{vertical-align:text-bottom}div.point[data-v-41d1beca]{margin:-.2rem .3rem 0 -1.3rem;position:absolute}span.point[data-v-41d1beca]{width:.8rem;height:.8rem;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#eee;border:1px solid #ddd;cursor:pointer;transition:.3s}span.point[data-v-41d1beca]:hover{transform:scale(2)}span.point.p2p[data-v-41d1beca]{background-color:#01c901;border:1px solid #049538}span.point.relay[data-v-41d1beca]{background-color:#e3e811;border:1px solid #b3c410}span.point.node[data-v-41d1beca]{background-color:#09dda9;border:1px solid #0cac90}.el-icon.loading[data-v-36b3b9ac],a.loading[data-v-36b3b9ac]{vertical-align:middle;font-weight:700;animation:loading-36b3b9ac 1s linear infinite}.el-switch.is-disabled[data-v-36b3b9ac]{opacity:1}.el-input[data-v-36b3b9ac]{width:8rem}.delay[data-v-36b3b9ac]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-36b3b9ac]{font-size:1.5rem}.any[data-v-36b3b9ac]{position:absolute;left:-7px;top:-2px;line-height:normal}.any.green[data-v-36b3b9ac]{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}@keyframes loading-36b3b9ac{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.net-list-wrap ul[data-v-68d1c30a]{padding:2rem 2rem 1rem 2rem}.net-list-wrap ul li[data-v-68d1c30a]{margin-bottom:1rem;border:1px solid #ddd;background-color:#fff;font-size:1.3rem;border-radius:.4rem}.net-list-wrap ul li dt[data-v-68d1c30a]{padding:.6rem;border-bottom:1px solid #ddd}.net-list-wrap ul li dd.tuntap[data-v-68d1c30a]{padding:1rem;position:relative}.net-list-wrap .page[data-v-68d1c30a]{padding:.6rem 0;border-top:1px solid #ddd;background-color:hsla(0,0%,98%,.5);box-shadow:-1px -2px 3px rgba(0,0,0,.05)}.net-list-wrap .page-wrap[data-v-68d1c30a]{display:inline-block}.status-api-wrap[data-v-439c62dc]{padding-right:2rem}.status-api-wrap a[data-v-439c62dc]{color:#333}.status-api-wrap span[data-v-439c62dc]{border-radius:1rem;background-color:rgba(0,0,0,.1);padding:0 .6rem;margin-left:.2rem}.status-api-wrap.connected a[data-v-439c62dc]{color:green;font-weight:700}.status-api-wrap.connected span[data-v-439c62dc]{background-color:green;color:#fff}.status-api-wrap .el-icon[data-v-439c62dc]{vertical-align:text-top}.el-dropdown[data-v-10d34f3c]{vertical-align:inherit;margin-right:1rem}.connected[data-v-10d34f3c]{color:green;font-weight:700}.el-icon[data-v-10d34f3c]{vertical-align:bottom}a[data-v-80718c08]{font-weight:700;position:absolute;right:1rem;bottom:90%;border:1px solid #ddd;background-color:#fff;z-index:9}a p[data-v-80718c08]{line-height:normal;white-space:nowrap}.head[data-v-f73b7458]{padding-bottom:1rem;text-align:center}.head .el-input[data-v-f73b7458]{width:20rem}.page[data-v-f73b7458]{padding-top:1rem}.page-wrap[data-v-f73b7458]{display:inline-block}.head[data-v-019c1d95]{padding-bottom:1rem;text-align:center}.head .el-input[data-v-019c1d95]{width:20rem}.page[data-v-019c1d95]{padding-top:1rem}.page-wrap[data-v-019c1d95]{display:inline-block}#map[data-v-3c0782be],#map[data-v-6f5477f6]{height:60rem}.flow-wrap[data-v-12cd5250]{padding:.4rem;font-weight:700;position:absolute;right:1rem;bottom:80%;border:1px solid #ddd;background-color:#fff;z-index:9}.flow-wrap>a[data-v-12cd5250],.flow-wrap>p[data-v-12cd5250]{line-height:normal;white-space:nowrap;display:block}a[data-v-75ffaf8a]{font-weight:700}a .el-icon[data-v-75ffaf8a]{vertical-align:text-bottom}a.download .el-icon[data-v-75ffaf8a]{font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-75ffaf8a]{animation:loading-75ffaf8a 1s linear infinite}@keyframes loading-75ffaf8a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.status-server-wrap[data-v-2d85a782]{position:relative;padding-right:.5rem}.status-server-wrap a[data-v-2d85a782]{color:#333}.status-server-wrap a+a[data-v-2d85a782]{margin-left:.6rem}.status-server-wrap .el-icon[data-v-2d85a782]{vertical-align:text-bottom}.el-col[data-v-7a697708]{text-align:left}.status-export-wrap[data-v-b1c8c77a]{padding-right:2rem}.status-export-wrap a[data-v-b1c8c77a]{color:#333}.status-export-wrap .el-icon[data-v-b1c8c77a]{vertical-align:text-top}.status-export-wrap .el-col[data-v-b1c8c77a]{text-align:left}.status-wrap[data-v-bb76583c]{border-top:1px solid #ddd;background-color:#f5f5f5;height:3rem;line-height:3rem;font-size:1.2rem;color:#555}.status-wrap .pay[data-v-bb76583c]{font-size:xxx-large}.status-wrap .pay img[data-v-bb76583c]{width:100%;margin:0}.status-wrap .copy[data-v-bb76583c]{padding-left:.5rem}.status-wrap .copy a[data-v-bb76583c]{color:#555;margin-right:1rem}.status-wrap a.memory[data-v-bb76583c]{margin-right:.6rem}.status-wrap a.memory img[data-v-bb76583c]{height:3rem;vertical-align:bottom;margin-right:.1rem}.net-wrap[data-v-6a3f3b43]{box-sizing:border-box;background-color:#fafafa;border:1px solid #d0d7de;width:calc(100% - 40px);height:calc(100% - 40px);position:absolute;left:20px;top:20px}
\ No newline at end of file
diff --git a/src/linker.tray.win/web/css/968.f5edca10.css b/src/linker.tray.win/web/css/968.f5edca10.css
new file mode 100644
index 00000000..fa22ec22
--- /dev/null
+++ b/src/linker.tray.win/web/css/968.f5edca10.css
@@ -0,0 +1 @@
+.table-sort th[data-v-107f04ae]{border-bottom:0}.show-columns[data-v-107f04ae]{vertical-align:middle;font-size:1.2rem}.show-columns .el-icon[data-v-107f04ae]{vertical-align:bottom;font-size:1.2rem}.dropdown[data-v-2f0ed5e0]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-2f0ed5e0]{vertical-align:middle}.dropdown .badge[data-v-2f0ed5e0]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}a[data-v-56c0e8be]{color:#666;text-decoration:underline}a.green[data-v-56c0e8be]{color:green;font-weight:700}a.download[data-v-56c0e8be]{margin-left:.6rem}a.download .el-icon[data-v-56c0e8be]{vertical-align:middle;font-weight:700;margin-left:.3rem}a.download .el-icon.loading[data-v-56c0e8be]{animation:loading-56c0e8be 1s linear infinite}a.download+a.download[data-v-56c0e8be]{margin-left:.2rem}@keyframes loading-56c0e8be{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}img.system[data-v-9f58a72e]{height:1.6rem;vertical-align:middle;margin-right:.4rem}.self[data-v-9f58a72e]{color:#d400ff}.self .el-icon[data-v-9f58a72e]{vertical-align:text-bottom}.ipaddress span[data-v-5db71b03]{vertical-align:middle}.el-input[data-v-5db71b03]{width:12rem;margin-right:.6rem}.el-col[data-v-7a697708]{text-align:left}div.point[data-v-41d1beca]{margin:-.2rem .3rem 0 -1.3rem;position:absolute}span.point[data-v-41d1beca]{width:.8rem;height:.8rem;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#eee;border:1px solid #ddd;cursor:pointer;transition:.3s}span.point[data-v-41d1beca]:hover{transform:scale(2)}span.point.p2p[data-v-41d1beca]{background-color:#01c901;border:1px solid #049538}span.point.relay[data-v-41d1beca]{background-color:#e3e811;border:1px solid #b3c410}span.point.node[data-v-41d1beca]{background-color:#09dda9;border:1px solid #0cac90}.el-icon.loading[data-v-36b3b9ac],a.loading[data-v-36b3b9ac]{vertical-align:middle;font-weight:700;animation:loading-36b3b9ac 1s linear infinite}.el-switch.is-disabled[data-v-36b3b9ac]{opacity:1}.el-input[data-v-36b3b9ac]{width:8rem}.delay[data-v-36b3b9ac]{position:absolute;right:0;bottom:0;line-height:normal}.switch-btn[data-v-36b3b9ac]{font-size:1.5rem}.any[data-v-36b3b9ac]{position:absolute;left:-7px;top:-2px;line-height:normal}.any.green[data-v-36b3b9ac]{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}@keyframes loading-36b3b9ac{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.wrap[data-v-1541c712]{padding:0 1rem 1rem 0}.remark[data-v-1541c712]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wrap[data-v-1cfaa7f4]{padding:0 1rem 1rem 0}.el-switch.is-disabled[data-v-54c17b5d]{opacity:1}.upgrade-wrap[data-v-54c17b5d]{border:1px solid #ddd;margin-bottom:2rem}.el-switch.is-disabled[data-v-67ed3552]{opacity:1}.calc span[data-v-67ed3552]{display:inline-block}.calc span.label[data-v-67ed3552]{width:6rem}.el-icon.loading[data-v-3a4bfe6c],a.loading[data-v-3a4bfe6c]{vertical-align:middle;font-weight:700;animation:loading-3a4bfe6c 1s linear infinite}.el-switch.is-disabled[data-v-3a4bfe6c]{opacity:1}.el-input[data-v-3a4bfe6c]{width:8rem}.switch-btn[data-v-3a4bfe6c]{font-size:1.5rem}@keyframes loading-3a4bfe6c{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-switch.is-disabled[data-v-022e3781]{opacity:1}.upgrade-wrap[data-v-022e3781]{border:1px solid #ddd;margin-bottom:2rem;padding:1rem 0 1rem 0}.lan-item[data-v-022e3781]{margin-bottom:0}.el-switch.is-disabled[data-v-64b81c5b]{opacity:1}.green[data-v-64b81c5b]{font-weight:700}img.system[data-v-64b81c5b]{height:1.4rem;margin-right:.4rem;border:1px solid #eee}.el-switch.is-disabled[data-v-6941c158]{opacity:1}ul li[data-v-6941c158]{padding-left:2rem}a[data-v-2ee190a4]{text-decoration:underline}a+a[data-v-2ee190a4]{margin-left:1rem}a.green[data-v-2ee190a4]{font-weight:700}.head[data-v-190226d8]{padding-bottom:1rem}.green[data-v-190226d8]{color:green;font-weight:700}.error[data-v-190226d8]{font-weight:700}.error .el-icon[data-v-190226d8]{vertical-align:text-bottom}.head[data-v-359a437c]{padding-bottom:1rem}.error[data-v-359a437c]{font-weight:700}.error .el-icon[data-v-359a437c]{vertical-align:text-bottom}.plan .el-icon[data-v-359a437c]{vertical-align:middle;margin-right:.4rem}.head[data-v-8c388c86]{padding-bottom:1rem}.blue[data-v-8c388c86]{color:#409eff}.dropdown[data-v-8c388c86]{border:1px solid #ddd;padding:.4rem;font-size:1.3rem;border-radius:.4rem;position:relative}.dropdown .el-icon[data-v-8c388c86]{vertical-align:middle}.dropdown .badge[data-v-8c388c86]{position:absolute;right:-1rem;top:-50%;border-radius:10px;background-color:#f1ae05;color:#fff;padding:.2rem .6rem;font-size:1.2rem}.table-sort.el-table th.el-table__cell.is-leaf{border-bottom:0}.table-sort.el-table .el-table__inner-wrapper:before{height:0}.home-list-wrap[data-v-4766ad40]{padding:1rem}.home-list-wrap .page[data-v-4766ad40]{padding-top:1rem}.home-list-wrap .page-wrap[data-v-4766ad40]{display:inline-block}
\ No newline at end of file
diff --git a/src/linker.tray.win/web/css/app.3aab4747.css b/src/linker.tray.win/web/css/app.3aab4747.css
deleted file mode 100644
index 8c5b4910..00000000
--- a/src/linker.tray.win/web/css/app.3aab4747.css
+++ /dev/null
@@ -1 +0,0 @@
-.status-api-wrap[data-v-08aa73f8]{padding-right:2rem}.status-api-wrap a[data-v-08aa73f8]{color:#333}.status-api-wrap span[data-v-08aa73f8]{border-radius:1rem;background-color:rgba(0,0,0,.1);padding:0 .6rem;margin-left:.2rem}.status-api-wrap.connected a[data-v-08aa73f8]{color:green;font-weight:700}.status-api-wrap.connected span[data-v-08aa73f8]{background-color:green;color:#fff}.status-api-wrap .el-icon[data-v-08aa73f8]{vertical-align:text-top}*{margin:0;padding:0;list-style:none}a{text-decoration:none;color:#666;background-image:linear-gradient(92deg,red,#ff9000,#ffdc00,#23bf08,#00ffb2,#0072ff,#fd00ff);background-size:0 2px;background-position:0 100%;background-repeat:no-repeat;transition:.3s}a:hover{background-size:100% 2px;background-position:100% 100%}:root{--foot-menu-dropdown-color:#f5f5f5}a.a-line{text-decoration:underline}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.flex{display:flex;display:-ms-flex;display:-o-flex;flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-column{flex-direction:column}.flex-row{flex-direction:row}.flex-1{flex:1 1 0%}.absolute{position:absolute;left:0;top:0;right:0;bottom:0}.relative{position:relative}.h-100{height:100%}.w-100{width:100%}.t-c{text-align:center}.t-r{text-align:right}.t-l{text-align:left!important}.pdl-6{padding-left:.6rem}.pdb-6{padding-bottom:.6rem}.pdl-10{padding-left:1rem}.pdl-20{padding-left:2rem}.pdt-10{padding-top:1rem}.pdr-10{padding-right:1rem}.mgr-1{margin-right:1rem!important}.mgl-1{margin-left:1rem}.mgl-2{margin-left:2rem}.mgl-3{margin-left:3rem}.mgb-0{margin-bottom:0!important}.mgb-3{margin-bottom:3rem}.mgt-1{margin-top:1rem}.mgt-3{margin-top:3rem}table{border-spacing:0;border-collapse:collapse}html{font-size:10px;background-color:#f4f4f4}body{overflow:hidden}span.split{width:.6rem}span.split-pad{padding:0 .3rem}span.split-pad10{padding:0 1rem}.middle{vertical-align:middle}.red{color:red!important}.green{color:green!important}.yellow{color:#e68906!important}.disable{color:#ddd!important}.gateway{&.green{transition:.3s;&:hover{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}}}.scrollbar,.scrollbar-1,.scrollbar-10,.scrollbar-4{overflow:auto}.scrollbar-1::-webkit-scrollbar{width:0;height:1px}.scrollbar-1::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar::-webkit-scrollbar{width:1px;height:1px}.scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar-4::-webkit-scrollbar{width:4px;height:4px}.scrollbar-4::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar-10::-webkit-scrollbar{width:10px;height:1px}.scrollbar-10::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}:root{--el-color-primary:var(--el-color-success)!important;--el-color-primary-light-3:var(--el-color-success-light-3)!important;--el-color-primary-light-5:var(--el-color-success-light-5)!important;--el-color-primary-light-7:var(--el-color-success-light-7)!important;--el-color-primary-light-8:var(--el-color-success-light-8)!important;--el-color-primary-light-9:var(--el-color-success-light-9)!important;--el-color-primary-dark-2:var(--el-color-success-dark-2)!important}.el-table{--el-table-header-text-color:var(--el-text-color-regular)!important}.el-input-number--small{width:100%!important}.el-table .cell{overflow:visible!important}.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar{background:#f5f5f5}.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar-thumb{background:#ddd}.el-collapse-item__header{background-color:#fafafa!important;border-left:1px solid #ebeef5;border-right:1px solid #ebeef5;padding:0 2rem}.el-collapse-item__content{padding:1rem;border:1px solid #ebeef5;border-bottom:0}.el-input.w-search,.el-input.w-search .el-input__inner,.el-select.w-search{width:10rem}.el-form-item.w-search .el-form-item__label{font-size:1.2rem}.table-search .el-form--inline .el-form-item{margin-bottom:0}.el-dropdown,.el-dropdown-menu__item{font-size:1.3rem}.el-dropdown-menu__item a{color:#333}.el-input__inner:focus{border-color:var(--main-color)}.el-date-editor.el-input.w-auto,.el-date-editor.el-input__inner.w-auto{width:auto}.el-table .active-row{background:rgba(0,0,0,.15)}.el-table .table-green-row{background:rgba(0,255,0,.15)}.el-table .table-red-row{background:rgba(255,0,0,.15)}.el-table .table-green-row td,.el-table .table-red-row td{background:transparent!important}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:auto}.el-table .active-row td{background:transparent!important}.el-table--border th{background-color:#fafafa}.el-table thead.is-group th.el-table__cell{background:var(--el-table-header-bg-color)!important}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:var(--main-color)}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:var(--main-color)}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{width:inherit}.el-dialog{max-width:96%}.el-dialog__body .el-form-item:last-child{margin-bottom:0}.el-input-group__append,.el-input-group__prepend{padding:0 6px!important}.el-checkbox__label .el-icon{vertical-align:middle;margin-top:-2px}.el-color-picker{vertical-align:middle}.el-color-picker__trigger{border:0!important}.el-color-picker__color{border:0!important;border-radius:2px}.el-color-picker__color-inner{border-radius:2px}.el-message{min-width:10rem!important}.card-header{font-size:1.4rem}.forward-wrap .el-table--small.el-table .el-table__expanded-cell[class*=cell]{padding:20px 50px 20px 50px}h3.title{font-size:1.6rem;padding-bottom:.6rem;color:#555}.el-message-box{max-width:90%!important;width:-moz-fit-content!important;width:fit-content!important}.el-select-dropdown__item{padding-right:2rem!important}.el-form-item--default{--font-size:13px!important}.el-input__inner{font-size:13px}.el-dialog--center .el-dialog__body{padding-top:1rem!important;padding-bottom:1rem!important}@media screen and (max-width:1000px){body .phone-hide{display:none}}
\ No newline at end of file
diff --git a/src/linker.tray.win/web/css/app.73965826.css b/src/linker.tray.win/web/css/app.73965826.css
new file mode 100644
index 00000000..356bb80d
--- /dev/null
+++ b/src/linker.tray.win/web/css/app.73965826.css
@@ -0,0 +1 @@
+.status-api-wrap[data-v-08aa73f8]{padding-right:2rem}.status-api-wrap a[data-v-08aa73f8]{color:#333}.status-api-wrap span[data-v-08aa73f8]{border-radius:1rem;background-color:rgba(0,0,0,.1);padding:0 .6rem;margin-left:.2rem}.status-api-wrap.connected a[data-v-08aa73f8]{color:green;font-weight:700}.status-api-wrap.connected span[data-v-08aa73f8]{background-color:green;color:#fff}.status-api-wrap .el-icon[data-v-08aa73f8]{vertical-align:text-top}*{margin:0;padding:0;list-style:none}a{text-decoration:none;color:#666;background-image:linear-gradient(92deg,red,#ff9000,#ffdc00,#23bf08,#00ffb2,#0072ff,#fd00ff);background-size:0 2px;background-position:0 100%;background-repeat:no-repeat;transition:.3s}a:hover{background-size:100% 2px;background-position:100% 100%}:root{--foot-menu-dropdown-color:#f5f5f5}a.a-line{text-decoration:underline}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.flex{display:flex;display:-ms-flex;display:-o-flex;flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-column{flex-direction:column}.flex-row{flex-direction:row}.flex-1{flex:1 1 0%}.absolute{position:absolute;left:0;top:0;right:0;bottom:0}.relative{position:relative}.h-100{height:100%}.w-100{width:100%}.t-c{text-align:center}.t-r{text-align:right}.t-l{text-align:left!important}.pdl-6{padding-left:.6rem}.pdb-6{padding-bottom:.6rem}.pdl-10{padding-left:1rem}.pdl-20{padding-left:2rem}.pdt-10{padding-top:1rem}.pdr-10{padding-right:1rem}.mgr-1{margin-right:1rem!important}.mgl-1{margin-left:1rem}.mgl-2{margin-left:2rem}.mgl-3{margin-left:3rem}.mgb-0{margin-bottom:0!important}.mgb-3{margin-bottom:3rem}.mgt-1{margin-top:1rem}.mgt-3{margin-top:3rem}table{border-spacing:0;border-collapse:collapse}html{font-size:10px;background-color:#f4f4f4}body{overflow:hidden}span.split{width:.6rem}span.split-pad{padding:0 .3rem}span.split-pad10{padding:0 1rem}.middle{vertical-align:middle}.red{color:red!important}.green{color:green!important}.app-nat{color:#018a81!important}.yellow{color:#e68906!important}.disable{color:#ddd!important}.gateway{&.green{transition:.3s;&:hover{background:linear-gradient(270deg,#caff00,green,#0d6d23,#e38a00,green);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:hsla(0,0%,100%,0)}}}.scrollbar,.scrollbar-1,.scrollbar-10,.scrollbar-4{overflow:auto}.scrollbar-1::-webkit-scrollbar{width:0;height:1px}.scrollbar-1::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar::-webkit-scrollbar{width:1px;height:1px}.scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar-4::-webkit-scrollbar{width:4px;height:4px}.scrollbar-4::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}.scrollbar-10::-webkit-scrollbar{width:10px;height:1px}.scrollbar-10::-webkit-scrollbar-thumb{background:rgba(0,0,0,.1);border-radius:10px}:root{--el-color-primary:var(--el-color-success)!important;--el-color-primary-light-3:var(--el-color-success-light-3)!important;--el-color-primary-light-5:var(--el-color-success-light-5)!important;--el-color-primary-light-7:var(--el-color-success-light-7)!important;--el-color-primary-light-8:var(--el-color-success-light-8)!important;--el-color-primary-light-9:var(--el-color-success-light-9)!important;--el-color-primary-dark-2:var(--el-color-success-dark-2)!important}.el-table{--el-table-header-text-color:var(--el-text-color-regular)!important}.el-input-number--small{width:100%!important}.el-table .cell{overflow:visible!important}.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar{background:#f5f5f5}.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar-thumb{background:#ddd}.el-collapse-item__header{background-color:#fafafa!important;border-left:1px solid #ebeef5;border-right:1px solid #ebeef5;padding:0 2rem}.el-collapse-item__content{padding:1rem;border:1px solid #ebeef5;border-bottom:0}.el-input.w-search,.el-input.w-search .el-input__inner,.el-select.w-search{width:10rem}.el-form-item.w-search .el-form-item__label{font-size:1.2rem}.table-search .el-form--inline .el-form-item{margin-bottom:0}.el-dropdown,.el-dropdown-menu__item{font-size:1.3rem}.el-dropdown-menu__item a{color:#333}.el-input__inner:focus{border-color:var(--main-color)}.el-date-editor.el-input.w-auto,.el-date-editor.el-input__inner.w-auto{width:auto}.el-table .active-row{background:rgba(0,0,0,.15)}.el-table .table-green-row{background:rgba(0,255,0,.15)}.el-table .table-red-row{background:rgba(255,0,0,.15)}.el-table .table-green-row td,.el-table .table-red-row td{background:transparent!important}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:auto}.el-table .active-row td{background:transparent!important}.el-table--border th{background-color:#fafafa}.el-table thead.is-group th.el-table__cell{background:var(--el-table-header-bg-color)!important}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:var(--main-color)}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:var(--main-color)}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{width:inherit}.el-dialog{max-width:96%}.el-dialog__body .el-form-item:last-child{margin-bottom:0}.el-input-group__append,.el-input-group__prepend{padding:0 6px!important}.el-checkbox__label .el-icon{vertical-align:middle;margin-top:-2px}.el-color-picker{vertical-align:middle}.el-color-picker__trigger{border:0!important}.el-color-picker__color{border:0!important;border-radius:2px}.el-color-picker__color-inner{border-radius:2px}.el-message{min-width:10rem!important}.card-header{font-size:1.4rem}.forward-wrap .el-table--small.el-table .el-table__expanded-cell[class*=cell]{padding:20px 50px 20px 50px}h3.title{font-size:1.6rem;padding-bottom:.6rem;color:#555}.el-message-box{max-width:90%!important;width:-moz-fit-content!important;width:fit-content!important}.el-select-dropdown__item{padding-right:2rem!important}.el-form-item--default{--font-size:13px!important}.el-input__inner{font-size:13px}.el-dialog--center .el-dialog__body{padding-top:1rem!important;padding-bottom:1rem!important}@media screen and (max-width:1000px){body .phone-hide{display:none}}
\ No newline at end of file
diff --git a/src/linker.tray.win/web/index.html b/src/linker.tray.win/web/index.html
index 30f19ebb..2c80eeee 100644
--- a/src/linker.tray.win/web/index.html
+++ b/src/linker.tray.win/web/index.html
@@ -1 +1 @@
-linker.web
\ No newline at end of file
+linker.web
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/16.0d5bcc87.js b/src/linker.tray.win/web/js/16.0d5bcc87.js
deleted file mode 100644
index 9a44aa50..00000000
--- a/src/linker.tray.win/web/js/16.0d5bcc87.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[16],{7716:function(e,t,n){n.d(t,{H1:function(){return a},Oy:function(){return o},V1:function(){return u},dS:function(){return d},lE:function(){return h},nH:function(){return l},o2:function(){return s},we:function(){return r},xD:function(){return c}});var i=n(4);const a=(e="0")=>(0,i.zG)("forward/connections",e),s=e=>(0,i.zG)("forward/removeconnection",e),u=(e="0")=>(0,i.zG)("forward/getcount",e),o=(e="0")=>(0,i.zG)("forward/get",e),c=()=>(0,i.zG)("forward/bindips"),r=e=>(0,i.zG)("forward/remove",e),l=e=>(0,i.zG)("forward/add",e),d=()=>(0,i.zG)("forward/refresh"),h=e=>(0,i.zG)("forward/Test",e)},2173:function(e,t,n){n.d(t,{$y:function(){return u},L1:function(){return s},QP:function(){return l},R2:function(){return c},_Q:function(){return r},im:function(){return a},qH:function(){return o}});var i=n(4);const a=(e="0")=>(0,i.zG)("socks5/connections",e),s=e=>(0,i.zG)("socks5/removeconnection",e),u=(e="0")=>(0,i.zG)("socks5/get",e),o=e=>(0,i.zG)("socks5/run",e),c=e=>(0,i.zG)("socks5/stop",e),r=e=>(0,i.zG)("socks5/update",e),l=()=>(0,i.zG)("socks5/refresh")},5241:function(e,t,n){n.d(t,{AE:function(){return f},Jd:function(){return d},Nj:function(){return v},PR:function(){return c},Yh:function(){return l},_:function(){return h},ac:function(){return r},en:function(){return o},kl:function(){return a},vB:function(){return s},w0:function(){return m},zi:function(){return u}});var i=n(4);const a=(e="0")=>(0,i.zG)("tuntap/connections",e),s=e=>(0,i.zG)("tuntap/removeconnection",e),u=(e="0")=>(0,i.zG)("tuntap/get",e),o=e=>(0,i.zG)("tuntap/run",e),c=e=>(0,i.zG)("tuntap/stop",e),r=e=>(0,i.zG)("tuntap/update",e),l=()=>(0,i.zG)("tuntap/refresh"),d=()=>(0,i.zG)("tuntap/SubscribePing"),h=e=>(0,i.zG)("tuntap/SubscribeForwardTest",e),m=e=>(0,i.zG)("tuntap/CalcNetwork",e),v=()=>(0,i.zG)("tuntap/GetNetwork"),f=e=>(0,i.zG)("tuntap/AddNetwork",e)},9983:function(e,t,n){n.d(t,{FG:function(){return f},L2:function(){return h},ZY:function(){return m},bB:function(){return p},mx:function(){return v}});var i=n(7716),a=n(5241),s=n(2173),u=n(144),o=n(6768);const c=Symbol(),r=Symbol(),l=Symbol(),d=Symbol(),h=()=>{const e=(0,u.KR)({showEdit:!1,speedCache:{},current:"",currentName:"",hashcode:0,hashcode1:0,_updateRealTime:!1,updateRealTime:t=>{e.value.hashcode=0,e.value.hashcode1=0,e.value._updateRealTime=t}});(0,o.Gt)(c,e);const t=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(r,t);const n=()=>{clearTimeout(t.value.timer),(0,i.H1)(e.value.hashcode.toString()).then((a=>{0==e.value._updateRealTime&&(e.value.hashcode=a.HashCode),a.List&&(p(a.List,i.o2),t.value.list=a.List),t.value.timer=setTimeout(n,1e3)})).catch((e=>{t.value.timer=setTimeout(n,1e3)}))},h=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(l,h);const m=()=>{clearTimeout(h.value.timer),(0,a.kl)(e.value.hashcode1.toString()).then((t=>{0==e.value._updateRealTime&&(e.value.hashcode1=t.HashCode),t.List&&(p(t.List,a.vB),h.value.list=t.List),h.value.timer=setTimeout(m,1e3)})).catch((e=>{h.value.timer=setTimeout(m,1e3)}))},v=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(d,v);const f=()=>{clearTimeout(v.value.timer),(0,s.im)(e.value.hashcode1.toString()).then((t=>{0==e.value._updateRealTime&&(e.value.hashcode1=t.HashCode),t.List&&(p(t.List,s.L1),v.value.list=t.List),v.value.timer=setTimeout(f,1e3)})).catch((e=>{v.value.timer=setTimeout(f,1e3)}))},p=(t,n)=>{const i=e.value.speedCache;for(let e in t){const a=t[e];a.removeFunc=n;const s=`${a.RemoteMachineId}-${a.TransactionId}`,u=i[s]||{SendBytes:0,ReceiveBytes:0};a.SendBytesText=g(a.SendBytes-u.SendBytes),a.ReceiveBytesText=g(a.ReceiveBytes-u.ReceiveBytes),u.SendBytes=a.SendBytes,u.ReceiveBytes=a.ReceiveBytes,i[s]=u}},g=e=>{let t=0;while(e>=1024)e/=1024,t++;return`${e.toFixed(2)}${["B/s","KB/s","MB/s","GB/s","TB/s"][t]}`},I=t=>{e.value.current=t.MachineId,e.value.currentName=t.MachineName,e.value.showEdit=!0},y=()=>{clearTimeout(t.value.timer),clearTimeout(h.value.timer),clearTimeout(v.value.timer)};return{connections:e,forwardConnections:t,_getForwardConnections:n,tuntapConnections:h,_getTuntapConnections:m,socks5Connections:v,_getSocks5Connections:f,handleTunnelConnections:I,clearConnectionsTimeout:y}},m=()=>(0,o.WQ)(c),v=()=>(0,o.WQ)(r),f=()=>(0,o.WQ)(l),p=()=>(0,o.WQ)(d)},7985:function(e,t,n){n.d(t,{r:function(){return r}});n(4114);var i=n(9299),a=n(3830),s=n(6768),u=n(144);const o=[],c=Symbol(),r=()=>{const e=(0,a.B)(),t=(0,s.EW)((()=>e.value.config.Client.Id)),n=(0,u.Kh)({timer:0,page:{Request:{Page:1,Size:+(localStorage.getItem("ps")||"10"),Name:"",Ids:[],Prop:"",Asc:!0},Count:0,List:[]},showDeviceEdit:!1,showAccessEdit:!1,deviceInfo:null});(0,s.Gt)(c,n);const r=()=>{(0,i.nD)(n.page.Request).then((i=>{n.page.Request=i.Request,n.page.Count=i.Count;for(let n in i.List)Object.assign(i.List[n],{showDel:t.value!=i.List[n].MachineId&&0==i.List[n].Connected,showAccess:t.value!=i.List[n].MachineId&&i.List[n].Connected,showReboot:i.List[n].Connected,isSelf:t.value==i.List[n].MachineId,showip:!1}),i.List[n].isSelf&&(e.value.self=i.List[n]);n.page.List=i.List;for(let e=0;e{}))},l=()=>{clearTimeout(n.timer),(0,i.nD)(n.page.Request).then((i=>{for(let a in i.List){const s=n.page.List.filter((e=>e.MachineId==i.List[a].MachineId))[0];s&&(Object.assign(s,{Connected:i.List[a].Connected,Version:i.List[a].Version,LastSignIn:i.List[a].LastSignIn,Args:i.List[a].Args,showDel:t.value!=i.List[a].MachineId&&0==i.List[a].Connected,showAccess:t.value!=i.List[a].MachineId&&i.List[a].Connected,showReboot:i.List[a].Connected,isSelf:t.value==i.List[a].MachineId}),s.isSelf&&(e.value.self=s))}n.timer=setTimeout(l,5e3)})).catch((e=>{n.timer=setTimeout(l,5e3)}))},d=e=>{n.deviceInfo=e,n.showDeviceEdit=!0},h=e=>{n.deviceInfo=e,n.showAccessEdit=!0},m=e=>{e&&(n.page.Request.Page=e),r()},v=e=>{e&&(n.page.Request.Size=e,localStorage.setItem("ps",e)),r()},f=e=>{(0,i.Se)(e).then((()=>{r()}))},p=()=>{clearTimeout(n.timer),n.timer=0},g=e=>(0,i.VN)(e);return{devices:n,machineId:t,_getSignList:r,_getSignList1:l,handleDeviceEdit:d,handleAccessEdit:h,handlePageChange:m,handlePageSizeChange:v,handleDel:f,clearDevicesTimeout:p,setSort:g}}},8104:function(e,t,n){n.d(t,{O:function(){return o},W:function(){return c}});var i=n(144),a=n(6768),s=n(5241);const u=Symbol(),o=()=>{const e=(0,i.KR)({show:!0,timer:0,showEdit:!1,current:null,list:{},hashcode:0,showLease:!1});(0,a.Gt)(u,e);const t={linux:["debian","ubuntu","alpine","rocky","centos","fedora","archlinux"],armbian:["armbian"],openwrt:["openwrt"],ubuntu:["ubuntu"],windows:["windows"],android:["android"],ios:["ios"]},n=()=>{clearTimeout(e.value.timer),(0,s.zi)(e.value.hashcode.toString()).then((i=>{if(e.value.hashcode=i.HashCode,i.List){for(let e in i.List){let n="system";const a=i.List[e].SystemInfo.toLowerCase();for(let e in t)if(a.indexOf(e)>=0){const i=t[e];if(1==i.length)n=i[0];else for(let e=0;e=0){n=i[e];break}break}Object.assign(i.List[e],{running:2==i.List[e].Status,loading:1==i.List[e].Status,system:n,systemDocker:a.indexOf("docker")>=0})}e.value.list=i.List}e.value.timer=setTimeout(n,1100),(0,s.Jd)()})).catch((t=>{e.value.timer=setTimeout(n,1100)}))},o=t=>{e.value.current=t,e.value.showEdit=!0},c=()=>{(0,s.Yh)()},r=()=>{clearTimeout(e.value.timer),e.value.timer=0},l=t=>Object.values(e.value.list).filter((e=>e.IP.indexOf(t)>=0||e.Lans.filter((e=>e.IP.indexOf(t)>=0)).length>0)).map((e=>e.MachineId)),d=t=>{const n=Object.values(e.value.list).filter((e=>e.IP)).sort(((e,t)=>{const n=e.IP.split(".").map((e=>Number(e))),i=t.IP.split(".").map((e=>Number(e)));for(let a=0;ae.MachineId))};return{tuntap:e,_getTuntapInfo:n,handleTuntapEdit:o,handleTuntapRefresh:c,clearTuntapTimeout:r,getTuntapMachines:l,sortTuntapIP:d}},c=()=>(0,a.WQ)(u)},2109:function(e,t,n){n.d(t,{A:function(){return v}});var i=n(6768);const a={key:0,class:"point p2p",title:"打洞直连"},s={key:1,class:"point relay",title:"中继连接"},u={key:2,class:"point node",title:"节点连接"},o={key:1,class:"point",title:"未连接"};function c(e,t,n,c,r,l){return(0,i.uX)(),(0,i.CE)("div",{class:"point",onClick:t[0]||(t[0]=(...e)=>c.handleShow&&c.handleShow(...e))},[c.state.connection&&c.state.connection.Connected?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[0==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",a)):1==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",s)):2==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",u)):(0,i.Q3)("",!0)],64)):((0,i.uX)(),(0,i.CE)("span",o))])}var r=n(144),l=n(9983),d={props:["data","row"],setup(e){const t=(0,l.ZY)(),n=(0,r.Kh)({connection:e.data});(0,i.wB)((()=>e.data),(()=>{n.connection=e.data}));const a=()=>{t.value.current=e.row.MachineId,t.value.currentName=e.row.MachineName,t.value.showEdit=!0};return{state:n,handleShow:a}}},h=n(1241);const m=(0,h.A)(d,[["render",c],["__scopeId","data-v-41d1beca"]]);var v=m},6588:function(e,t,n){n.d(t,{A:function(){return p}});var i=n(6768),a=n(4232);const s=["title"],u=["src"],o={key:0,class:"system",src:"./docker.svg"},c={key:1,class:"self gateway"};function r(e,t,n,r,l,d){const h=(0,i.g2)("StarFilled"),m=(0,i.g2)("el-icon");return(0,i.uX)(),(0,i.CE)("div",null,[r.tuntap.list[r.item.MachineId]&&r.tuntap.list[r.item.MachineId].system?((0,i.uX)(),(0,i.CE)("span",{key:0,title:r.tuntap.list[r.item.MachineId].SystemInfo},[(0,i.Lk)("img",{class:"system",src:`./${r.tuntap.list[r.item.MachineId].system}.svg`},null,8,u),r.tuntap.list[r.item.MachineId].systemDocker?((0,i.uX)(),(0,i.CE)("img",o)):(0,i.Q3)("",!0)],8,s)):(0,i.Q3)("",!0),(0,i.Lk)("a",{href:"javascript:;",onClick:t[0]||(t[0]=(...e)=>r.handleEdit&&r.handleEdit(...e)),title:"此客户端的设备名",class:"a-line"},[(0,i.Lk)("strong",{class:(0,a.C4)(["gateway",{green:r.item.Connected}])},(0,a.v_)(r.item.MachineName||"null"),3)]),r.item.isSelf?((0,i.uX)(),(0,i.CE)("strong",c,[(0,i.eW)("("),(0,i.bF)(m,{size:"16"},{default:(0,i.k6)((()=>[(0,i.bF)(h)])),_:1}),(0,i.eW)(") ")])):(0,i.Q3)("",!0)])}var l=n(3830),d=n(8104),h=n(7477),m={props:["item","config"],emits:["edit","refresh"],components:{StarFilled:h.BQ2},setup(e,{emit:t}){const n=(0,d.W)(),a=(0,l.B)(),s=(0,i.EW)((()=>a.value.hasAccess("RenameSelf"))),u=(0,i.EW)((()=>a.value.hasAccess("RenameOther"))),o=(0,i.EW)((()=>a.value.config.Client.Id)),c=()=>{if(e.config){if(o.value===e.item.MachineId){if(!s.value)return}else if(!u.value)return;t("edit",e.item)}};return{item:(0,i.EW)((()=>e.item)),tuntap:n,handleEdit:c}}},v=n(1241);const f=(0,v.A)(m,[["render",r],["__scopeId","data-v-9f58a72e"]]);var p=f},9273:function(e,t,n){n.d(t,{A:function(){return G}});var i=n(6768),a=n(4232);const s={class:"flex"},u={class:"flex-1"},o=["title"],c=["title"],r={key:0,class:"green gateway"},l={key:1},d={key:0},h={key:0,class:"flex disable",title:"已禁用"},m={key:1,class:"flex yellow",title:"与其它设备填写IP、或本机局域网IP有冲突"},v={key:2,class:"flex green",title:"正常使用"},f={key:0,class:"any green"},p={key:0,class:"delay green"},g={class:"delay yellow"};function I(e,t,n,I,y,C){const L=(0,i.g2)("ConnectionShow"),w=(0,i.g2)("Loading"),k=(0,i.g2)("el-icon"),E=(0,i.g2)("el-switch"),S=(0,i.g2)("Share");return(0,i.uX)(),(0,i.CE)("div",null,[(0,i.Lk)("div",s,[(0,i.Lk)("div",u,[(0,i.bF)(L,{data:I.connections.list[I.item.MachineId],row:I.item},null,8,["data","row"]),(0,i.Lk)("a",{href:"javascript:;",class:"a-line",onClick:t[0]||(t[0]=e=>I.handleTuntapIP(I.tuntap.list[I.item.MachineId])),title:"虚拟网卡IP"},[I.tuntap.list[I.item.MachineId].SetupError?((0,i.uX)(),(0,i.CE)("strong",{key:0,class:"red",title:I.tuntap.list[I.item.MachineId].SetupError},(0,a.v_)(I.tuntap.list[I.item.MachineId].IP),9,o)):I.tuntap.list[I.item.MachineId].Upgrade&&I.tuntap.list[I.item.MachineId].NatError?((0,i.uX)(),(0,i.CE)("strong",{key:1,class:"yellow",title:I.tuntap.list[I.item.MachineId].NatError},(0,a.v_)(I.tuntap.list[I.item.MachineId].IP),9,c)):((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[I.item.Connected&&I.tuntap.list[I.item.MachineId].running?((0,i.uX)(),(0,i.CE)("strong",r,(0,a.v_)(I.tuntap.list[I.item.MachineId].IP),1)):((0,i.uX)(),(0,i.CE)("strong",l,(0,a.v_)(I.tuntap.list[I.item.MachineId].IP),1))],64))])]),I.tuntap.list[I.item.MachineId].loading?((0,i.uX)(),(0,i.CE)("div",d,[(0,i.bF)(k,{size:"14",class:"loading"},{default:(0,i.k6)((()=>[(0,i.bF)(w)])),_:1})])):((0,i.uX)(),(0,i.Wv)(E,{key:1,"model-value":I.item.Connected&&I.tuntap.list[I.item.MachineId].running,loading:I.tuntap.list[I.item.MachineId].loading,disabled:"",onClick:t[1]||(t[1]=e=>I.handleTuntap(I.tuntap.list[I.item.MachineId])),size:"small","inline-prompt":"","active-text":"😀","inactive-text":"😣"},null,8,["model-value","loading"]))]),(0,i.Lk)("div",null,[(0,i.Lk)("div",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(I.tuntap.list[I.item.MachineId].Lans,((e,t)=>((0,i.uX)(),(0,i.CE)(i.FK,{key:t},[e.Disabled?((0,i.uX)(),(0,i.CE)("div",h,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1)):e.Exists?((0,i.uX)(),(0,i.CE)("div",m,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1)):((0,i.uX)(),(0,i.CE)("div",v,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1))],64)))),128))]),I.tuntap.list[I.item.MachineId].Any?((0,i.uX)(),(0,i.CE)("div",f,[(0,i.bF)(k,null,{default:(0,i.k6)((()=>[(0,i.bF)(S)])),_:1})])):(0,i.Q3)("",!0),I.showDelay?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[I.tuntap.list[I.item.MachineId].Delay>=0&&I.tuntap.list[I.item.MachineId].Delay<=100?((0,i.uX)(),(0,i.CE)("div",p,(0,a.v_)(I.tuntap.list[I.item.MachineId].Delay)+"ms",1)):(0,i.Q3)("",!0),(0,i.Lk)("template",null,[(0,i.Lk)("div",g,(0,a.v_)(I.tuntap.list[I.item.MachineId].Delay)+"ms",1)])],64)):(0,i.Q3)("",!0)])])}var y=n(5241),C=n(1219),L=n(8104),w=n(7477),k=n(3830),E=n(9983),S=n(2109),T={props:["item","config"],emits:["edit","refresh"],components:{Loading:w.Rhj,Share:w.SYj,ConnectionShow:S.A},setup(e,{emit:t}){const n=(0,L.W)(),a=(0,k.B)(),s=(0,i.EW)((()=>a.value.config.Client.Id)),u=(0,i.EW)((()=>a.value.hasAccess("TuntapChangeSelf"))),o=(0,i.EW)((()=>a.value.hasAccess("TuntapChangeOther"))),c=(0,i.EW)((()=>a.value.hasAccess("TuntapStatusSelf"))),r=(0,i.EW)((()=>a.value.hasAccess("TuntapStatusOther"))),l=(0,E.FG)(),d=(0,i.EW)((()=>2==(2&(a.value.config.Running.Tuntap||{Switch:0}).Switch))),h=t=>{if(!e.config)return;if(s.value===t.MachineId){if(!c.value)return}else if(!r.value)return;const n=e.item.Connected&&t.running?(0,y.PR)(t.MachineId):(0,y.en)(t.MachineId);t.loading=!0,n.then((()=>{C.nk.success("操作成功!")})).catch((e=>{console.log(e),C.nk.error("操作失败!")}))},m=n=>{if(e.config||s.value==n.MachineId){if(s.value===n.MachineId){if(!u.value)return}else if(!o.value)return;n.device=e.item,t("edit",n)}},v=()=>{t("refresh")};return{item:(0,i.EW)((()=>e.item)),tuntap:n,showDelay:d,connections:l,handleTuntap:h,handleTuntapIP:m,handleTuntapRefresh:v}}},M=n(1241);const b=(0,M.A)(T,[["render",I],["__scopeId","data-v-5ce8d590"]]);var G=b}}]);
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/538.7180135c.js b/src/linker.tray.win/web/js/538.7180135c.js
new file mode 100644
index 00000000..9b31c516
--- /dev/null
+++ b/src/linker.tray.win/web/js/538.7180135c.js
@@ -0,0 +1 @@
+"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[538],{7716:function(e,t,n){n.d(t,{H1:function(){return a},Oy:function(){return o},V1:function(){return u},dS:function(){return d},lE:function(){return h},nH:function(){return l},o2:function(){return s},we:function(){return r},xD:function(){return c}});var i=n(4);const a=(e="0")=>(0,i.zG)("forward/connections",e),s=e=>(0,i.zG)("forward/removeconnection",e),u=(e="0")=>(0,i.zG)("forward/getcount",e),o=(e="0")=>(0,i.zG)("forward/get",e),c=()=>(0,i.zG)("forward/bindips"),r=e=>(0,i.zG)("forward/remove",e),l=e=>(0,i.zG)("forward/add",e),d=()=>(0,i.zG)("forward/refresh"),h=e=>(0,i.zG)("forward/Test",e)},2173:function(e,t,n){n.d(t,{$y:function(){return u},L1:function(){return s},QP:function(){return l},R2:function(){return c},_Q:function(){return r},im:function(){return a},qH:function(){return o}});var i=n(4);const a=(e="0")=>(0,i.zG)("socks5/connections",e),s=e=>(0,i.zG)("socks5/removeconnection",e),u=(e="0")=>(0,i.zG)("socks5/get",e),o=e=>(0,i.zG)("socks5/run",e),c=e=>(0,i.zG)("socks5/stop",e),r=e=>(0,i.zG)("socks5/update",e),l=()=>(0,i.zG)("socks5/refresh")},5241:function(e,t,n){n.d(t,{AE:function(){return f},Jd:function(){return d},Nj:function(){return v},PR:function(){return c},Yh:function(){return l},_:function(){return h},ac:function(){return r},en:function(){return o},kl:function(){return a},vB:function(){return s},w0:function(){return m},zi:function(){return u}});var i=n(4);const a=(e="0")=>(0,i.zG)("tuntap/connections",e),s=e=>(0,i.zG)("tuntap/removeconnection",e),u=(e="0")=>(0,i.zG)("tuntap/get",e),o=e=>(0,i.zG)("tuntap/run",e),c=e=>(0,i.zG)("tuntap/stop",e),r=e=>(0,i.zG)("tuntap/update",e),l=()=>(0,i.zG)("tuntap/refresh"),d=()=>(0,i.zG)("tuntap/SubscribePing"),h=e=>(0,i.zG)("tuntap/SubscribeForwardTest",e),m=e=>(0,i.zG)("tuntap/CalcNetwork",e),v=()=>(0,i.zG)("tuntap/GetNetwork"),f=e=>(0,i.zG)("tuntap/AddNetwork",e)},9983:function(e,t,n){n.d(t,{FG:function(){return f},L2:function(){return h},ZY:function(){return m},bB:function(){return p},mx:function(){return v}});var i=n(7716),a=n(5241),s=n(2173),u=n(144),o=n(6768);const c=Symbol(),r=Symbol(),l=Symbol(),d=Symbol(),h=()=>{const e=(0,u.KR)({showEdit:!1,speedCache:{},current:"",currentName:"",hashcode:0,hashcode1:0,_updateRealTime:!1,updateRealTime:t=>{e.value.hashcode=0,e.value.hashcode1=0,e.value._updateRealTime=t}});(0,o.Gt)(c,e);const t=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(r,t);const n=()=>{clearTimeout(t.value.timer),(0,i.H1)(e.value.hashcode.toString()).then((a=>{0==e.value._updateRealTime&&(e.value.hashcode=a.HashCode),a.List&&(p(a.List,i.o2),t.value.list=a.List),t.value.timer=setTimeout(n,1e3)})).catch((e=>{t.value.timer=setTimeout(n,1e3)}))},h=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(l,h);const m=()=>{clearTimeout(h.value.timer),(0,a.kl)(e.value.hashcode1.toString()).then((t=>{0==e.value._updateRealTime&&(e.value.hashcode1=t.HashCode),t.List&&(p(t.List,a.vB),h.value.list=t.List),h.value.timer=setTimeout(m,1e3)})).catch((e=>{h.value.timer=setTimeout(m,1e3)}))},v=(0,u.KR)({timer:0,list:{}});(0,o.Gt)(d,v);const f=()=>{clearTimeout(v.value.timer),(0,s.im)(e.value.hashcode1.toString()).then((t=>{0==e.value._updateRealTime&&(e.value.hashcode1=t.HashCode),t.List&&(p(t.List,s.L1),v.value.list=t.List),v.value.timer=setTimeout(f,1e3)})).catch((e=>{v.value.timer=setTimeout(f,1e3)}))},p=(t,n)=>{const i=e.value.speedCache;for(let e in t){const a=t[e];a.removeFunc=n;const s=`${a.RemoteMachineId}-${a.TransactionId}`,u=i[s]||{SendBytes:0,ReceiveBytes:0};a.SendBytesText=g(a.SendBytes-u.SendBytes),a.ReceiveBytesText=g(a.ReceiveBytes-u.ReceiveBytes),u.SendBytes=a.SendBytes,u.ReceiveBytes=a.ReceiveBytes,i[s]=u}},g=e=>{let t=0;while(e>=1024)e/=1024,t++;return`${e.toFixed(2)}${["B/s","KB/s","MB/s","GB/s","TB/s"][t]}`},I=t=>{e.value.current=t.MachineId,e.value.currentName=t.MachineName,e.value.showEdit=!0},y=()=>{clearTimeout(t.value.timer),clearTimeout(h.value.timer),clearTimeout(v.value.timer)};return{connections:e,forwardConnections:t,_getForwardConnections:n,tuntapConnections:h,_getTuntapConnections:m,socks5Connections:v,_getSocks5Connections:f,handleTunnelConnections:I,clearConnectionsTimeout:y}},m=()=>(0,o.WQ)(c),v=()=>(0,o.WQ)(r),f=()=>(0,o.WQ)(l),p=()=>(0,o.WQ)(d)},7985:function(e,t,n){n.d(t,{r:function(){return r}});n(4114);var i=n(9299),a=n(3830),s=n(6768),u=n(144);const o=[],c=Symbol(),r=()=>{const e=(0,a.B)(),t=(0,s.EW)((()=>e.value.config.Client.Id)),n=(0,u.Kh)({timer:0,page:{Request:{Page:1,Size:+(localStorage.getItem("ps")||"10"),Name:"",Ids:[],Prop:"",Asc:!0},Count:0,List:[]},showDeviceEdit:!1,showAccessEdit:!1,deviceInfo:null});(0,s.Gt)(c,n);const r=()=>{(0,i.nD)(n.page.Request).then((i=>{n.page.Request=i.Request,n.page.Count=i.Count;for(let n in i.List)Object.assign(i.List[n],{showDel:t.value!=i.List[n].MachineId&&0==i.List[n].Connected,showAccess:t.value!=i.List[n].MachineId&&i.List[n].Connected,showReboot:i.List[n].Connected,isSelf:t.value==i.List[n].MachineId,showip:!1}),i.List[n].isSelf&&(e.value.self=i.List[n]);n.page.List=i.List;for(let e=0;e{}))},l=()=>{clearTimeout(n.timer),(0,i.nD)(n.page.Request).then((i=>{for(let a in i.List){const s=n.page.List.filter((e=>e.MachineId==i.List[a].MachineId))[0];s&&(Object.assign(s,{Connected:i.List[a].Connected,Version:i.List[a].Version,LastSignIn:i.List[a].LastSignIn,Args:i.List[a].Args,showDel:t.value!=i.List[a].MachineId&&0==i.List[a].Connected,showAccess:t.value!=i.List[a].MachineId&&i.List[a].Connected,showReboot:i.List[a].Connected,isSelf:t.value==i.List[a].MachineId}),s.isSelf&&(e.value.self=s))}n.timer=setTimeout(l,5e3)})).catch((e=>{n.timer=setTimeout(l,5e3)}))},d=e=>{n.deviceInfo=e,n.showDeviceEdit=!0},h=e=>{n.deviceInfo=e,n.showAccessEdit=!0},m=e=>{e&&(n.page.Request.Page=e),r()},v=e=>{e&&(n.page.Request.Size=e,localStorage.setItem("ps",e)),r()},f=e=>{(0,i.Se)(e).then((()=>{r()}))},p=()=>{clearTimeout(n.timer),n.timer=0},g=e=>(0,i.VN)(e);return{devices:n,machineId:t,_getSignList:r,_getSignList1:l,handleDeviceEdit:d,handleAccessEdit:h,handlePageChange:m,handlePageSizeChange:v,handleDel:f,clearDevicesTimeout:p,setSort:g}}},8104:function(e,t,n){n.d(t,{O:function(){return o},W:function(){return c}});var i=n(144),a=n(6768),s=n(5241);const u=Symbol(),o=()=>{const e=(0,i.KR)({show:!0,timer:0,showEdit:!1,current:null,list:{},hashcode:0,showLease:!1});(0,a.Gt)(u,e);const t={linux:["debian","ubuntu","alpine","rocky","centos","fedora","archlinux"],armbian:["armbian"],openwrt:["openwrt"],ubuntu:["ubuntu"],windows:["windows"],android:["android"],ios:["ios"]},n=()=>{clearTimeout(e.value.timer),(0,s.zi)(e.value.hashcode.toString()).then((i=>{if(e.value.hashcode=i.HashCode,i.List){for(let e in i.List){let n="system";const a=i.List[e].SystemInfo.toLowerCase();for(let e in t)if(a.indexOf(e)>=0){const i=t[e];if(1==i.length)n=i[0];else for(let e=0;e=0){n=i[e];break}break}Object.assign(i.List[e],{running:2==i.List[e].Status,loading:1==i.List[e].Status,system:n,systemDocker:a.indexOf("docker")>=0})}e.value.list=i.List}e.value.timer=setTimeout(n,1100),(0,s.Jd)()})).catch((t=>{e.value.timer=setTimeout(n,1100)}))},o=t=>{e.value.current=t,e.value.showEdit=!0},c=()=>{(0,s.Yh)()},r=()=>{clearTimeout(e.value.timer),e.value.timer=0},l=t=>Object.values(e.value.list).filter((e=>e.IP.indexOf(t)>=0||e.Lans.filter((e=>e.IP.indexOf(t)>=0)).length>0)).map((e=>e.MachineId)),d=t=>{const n=Object.values(e.value.list).filter((e=>e.IP)).sort(((e,t)=>{const n=e.IP.split(".").map((e=>Number(e))),i=t.IP.split(".").map((e=>Number(e)));for(let a=0;ae.MachineId))};return{tuntap:e,_getTuntapInfo:n,handleTuntapEdit:o,handleTuntapRefresh:c,clearTuntapTimeout:r,getTuntapMachines:l,sortTuntapIP:d}},c=()=>(0,a.WQ)(u)},2109:function(e,t,n){n.d(t,{A:function(){return v}});var i=n(6768);const a={key:0,class:"point p2p",title:"打洞直连"},s={key:1,class:"point relay",title:"中继连接"},u={key:2,class:"point node",title:"节点连接"},o={key:1,class:"point",title:"未连接"};function c(e,t,n,c,r,l){return(0,i.uX)(),(0,i.CE)("div",{class:"point",onClick:t[0]||(t[0]=(...e)=>c.handleShow&&c.handleShow(...e))},[c.state.connection&&c.state.connection.Connected?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[0==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",a)):1==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",s)):2==c.state.connection.Type?((0,i.uX)(),(0,i.CE)("span",u)):(0,i.Q3)("",!0)],64)):((0,i.uX)(),(0,i.CE)("span",o))])}var r=n(144),l=n(9983),d={props:["data","row"],setup(e){const t=(0,l.ZY)(),n=(0,r.Kh)({connection:e.data});(0,i.wB)((()=>e.data),(()=>{n.connection=e.data}));const a=()=>{t.value.current=e.row.MachineId,t.value.currentName=e.row.MachineName,t.value.showEdit=!0};return{state:n,handleShow:a}}},h=n(1241);const m=(0,h.A)(d,[["render",c],["__scopeId","data-v-41d1beca"]]);var v=m},6588:function(e,t,n){n.d(t,{A:function(){return p}});var i=n(6768),a=n(4232);const s=["title"],u=["src"],o={key:0,class:"system",src:"./docker.svg"},c={key:1,class:"self gateway"};function r(e,t,n,r,l,d){const h=(0,i.g2)("StarFilled"),m=(0,i.g2)("el-icon");return(0,i.uX)(),(0,i.CE)("div",null,[r.tuntap.list[r.item.MachineId]&&r.tuntap.list[r.item.MachineId].system?((0,i.uX)(),(0,i.CE)("span",{key:0,title:r.tuntap.list[r.item.MachineId].SystemInfo},[(0,i.Lk)("img",{class:"system",src:`./${r.tuntap.list[r.item.MachineId].system}.svg`},null,8,u),r.tuntap.list[r.item.MachineId].systemDocker?((0,i.uX)(),(0,i.CE)("img",o)):(0,i.Q3)("",!0)],8,s)):(0,i.Q3)("",!0),(0,i.Lk)("a",{href:"javascript:;",onClick:t[0]||(t[0]=(...e)=>r.handleEdit&&r.handleEdit(...e)),title:"此客户端的设备名",class:"a-line"},[(0,i.Lk)("strong",{class:(0,a.C4)(["gateway",{green:r.item.Connected}])},(0,a.v_)(r.item.MachineName||"null"),3)]),r.item.isSelf?((0,i.uX)(),(0,i.CE)("strong",c,[(0,i.eW)("("),(0,i.bF)(m,{size:"16"},{default:(0,i.k6)((()=>[(0,i.bF)(h)])),_:1}),(0,i.eW)(") ")])):(0,i.Q3)("",!0)])}var l=n(3830),d=n(8104),h=n(7477),m={props:["item","config"],emits:["edit","refresh"],components:{StarFilled:h.BQ2},setup(e,{emit:t}){const n=(0,d.W)(),a=(0,l.B)(),s=(0,i.EW)((()=>a.value.hasAccess("RenameSelf"))),u=(0,i.EW)((()=>a.value.hasAccess("RenameOther"))),o=(0,i.EW)((()=>a.value.config.Client.Id)),c=()=>{if(e.config){if(o.value===e.item.MachineId){if(!s.value)return}else if(!u.value)return;t("edit",e.item)}};return{item:(0,i.EW)((()=>e.item)),tuntap:n,handleEdit:c}}},v=n(1241);const f=(0,v.A)(m,[["render",r],["__scopeId","data-v-9f58a72e"]]);var p=f},7163:function(e,t,n){n.d(t,{A:function(){return _}});var i=n(6768),a=n(4232);const s={class:"flex"},u={class:"flex-1"},o=["title"],c=["title"],r={key:2,class:"app-nat",title:"虚拟网卡IP,系统NAT失败,已启用内置应用层SNAT"},l={key:0,class:"green gateway"},d={key:1},h={key:0},m={key:0,class:"flex disable",title:"已禁用"},v={key:1,class:"flex yellow",title:"与其它设备填写IP、或本机局域网IP有冲突"},f={key:2,class:"flex green",title:"正常使用"},p={key:0,class:"any green"},g={key:0,class:"delay green"},I={class:"delay yellow"};function y(e,t,n,y,C,L){const k=(0,i.g2)("ConnectionShow"),w=(0,i.g2)("Loading"),E=(0,i.g2)("el-icon"),S=(0,i.g2)("el-switch"),T=(0,i.g2)("Share");return(0,i.uX)(),(0,i.CE)("div",null,[(0,i.Lk)("div",s,[(0,i.Lk)("div",u,[(0,i.bF)(k,{data:y.connections.list[y.item.MachineId],row:y.item},null,8,["data","row"]),(0,i.Lk)("a",{href:"javascript:;",class:"a-line",onClick:t[0]||(t[0]=e=>y.handleTuntapIP(y.tuntap.list[y.item.MachineId])),title:"虚拟网卡IP"},[y.tuntap.list[y.item.MachineId].SetupError?((0,i.uX)(),(0,i.CE)("strong",{key:0,class:"red",title:y.tuntap.list[y.item.MachineId].SetupError},(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),9,o)):y.tuntap.list[y.item.MachineId].Upgrade&&y.tuntap.list[y.item.MachineId].NatError?((0,i.uX)(),(0,i.CE)("strong",{key:1,class:"yellow",title:y.tuntap.list[y.item.MachineId].NatError},(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),9,c)):y.tuntap.list[y.item.MachineId].AppNat?((0,i.uX)(),(0,i.CE)("strong",r,(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),1)):((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[y.item.Connected&&y.tuntap.list[y.item.MachineId].running?((0,i.uX)(),(0,i.CE)("strong",l,(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),1)):((0,i.uX)(),(0,i.CE)("strong",d,(0,a.v_)(y.tuntap.list[y.item.MachineId].IP),1))],64))])]),y.tuntap.list[y.item.MachineId].loading?((0,i.uX)(),(0,i.CE)("div",h,[(0,i.bF)(E,{size:"14",class:"loading"},{default:(0,i.k6)((()=>[(0,i.bF)(w)])),_:1})])):((0,i.uX)(),(0,i.Wv)(S,{key:1,"model-value":y.item.Connected&&y.tuntap.list[y.item.MachineId].running,loading:y.tuntap.list[y.item.MachineId].loading,disabled:"",onClick:t[1]||(t[1]=e=>y.handleTuntap(y.tuntap.list[y.item.MachineId])),size:"small","inline-prompt":"","active-text":"😀","inactive-text":"😣"},null,8,["model-value","loading"]))]),(0,i.Lk)("div",null,[(0,i.Lk)("div",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(y.tuntap.list[y.item.MachineId].Lans,((e,t)=>((0,i.uX)(),(0,i.CE)(i.FK,{key:t},[e.Disabled?((0,i.uX)(),(0,i.CE)("div",m,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1)):e.Exists?((0,i.uX)(),(0,i.CE)("div",v,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1)):((0,i.uX)(),(0,i.CE)("div",f,(0,a.v_)(e.IP)+" / "+(0,a.v_)(e.PrefixLength),1))],64)))),128))]),y.tuntap.list[y.item.MachineId].Any?((0,i.uX)(),(0,i.CE)("div",p,[(0,i.bF)(E,null,{default:(0,i.k6)((()=>[(0,i.bF)(T)])),_:1})])):(0,i.Q3)("",!0),y.showDelay?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[y.tuntap.list[y.item.MachineId].Delay>=0&&y.tuntap.list[y.item.MachineId].Delay<=100?((0,i.uX)(),(0,i.CE)("div",g,(0,a.v_)(y.tuntap.list[y.item.MachineId].Delay)+"ms",1)):(0,i.Q3)("",!0),(0,i.Lk)("template",null,[(0,i.Lk)("div",I,(0,a.v_)(y.tuntap.list[y.item.MachineId].Delay)+"ms",1)])],64)):(0,i.Q3)("",!0)])])}var C=n(5241),L=n(1219),k=n(8104),w=n(7477),E=n(3830),S=n(9983),T=n(2109),M={props:["item","config"],emits:["edit","refresh"],components:{Loading:w.Rhj,Share:w.SYj,ConnectionShow:T.A},setup(e,{emit:t}){const n=(0,k.W)(),a=(0,E.B)(),s=(0,i.EW)((()=>a.value.config.Client.Id)),u=(0,i.EW)((()=>a.value.hasAccess("TuntapChangeSelf"))),o=(0,i.EW)((()=>a.value.hasAccess("TuntapChangeOther"))),c=(0,i.EW)((()=>a.value.hasAccess("TuntapStatusSelf"))),r=(0,i.EW)((()=>a.value.hasAccess("TuntapStatusOther"))),l=(0,S.FG)(),d=(0,i.EW)((()=>2==(2&(a.value.config.Running.Tuntap||{Switch:0}).Switch))),h=t=>{if(!e.config)return;if(s.value===t.MachineId){if(!c.value)return}else if(!r.value)return;const n=e.item.Connected&&t.running?(0,C.PR)(t.MachineId):(0,C.en)(t.MachineId);t.loading=!0,n.then((()=>{L.nk.success("操作成功!")})).catch((e=>{console.log(e),L.nk.error("操作失败!")}))},m=n=>{if(e.config||s.value==n.MachineId){if(s.value===n.MachineId){if(!u.value)return}else if(!o.value)return;n.device=e.item,t("edit",n)}},v=()=>{t("refresh")};return{item:(0,i.EW)((()=>e.item)),tuntap:n,showDelay:d,connections:l,handleTuntap:h,handleTuntapIP:m,handleTuntapRefresh:v}}},b=n(1241);const G=(0,b.A)(M,[["render",y],["__scopeId","data-v-36b3b9ac"]]);var _=G}}]);
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/743.767cfe7e.js b/src/linker.tray.win/web/js/743.767cfe7e.js
new file mode 100644
index 00000000..f4987479
--- /dev/null
+++ b/src/linker.tray.win/web/js/743.767cfe7e.js
@@ -0,0 +1 @@
+"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[743],{427:function(e,n,a){a.r(n),a.d(n,{default:function(){return O}});var t=a(6768);const s={class:"net-wrap app-wrap"},l={class:"inner absolute flex flex-column flex-nowrap"},i={class:"head"},o={class:"body flex-1 relative"},c={class:"status"};function r(e,n,a,r,u,d){const g=(0,t.g2)("Head"),p=(0,t.g2)("List"),v=(0,t.g2)("Status");return(0,t.uX)(),(0,t.CE)("div",s,[(0,t.Lk)("div",l,[(0,t.Lk)("div",i,[(0,t.bF)(g)]),(0,t.Lk)("div",o,[(0,t.bF)(p)]),(0,t.Lk)("div",c,[(0,t.bF)(v,{config:!1})])])])}a(4114);const u=e=>((0,t.Qi)("data-v-1fd9ef80"),e=e(),(0,t.jt)(),e),d={class:"head-wrap"},g={class:"tools flex"},p=u((()=>(0,t.Lk)("span",{class:"label"},"服务器 ",-1))),v=u((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1))),h={style:{"margin-left":"1rem"}};function f(e,n,a,s,l,i){const o=(0,t.g2)("el-input"),c=(0,t.g2)("Refresh"),r=(0,t.g2)("el-icon"),u=(0,t.g2)("el-button"),f=(0,t.g2)("Background");return(0,t.uX)(),(0,t.CE)("div",d,[(0,t.Lk)("div",g,[p,(0,t.bF)(o,{modelValue:s.state.server,"onUpdate:modelValue":n[0]||(n[0]=e=>s.state.server=e),readonly:"",style:{width:"14rem"},size:"small"},null,8,["modelValue"]),v,(0,t.bF)(u,{size:"small",onClick:s.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)(" 刷新(F5)"),(0,t.bF)(r,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1})])),_:1},8,["onClick"]),(0,t.Lk)("div",h,[(0,t.bF)(f,{name:"net"})])])])}var k=a(3830),m=a(144),C=a(7477),b=a(5096),L={components:{Edit:C.ffu,Refresh:C.C42,Background:b.A},setup(){const e=(0,k.B)(),n=(0,m.Kh)({server:(0,t.EW)((()=>e.value.config.Client.Server.Host))}),a=()=>{window.location.reload()};return{state:n,handleRefresh:a}}},_=a(1241);const w=(0,_.A)(L,[["render",f],["__scopeId","data-v-1fd9ef80"]]);var F=w;const S=e=>((0,t.Qi)("data-v-68d1c30a"),e=e(),(0,t.jt)(),e),x={class:"net-list-wrap flex flex-column absolute"},T={class:"flex-1 scrollbar"},z={class:"flex"},E=S((()=>(0,t.Lk)("div",{class:"flex-1"},null,-1))),A={class:"tuntap"},I={class:"page t-c"},P={class:"page-wrap t-c"};function B(e,n,a,s,l,i){const o=(0,t.g2)("DeviceName"),c=(0,t.g2)("UpdaterBtn"),r=(0,t.g2)("TuntapShow"),u=(0,t.g2)("el-pagination");return(0,t.uX)(),(0,t.CE)("div",x,[(0,t.Lk)("div",T,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(s.devices.page.List,((e,n)=>((0,t.uX)(),(0,t.CE)("li",{key:n},[(0,t.Lk)("dl",null,[(0,t.Lk)("dt",z,[(0,t.Lk)("div",null,[(0,t.bF)(o,{item:e},null,8,["item"])]),E,(0,t.Lk)("div",null,[(0,t.bF)(c,{config:!1,item:e},null,8,["item"])])]),(0,t.Lk)("dd",A,[s.tuntap.list[e.MachineId]?((0,t.uX)(),(0,t.Wv)(r,{key:0,item:e},null,8,["item"])):(0,t.Q3)("",!0)])])])))),128))])]),(0,t.Lk)("div",I,[(0,t.Lk)("div",P,[(0,t.bF)(u,{size:"small",background:"",layout:"prev,pager, next","pager-count":5,total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])])])}var y=a(8104),R=a(7985),D=a(9383),U=a(7115),X=a(6588),V=a(7163),N=a(9983),Q={components:{StarFilled:C.BQ2,UpdaterBtn:U.A,DeviceName:X.A,TuntapShow:V.A},setup(e){(0,k.B)();const n=(0,m.Kh)({}),{devices:a,machineId:s,_getSignList:l,_getSignList1:i,handleDeviceEdit:o,handlePageChange:c,handlePageSizeChange:r,handleDel:u,clearDevicesTimeout:d}=(0,R.r)(),{tuntap:g,_getTuntapInfo:p,handleTuntapRefresh:v,clearTuntapTimeout:h,handleTuntapEdit:f,sortTuntapIP:C}=(0,y.O)(),{_getUpdater:b,_subscribeUpdater:L,clearUpdaterTimeout:_}=(0,D.d)(),{connections:w,forwardConnections:F,_getForwardConnections:S,tuntapConnections:x,_getTuntapConnections:T,socks5Connections:z,_getSocks5Connections:E,handleTunnelConnections:A,clearConnectionsTimeout:I}=(0,N.L2)();return(0,t.sV)((()=>{c(),v(),l(),i(),p(),b(),L()})),(0,t.hi)((()=>{d(),h(),_()})),{state:n,devices:a,machineId:s,handlePageChange:c,handlePageSizeChange:r,tuntap:g}}};const H=(0,_.A)(Q,[["render",B],["__scopeId","data-v-68d1c30a"]]);var K=H,W=a(6743),j=a(1387),q={components:{Head:F,List:K,Status:W.A},setup(){document.addEventListener("contextmenu",(function(e){e.preventDefault()}));const e=(0,k.B)(),n=(0,j.rd)();return(0,t.sV)((()=>{0==e.value.hasAccess("NetManager")&&n.push({name:"NoPermission"})})),{}}};const M=(0,_.A)(q,[["render",r],["__scopeId","data-v-6a3f3b43"]]);var O=M}}]);
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/968.855ee1b4.js b/src/linker.tray.win/web/js/968.855ee1b4.js
new file mode 100644
index 00000000..8cfd2538
--- /dev/null
+++ b/src/linker.tray.win/web/js/968.855ee1b4.js
@@ -0,0 +1 @@
+"use strict";(self["webpackChunklinker_web"]=self["webpackChunklinker_web"]||[]).push([[968],{9232:function(e,l,a){a.d(l,{$1:function(){return i},W4:function(){return o},X2:function(){return u},XU:function(){return d},_5:function(){return c},mI:function(){return h},pM:function(){return m},q:function(){return n},uD:function(){return s},uQ:function(){return r},xp:function(){return p}});var t=a(4);const n=e=>(0,t.zG)("relay/SetServers",e),o=()=>(0,t.zG)("relay/Subscribe"),r=e=>(0,t.zG)("relay/Connect",e),s=()=>(0,t.zG)("relay/AccessCdkey"),d=e=>(0,t.zG)("relay/PageCdkey",e),u=e=>(0,t.zG)("relay/AddCdkey",e),i=e=>(0,t.zG)("relay/DelCdkey",e),c=e=>(0,t.zG)("relay/MyCdkey",e),h=e=>(0,t.zG)("relay/TestCdkey",e),m=e=>(0,t.zG)("relay/ImportCdkey",e),p=e=>(0,t.zG)("relay/UpdateNode",e)},743:function(e,l,a){a.d(l,{Ap:function(){return n},Co:function(){return o},DY:function(){return u},JT:function(){return m},Qs:function(){return i},a9:function(){return s},eX:function(){return c},gz:function(){return d},nP:function(){return h},pY:function(){return r}});var t=a(4);const n=()=>(0,t.zG)("sforward/GetSecretKey"),o=e=>(0,t.zG)("sforward/SetSecretKey",e),r=e=>(0,t.zG)("sforward/get",e),s=()=>(0,t.zG)("sforward/refresh"),d=(e="0")=>(0,t.zG)("sforward/getcount",e),u=e=>(0,t.zG)("sforward/remove",e),i=e=>(0,t.zG)("sforward/add",e),c=e=>(0,t.zG)("sforward/TestLocal",e),h=e=>(0,t.zG)("sforward/start",e),m=e=>(0,t.zG)("sforward/stop",e)},6874:function(e,l,a){a.r(l),a.d(l,{default:function(){return Ln}});var t=a(6768);const n={class:"home-list-wrap absolute"},o={class:"page t-c"},r={class:"page-wrap"};function s(e,l,a,s,d,u){const i=(0,t.g2)("Sort"),c=(0,t.g2)("Device"),h=(0,t.g2)("Tunnel"),m=(0,t.g2)("Tuntap"),p=(0,t.g2)("Socks5"),g=(0,t.g2)("Forward"),w=(0,t.g2)("Oper"),k=(0,t.g2)("el-table"),v=(0,t.g2)("el-pagination"),f=(0,t.g2)("DeviceEdit"),b=(0,t.g2)("AccessEdit"),C=(0,t.g2)("TunnelEdit"),F=(0,t.g2)("ConnectionsEdit"),y=(0,t.g2)("TuntapEdit"),V=(0,t.g2)("Socks5Edit"),_=(0,t.g2)("TuntapLease"),E=(0,t.g2)("ForwardEdit"),L=(0,t.g2)("SForwardEdit"),P=(0,t.g2)("UpdaterConfirm"),I=(0,t.g2)("Stopwatch");return(0,t.uX)(),(0,t.CE)("div",n,[(0,t.bF)(i,{onSort:s.handleSortChange},null,8,["onSort"]),(0,t.bF)(k,{data:s.devices.page.List,stripe:"",border:"",style:{width:"100%"},height:`${s.state.height}px`,size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{onEdit:s.handleDeviceEdit,onRefresh:s.handlePageRefresh},null,8,["onEdit","onRefresh"]),(0,t.bF)(h,{onEdit:s.handleTunnelEdit,onRefresh:s.handleTunnelRefresh,onConnections:s.handleTunnelConnections},null,8,["onEdit","onRefresh","onConnections"]),s.tuntap.show?((0,t.uX)(),(0,t.Wv)(m,{key:0,onEdit:s.handleTuntapEdit,onRefresh:s.handleTuntapRefresh},null,8,["onEdit","onRefresh"])):(0,t.Q3)("",!0),s.socks5.show?((0,t.uX)(),(0,t.Wv)(p,{key:1,onEdit:s.handleSocks5Edit,onRefresh:s.handleSocks5Refresh},null,8,["onEdit","onRefresh"])):(0,t.Q3)("",!0),s.forward.show?((0,t.uX)(),(0,t.Wv)(g,{key:2,onEdit:s.handleForwardEdit,onSedit:s.handleSForwardEdit},null,8,["onEdit","onSedit"])):(0,t.Q3)("",!0),(0,t.bF)(w,{onRefresh:s.handlePageRefresh,onAccess:s.handleAccessEdit},null,8,["onRefresh","onAccess"])])),_:1},8,["data","height"]),(0,t.Lk)("div",o,[(0,t.Lk)("div",r,[(0,t.bF)(v,{small:"",background:"",layout:"total,sizes,prev,pager, next",total:s.devices.page.Count,"page-size":s.devices.page.Request.Size,"current-page":s.devices.page.Request.Page,onCurrentChange:s.handlePageChange,onSizeChange:s.handlePageSizeChange,"page-sizes":[10,20,50,100,255]},null,8,["total","page-size","current-page","onCurrentChange","onSizeChange"])])]),s.devices.showDeviceEdit?((0,t.uX)(),(0,t.Wv)(f,{key:0,modelValue:s.devices.showDeviceEdit,"onUpdate:modelValue":l[0]||(l[0]=e=>s.devices.showDeviceEdit=e),onChange:s.handlePageChange,data:s.devices.deviceInfo},null,8,["modelValue","onChange","data"])):(0,t.Q3)("",!0),s.devices.showAccessEdit?((0,t.uX)(),(0,t.Wv)(b,{key:1,modelValue:s.devices.showAccessEdit,"onUpdate:modelValue":l[1]||(l[1]=e=>s.devices.showAccessEdit=e),onChange:s.handlePageChange,data:s.devices.deviceInfo},null,8,["modelValue","onChange","data"])):(0,t.Q3)("",!0),s.tunnel.showEdit?((0,t.uX)(),(0,t.Wv)(C,{key:2,modelValue:s.tunnel.showEdit,"onUpdate:modelValue":l[2]||(l[2]=e=>s.tunnel.showEdit=e),onChange:s.handleTunnelRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.connections.showEdit?((0,t.uX)(),(0,t.Wv)(F,{key:3,modelValue:s.connections.showEdit,"onUpdate:modelValue":l[3]||(l[3]=e=>s.connections.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.tuntap.showEdit?((0,t.uX)(),(0,t.Wv)(y,{key:4,modelValue:s.tuntap.showEdit,"onUpdate:modelValue":l[4]||(l[4]=e=>s.tuntap.showEdit=e),onChange:s.handleTuntapRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.socks5.showEdit?((0,t.uX)(),(0,t.Wv)(V,{key:5,modelValue:s.socks5.showEdit,"onUpdate:modelValue":l[5]||(l[5]=e=>s.socks5.showEdit=e),onChange:s.handleSocks5Refresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.tuntap.showLease?((0,t.uX)(),(0,t.Wv)(_,{key:6,modelValue:s.tuntap.showLease,"onUpdate:modelValue":l[6]||(l[6]=e=>s.tuntap.showLease=e),onChange:s.handleTuntapRefresh},null,8,["modelValue","onChange"])):(0,t.Q3)("",!0),s.forward.showEdit?((0,t.uX)(),(0,t.Wv)(E,{key:7,modelValue:s.forward.showEdit,"onUpdate:modelValue":l[7]||(l[7]=e=>s.forward.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.sforward.showEdit?((0,t.uX)(),(0,t.Wv)(L,{key:8,modelValue:s.sforward.showEdit,"onUpdate:modelValue":l[8]||(l[8]=e=>s.sforward.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.updater.show?((0,t.uX)(),(0,t.Wv)(P,{key:9,modelValue:s.updater.show,"onUpdate:modelValue":l[9]||(l[9]=e=>s.updater.show=e)},null,8,["modelValue"])):(0,t.Q3)("",!0),s.flow.show?((0,t.uX)(),(0,t.Wv)(I,{key:10,modelValue:s.flow.show,"onUpdate:modelValue":l[10]||(l[10]=e=>s.flow.show=e)},null,8,["modelValue"])):(0,t.Q3)("",!0)])}a(4114);var d=a(3830),u=a(144),i=a(1219);const c={class:"el-dropdown-link"};function h(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("ArrowDownBold"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-checkbox"),h=(0,t.g2)("el-dropdown-item"),m=(0,t.g2)("el-dropdown-menu"),p=(0,t.g2)("el-dropdown"),g=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.Wv)(g,{border:"",style:{width:"100%"},height:"32px",size:"small",onSortChange:n.handleSortChange,class:"table-sort"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"MachineId",label:"设备名",width:"110",sortable:"custom"}),(0,t.bF)(s,{prop:"Version",label:"版本",width:"110",sortable:"custom"}),(0,t.bF)(s,{prop:"tunnel",label:"网络",width:"76",sortable:"custom"}),n.tuntap.show?((0,t.uX)(),(0,t.Wv)(s,{key:0,prop:"tuntap",label:"网卡IP",width:"160",sortable:"custom"})):(0,t.Q3)("",!0),n.socks5.show?((0,t.uX)(),(0,t.Wv)(s,{key:1,prop:"socks5",label:"代理转发",width:"160",sortable:"custom"})):(0,t.Q3)("",!0),(0,t.bF)(s,{label:"columns",fixed:"right"},{header:(0,t.k6)((()=>[(0,t.bF)(p,{class:"show-columns"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(m,null,{default:(0,t.k6)((()=>[(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.tuntap.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.tuntap.show=e),onChange:n.handleTuntapShow,size:"small",style:{"margin-right":"1rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("网卡")])),_:1},8,["modelValue","onChange"])])),_:1}),(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.socks5.show,"onUpdate:modelValue":l[1]||(l[1]=e=>n.socks5.show=e),onChange:n.handleSocks5Show,size:"small",style:{"margin-right":"1rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("代理")])),_:1},8,["modelValue","onChange"])])),_:1}),(0,t.bF)(h,null,{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.forward.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.forward.show=e),onChange:n.handleForwardShow,size:"small",style:{"margin-right":"0rem"}},{default:(0,t.k6)((()=>[(0,t.eW)("转发")])),_:1},8,["modelValue","onChange"])])),_:1})])),_:1})])),default:(0,t.k6)((()=>[(0,t.Lk)("span",c,[(0,t.eW)("显示项"),(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])])),_:1})])),_:1})])),_:1},8,["onSortChange"])}var m=a(7716);const p=Symbol(),g=()=>{(0,d.B)();const e=(0,u.KR)({show:!0,timer:0,showEdit:!1,machineId:null,list:{},hashcode:0});(0,t.Gt)(p,e);const l=()=>{(0,m.dS)()},a=()=>{clearTimeout(e.value.timer),(0,m.V1)(e.value.hashcode.toString()).then((l=>{e.value.hashcode=l.HashCode,l.List&&(e.value.list=l.List),e.value.timer=setTimeout(a,1020)})).catch((()=>{e.value.timer=setTimeout(a,1020)}))},n=l=>{e.value.machineId=l[0],e.value.machineName=l[1],e.value.showEdit=!0},o=()=>{clearTimeout(e.value.timer)};return{forward:e,_getForwardCountInfo:a,handleForwardEdit:n,clearForwardTimeout:o,handleForwardRefresh:l}},w=()=>(0,t.WQ)(p);var k=a(2173);const v=Symbol(),f=()=>{const e=(0,u.KR)({show:!0,timer:0,showEdit:!1,current:null,list:{},hashcode:0});(0,t.Gt)(v,e);const l=()=>{clearTimeout(e.value.timer),(0,k.$y)(e.value.hashcode.toString()).then((a=>{if(e.value.hashcode=a.HashCode,a.List){for(let e in a.List)Object.assign(a.List[e],{running:2==a.List[e].Status,loading:1==a.List[e].Status});e.value.list=a.List}e.value.timer=setTimeout(l,1100)})).catch((a=>{e.value.timer=setTimeout(l,1100)}))},a=l=>{e.value.current=l,e.value.showEdit=!0},n=()=>{(0,k.QP)()},o=()=>{clearTimeout(e.value.timer),e.value.timer=0},r=l=>Object.values(e.value.list).filter((e=>e.Port.toString().indexOf(l)>=0||e.Lans.filter((e=>e.IP.indexOf(l)>=0)).length>0)).map((e=>e.MachineId)),s=l=>{const a=Object.values(e.value.list).sort(((e,l)=>e.Port-l.Port));return a.map((e=>e.MachineId))};return{socks5:e,_getSocks5Info:l,handleSocks5Edit:a,handleSocks5Refresh:n,clearSocks5Timeout:o,getSocks5Machines:r,sortSocks5:s}},b=()=>(0,t.WQ)(v);var C=a(8104),F=a(7477),y={emits:["sort"],components:{ArrowDownBold:F.$bU},setup(e,{emit:l}){const a=(0,C.W)();a.value.show="false"!=localStorage.getItem("tuntap.show");const t=b();t.value.show="false"!=localStorage.getItem("socks5.show");const n=w();n.value.show="false"!=localStorage.getItem("forward.show");const o=e=>{l("sort",e)},r=()=>{localStorage.setItem("tuntap.show",a.value.show)},s=()=>{localStorage.setItem("socks5.show",t.value.show)},d=()=>{localStorage.setItem("forward.show",n.value.show)};return{tuntap:a,socks5:t,forward:n,handleSortChange:o,handleTuntapShow:r,handleSocks5Show:s,handleForwardShow:d}}},V=a(1241);const _=(0,V.A)(y,[["render",h],["__scopeId","data-v-107f04ae"]]);var E=_;const L=e=>((0,t.Qi)("data-v-2f0ed5e0"),e=e(),(0,t.jt)(),e),P={class:"dropdown"},I=L((()=>(0,t.Lk)("span",null,"操作",-1)));function T(e,l,a,n,o,r){const s=(0,t.g2)("ArrowDown"),d=(0,t.g2)("el-icon"),u=(0,t.g2)("SwitchButton"),i=(0,t.g2)("el-dropdown-item"),c=(0,t.g2)("Delete"),h=(0,t.g2)("Flag"),m=(0,t.g2)("HelpFilled"),p=(0,t.g2)("Platform"),g=(0,t.g2)("el-dropdown-menu"),w=(0,t.g2)("el-dropdown"),k=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(k,{label:"操作",fixed:"right"},{default:(0,t.k6)((a=>[(0,t.bF)(w,{size:"small"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(g,null,{default:(0,t.k6)((()=>[a.row.showReboot&&n.hasReboot?((0,t.uX)(),(0,t.Wv)(i,{key:0,onClick:e=>n.handleExit(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(u)])),_:1}),(0,t.eW)(" 重启")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),a.row.showDel&&n.hasRemove?((0,t.uX)(),(0,t.Wv)(i,{key:1,onClick:e=>n.handleDel(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(c)])),_:1}),(0,t.eW)(" 删除")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),n.handleShowAccess(a.row,n.accessList[a.row.MachineId]||0)?((0,t.uX)(),(0,t.Wv)(i,{key:2,onClick:e=>n.handleAccess(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(h)])),_:1}),(0,t.eW)(" 权限")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),a.row.isSelf&&n.hasApiPassword?((0,t.uX)(),(0,t.Wv)(i,{key:3,onClick:e=>n.handleApiPassword(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.eW)(" 管理接口")])),_:2},1032,["onClick"])):n.hasApiPasswordOther?((0,t.uX)(),(0,t.Wv)(i,{key:4,onClick:e=>n.handleApiPassword(a.row)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.eW)(" 管理接口")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),(0,t.bF)(i,{onClick:e=>n.handleStopwatch(a.row.MachineId,a.row.MachineName)},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1}),(0,t.eW)("它的信标")])),_:2},1032,["onClick"]),(0,t.bF)(i,{onClick:l[0]||(l[0]=l=>n.handleStopwatch("",e.$t("status.messenger")))},{default:(0,t.k6)((()=>[(0,t.bF)(d,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1}),(0,t.eW)("服务器信标")])),_:1})])),_:2},1024)])),default:(0,t.k6)((()=>[(0,t.Lk)("div",P,[I,(0,t.bF)(d,{class:"el-icon--right"},{default:(0,t.k6)((()=>[(0,t.bF)(s)])),_:1})])])),_:2},1024)])),_:1})}var S=a(9299),M=a(920),W=a(2933),A=a(5962),R=a(3363);const X=Symbol(),N=()=>{const e=(0,u.KR)({device:{},show:!1});return(0,t.Gt)(X,e),{flow:e}},U=()=>(0,t.WQ)(X);var B={emits:["refresh","access"],components:{Delete:F.epd,SwitchButton:F.L$q,ArrowDown:F.yd$,Flag:F.lNU,HelpFilled:F.adD,Platform:F.ODD},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,A.q)(),o=(0,t.EW)((()=>a.value.config.Client.Access)),r=(0,t.EW)((()=>a.value.hasAccess("Access"))),s=(0,t.EW)((()=>n.value.list)),u=(0,t.EW)((()=>a.value.hasAccess("Reboot"))),c=(0,t.EW)((()=>a.value.hasAccess("Remove"))),h=(0,t.EW)((()=>a.value.hasAccess("SetApiPassword"))),m=(0,t.EW)((()=>a.value.hasAccess("SetApiPasswordOther"))),p=U(),g=(e,a)=>{W.s.confirm(`确认删除[${a}]?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{(0,S.Se)(e).then((()=>{l("refresh")}))})).catch((()=>{}))},w=(e,a)=>{W.s.confirm(`确认关闭[${a}]?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{(0,M.NS)(e).then((()=>{l("refresh")}))})).catch((()=>{}))},k=(e,l)=>e.showAccess&&r.value&&l>=0&&0==+(~BigInt(o.value)&BigInt(l)).toString(),v=e=>{l("access",e)},f=e=>{W.s.prompt("输入新的管理接口密码",`重置【${e.MachineName}】的接口密码`,{confirmButtonText:"确定",cancelButtonText:"取消",inputPattern:/^[0-9a-zA-Z]{1,32}$/,inputErrorMessage:"数字字母1-32位"}).then((({value:l})=>{(0,R.gv)({machineId:e.MachineId,password:l}).then((()=>{i.nk.success("操作成功,重启后生效~")})).catch((()=>{i.nk.error("操作失败~")}))})).catch((()=>{}))},b=(e,l)=>{p.value.device.id=e,p.value.device.name=l,p.value.show=!0};return{accessList:s,handleDel:g,handleExit:w,hasReboot:u,hasRemove:c,hasAccess:r,handleShowAccess:k,handleAccess:v,hasApiPassword:h,hasApiPasswordOther:m,handleApiPassword:f,handleStopwatch:b}}};const x=(0,V.A)(B,[["render",T],["__scopeId","data-v-2f0ed5e0"]]);var $=x,z=a(4232);const D=e=>((0,t.Qi)("data-v-5db71b03"),e=e(),(0,t.jt)(),e),K={class:"flex"},Q=D((()=>(0,t.Lk)("span",{class:"flex-1"},"设备",-1))),O={class:"flex"},G=["onClick"],j=["onClick"],q=D((()=>(0,t.Lk)("span",null,"😴㊙.㊙.㊙.㊙",-1))),H=[q],J=D((()=>(0,t.Lk)("span",{class:"flex-1"},null,-1)));function Z(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Search"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-button"),c=(0,t.g2)("DeviceName"),h=(0,t.g2)("UpdaterBtn"),m=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(m,{prop:"MachineId",label:"设备",width:"220"},{header:(0,t.k6)((()=>[(0,t.Lk)("div",K,[Q,(0,t.Lk)("span",null,[(0,t.bF)(s,{size:"small",modelValue:n.name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.name=e),clearable:"",onInput:n.handleRefresh,placeholder:"设备/虚拟网卡/端口转发"},null,8,["modelValue","onInput"])]),(0,t.Lk)("span",null,[(0,t.bF)(i,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1},8,["onClick"])])])])),default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,[(0,t.bF)(c,{onEdit:n.handleEdit,config:!0,item:e.row},null,8,["onEdit","item"])]),(0,t.Lk)("p",O,[e.row.showip?((0,t.uX)(),(0,t.CE)("span",{key:0,title:"此设备的外网IP",class:"ipaddress",onClick:l=>n.handleExternal(e.row)},[(0,t.Lk)("span",null,"😀"+(0,z.v_)(e.row.IP),1)],8,G)):((0,t.uX)(),(0,t.CE)("span",{key:1,title:"此设备的外网IP",class:"ipaddress",onClick:l=>n.handleExternal(e.row)},H,8,j)),J,0==e.row.showip?((0,t.uX)(),(0,t.Wv)(h,{key:2,config:!0,item:e.row},null,8,["item"])):(0,t.Q3)("",!0)])])])),_:1})}var Y=a(7115),ee=a(6588),le={emits:["edit","refresh"],components:{Search:F.vji,UpdaterBtn:Y.A,DeviceName:ee.A},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.hasAccess("ExternalShow"))),o=(0,u.KR)(sessionStorage.getItem("search-name")||""),r=e=>{n.value&&(e.showip=!e.showip)},s=e=>{l("edit",e)},i=()=>{sessionStorage.setItem("search-name",o.value),l("refresh",o.value)};return{handleEdit:s,handleRefresh:i,name:o,handleExternal:r}}};const ae=(0,V.A)(le,[["render",Z],["__scopeId","data-v-5db71b03"]]);var te=ae;const ne=(0,t.Lk)("div",null,"修改后最好能重启一次客户端",-1),oe={class:"t-c w-100"};function re(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-button"),i=(0,t.g2)("el-form"),c=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(c,{modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.ruleForm.MachineName}]设备`,width:"360"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(i,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[ne])),_:1}),(0,t.bF)(s,{label:"设备名",prop:"MachineName"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{maxlength:"32","show-word-limit":"",modelValue:n.state.ruleForm.MachineName,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.MachineName=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",oe,[(0,t.bF)(u,{onClick:l[1]||(l[1]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(u,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var se={props:["data","modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=(0,u.KR)(null),n=(0,u.Kh)({show:!0,ruleForm:{MachineName1:e.data.MachineName,MachineName:e.data.MachineName},rules:{}});(0,t.wB)((()=>n.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const o=()=>{e.data.MachineName!=n.ruleForm.MachineName&&(0,S.gC)({Id:e.data.MachineId,newName:n.ruleForm.MachineName}).then((()=>{n.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:n,ruleFormRef:a,handleSave:o}}};const de=(0,V.A)(se,[["render",re]]);var ue=de,ie=a(7985);function ce(e,l,a,n,o,r){const s=(0,t.g2)("Access"),d=(0,t.g2)("el-button"),u=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(u,{modelValue:n.state.show,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.show=e),"close-on-click-modal":!1,center:"","append-to":".app-wrap",title:`设置[${n.machineName}]的权限`,width:"580",top:"1vh"},{footer:(0,t.k6)((()=>[(0,t.bF)(d,{plain:"",onClick:l[0]||(l[0]=e=>n.state.show=!1),loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1},8,["loading"]),(0,t.bF)(d,{type:"success",plain:"",onClick:n.handleSave,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("确定保存")])),_:1},8,["onClick","loading"])])),default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(s,{machineid:n.machineid,ref:"accessDom"},null,8,["machineid"])])])),_:1},8,["modelValue","title"])}var he=a(6158),me={props:["data","modelValue"],emits:["change","update:modelValue"],components:{Access:he.A},setup(e,{emit:l}){const a=(0,u.Kh)({show:!0,loading:!1});(0,t.wB)((()=>a.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const n=(0,u.KR)(null),o=()=>{a.loading=!0,(0,R.ZK)({ToMachineId:e.data.MachineId,Access:n.value.getValue()}).then((()=>{a.loading=!1,a.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),a.loading=!1,i.nk.error("操作失败!")}))};return{machineName:e.data.MachineName,machineid:e.data.MachineId,state:a,accessDom:n,handleSave:o}}};const pe=(0,V.A)(me,[["render",ce]]);var ge=pe;const we={key:0};function ke(e,l,a,n,o,r){const s=(0,t.g2)("TuntapShow"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"tuntap",label:"虚拟网卡",width:"160"},{header:(0,t.k6)((()=>[(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=(...e)=>n.handleShowLease&&n.handleShowLease(...e))},"虚拟网卡")])),default:(0,t.k6)((e=>[n.tuntap.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("div",we,[(0,t.bF)(s,{config:!0,item:e.row,onEdit:n.handleTuntapIP,onRefresh:n.handleTuntapRefresh},null,8,["item","onEdit","onRefresh"])])):(0,t.Q3)("",!0)])),_:1})}var ve=a(7163),fe={emits:["edit","refresh"],components:{TuntapShow:ve.A},setup(e,{emit:l}){const a=(0,C.W)(),t=e=>{l("edit",e)},n=()=>{l("refresh")},o=()=>{a.value.showLease=!0};return{tuntap:a,handleTuntapIP:t,handleTuntapRefresh:n,handleShowLease:o}}};const be=(0,V.A)(fe,[["render",ke]]);var Ce=be;const Fe=e=>((0,t.Qi)("data-v-54c17b5d"),e=e(),(0,t.jt)(),e),ye=Fe((()=>(0,t.Lk)("span",null,"留空则使用【本组网络】的设置",-1))),Ve=Fe((()=>(0,t.Lk)("span",null,"/",-1))),_e={key:0,class:"upgrade-wrap"},Ee={class:"w-100 t-c"};function Le(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("el-form-item"),u=(0,t.g2)("el-checkbox"),i=(0,t.g2)("TuntapLan"),c=(0,t.g2)("TuntapForward"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[11]||(l[11]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]组网`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"8rem"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{label:"网卡名",prop:"Name"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{modelValue:n.state.ruleForm.Name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Name=e),style:{width:"14rem"}},null,8,["modelValue"]),(0,t.eW)(),ye])),_:1}),(0,t.bF)(d,{label:"网卡IP",prop:"IP",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{modelValue:n.state.ruleForm.IP,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.IP=e),style:{width:"14rem"}},null,8,["modelValue"]),Ve,(0,t.bF)(s,{onChange:n.handlePrefixLengthChange,modelValue:n.state.ruleForm.PrefixLength,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PrefixLength=e),style:{width:"4rem"}},null,8,["onChange","modelValue"])])),_:1}),(0,t.bF)(d,{label:"",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.ShowDelay,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleForm.ShowDelay=e),label:"显示延迟",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.AutoConnect,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.ruleForm.AutoConnect=e),label:"自动连接",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.Multicast,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.ruleForm.Multicast=e),label:"禁用广播",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.Nat,"onUpdate:modelValue":l[6]||(l[6]=e=>n.state.ruleForm.Nat=e),label:"禁用NAT",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{class:"mgr-1",modelValue:n.state.ruleForm.TcpMerge,"onUpdate:modelValue":l[7]||(l[7]=e=>n.state.ruleForm.TcpMerge=e),label:"TCP包合并",size:"large"},null,8,["modelValue"]),(0,t.bF)(u,{modelValue:n.state.ruleForm.InterfaceOrder,"onUpdate:modelValue":l[8]||(l[8]=e=>n.state.ruleForm.InterfaceOrder=e),label:"调整网卡顺序",size:"large"},null,8,["modelValue"])])),_:1}),(0,t.bF)(d,{prop:"upgrade",class:"mgb-0"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{modelValue:n.state.ruleForm.Upgrade,"onUpdate:modelValue":l[9]||(l[9]=e=>n.state.ruleForm.Upgrade=e),label:"我很懂,我要使用高级功能(点对网和网对网)",size:"large"},null,8,["modelValue"])])),_:1}),n.state.ruleForm.Upgrade?((0,t.uX)(),(0,t.CE)("div",_e,[(0,t.bF)(d,{label:"局域网IP",prop:"LanIP",class:"m-b-0",style:{"border-bottom":"1px solid #ddd"}},{default:(0,t.k6)((()=>[(0,t.bF)(i,{ref:"lanDom"},null,512)])),_:1}),(0,t.bF)(d,{label:"端口转发",prop:"forwards"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{ref:"forwardDom"},null,512)])),_:1})])):(0,t.Q3)("",!0),(0,t.bF)(d,{label:"",prop:"Btns","label-width":"0"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ee,[(0,t.bF)(h,{onClick:l[10]||(l[10]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var Pe=a(5241);const Ie=e=>((0,t.Qi)("data-v-1541c712"),e=e(),(0,t.jt)(),e),Te={class:"w-100"},Se=Ie((()=>(0,t.Lk)("span",{class:"yellow"},"此设备无法使用NAT转发,或只想使用端口转发",-1))),Me={key:0,class:"green"},We={class:"wrap"},Ae=["title"],Re={key:1},Xe=["onClick"],Ne=["title"],Ue={key:1},Be=["onClick"],xe=["title"],$e={key:1},ze=["onClick"],De={key:1,class:"remark"};function Ke(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-table-column"),c=(0,t.g2)("el-button"),h=(0,t.g2)("el-popconfirm"),m=(0,t.g2)("Plus"),p=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.CE)("div",Te,[(0,t.Lk)("div",null,[Se,n.state.testing?((0,t.uX)(),(0,t.CE)("span",Me,"、testing")):(0,t.Q3)("",!0)]),(0,t.Lk)("div",We,[(0,t.bF)(p,{stripe:"",data:n.state.forwards,border:"",size:"small",width:"100%",height:"200px",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(i,{prop:"ListenPort",label:"源端口",width:"60"},{default:(0,t.k6)((e=>[e.row.ListenPortEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ListenPort,"onUpdate:modelValue":l=>e.row.ListenPort=l,onBlur:l=>n.handleEditBlur(e.row,"ListenPort")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ListenPort),9,Ae)):((0,t.uX)(),(0,t.CE)("span",Re,[(0,t.eW)((0,z.v_)(e.row.ListenPort)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ListenPort=0},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,Xe)]))],64))])),_:1}),(0,t.bF)(i,{prop:"ConnectAddr",label:"目标IP",width:"120"},{default:(0,t.k6)((e=>[e.row.ConnectAddrEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ConnectAddr,"onUpdate:modelValue":l=>e.row.ConnectAddr=l,onBlur:l=>n.handleEditBlur(e.row,"ConnectAddr")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ConnectAddr),9,Ne)):((0,t.uX)(),(0,t.CE)("span",Ue,[(0,t.eW)((0,z.v_)(e.row.ConnectAddr)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ConnectAddr="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,Be)]))],64))])),_:1}),(0,t.bF)(i,{prop:"ConnectPort",label:"目标端口",width:"80"},{default:(0,t.k6)((e=>[e.row.ConnectPortEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.ConnectPort,"onUpdate:modelValue":l=>e.row.ConnectPort=l,onBlur:l=>n.handleEditBlur(e.row,"ConnectPort")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.ConnectPort),9,xe)):((0,t.uX)(),(0,t.CE)("span",$e,[(0,t.eW)((0,z.v_)(e.row.ConnectPort)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.ConnectPort=0},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,ze)]))],64))])),_:1}),(0,t.bF)(i,{prop:"Remark",label:"备注"},{default:(0,t.k6)((e=>[e.row.RemarkEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.Remark,"onUpdate:modelValue":l=>e.row.Remark=l,onBlur:l=>n.handleEditBlur(e.row,"Remark")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)("div",De,(0,z.v_)(e.row.Remark),1))])),_:1}),(0,t.bF)(i,{prop:"Oper",label:"操作",width:"110"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.$index)},{reference:(0,t.k6)((()=>[(0,t.bF)(c,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"]),(0,t.bF)(c,{type:"primary",size:"small",onClick:l=>n.handleAdd(e.$index)},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1})])),_:2},1032,["onClick"])])])),_:1})])),_:1},8,["data","onCellDblclick"])])])}var Qe={props:["modelValue"],emits:["update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42},setup(e){const l=(0,C.W)(),a=(0,u.Kh)({machineName:l.value.current.device.MachineName,forwards:0==l.value.current.Forwards.length?[{ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""}]:l.value.current.Forwards.slice(0),timer:0,testing:!1}),n=(e,l)=>{o(e,l.property)},o=(e,l)=>{a.forwards.forEach((e=>{e["ListenAddrEditing"]=!1,e["ListenPortEditing"]=!1,e["ConnectAddrEditing"]=!1,e["ConnectPortEditing"]=!1,e["RemarkEditing"]=!1})),e[`${l}Editing`]=!0,e["__editing"]=!0},r=(e,l)=>{e[`${l}Editing`]=!1,e["__editing"]=!1},s=e=>{1==a.forwards.length?a.forwards[0]={ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""}:a.forwards.splice(e,1)},d=e=>{a.forwards.filter((e=>"0.0.0.0"==e.ConnectAddr||0==e.ConnectPort||0==e.ListenPort)).length>0||a.forwards.splice(e+1,0,{ListenAddr:"0.0.0.0",ListenPort:0,ConnectAddr:"0.0.0.0",ConnectPort:0,Remark:""})},i=()=>{clearTimeout(a.timer),a.testing=!0,(0,Pe._)({MachineId:l.value.current.MachineId,List:a.forwards.map((e=>({ListenAddr:e.ListenAddr,ListenPort:+e.ListenPort,ConnectAddr:e.ConnectAddr,ConnectPort:+e.ConnectPort})))}).then((e=>{var l=e.List;for(let t=0;t${e.ConnectAddr}:${e.ConnectPort}`,o=a.forwards.filter((e=>`${e.ListenPort}->${e.ConnectAddr}:${e.ConnectPort}`==n));for(let l=0;l{a.testing=!1,a.timer=setTimeout(i,3e3)}))};(0,t.sV)((()=>{i()})),(0,t.hi)((()=>{clearTimeout(a.timer)}));const c=()=>a.forwards.map((e=>(e.ListenPort=+e.ListenPort,e.ConnectPort=+e.ConnectPort,e)));return{state:a,handleCellClick:n,handleEditBlur:r,handleDel:s,handleAdd:d,getData:c}}};const Oe=(0,V.A)(Qe,[["render",Ke],["__scopeId","data-v-1541c712"]]);var Ge=Oe;const je=e=>((0,t.Qi)("data-v-1cfaa7f4"),e=e(),(0,t.jt)(),e),qe={class:"w-100"},He=je((()=>(0,t.Lk)("div",null,[(0,t.Lk)("span",{class:"yellow"},"填写局域网IP,使用NAT转发")],-1))),Je={class:"wrap"},Ze=["title"],Ye={key:1},el=["onClick"],ll=["title"],al={key:1},tl=["title"],nl={key:1},ol=["onClick"],rl=["title"],sl={key:1};function dl(e,l,a,n,o,r){const s=(0,t.g2)("el-input"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-table-column"),c=(0,t.g2)("el-checkbox"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-popconfirm"),p=(0,t.g2)("Plus"),g=(0,t.g2)("el-table");return(0,t.uX)(),(0,t.CE)("div",qe,[He,(0,t.Lk)("div",Je,[(0,t.bF)(g,{stripe:"",data:n.state.lans,border:"",size:"small",width:"100%",height:"200px",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(i,{prop:"IP",label:"路由IP",width:"120"},{default:(0,t.k6)((e=>[e.row.IPEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.IP,"onUpdate:modelValue":l=>e.row.IP=l,onBlur:l=>n.handleEditBlur(e.row,"IP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.IP),9,Ze)):((0,t.uX)(),(0,t.CE)("span",Ye,[(0,t.eW)((0,z.v_)(e.row.IP)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.IP="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,el)]))],64))])),_:1}),(0,t.bF)(i,{prop:"PrefixLength",label:"路由掩码",width:"80"},{default:(0,t.k6)((e=>[e.row.PrefixLengthEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.PrefixLength,"onUpdate:modelValue":l=>e.row.PrefixLength=l,onBlur:l=>n.handleEditBlur(e.row,"PrefixLength")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.PrefixLength),9,ll)):((0,t.uX)(),(0,t.CE)("span",al,(0,z.v_)(e.row.PrefixLength),1))],64))])),_:1}),(0,t.bF)(i,{prop:"MapIP",label:"目标IP",width:"120"},{default:(0,t.k6)((e=>[e.row.MapIPEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.MapIP,"onUpdate:modelValue":l=>e.row.MapIP=l,onBlur:l=>n.handleEditBlur(e.row,"MapIP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.MapIP),9,tl)):((0,t.uX)(),(0,t.CE)("span",nl,[(0,t.eW)((0,z.v_)(e.row.MapIP)+" ",1),(0,t.Lk)("a",{href:"javascript:;",onClick:l=>e.row.MapIP="0.0.0.0"},[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})],8,ol)]))],64))])),_:1}),(0,t.bF)(i,{prop:"MapPrefixLength",label:"目标掩码",width:"80"},{default:(0,t.k6)((e=>[e.row.MapPrefixLengthEditing?((0,t.uX)(),(0,t.Wv)(s,{key:0,autofocus:"",size:"small",modelValue:e.row.MapPrefixLength,"onUpdate:modelValue":l=>e.row.MapPrefixLength=l,onBlur:l=>n.handleEditBlur(e.row,"MapPrefixLength")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Error?((0,t.uX)(),(0,t.CE)("strong",{key:0,title:e.row.Error,class:"red"},(0,z.v_)(e.row.MapPrefixLength),9,rl)):((0,t.uX)(),(0,t.CE)("span",sl,(0,z.v_)(e.row.MapPrefixLength),1))],64))])),_:1}),(0,t.bF)(i,{prop:"Disabled",label:"禁用"},{default:(0,t.k6)((e=>[(0,t.bF)(c,{modelValue:e.row.Disabled,"onUpdate:modelValue":l=>e.row.Disabled=l,label:"禁用记录"},null,8,["modelValue","onUpdate:modelValue"])])),_:1}),(0,t.bF)(i,{prop:"Oper",label:"操作",width:"110"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.$index)},{reference:(0,t.k6)((()=>[(0,t.bF)(h,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"]),(0,t.bF)(h,{type:"primary",size:"small",onClick:l=>n.handleAdd(e.$index)},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})])),_:2},1032,["onClick"])])])),_:1})])),_:1},8,["data","onCellDblclick"])])])}var ul={props:["modelValue"],emits:["update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42},setup(e){const l=(0,C.W)(),a=(0,u.Kh)({lans:l.value.current.Lans.slice(0).map((e=>(e.MapIP=e.MapIP||"0.0.0.0",e.MapPrefixLength=e.MapPrefixLength||24,e)))});0==a.lans.length&&a.lans.push({IP:"0.0.0.0",PrefixLength:24,MapIP:"0.0.0.0",MapPrefixLength:24});const t=(e,l)=>{n(e,l.property)},n=(e,l)=>{a.lans.forEach((e=>{e["IPEditing"]=!1,e["PrefixLengthEditing"]=!1,e["MapIPEditing"]=!1,e["MapPrefixLengthEditing"]=!1})),e[`${l}Editing`]=!0,e["__editing"]=!0},o=(e,l)=>{if(e[`${l}Editing`]=!1,e["__editing"]=!1,"PrefixLength"==l||"MapPrefixLength"==l){var a=+e[l];(a>32||a<0||isNaN(a))&&(a=24),e[l]=a}},r=e=>{a.lans.splice(e,1),0==a.lans.length&&s(0)},s=e=>{a.lans.splice(e+1,0,{IP:"0.0.0.0",PrefixLength:24,MapIP:"0.0.0.0",MapPrefixLength:24})},d=()=>a.lans.map((e=>(e.PrefixLength=+e.PrefixLength,e)));return{state:a,handleDel:r,handleAdd:s,getData:d,handleCellClick:t,handleEditBlur:o}}};const il=(0,V.A)(ul,[["render",dl],["__scopeId","data-v-1cfaa7f4"]]);var cl=il,hl={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt,Warning:F.N5l,Refresh:F.C42,TuntapForward:Ge,TuntapLan:cl},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,C.W)(),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,machineName:n.value.current.device.MachineName,bufferSize:a.value.bufferSize,ruleForm:{IP:n.value.current.IP,PrefixLength:n.value.current.PrefixLength||24,Gateway:n.value.current.Gateway,ShowDelay:n.value.current.ShowDelay,AutoConnect:n.value.current.AutoConnect,Upgrade:n.value.current.Upgrade,Multicast:n.value.current.Multicast,Nat:n.value.current.Nat,TcpMerge:n.value.current.TcpMerge,InterfaceOrder:n.value.current.InterfaceOrder,Forwards:n.value.current.Forwards,Name:n.value.current.Name},rules:{Name:{type:"string",pattern:/^$|^[A-Za-z][A-Za-z0-9]{0,31}$/,message:"请输入正确的网卡名",transform(e){return e.trim()}}}});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{var e=+r.ruleForm.PrefixLength;(e>32||e<16||isNaN(e))&&(e=24),r.ruleForm.PrefixLength=e},c=(0,u.KR)(null),h=(0,u.KR)(null),m=()=>{const e=JSON.parse(JSON.stringify(n.value.current));e.IP=r.ruleForm.IP.replace(/\s/g,"")||"0.0.0.0",e.Lans=c.value?c.value.getData():n.value.current.Lans,e.PrefixLength=+r.ruleForm.PrefixLength,e.Gateway=r.ruleForm.Gateway,e.ShowDelay=r.ruleForm.ShowDelay,e.AutoConnect=r.ruleForm.AutoConnect,e.Upgrade=r.ruleForm.Upgrade,e.Multicast=r.ruleForm.Multicast,e.Nat=r.ruleForm.Nat,e.TcpMerge=r.ruleForm.TcpMerge,e.InterfaceOrder=r.ruleForm.InterfaceOrder,e.Forwards=h.value?h.value.getData():n.value.current.Forwards,e.Name=r.ruleForm.Name,(0,Pe.ac)(e).then((()=>{r.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:r,ruleFormRef:o,handlePrefixLengthChange:s,handleSave:m,lanDom:c,forwardDom:h}}};const ml=(0,V.A)(hl,[["render",Le],["__scopeId","data-v-54c17b5d"]]);var pl=ml;const gl=e=>((0,t.Qi)("data-v-67ed3552"),e=e(),(0,t.jt)(),e),wl=gl((()=>(0,t.Lk)("p",null,"网络租期30天、IP租期7天",-1))),kl=gl((()=>(0,t.Lk)("span",null,"/",-1))),vl=gl((()=>(0,t.Lk)("span",{style:{width:"1rem"}},null,-1))),fl={class:"calc"},bl=gl((()=>(0,t.Lk)("span",{class:"label"},"网络号",-1))),Cl={class:"value"},Fl=gl((()=>(0,t.Lk)("span",{class:"label"},"网关",-1))),yl={class:"value"},Vl=gl((()=>(0,t.Lk)("span",{class:"label"},"开始IP",-1))),_l={class:"value"},El=gl((()=>(0,t.Lk)("span",{class:"label"},"结束IP",-1))),Ll={class:"value"},Pl=gl((()=>(0,t.Lk)("span",{class:"label"},"广播号",-1))),Il={class:"value"},Tl=gl((()=>(0,t.Lk)("span",{class:"label"},"IP数量",-1))),Sl={class:"value"};function Ml(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-button"),i=(0,t.g2)("el-form"),c=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(c,{modelValue:n.state.show,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:"配置本组的网络",top:"1vh",width:"400"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(i,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"100"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"gateway"},{default:(0,t.k6)((()=>[wl])),_:1}),(0,t.bF)(s,{label:"网卡名",prop:"Name"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Name,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Name=e),style:{width:"14rem"}},null,8,["modelValue"])])),_:1}),(0,t.bF)(s,{label:"网络前缀",prop:"IP"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.IP,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.IP=e),style:{width:"14rem"},onChange:n.handlePrefixLengthChange},null,8,["modelValue","onChange"]),kl,(0,t.bF)(d,{onChange:n.handlePrefixLengthChange,modelValue:n.state.ruleForm.PrefixLength,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PrefixLength=e),style:{width:"4rem"}},null,8,["onChange","modelValue"]),vl,(0,t.bF)(u,{onClick:n.handleClear},{default:(0,t.k6)((()=>[(0,t.eW)("重置")])),_:1},8,["onClick"])])),_:1}),(0,t.bF)(s,{label:"",prop:"IP1"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",fl,[(0,t.Lk)("p",null,[bl,(0,t.Lk)("span",Cl,(0,z.v_)(n.state.values.Network),1)]),(0,t.Lk)("p",null,[Fl,(0,t.Lk)("span",yl,(0,z.v_)(n.state.values.Gateway),1)]),(0,t.Lk)("p",null,[Vl,(0,t.Lk)("span",_l,(0,z.v_)(n.state.values.Start),1)]),(0,t.Lk)("p",null,[El,(0,t.Lk)("span",Ll,(0,z.v_)(n.state.values.End),1)]),(0,t.Lk)("p",null,[Pl,(0,t.Lk)("span",Il,(0,z.v_)(n.state.values.Broadcast),1)]),(0,t.Lk)("p",null,[Tl,(0,t.Lk)("span",Sl,(0,z.v_)(n.state.values.Count),1)])])])),_:1}),n.hasLease?((0,t.uX)(),(0,t.Wv)(s,{key:0,label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(u,{onClick:l[3]||(l[3]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(u,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})):(0,t.Q3)("",!0)])),_:1},8,["model","rules"])])])),_:1},8,["modelValue"])}var Wl={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt},setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.hasAccess("Lease"))),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,ruleForm:{Name:"",IP:"0.0.0.0",PrefixLength:24},rules:{Name:{type:"string",pattern:/^$|^[A-Za-z][A-Za-z0-9]{0,31}$/,message:"请输入正确的网卡名",transform(e){return e.trim()}}},values:{}});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{(0,Pe.w0)(r.ruleForm).then((e=>{r.values=e}))},c=()=>{(0,Pe.Nj)().then((e=>{r.ruleForm.Name=e.Name,r.ruleForm.IP=e.IP,r.ruleForm.PrefixLength=e.PrefixLength,s()}))},h=()=>{var e=+r.ruleForm.PrefixLength;(e>32||e<16||isNaN(e))&&(e=24),r.ruleForm.PrefixLength=e,s()},m=()=>{(0,Pe.AE)(r.ruleForm).then((()=>{i.nk.success("已操作"),r.show=!1})).catch((e=>{console.log(e),i.nk.error("操作失败")}))},p=()=>{(0,Pe.AE)({Name:"",IP:"0.0.0.0",PrefixLength:24}).then((()=>{i.nk.success("已操作"),c()})).catch((e=>{console.log(e),i.nk.error("操作失败")}))};return(0,t.sV)((()=>{c()})),{state:r,hasLease:n,ruleFormRef:o,handleSave:m,handlePrefixLengthChange:h,handleClear:p}}};const Al=(0,V.A)(Wl,[["render",Ml],["__scopeId","data-v-67ed3552"]]);var Rl=Al;const Xl={key:0};function Nl(e,l,a,n,o,r){const s=(0,t.g2)("Socks5Show"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"socks5",label:"代理转发",width:"160"},{default:(0,t.k6)((e=>[n.socks5.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("div",Xl,[(0,t.bF)(s,{config:!0,item:e.row,onEdit:n.handleSocks5,onRefresh:n.handleSocks5Refresh},null,8,["item","onEdit","onRefresh"])])):(0,t.Q3)("",!0)])),_:1})}const Ul={class:"flex"},Bl={class:"flex-1"},xl=["title"],$l={key:0,class:"green gateway"},zl={key:1},Dl={key:0},Kl={key:0,class:"flex yellow",title:"已禁用"},Ql={key:1,class:"flex red",title:"与其它设备填写IP、或本机局域网IP有冲突"};function Ol(e,l,a,n,o,r){const s=(0,t.g2)("ConnectionShow"),d=(0,t.g2)("Loading"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-switch");return(0,t.uX)(),(0,t.CE)("div",null,[(0,t.Lk)("div",Ul,[(0,t.Lk)("div",Bl,[(0,t.bF)(s,{data:n.connections.list[n.item.MachineId],row:n.item},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=e=>n.handleSocks5Port(n.socks5.list[n.item.MachineId])),title:"此设备的socks5代理"},[n.socks5.list[n.item.MachineId].SetupError?((0,t.uX)(),(0,t.CE)("strong",{key:0,class:"red",title:n.socks5.list[n.item.MachineId].SetupError}," socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),9,xl)):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[n.item.Connected&&n.socks5.list[n.item.MachineId].running?((0,t.uX)(),(0,t.CE)("strong",$l,"socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),1)):((0,t.uX)(),(0,t.CE)("span",zl,"socks5://*:"+(0,z.v_)(n.socks5.list[n.item.MachineId].Port),1))],64))])]),n.socks5.list[n.item.MachineId].loading?((0,t.uX)(),(0,t.CE)("div",Dl,[(0,t.bF)(u,{size:"14",class:"loading"},{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])):((0,t.uX)(),(0,t.Wv)(i,{key:1,"model-value":n.item.Connected&&n.socks5.list[n.item.MachineId].running,loading:n.socks5.list[n.item.MachineId].loading,disabled:"",onClick:l[1]||(l[1]=e=>n.handleSocks5(n.socks5.list[n.item.MachineId])),size:"small","inline-prompt":"","active-text":"😀","inactive-text":"😣"},null,8,["model-value","loading"]))]),(0,t.Lk)("div",null,[(0,t.Lk)("div",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.socks5.list[n.item.MachineId].Lans,((e,l)=>((0,t.uX)(),(0,t.CE)(t.FK,{key:l},[e.Disabled?((0,t.uX)(),(0,t.CE)("div",Kl,(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),1)):e.Exists?((0,t.uX)(),(0,t.CE)("div",Ql,(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),1)):((0,t.uX)(),(0,t.CE)("div",{key:2,class:(0,z.C4)(["flex",{green:n.item.Connected&&n.socks5.list[n.item.MachineId].running}]),title:"正常使用"},(0,z.v_)(e.IP)+" / "+(0,z.v_)(e.PrefixLength),3))],64)))),128))])])])}var Gl=a(9983),jl=a(2109),ql={props:["item","config"],emits:["edit","refresh"],components:{Loading:F.Rhj,ConnectionShow:jl.A},setup(e,{emit:l}){const a=b(),n=(0,d.B)(),o=(0,t.EW)((()=>n.value.config.Client.Id)),r=(0,t.EW)((()=>n.value.hasAccess("Socks5ChangeSelf"))),s=(0,t.EW)((()=>n.value.hasAccess("Socks5ChangeOther"))),u=(0,t.EW)((()=>n.value.hasAccess("Socks5StatusSelf"))),c=(0,t.EW)((()=>n.value.hasAccess("Socks5StatusOther"))),h=(0,Gl.bB)(),m=l=>{if(!e.config)return;if(o.value===l.MachineId){if(!u.value)return}else if(!c.value)return;const a=e.item.Connected&&l.running?(0,k.R2)(l.MachineId):(0,k.qH)(l.MachineId);l.loading=!0,a.then((()=>{i.nk.success("操作成功!")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))},p=a=>{if(e.config||o.value==a.MachineId){if(o.value===a.MachineId){if(!r.value)return}else if(!s.value)return;a.device=e.item,l("edit",a)}},g=()=>{l("refresh")};return{item:(0,t.EW)((()=>e.item)),socks5:a,connections:h,handleSocks5:m,handleSocks5Port:p,handleSocks5Refresh:g}}};const Hl=(0,V.A)(ql,[["render",Ol],["__scopeId","data-v-3a4bfe6c"]]);var Jl=Hl,Zl={emits:["edit","refresh"],components:{Socks5Show:Jl},setup(e,{emit:l}){const a=b(),t=e=>{l("edit",e)},n=()=>{l("refresh")};return{socks5:a,handleSocks5:t,handleSocks5Refresh:n}}};const Yl=(0,V.A)(Zl,[["render",Nl]]);var ea=Yl;const la=e=>((0,t.Qi)("data-v-022e3781"),e=e(),(0,t.jt)(),e),aa={class:"upgrade-wrap"},ta={class:"flex-1"},na=la((()=>(0,t.Lk)("span",null,"/",-1))),oa={class:"pdl-10"},ra={class:"pdl-10"};function sa(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-checkbox"),i=(0,t.g2)("Delete"),c=(0,t.g2)("el-icon"),h=(0,t.g2)("el-button"),m=(0,t.g2)("Plus"),p=(0,t.g2)("el-form"),g=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(g,{modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]代理`,top:"1vh",width:"600"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(p,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"140"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"gateway",style:{"margin-bottom":"0"}},{default:(0,t.k6)((()=>[(0,t.eW)(" 配置代理,通过代理访问其它设备 ")])),_:1}),(0,t.bF)(s,{label:"代理端口",prop:"Port"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Port,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Port=e),style:{width:"14rem"}},null,8,["modelValue"])])),_:1}),(0,t.Lk)("div",aa,[(0,t.bF)(s,{label:"此设备局域网IP",prop:"LanIP",class:"lan-item"},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.ruleForm.Lans,((e,l)=>((0,t.uX)(),(0,t.CE)("div",{key:l,class:"flex",style:{"margin-bottom":".6rem"}},[(0,t.Lk)("div",ta,[(0,t.bF)(d,{modelValue:e.IP,"onUpdate:modelValue":l=>e.IP=l,style:{width:"14rem"}},null,8,["modelValue","onUpdate:modelValue"]),na,(0,t.bF)(d,{onChange:e=>n.handleMaskChange(l),modelValue:e.PrefixLength,"onUpdate:modelValue":l=>e.PrefixLength=l,style:{width:"4rem"}},null,8,["onChange","modelValue","onUpdate:modelValue"])]),(0,t.Lk)("div",oa,[(0,t.bF)(u,{modelValue:e.Disabled,"onUpdate:modelValue":l=>e.Disabled=l,label:"禁用记录",size:"large"},null,8,["modelValue","onUpdate:modelValue"])]),(0,t.Lk)("div",ra,[(0,t.bF)(h,{type:"danger",onClick:e=>n.handleDel(l)},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(i)])),_:1})])),_:2},1032,["onClick"]),(0,t.bF)(h,{type:"primary",onClick:e=>n.handleAdd(l)},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1})])),_:2},1032,["onClick"])])])))),128))])),_:1})]),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{onClick:l[1]||(l[1]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var da={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Plus:F.FWt},setup(e,{emit:l}){const a=(0,d.B)(),n=b(),o=(0,u.KR)(null),r=(0,u.Kh)({show:!0,machineName:n.value.current.device.MachineName,bufferSize:a.value.bufferSize,ruleForm:{Port:n.value.current.Port,Lans:n.value.current.Lans.slice(0)},rules:{}});0==r.ruleForm.Lans.length&&r.ruleForm.Lans.push({IP:"0.0.0.0",PrefixLength:24}),(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=e=>{var l=+r.ruleForm.Lans[e].PrefixLength;(l>32||l<16||isNaN(l))&&(l=24),r.ruleForm.Lans[e].PrefixLength=l},c=e=>{r.ruleForm.Lans.splice(e,1),0==r.ruleForm.Lans.length&&h(0)},h=e=>{r.ruleForm.Lans.splice(e+1,0,{IP:"0.0.0.0",PrefixLength:24})},m=()=>{const e=JSON.parse(JSON.stringify(n.value.current));e.Port=+(r.ruleForm.Port||"1805"),e.Lans=r.ruleForm.Lans.map((e=>(e.PrefixLength=+e.PrefixLength,e))),(0,k._Q)(e).then((()=>{r.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return{state:r,ruleFormRef:o,handleMaskChange:s,handleDel:c,handleAdd:h,handleSave:m}}};const ua=(0,V.A)(da,[["render",sa],["__scopeId","data-v-022e3781"]]);var ia=ua;const ca=["title","src"],ha={key:1,title:"?",class:"system",src:"/system.svg"},ma=["title","src"],pa={key:3,title:"?",class:"system",src:"/system.svg"},ga={class:"flex"},wa=["title","onClick"];function ka(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(s,{prop:"tunnel",label:"网络",width:"76"},{default:(0,t.k6)((e=>[n.tunnel.list[e.row.MachineId]?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[(0,t.Lk)("div",null,[n.tunnel.list[e.row.MachineId].Net.CountryCode?((0,t.uX)(),(0,t.CE)("img",{key:0,title:`${n.tunnel.list[e.row.MachineId].Net.CountryCode}、${n.tunnel.list[e.row.MachineId].Net.City}`,class:"system",src:`https://unpkg.com/flag-icons@7.2.3/flags/4x3/${n.tunnel.list[e.row.MachineId].Net.CountryCode.toLowerCase()}.svg`},null,8,ca)):((0,t.uX)(),(0,t.CE)("img",ha)),n.tunnel.list[e.row.MachineId].Net.Isp?((0,t.uX)(),(0,t.CE)("img",{key:2,title:`${n.tunnel.list[e.row.MachineId].Net.Isp}`,class:"system",src:n.netImg(n.tunnel.list[e.row.MachineId].Net)},null,8,ma)):((0,t.uX)(),(0,t.CE)("img",pa))]),(0,t.Lk)("div",ga,[(0,t.Lk)("a",{href:"javascript:;",class:(0,z.C4)(["a-line",{yellow:n.tunnel.list[e.row.MachineId].NeedReboot}]),title:n.title(n.tunnel.list[e.row.MachineId]),onClick:l=>n.handleTunnel(n.tunnel.list[e.row.MachineId],e.row)},[(0,t.Lk)("span",null,"跳点 : "+(0,z.v_)(n.tunnel.list[e.row.MachineId].RouteLevel)+"+"+(0,z.v_)(n.tunnel.list[e.row.MachineId].RouteLevelPlus),1)],10,wa)])],64)):(0,t.Q3)("",!0)])),_:1})}var va=a(83);const fa=Symbol(),ba=()=>{(0,d.B)();const e=(0,u.KR)({timer:0,showEdit:!1,current:null,list:{},hashcode:0,showMap:!1});(0,t.Gt)(fa,e);const l=()=>{clearTimeout(e.value.timer),(0,va.r7)(e.value.hashcode.toString()).then((a=>{e.value.hashcode=a.HashCode,a.List&&(e.value.list=a.List),e.value.timer=setTimeout(l,1060)})).catch((()=>{e.value.timer=setTimeout(l,1060)}))},a=l=>{e.value.current=l,e.value.showEdit=!0},n=()=>{(0,va.gM)()},o=()=>{clearTimeout(e.value.timer)},r=l=>Object.values(e.value.list).sort(((e,l)=>e.RouteLevel+e.RouteLevelPlus-l.RouteLevel+l.RouteLevelPlus)).map((e=>e.MachineId));return{tunnel:e,_getTunnelInfo:l,handleTunnelEdit:a,handleTunnelRefresh:n,clearTunnelTimeout:o,sortTunnel:r}},Ca=()=>(0,t.WQ)(fa);var Fa={emits:["edit","refresh"],setup(e,{emit:l}){const a=(0,d.B)(),n=(0,t.EW)((()=>a.value.config.Client.Id)),o=(0,t.EW)((()=>a.value.hasAccess("TunnelChangeSelf"))),r=(0,t.EW)((()=>a.value.hasAccess("TunnelChangeOther"))),s=Ca(),u=((0,Gl.ZY)(),(0,Gl.mx)()),i=(0,Gl.FG)(),c=(0,Gl.bB)(),h=e=>{let l=["调整网关层级有助于打洞成功"];return e.NeedReboot?"需要重启":l.join("\r\n")},m={chinanet:"chinanet.svg",china169:"chinanet.svg","china telecom":"chinanet.svg","china unicom":"chinaunicom.svg","china mobile":"chinamobile.svg",huawei:"huawei.svg",amazon:"amazon.svg",aliyun:"aliyun.svg",alibaba:"aliyun.svg"},p=new RegExp(Object.keys(m).map((e=>`\\b${e}\\b`)).join("|")),g=e=>{const l=e.Isp.toLowerCase();if(l){const e=l.match(p);if(e)return`./${m[e[0]]}`}return"./system.svg"},w=e=>{const l=[u.value.list[e],i.value.list[e],c.value.list[e]].filter((e=>!!e&&e.Connected)).length;return l},k=(e,a)=>{if(n.value===e.MachineId){if(!o.value)return}else if(!r.value)return;e.device=a,l("edit",e)},v=()=>{l("refresh")},f=e=>{l("connections",e)};return{tunnel:s,handleTunnel:k,handleTunnelRefresh:v,connectionCount:w,handleConnections:f,title:h,netImg:g}}};const ya=(0,V.A)(Fa,[["render",ka],["__scopeId","data-v-64b81c5b"]]);var Va=ya;const _a=e=>((0,t.Qi)("data-v-6941c158"),e=e(),(0,t.jt)(),e),Ea=_a((()=>(0,t.Lk)("div",null,"网关层级为你的设备与外网的距离,你可以手动调整数值",-1))),La={class:"pdl-20"},Pa=_a((()=>(0,t.Lk)("h3",null,"跳跃点",-1))),Ia={class:"pdl-20"},Ta={class:"t-c w-100"};function Sa(e,l,a,n,o,r){const s=(0,t.g2)("el-form-item"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-col"),i=(0,t.g2)("el-input-number"),c=(0,t.g2)("el-row"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:`设置[${n.state.machineName}]网关`,width:"560",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"",prop:"alert"},{default:(0,t.k6)((()=>[Ea])),_:1}),(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"网关层级",prop:"RouteLevel"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{readonly:"",modelValue:n.state.ruleForm.RouteLevel,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.RouteLevel=e),style:{width:"15rem"}},null,8,["modelValue"])])),_:1})])),_:1}),(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"加上",prop:"RouteLevelPlus"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.RouteLevelPlus,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.RouteLevelPlus=e)},null,8,["modelValue"])])),_:1})])),_:1})])),_:1})])),_:1}),(0,t.bF)(s,{label:""},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"外网端口",prop:"PortMapWan"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.PortMapWan,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleForm.PortMapWan=e)},null,8,["modelValue"])])),_:1})])),_:1}),(0,t.bF)(u,{span:12},{default:(0,t.k6)((()=>[(0,t.bF)(s,{label:"内网端口",prop:"PortMapLan"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{modelValue:n.state.ruleForm.PortMapLan,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleForm.PortMapLan=e)},null,8,["modelValue"])])),_:1})])),_:1})])),_:1})])),_:1}),n.state.net.HostName?((0,t.uX)(),(0,t.Wv)(s,{key:0,label:"",prop:"alert"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("h3",null,(0,z.v_)(n.state.net.HostName),1),(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.net.Lans.filter((e=>e.Ips.length>0)),((e,l)=>((0,t.uX)(),(0,t.CE)("li",null,[(0,t.Lk)("div",null,"【"+(0,z.v_)(e.Mac||"00-00-00-00-00-00")+"】"+(0,z.v_)(e.Desc),1),(0,t.Lk)("div",La,(0,z.v_)(e.Ips.join("、")),1)])))),256))]),Pa,(0,t.Lk)("div",Ia,(0,z.v_)(n.state.net.Routes.join("、")),1)])])),_:1})):(0,t.Q3)("",!0),(0,t.bF)(s,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ta,[(0,t.bF)(h,{onClick:l[4]||(l[4]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue","title"])}var Ma={props:["modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=Ca(),n=(0,u.KR)(null),o=(0,u.Kh)({show:!0,machineName:a.value.current.device.MachineName,ruleForm:{RouteLevel:a.value.current.RouteLevel,RouteLevelPlus:a.value.current.RouteLevelPlus,PortMapWan:a.value.current.PortMapWan,PortMapLan:a.value.current.PortMapLan},rules:{},net:{}});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{const e=JSON.parse(JSON.stringify(a.value.current));e.RouteLevel=+o.ruleForm.RouteLevel,e.RouteLevelPlus=+o.ruleForm.RouteLevelPlus,e.PortMapWan=+o.ruleForm.PortMapWan,e.PortMapLan=+o.ruleForm.PortMapLan,(0,va.KW)(e).then((()=>{o.show=!1,i.nk.success("已操作!"),l("change")})).catch((e=>{console.log(e),i.nk.error("操作失败!")}))};return(0,t.sV)((()=>{(0,va.Zu)(a.value.current.MachineId).then((e=>{o.net=e})).catch((()=>{}))})),{state:o,ruleFormRef:n,handleSave:r,tunnel:a}}};const Wa=(0,V.A)(Ma,[["render",Sa],["__scopeId","data-v-6941c158"]]);var Aa=Wa;const Ra=["onClick"],Xa=["onClick"],Na=["onClick"],Ua=["onClick"];function Ba(e,l,a,n,o,r){const s=(0,t.g2)("ConnectionShow"),d=(0,t.g2)("el-table-column");return(0,t.uX)(),(0,t.Wv)(d,{prop:"forward",label:"转发/穿透"},{default:(0,t.k6)((l=>[l.row.Connected?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[l.row.isSelf&&(n.hasForwardShowSelf||e.hasForwardSelf)?((0,t.uX)(),(0,t.CE)(t.FK,{key:0},[(0,t.Lk)("div",null,[(0,t.bF)(s,{data:n.connections.list[l.row.MachineId],row:l.row},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的端口转发",class:(0,z.C4)({green:n.forward.list[l.row.MachineId]>0}),onClick:e=>n.handleEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.forward.list[l.row.MachineId]>0})},"端口转发("+(0,z.v_)(n.forward.list[l.row.MachineId]>99?"99+":n.forward.list[l.row.MachineId])+")",3)],10,Ra)]),(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的内网穿透",class:(0,z.C4)({green:n.sforward.list[l.row.MachineId]>0}),onClick:e=>n.handleSEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.sforward.list[l.row.MachineId]>0})},"内网穿透("+(0,z.v_)(n.sforward.list[l.row.MachineId]>99?"99+":n.sforward.list[l.row.MachineId])+")",3)],10,Xa)])],64)):n.hasForwardShowOther||e.hasForwardOther?((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.Lk)("div",null,[(0,t.bF)(s,{data:n.connections.list[l.row.MachineId],row:l.row},null,8,["data","row"]),(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的端口转发",class:(0,z.C4)({green:n.forward.list[l.row.MachineId]>0}),onClick:e=>n.handleEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.forward.list[l.row.MachineId]>0})},"端口转发("+(0,z.v_)(n.forward.list[l.row.MachineId]>99?"99+":n.forward.list[l.row.MachineId])+")",3)],10,Na)]),(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",title:"管理自己的内网穿透",class:(0,z.C4)({green:n.sforward.list[l.row.MachineId]>0}),onClick:e=>n.handleSEdit(l.row.MachineId,l.row.MachineName)},[(0,t.Lk)("span",{class:(0,z.C4)({gateway:n.sforward.list[l.row.MachineId]>0})},"内网穿透("+(0,z.v_)(n.sforward.list[l.row.MachineId]>99?"99+":n.sforward.list[l.row.MachineId])+")",3)],10,Ua)])],64)):(0,t.Q3)("",!0)],64)):(0,t.Q3)("",!0)])),_:1})}var xa=a(743);const $a=Symbol(),za=()=>{const e=(0,d.B)(),l=((0,t.EW)((()=>e.value.config.Client.Id)),(0,u.KR)({timer:0,showEdit:!1,showCopy:!1,list:{},testTimer:0,hashcode:0,machineid:"",machineName:""}));(0,t.Gt)($a,l);const a=()=>{(0,xa.a9)()},n=()=>{clearTimeout(l.value.timer),(0,xa.gz)(l.value.hashcode.toString()).then((e=>{l.value.hashcode=e.HashCode,e.List&&(l.value.list=e.List),l.value.timer=setTimeout(n,1020)})).catch((()=>{l.value.timer=setTimeout(n,1020)}))},o=e=>{l.value.machineid=e[0],l.value.machineName=e[1],l.value.showEdit=!0},r=()=>{clearTimeout(l.value.timer),clearTimeout(l.value.testTimer)};return{sforward:l,_getSForwardCountInfo:n,handleSForwardEdit:o,clearSForwardTimeout:r,handleSForwardRefresh:a}},Da=()=>(0,t.WQ)($a);var Ka={emits:["edit","sedit"],components:{ConnectionShow:jl.A},setup(e,{emit:l}){const a=w(),n=Da(),o=(0,d.B)(),r=(0,t.EW)((()=>o.value.config.Client.Id)),s=(0,t.EW)((()=>o.value.hasAccess("ForwardShowSelf"))),u=(0,t.EW)((()=>o.value.hasAccess("ForwardShowOther"))),i=(0,t.EW)((()=>o.value.hasAccess("ForwardSelf"))),c=(0,t.EW)((()=>o.value.hasAccess("ForwardOther"))),h=(0,Gl.mx)(),m=(e,a)=>{if(r.value===e){if(!i.value)return}else if(!c.value)return;l("edit",[e,a])},p=(e,a)=>{if(r.value===e){if(!i.value)return}else if(!c.value)return;l("sedit",[e,a])},g=()=>{l("refresh")};return{forward:a,sforward:n,hasForwardShowSelf:s,hasForwardShowOther:u,connections:h,handleEdit:m,handleSEdit:p,handleForwardRefresh:g}}};const Qa=(0,V.A)(Ka,[["render",Ba],["__scopeId","data-v-2ee190a4"]]);var Oa=Qa;const Ga={class:"t-c head"},ja=["title"],qa={class:"t-c"},Ha={class:"page-wrap"},Ja={key:0},Za={key:1,class:"error red",title:"off line"},Ya=["title"];function et(e,l,a,n,o,r){const s=(0,t.g2)("el-button"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-table-column"),i=(0,t.g2)("el-option"),c=(0,t.g2)("el-select"),h=(0,t.g2)("el-pagination"),m=(0,t.g2)("el-switch"),p=(0,t.g2)("Delete"),g=(0,t.g2)("el-icon"),w=(0,t.g2)("el-popconfirm"),k=(0,t.g2)("el-table"),v=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(v,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),onOpen:n.handleOnShowList,"append-to":".app-wrap",title:`【${n.state.machineName}】的端口转发`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("div",Ga,[(0,t.bF)(s,{type:"success",size:"small",onClick:n.handleAdd,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("添加")])),_:1},8,["onClick","loading"]),(0,t.bF)(s,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)("刷新")])),_:1},8,["onClick"])]),(0,t.bF)(k,{data:n.state.data,size:"small",border:"",height:"500",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(u,{property:"Name",label:"名称",width:"100"},{default:(0,t.k6)((e=>[e.row.NameEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Name,"onUpdate:modelValue":l=>e.row.Name=l,onBlur:l=>n.handleEditBlur(e.row,"Name")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.Name),1)],64))])),_:1}),(0,t.bF)(u,{prop:"BufferSize",label:"缓冲区",width:"80"},{default:(0,t.k6)((e=>[e.row.BufferSizeEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.BufferSize,"onUpdate:modelValue":l=>e.row.BufferSize=l,placeholder:"Select",size:"small",disabled:e.row.Started,onChange:l=>n.handleEditBlur(e.row,"BufferSize")},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.bufferSize,((e,l)=>((0,t.uX)(),(0,t.Wv)(i,{key:l,label:e,value:l},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","disabled","onChange"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(n.state.bufferSize[e.row.BufferSize]),1)],64))])),_:1}),(0,t.bF)(u,{property:"BindIPAddress",label:"监听IP",width:"140"},{default:(0,t.k6)((e=>[e.row.BindIPAddressEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.BindIPAddress,"onUpdate:modelValue":l=>e.row.BindIPAddress=l,size:"small",disabled:e.row.Started,onChange:l=>n.handleEditBlur(e.row,"BindIPAddress")},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.ips,(e=>((0,t.uX)(),(0,t.Wv)(i,{key:e,label:e,value:e},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","disabled","onChange"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.BindIPAddress),1)],64))])),_:1}),(0,t.bF)(u,{property:"Port",label:"监听端口",width:"80"},{default:(0,t.k6)((e=>[e.row.PortEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,type:"number",autofocus:"",size:"small",modelValue:e.row.Port,"onUpdate:modelValue":l=>e.row.Port=l,onBlur:l=>n.handleEditBlur(e.row,"Port")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Msg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.Msg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.Port),1)],8,ja)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.Port),3))],64))])),_:1}),(0,t.bF)(u,{property:"MachineId",label:"目标"},{default:(0,t.k6)((e=>[e.row.MachineIdEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(c,{key:0,modelValue:e.row.MachineId,"onUpdate:modelValue":l=>e.row.MachineId=l,onChange:l=>n.handleEditBlur(e.row,"MachineId"),filterable:"",remote:"",loading:n.state.loading,"remote-method":n.handleSearch},{header:(0,t.k6)((()=>[(0,t.Lk)("div",qa,[(0,t.Lk)("div",Ha,[(0,t.bF)(h,{small:"",background:"",layout:"prev, pager, next","page-size":n.state.machineIds.Request.Size,total:n.state.machineIds.Count,"pager-count":5,"current-page":n.state.machineIds.Request.Page,onCurrentChange:n.handlePageChange},null,8,["page-size","total","current-page","onCurrentChange"])])])])),default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.machineIds.List,((e,l)=>((0,t.uX)(),(0,t.Wv)(i,{key:l,label:e.MachineName,value:e.MachineId},null,8,["label","value"])))),128))])),_:2},1032,["modelValue","onUpdate:modelValue","onChange","loading","remote-method"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[n.state.names[e.row.MachineId]?((0,t.uX)(),(0,t.CE)("span",Ja,(0,z.v_)(e.row.MachineName),1)):((0,t.uX)(),(0,t.CE)("span",Za,(0,z.v_)(e.row.MachineName),1))],64))])),_:1}),(0,t.bF)(u,{property:"TargetEP",label:"目标服务",width:"140"},{default:(0,t.k6)((e=>[e.row.TargetEPEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.TargetEP,"onUpdate:modelValue":l=>e.row.TargetEP=l,onBlur:l=>n.handleEditBlur(e.row,"TargetEP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.TargetMsg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.TargetMsg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.TargetEP),1)],8,Ya)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.TargetEP),3))],64))])),_:1}),(0,t.bF)(u,{property:"Started",label:"状态",width:"60"},{default:(0,t.k6)((e=>[(0,t.bF)(m,{modelValue:e.row.Started,"onUpdate:modelValue":l=>e.row.Started=l,onChange:l=>n.handleStartChange(e.row),"inline-prompt":"","active-text":"开","inactive-text":"关"},null,8,["modelValue","onUpdate:modelValue","onChange"])])),_:1}),(0,t.bF)(u,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.bF)(w,{"confirm-button-text":"确认","cancel-button-text":"取消",title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.row.Id)},{reference:(0,t.k6)((()=>[(0,t.bF)(s,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(g,null,{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])])),_:1})])),_:1},8,["data","onCellDblclick"])])])),_:1},8,["modelValue","onOpen","title"])}var lt={props:["data","modelValue"],emits:["update:modelValue"],components:{Delete:F.epd},setup(e,{emit:l}){const a=(0,d.B)(),n=w(),o=(0,u.Kh)({show:!0,machineId:n.value.machineId,machineName:n.value.machineName,data:[],ips:[],bufferSize:a.value.bufferSize,loading:!1,machineIds:{Request:{Page:1,Size:10,Name:""},Count:0,List:[]},timer:0,timer1:0,editing:!1,names:{}});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{clearTimeout(o.timer),(0,m.lE)(n.value.machineId).then((e=>{o.timer=setTimeout(r,1e3)})).catch((()=>{o.timer=setTimeout(r,1e3)}))},s=()=>{(0,m.xD)().then((e=>{e.splice(0,0,"127.0.0.1"),e.splice(0,0,"0.0.0.0"),o.ips=e})).catch((()=>{}))},c=()=>{clearTimeout(o.timer1),0==o.editing?(0,m.Oy)(o.machineId).then((e=>{o.data=e,o.timer1=setTimeout(c,1e3)})).catch((()=>{o.timer1=setTimeout(c,1e3)})):o.timer1=setTimeout(c,1e3)},h=()=>{c(),i.nk.success("已刷新")},p=()=>{(0,S.NT)().then((e=>{o.names=e.filter((e=>e.Online)).reduce(((e,l)=>(e[l.MachineId]=!0,e)),{})})).catch((()=>{}))},g=e=>{o.machineIds.Request.Name=e,k()},k=()=>{o.loading=!0,(0,S.BS)(o.machineIds.Request).then((e=>{o.loading=!1,o.machineIds.Request=e.Request,o.machineIds.Count=e.Count,o.machineIds.List=e.List})).catch((e=>{o.loading=!1}))},v=e=>{o.machineIds.Request.Page=e,k()},f=()=>{k()},b=(e,l)=>{F(e,l.property)},C=()=>{E({ID:0,Name:"",Port:0,TargetEP:"127.0.0.1:80",machineId:""})},F=(e,l)=>{e.Started?i.nk.error("请先停止"):(o.data.forEach((e=>{e["NameEditing"]=!1,e["PortEditing"]=!1,e["TargetEPEditing"]=!1,e["BindIPAddressEditing"]=!1,e["BufferSizeEditing"]=!1,e["MachineIdEditing"]=!1})),e[`${l}Editing`]=!0,o.editing=!0)},y=(e,l)=>{if(e.Started)return void i.nk.error("请先停止");e[`${l}Editing`]=!1,o.editing=!1;const a=o.machineIds.List.find((l=>l.MachineId==e.MachineId));a&&(e.MachineName=a.MachineName),E(e)},V=e=>{(0,m.we)({machineId:o.machineId,Id:e}).then((()=>{c()}))},_=e=>{E(e)},E=e=>{o.loading=!0,e.Port=parseInt(e.Port),(0,m.nH)({machineId:o.machineId,data:e}).then((()=>{o.loading=!1,c()})).catch((e=>{o.loading=!1,i.nk.error(e)}))};return(0,t.sV)((()=>{c(),s(),r(),p()})),(0,t.hi)((()=>{clearTimeout(o.timer),clearTimeout(o.timer1)})),{state:o,handleOnShowList:f,handleCellClick:b,handleRefresh:h,handleAdd:C,handleEdit:F,handleEditBlur:y,handleDel:V,handleStartChange:_,handleSearch:g,handlePageChange:v}}};const at=(0,V.A)(lt,[["render",et],["__scopeId","data-v-190226d8"]]);var tt=at;const nt={class:"t-c head"},ot={class:"plan"},rt=["title"],st=["title"];function dt(e,l,a,n,o,r){const s=(0,t.g2)("el-button"),d=(0,t.g2)("el-input"),u=(0,t.g2)("el-table-column"),i=(0,t.g2)("Select"),c=(0,t.g2)("el-icon"),h=(0,t.g2)("PlanShow"),m=(0,t.g2)("CloseBold"),p=(0,t.g2)("WarnTriangleFilled"),g=(0,t.g2)("el-switch"),w=(0,t.g2)("Delete"),k=(0,t.g2)("el-popconfirm"),v=(0,t.g2)("el-table"),f=(0,t.g2)("el-dialog"),b=(0,t.g2)("PlanList");return(0,t.uX)(),(0,t.Wv)(b,{ref:"planDom",machineid:n.machineId,category:"sforward",handles:n.state.handles},{default:(0,t.k6)((()=>[(0,t.bF)(f,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),onOpen:n.handleOnShowList,"append-to":".app-wrap",title:`【${n.machineName}】的内网穿透`,top:"2vh",width:"760"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.Lk)("div",nt,[(0,t.bF)(s,{type:"success",size:"small",onClick:n.handleAdd,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("添加")])),_:1},8,["onClick","loading"]),(0,t.bF)(s,{size:"small",onClick:n.handleRefresh},{default:(0,t.k6)((()=>[(0,t.eW)("刷新")])),_:1},8,["onClick"])]),(0,t.bF)(v,{data:n.state.data,size:"small",border:"",height:"500",onCellDblclick:n.handleCellClick},{default:(0,t.k6)((()=>[(0,t.bF)(u,{property:"Name",label:"名称"},{default:(0,t.k6)((e=>[e.row.NameEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Name,"onUpdate:modelValue":l=>e.row.Name=l,onBlur:l=>n.handleEditBlur(e.row,"Name")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[(0,t.eW)((0,z.v_)(e.row.Name),1)],64))])),_:1}),(0,t.bF)(u,{prop:"Plan",label:"开启和关闭计划",width:"200"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",ot,[(0,t.Lk)("p",null,[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(i)])),_:1}),(0,t.bF)(h,{handle:"start",keyid:e.row.Id},null,8,["keyid"])]),(0,t.Lk)("p",null,[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(m)])),_:1}),(0,t.bF)(h,{handle:"stop",keyid:e.row.Id},null,8,["keyid"])])])])),_:1}),(0,t.bF)(u,{property:"Temp",label:"服务器端口/域名",width:"160"},{default:(0,t.k6)((e=>[e.row.TempEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.Temp,"onUpdate:modelValue":l=>e.row.Temp=l,onBlur:l=>n.handleEditBlur(e.row,"Temp")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.Msg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.Msg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.Temp),1),(0,t.bF)(c,{size:"20"},{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})],8,rt)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.Temp),3))],64))])),_:1}),(0,t.bF)(u,{property:"LocalEP",label:"本机服务",width:"140"},{default:(0,t.k6)((e=>[e.row.LocalEPEditing&&0==e.row.Started?((0,t.uX)(),(0,t.Wv)(d,{key:0,autofocus:"",size:"small",modelValue:e.row.LocalEP,"onUpdate:modelValue":l=>e.row.LocalEP=l,onBlur:l=>n.handleEditBlur(e.row,"LocalEP")},null,8,["modelValue","onUpdate:modelValue","onBlur"])):((0,t.uX)(),(0,t.CE)(t.FK,{key:1},[e.row.LocalMsg?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"error red",title:e.row.LocalMsg},[(0,t.Lk)("span",null,(0,z.v_)(e.row.LocalEP),1),(0,t.bF)(c,{size:"20"},{default:(0,t.k6)((()=>[(0,t.bF)(p)])),_:1})],8,st)):((0,t.uX)(),(0,t.CE)("span",{key:1,class:(0,z.C4)({green:e.row.Started})},(0,z.v_)(e.row.LocalEP),3))],64))])),_:1}),(0,t.bF)(u,{property:"Started",label:"状态",width:"60"},{default:(0,t.k6)((e=>[(0,t.bF)(g,{disabled:"",modelValue:e.row.Started,"onUpdate:modelValue":l=>e.row.Started=l,"inline-prompt":"","active-text":"是","inactive-text":"否",onClick:l=>n.handleStartChange(e.row)},null,8,["modelValue","onUpdate:modelValue","onClick"])])),_:1}),(0,t.bF)(u,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.bF)(k,{"confirm-button-text":"确认","cancel-button-text":"取消",title:"删除不可逆,是否确认?",onConfirm:l=>n.handleDel(e.row.Id)},{reference:(0,t.k6)((()=>[(0,t.bF)(s,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(c,null,{default:(0,t.k6)((()=>[(0,t.bF)(w)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])])),_:1})])),_:1},8,["data","onCellDblclick"])])])),_:1},8,["modelValue","onOpen","title"])])),_:1},8,["machineid","handles"])}function ut(e,l,a,n,o,r){const s=(0,t.g2)("PlanEdit");return(0,t.uX)(),(0,t.CE)("div",null,[(0,t.RG)(e.$slots,"default"),n.plan.showEdit?((0,t.uX)(),(0,t.Wv)(s,{key:0,modelValue:n.plan.showEdit,"onUpdate:modelValue":l[0]||(l[0]=e=>n.plan.showEdit=e)},null,8,["modelValue"])):(0,t.Q3)("",!0)])}var it=a(4);const ct=(e,l)=>(0,it.zG)("plan/get",{machineId:e,category:l}),ht=(e,l)=>(0,it.zG)("plan/add",{machineId:e,plan:l}),mt=(e,l)=>(0,it.zG)("plan/remove",{machineId:e,planId:l}),pt={key:0,class:"mgl-2"},gt={class:"w-100"},wt=(0,t.Lk)("span",null,"的",-1),kt={class:"w-100 mgt-1"},vt={class:"w-100"},ft={class:"w-100 mgt-1"},bt={class:"w-100"},Ct={class:"w-100 mgt-1"},Ft={class:"w-100"},yt=(0,t.Lk)("span",null,"的",-1),Vt={class:"mgt-1 w-100"},_t={class:"mgt-1 w-100"},Et=(0,t.Lk)("span",null,"后",-1),Lt={class:"t-c w-100"};function Pt(e,l,a,n,o,r){const s=(0,t.g2)("el-option"),d=(0,t.g2)("el-select"),u=(0,t.g2)("el-form-item"),i=(0,t.g2)("el-input"),c=(0,t.g2)("el-switch"),h=(0,t.g2)("el-button"),m=(0,t.g2)("el-form"),p=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(p,{modelValue:n.state.show,"onUpdate:modelValue":l[30]||(l[30]=e=>n.state.show=e),"close-on-click-modal":!1,"append-to":".app-wrap",title:"计划任务",top:"2vh",width:"450"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(m,{ref:"ruleFormRef",model:n.state.ruleForm,rules:n.state.rules,"label-width":"auto"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{label:"执行操作",prop:"Handle"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Handle,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.ruleForm.Handle=e),style:{width:"10rem"},disabled:""},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.handles,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"执行方式",prop:"Method"},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.ruleForm.Method,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.ruleForm.Method=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.methods,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue","onChange"]),n.state.ruleForm.Method>=2?((0,t.uX)(),(0,t.CE)("strong",pt,(0,z.v_)(n.state.ruleForm.Rule),1)):(0,t.Q3)("",!0)])),_:1}),2==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:0,label:"在",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",gt,[(0,t.bF)(d,{modelValue:n.state.ruleAt.type,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.ruleAt.type=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[(0,t.bF)(s,{value:2,label:"每月"}),(0,t.bF)(s,{value:3,label:"每日"}),(0,t.bF)(s,{value:4,label:"每时"}),(0,t.bF)(s,{value:5,label:"每分"})])),_:1},8,["modelValue","onChange"]),(0,t.eW)(),wt]),(0,t.Lk)("div",kt,[n.state.ruleAt.type<2?((0,t.uX)(),(0,t.Wv)(i,{key:0,onChange:n.handleChange,modelValue:n.state.ruleAt.month,"onUpdate:modelValue":l[3]||(l[3]=e=>n.state.ruleAt.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<3?((0,t.uX)(),(0,t.Wv)(i,{key:1,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<2}),modelValue:n.state.ruleAt.day,"onUpdate:modelValue":l[4]||(l[4]=e=>n.state.ruleAt.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<4?((0,t.uX)(),(0,t.Wv)(i,{key:2,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<3}),modelValue:n.state.ruleAt.hour,"onUpdate:modelValue":l[5]||(l[5]=e=>n.state.ruleAt.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),n.state.ruleAt.type<5?((0,t.uX)(),(0,t.Wv)(i,{key:3,onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<4}),modelValue:n.state.ruleAt.min,"onUpdate:modelValue":l[6]||(l[6]=e=>n.state.ruleAt.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","class","modelValue"])):(0,t.Q3)("",!0),(0,t.bF)(i,{onChange:n.handleChange,class:(0,z.C4)({"mgl-1":n.state.ruleAt.type<5}),modelValue:n.state.ruleAt.sec,"onUpdate:modelValue":l[7]||(l[7]=e=>n.state.ruleAt.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","class","modelValue"])])])),_:1})):(0,t.Q3)("",!0),4==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:1,label:"每",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",vt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTimer.year,"onUpdate:modelValue":l[8]||(l[8]=e=>n.state.ruleTimer.year=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("年")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.month,"onUpdate:modelValue":l[9]||(l[9]=e=>n.state.ruleTimer.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.day,"onUpdate:modelValue":l[10]||(l[10]=e=>n.state.ruleTimer.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",ft,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTimer.hour,"onUpdate:modelValue":l[11]||(l[11]=e=>n.state.ruleTimer.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.min,"onUpdate:modelValue":l[12]||(l[12]=e=>n.state.ruleTimer.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTimer.sec,"onUpdate:modelValue":l[13]||(l[13]=e=>n.state.ruleTimer.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"])])])),_:1})):(0,t.Q3)("",!0),8==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:2,label:"Cron",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",bt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleCron.sec,"onUpdate:modelValue":l[14]||(l[14]=e=>n.state.ruleCron.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.min,"onUpdate:modelValue":l[15]||(l[15]=e=>n.state.ruleCron.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.hour,"onUpdate:modelValue":l[16]||(l[16]=e=>n.state.ruleCron.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",Ct,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleCron.day,"onUpdate:modelValue":l[17]||(l[17]=e=>n.state.ruleCron.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.month,"onUpdate:modelValue":l[18]||(l[18]=e=>n.state.ruleCron.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleCron.week,"onUpdate:modelValue":l[19]||(l[19]=e=>n.state.ruleCron.week=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("周")])),_:1},8,["onChange","modelValue"])])])),_:1})):(0,t.Q3)("",!0),16==n.state.ruleForm.Method?((0,t.uX)(),(0,t.Wv)(u,{key:3,label:"在",prop:"Rule"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Ft,[(0,t.bF)(d,{modelValue:n.state.ruleForm.TriggerHandle,"onUpdate:modelValue":l[20]||(l[20]=e=>n.state.ruleForm.TriggerHandle=e),style:{width:"10rem"},onChange:n.handleChange},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.plan.triggers,((e,l)=>((0,t.uX)(),(0,t.Wv)(s,{value:e.value,label:e.label},null,8,["value","label"])))),256))])),_:1},8,["modelValue","onChange"]),(0,t.eW)(),yt]),(0,t.Lk)("div",Vt,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTrigger.year,"onUpdate:modelValue":l[21]||(l[21]=e=>n.state.ruleTrigger.year=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("年")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.month,"onUpdate:modelValue":l[22]||(l[22]=e=>n.state.ruleTrigger.month=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("月")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.day,"onUpdate:modelValue":l[23]||(l[23]=e=>n.state.ruleTrigger.day=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("日")])),_:1},8,["onChange","modelValue"])]),(0,t.Lk)("div",_t,[(0,t.bF)(i,{onChange:n.handleChange,modelValue:n.state.ruleTrigger.hour,"onUpdate:modelValue":l[24]||(l[24]=e=>n.state.ruleTrigger.hour=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("时")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.min,"onUpdate:modelValue":l[25]||(l[25]=e=>n.state.ruleTrigger.min=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("分")])),_:1},8,["onChange","modelValue"]),(0,t.bF)(i,{onChange:n.handleChange,class:"mgl-1",modelValue:n.state.ruleTrigger.sec,"onUpdate:modelValue":l[26]||(l[26]=e=>n.state.ruleTrigger.sec=e),style:{width:"8rem"}},{append:(0,t.k6)((()=>[(0,t.eW)("秒")])),_:1},8,["onChange","modelValue"]),Et])])),_:1})):(0,t.Q3)("",!0),(0,t.bF)(u,{label:"内容",prop:"Value"},{default:(0,t.k6)((()=>[(0,t.bF)(i,{type:"textarea",resize:"none",rows:"5",modelValue:n.state.ruleForm.Value,"onUpdate:modelValue":l[27]||(l[27]=e=>n.state.ruleForm.Value=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"禁用",prop:"Disabled"},{default:(0,t.k6)((()=>[(0,t.bF)(c,{modelValue:n.state.ruleForm.Disabled,"onUpdate:modelValue":l[28]||(l[28]=e=>n.state.ruleForm.Disabled=e)},null,8,["modelValue"])])),_:1}),(0,t.bF)(u,{label:"",prop:"Btns"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",Lt,[(0,t.bF)(h,{onClick:l[29]||(l[29]=e=>n.state.show=!1)},{default:(0,t.k6)((()=>[(0,t.eW)("取消")])),_:1}),(0,t.bF)(h,{type:"primary",onClick:n.handleSave,loading:n.state.loading},{default:(0,t.k6)((()=>[(0,t.eW)("确认")])),_:1},8,["onClick","loading"])])])),_:1})])),_:1},8,["model","rules"])])])),_:1},8,["modelValue"])}var It={props:["data","modelValue"],emits:["change","update:modelValue"],setup(e,{emit:l}){const a=/(\d+|\*)-(\d+|\*)-(\d+|\*)\s+(\d+|\*):(\d+|\*):(\d+|\*)/,n=/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/,o=/(.+)\s+(.+)\s+(.+)\s+(.+)\s+(.+)\s+(.+)/,r=(0,u.KR)(null),s=(0,t.WQ)("plan");!s.value.current.TriggerHandle&&s.value.triggers.length>0&&(s.value.current.TriggerHandle=s.value.triggers[0].value);const d=(0,u.Kh)({show:!0,loading:!1,ruleCron:{week:"*",month:"*",day:"*",hour:"*",min:"*",sec:"30"},ruleAt:{type:3,month:"*",day:"*",hour:0,min:0,sec:0},ruleTimer:{year:0,month:0,day:0,hour:0,min:0,sec:30},ruleTrigger:{year:0,month:0,day:0,hour:0,min:0,sec:30},ruleForm:{Id:s.value.current.Id,Category:s.value.current.Category,Key:s.value.current.Key,Value:s.value.current.Value,Rule:s.value.current.Rule,Handle:s.value.current.Handle,Method:s.value.current.Method,Disabled:s.value.current.Disabled,TriggerHandle:s.value.current.TriggerHandle},rules:{}});(0,t.wB)((()=>d.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const i={2:e=>{if(e=e||"*-*-* 0:0:0",0==a.test(e))return;const[,l,t,n,o,r,s]=e.match(a);"*"==r?d.ruleAt.type=5:"*"==o?d.ruleAt.type=4:"*"==n?d.ruleAt.type=3:"*"==t&&(d.ruleAt.type=2),d.ruleAt.year=l,d.ruleAt.month=t,d.ruleAt.day=n,d.ruleAt.hour=o,d.ruleAt.min=r,d.ruleAt.sec=s},4:e=>{if(e=e||"0-0-0 0:0:30",0==n.test(e))return;const[,l,a,t,o,r,s]=e.match(n);d.ruleTimer.year=l,d.ruleTimer.month=a,d.ruleTimer.day=t,d.ruleTimer.hour=o,d.ruleTimer.min=r,d.ruleTimer.sec=s},8:e=>{if(e=e||"30 * * * * ?",0==o.test(e))return;const[,l,a,t,n,r,s]=e.match(o);d.ruleCron.sec=l,d.ruleCron.min=a,d.ruleCron.hour=t,d.ruleCron.day=n,d.ruleCron.month=r,d.ruleCron.week=s},16:e=>{if(e=e||"0-0-0 0:0:30",0==n.test(e))return;const[,l,a,t,o,r,s]=e.match(n);d.ruleTrigger.year=l,d.ruleTrigger.month=a,d.ruleTrigger.day=t,d.ruleTrigger.hour=o,d.ruleTrigger.min=r,d.ruleTrigger.sec=s}},c=()=>{d.ruleForm.Method in i&&i[d.ruleForm.Method](d.ruleForm.Rule)},h={2:()=>{switch(d.ruleAt.type){case 2:return`*-*-${d.ruleAt.day} ${d.ruleAt.hour}:${d.ruleAt.min}:${d.ruleAt.sec}`;case 3:return`*-*-* ${d.ruleAt.hour}:${d.ruleAt.min}:${d.ruleAt.sec}`;case 4:return`*-*-* *:${d.ruleAt.min}:${d.ruleAt.sec}`;case 5:return`*-*-* *:*:${d.ruleAt.sec}`}return""},4:()=>`${d.ruleTimer.year}-${d.ruleTimer.month}-${d.ruleTimer.day} ${d.ruleTimer.hour}:${d.ruleTimer.min}:${d.ruleTimer.sec}`,8:()=>`${d.ruleCron.sec} ${d.ruleCron.min} ${d.ruleCron.hour} ${d.ruleCron.day} ${d.ruleCron.month} ${d.ruleCron.week}`,16:()=>`${d.ruleTrigger.year}-${d.ruleTrigger.month}-${d.ruleTrigger.day} ${d.ruleTrigger.hour}:${d.ruleTrigger.min}:${d.ruleTrigger.sec}`},m=()=>{d.ruleForm.Method in h&&(d.ruleForm.Rule=h[d.ruleForm.Method]())},p=()=>{m()},g=()=>{const e=JSON.parse(JSON.stringify(d.ruleForm));d.loading=!0,ht(s.value.machineid,e).then((e=>{d.loading=!1,d.show=!1})).catch((()=>{d.loading=!1}))};return(0,t.sV)((()=>{c(),p()})),{state:d,ruleFormRef:r,plan:s,handleChange:p,handleSave:g}}};const Tt=(0,V.A)(It,[["render",Pt]]);var St=Tt,Mt={components:{PlanEdit:St},props:["machineid","category","handles"],setup(e){const l=(0,u.KR)({machineid:e.machineid,timer:0,list:{},current:{},showEdit:!1,category:e.category||"",handles:e.handles||[],handleJson:(e.handles||[]).reduce(((e,l,a)=>(e[l.value]=l.label,e)),{}),triggers:[],methods:[{label:"手动",value:0},{label:"启动后",value:1},{label:"到点",value:2},{label:"定时",value:4},{label:"Cron",value:8},{label:"触发",value:16}]});(0,t.Gt)("plan",l);const a=()=>{clearTimeout(l.value.timer),ct(l.value.machineid,e.category).then((e=>{l.value.list=e.reduce(((e,l,a)=>(e[`${l.Key}-${l.Handle}`]=l,e)),{}),l.value.timer=setTimeout(a,1e3)})).catch((()=>{l.value.timer=setTimeout(a,1e3)}))},n=(e,t)=>{const n=l.value.list[`${e}-${t}`];n&&mt(l.value.machineid,n.Id).then((()=>{a()}))};return(0,t.sV)((()=>{a()})),(0,t.hi)((()=>{clearTimeout(l.value.timer)})),{plan:l,remove:n}}};const Wt=(0,V.A)(Mt,[["render",ut]]);var At=Wt;const Rt={key:0},Xt={key:1};function Nt(e,l,a,n,o,r){return(0,t.uX)(),(0,t.CE)("a",{href:"javascript:;",class:"a-line",onClick:l[0]||(l[0]=(...e)=>n.handleEdit&&n.handleEdit(...e))},[n.item?((0,t.uX)(),(0,t.CE)("span",Rt,(0,z.v_)(n.rule),1)):((0,t.uX)(),(0,t.CE)("span",Xt,"未设置"))])}var Ut={props:["keyid","handle"],setup(e){const l=/(\d+|\*)-(\d+|\*)-(\d+|\*)\s+(\d+|\*):(\d+|\*):(\d+|\*)/,a=/(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)/,n={0:()=>"手动",1:()=>"网络启动后",2:(e,a)=>{if(0==l.test(a))return a;const[,t,n,o,r,s,d]=a.match(l);return"*"==s?`每分钟的${d}秒`:"*"==r?`每小时的${s}分${d}秒`:"*"==o?`每天的${r}时${s}分${d}秒`:"*"==n?`每月的${o}日${r}时${s}分${d}秒`:"*"==t?`每年的${n}月${o}日${r}时${s}分${d}秒`:void 0},4:(e,l)=>{if(0==a.test(l))return l;const[,t,n,o,r,s,d]=l.match(a),u=[];return"0"!=t&&u.push(`${t}年`),"0"!=n&&u.push(`${n}月`),"0"!=o&&u.push(`${o}日`),"0"!=r&&u.push(`${r}时`),"0"!=s&&u.push(`${s}分`),"0"!=d&&u.push(`${d}秒`),`每${u.join("")}`},8:(e,l)=>`Cron : ${l}`,16:(e,l)=>{if(0==a.test(l))return l;const[,t,n,r,s,d,u]=l.match(a),i=[];return"0"!=t&&i.push(`${t}年`),"0"!=n&&i.push(`${n}月`),"0"!=r&&i.push(`${r}日`),"0"!=s&&i.push(`${s}时`),"0"!=d&&i.push(`${d}分`),"0"!=u&&i.push(`${u}秒`),`在【${o.value.handleJson[e.TriggerHandle]}】的${i.join("")}后`}},o=(0,t.WQ)("plan"),r=(0,t.EW)((()=>o.value.list[`${e.keyid}-${e.handle}`])),s=(0,t.EW)((()=>{if(!r.value)return"";const e=r.value.Method;return n[e]?n[e](r.value,r.value.Rule):r.value.Rule})),d=()=>{o.value.current=r.value||{Id:0,Category:o.value.category,Key:`${e.keyid}`,Handle:e.handle,Value:"",Disabled:!1,TriggerHandle:"",Method:2,Rule:""},o.value.triggers=JSON.parse(JSON.stringify(o.value.handles.filter((l=>l.value!=e.handle)))),o.value.showEdit=!0};return{item:r,rule:s,handleEdit:d}}};const Bt=(0,V.A)(Ut,[["render",Nt]]);var xt=Bt,$t={props:["data","modelValue"],emits:["update:modelValue"],components:{WarnTriangleFilled:F.DtC,Delete:F.epd,Select:F.l6P,CloseBold:F.QBJ,PlanList:At,PlanShow:xt},setup(e,{emit:l}){const a=(0,u.KR)(null),n=(0,d.B)(),o=Da(),r=(0,u.Kh)({bufferSize:n.value.bufferSize,show:!0,data:[],timer:0,timer1:0,editing:!1,loading:!1,handles:[{label:"开启",value:"start"},{label:"关闭",value:"stop"}]});(0,t.wB)((()=>r.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const s=()=>{clearTimeout(r.timer),(0,xa.eX)(o.value.machineid).then((e=>{r.timer=setTimeout(s,1e3)})).catch((()=>{r.timer=setTimeout(s,1e3)}))},c=()=>{clearTimeout(r.timer1),0==r.editing?(0,xa.pY)(o.value.machineid).then((e=>{e.forEach((e=>{e.Temp=(e.Domain||e.RemotePort).toString(),e.RemotePort=0,e.Domain=""})),r.data=e,r.timer1=setTimeout(c,1e3)})).catch((()=>{r.timer1=setTimeout(c,1e3)})):r.timer1=setTimeout(c,1e3)},h=()=>{c()},m=(e,l)=>{w(e,l.property)},p=()=>{c(),i.nk.success("已刷新")},g=()=>{r.loading=!0;const e={Id:0,Name:"",RemotePort:0,LocalEP:"127.0.0.1:80",Domain:"",Temp:""};(0,xa.Qs)({machineid:o.value.machineid,data:e}).then((()=>{r.loading=!1,setTimeout((()=>{c()}),100)})).catch((e=>{r.loading=!1,i.nk.error(e)}))},w=(e,l)=>{e.Started?i.nk.error("请先停止运行"):(r.data.forEach((e=>{e["NameEditing"]=!1,e["RemotePortEditing"]=!1,e["LocalEPEditing"]=!1,e["DomainEditing"]=!1,e["TempEditing"]=!1})),e[`${l}Editing`]=!0,r.editing=!0)},k=(e,l)=>{e.Started?i.nk.error("请先停止运行"):(e[`${l}Editing`]=!1,r.editing=!1,b(e))},v=e=>{a.value.remove(e,"start"),a.value.remove(e,"stop"),(0,xa.DY)({machineid:o.value.machineid,id:e}).then((()=>{r.loading=!1,c()})).catch((e=>{r.loading=!1,i.nk.error(e)}))},f=e=>{r.loading=!0;const l=e.Started?(0,xa.JT)({machineid:o.value.machineid,id:e.Id}):(0,xa.nP)({machineid:o.value.machineid,id:e.Id});l.then((()=>{r.loading=!1,c()})).catch((e=>{r.loading=!1,i.nk.error(e)}))},b=e=>{e.Temp&&(/^\d+$/.test(e.Temp)?e.RemotePort=parseInt(e.Temp):e.Domain=e.Temp,r.loading=!0,(0,xa.Qs)({machineid:o.value.machineid,data:e}).then((e=>{r.loading=!1,0==e&&i.nk.error("操作失败,可能存在相同值"),c()})).catch((e=>{r.loading=!1,i.nk.error(e)})))};return(0,t.sV)((()=>{c(),s()})),(0,t.hi)((()=>{clearTimeout(r.timer),clearTimeout(r.timer1)})),{state:r,planDom:a,machineName:o.value.machineName,machineId:o.value.machineid,handleOnShowList:h,handleCellClick:m,handleRefresh:p,handleAdd:g,handleEdit:w,handleEditBlur:k,handleDel:v,handleStartChange:f}}};const zt=(0,V.A)($t,[["render",dt],["__scopeId","data-v-359a437c"]]);var Dt=zt;const Kt=e=>((0,t.Qi)("data-v-8c388c86"),e=e(),(0,t.jt)(),e),Qt=["onClick"],Ot=["href"],Gt={href:"javascript:;",class:"a-line"},jt={key:0},qt={key:1},Ht={key:0},Jt={key:1},Zt={key:0},Yt={key:1},en=Kt((()=>(0,t.Lk)("span",null,"/",-1))),ln={key:0},an={key:1},tn={class:"dropdown"};function nn(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("Delete"),u=(0,t.g2)("el-icon"),i=(0,t.g2)("el-button"),c=(0,t.g2)("el-popconfirm"),h=(0,t.g2)("el-table"),m=(0,t.g2)("el-dialog"),p=(0,t.g2)("el-switch"),g=(0,t.g2)("ArrowDown"),w=(0,t.g2)("el-dropdown-item"),k=(0,t.g2)("el-dropdown-menu"),v=(0,t.g2)("el-dropdown");return(0,t.uX)(),(0,t.CE)(t.FK,null,[(0,t.bF)(m,{modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),"append-to":".app-wrap",title:`与[${n.state.machineName}]的链接`,top:"1vh",width:"780"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{data:n.state.data,size:"small",border:"",height:"500"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{property:"RemoteMachineId",label:"目标/服务器"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",{class:(0,z.C4)({green:e.row.Connected})},[(0,t.Lk)("p",null,(0,z.v_)(e.row.IPEndPoint),1),(0,t.Lk)("p",null,"ssl : "+(0,z.v_)(e.row.SSL),1)],2)])),_:1}),(0,t.bF)(s,{property:"TransactionId",label:"事务",width:"80"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(n.state.transactions[e.row.TransactionId]),1)])),_:1}),(0,t.bF)(s,{property:"TransportName",label:"协议"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,(0,z.v_)(e.row.TransportName)+"("+(0,z.v_)(n.state.protocolTypes[e.row.ProtocolType])+")",1),(0,t.Lk)("p",null,(0,z.v_)(n.state.types[e.row.Type])+" - "+(0,z.v_)(1<[(0,t.Lk)("span",null,(0,z.v_)(e.row.Delay)+"ms",1)])),_:1}),(0,t.bF)(s,{property:"Bytes",label:"通信"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("p",null,"up : "+(0,z.v_)(e.row.SendBytesText),1),(0,t.Lk)("p",null,"down : "+(0,z.v_)(e.row.ReceiveBytesText),1)])])),_:1}),(0,t.bF)(s,{property:"relay",label:"中继节点"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:"javascript:;",class:"a-line",onClick:l=>n.handleNode(e.row)},(0,z.v_)(n.state.nodesDic[e.row.NodeId]||"选择节点"),9,Qt)])])),_:1}),(0,t.bF)(s,{label:"操作",width:"54"},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[n.hasTunnelRemove?((0,t.uX)(),(0,t.Wv)(c,{key:0,"confirm-button-text":"确认","cancel-button-text":"取消",title:"确定关闭此连接?",onConfirm:l=>n.handleDel(e.row)},{reference:(0,t.k6)((()=>[(0,t.bF)(i,{type:"danger",size:"small"},{default:(0,t.k6)((()=>[(0,t.bF)(u,null,{default:(0,t.k6)((()=>[(0,t.bF)(d)])),_:1})])),_:1})])),_:2},1032,["onConfirm"])):(0,t.Q3)("",!0)])])),_:1})])),_:1},8,["data"])])])),_:1},8,["modelValue","title"]),(0,t.bF)(m,{modelValue:n.state.showNodes,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.showNodes=e),title:e.$t("server.relayTitle"),width:"760",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(h,{data:n.state.nodes,size:"small",border:"",height:"600"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{property:"Name",label:e.$t("server.relayName")},{default:(0,t.k6)((e=>[(0,t.Lk)("div",null,[(0,t.Lk)("a",{href:e.row.Url,class:"a-line blue",target:"_blank"},(0,z.v_)(e.row.Name),9,Ot),(0,t.Lk)("a",Gt,[1==(1&e.row.AllowProtocol)?((0,t.uX)(),(0,t.CE)("span",jt,",tcp")):(0,t.Q3)("",!0),2==(2&e.row.AllowProtocol)?((0,t.uX)(),(0,t.CE)("span",qt,",udp")):(0,t.Q3)("",!0)])])])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxGbTotal",label:e.$t("server.relayFlow"),width:"140"},{default:(0,t.k6)((e=>[0==e.row.MaxGbTotal?((0,t.uX)(),(0,t.CE)("span",Ht,"--")):((0,t.uX)(),(0,t.CE)("span",Jt,(0,z.v_)((e.row.MaxGbTotalLastBytes/1024/1024/1024).toFixed(2))+"GB / "+(0,z.v_)(e.row.MaxGbTotal)+"GB ",1))])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxBandwidth",label:e.$t("server.relaySpeed"),width:"80"},{default:(0,t.k6)((e=>[0==e.row.MaxBandwidth?((0,t.uX)(),(0,t.CE)("span",Zt,"--")):((0,t.uX)(),(0,t.CE)("span",Yt,(0,z.v_)(e.row.MaxBandwidth)+"Mbps",1))])),_:1},8,["label"]),(0,t.bF)(s,{property:"MaxBandwidthTotal",label:`${e.$t("server.relaySpeed2")}/${e.$t("server.relaySpeed1")}`,width:"120"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,[(0,t.Lk)("span",null,(0,z.v_)(e.row.BandwidthRatio)+"Mbps",1),en,0==e.row.MaxBandwidthTotal?((0,t.uX)(),(0,t.CE)("span",ln,"--")):((0,t.uX)(),(0,t.CE)("span",an,(0,z.v_)(e.row.MaxBandwidthTotal)+"Mbps",1))])])),_:1},8,["label"]),(0,t.bF)(s,{property:"ConnectionRatio",label:e.$t("server.relayConnection"),width:"80"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,[(0,t.Lk)("strong",null,(0,z.v_)(e.row.ConnectionRatio),1),(0,t.eW)("/"+(0,z.v_)(e.row.MaxConnection),1)])])),_:1},8,["label"]),(0,t.bF)(s,{property:"Delay",label:e.$t("server.relayDelay"),width:"60"},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.Delay)+"ms",1)])),_:1},8,["label"]),(0,t.bF)(s,{property:"Public",label:e.$t("server.relayPublic"),width:"50"},{default:(0,t.k6)((e=>[(0,t.bF)(p,{disabled:"",modelValue:e.row.Public,"onUpdate:modelValue":l=>e.row.Public=l,size:"small"},null,8,["modelValue","onUpdate:modelValue"])])),_:1},8,["label"]),(0,t.bF)(s,{property:"Oper",label:e.$t("server.relayOper"),width:"75"},{default:(0,t.k6)((l=>[(0,t.bF)(v,{size:"small"},{dropdown:(0,t.k6)((()=>[(0,t.bF)(k,null,{default:(0,t.k6)((()=>[1==(1&l.row.AllowProtocol)?((0,t.uX)(),(0,t.Wv)(w,{key:0,onClick:e=>n.handleConnect(l.row.Id,1)},{default:(0,t.k6)((()=>[(0,t.eW)("TCP")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0),2==(2&l.row.AllowProtocol)?((0,t.uX)(),(0,t.Wv)(w,{key:1,onClick:e=>n.handleConnect(l.row.Id,2)},{default:(0,t.k6)((()=>[(0,t.eW)("UDP")])),_:2},1032,["onClick"])):(0,t.Q3)("",!0)])),_:2},1024)])),default:(0,t.k6)((()=>[(0,t.Lk)("div",tn,[(0,t.Lk)("span",null,(0,z.v_)(e.$t("server.relayUse")),1),(0,t.bF)(u,{class:"el-icon--right"},{default:(0,t.k6)((()=>[(0,t.bF)(g)])),_:1})])])),_:2},1024)])),_:1},8,["label"])])),_:1},8,["data"])])])),_:1},8,["modelValue","title"])],64)}var on=a(9232),rn=a(5931),sn={props:["modelValue"],emits:["change","update:modelValue"],components:{Delete:F.epd,Select:F.l6P,ArrowDown:F.yd$},setup(e,{emit:l}){const{t:a}=(0,rn.s9)(),n=(0,d.B)(),o=(0,t.EW)((()=>n.value.hasAccess("TunnelRemove"))),r=(0,Gl.ZY)(),s=(0,Gl.mx)(),c=(0,Gl.FG)(),h=(0,Gl.bB)(),m=(0,u.Kh)({show:!0,protocolTypes:{1:"tcp",2:"udp",4:"msquic"},types:{0:"打洞",1:"中继",2:"节点"},transactions:{forward:"端口转发",tuntap:"虚拟网卡",socks5:"代理转发"},machineName:r.value.currentName,currentRow:{},data:(0,t.EW)((()=>[s.value.list[r.value.current],c.value.list[r.value.current],h.value.list[r.value.current]].filter((e=>!!e)))),showNodes:!1,nodes:[],nodesDic:{},timer:0});(0,t.wB)((()=>m.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e),l("change")}),300)}));const p=e=>{o.value&&e.removeFunc(e.RemoteMachineId).then((()=>{i.nk.success(a("common.oper"))})).catch((()=>{}))},g=()=>{clearTimeout(m.timer),(0,on.W4)().then((e=>{m.nodes=e,m.nodesDic=e.reduce(((e,l)=>(e[l.Id]=l.Name,e)),{}),m.timer=setTimeout(g,1e3)})).catch((()=>{m.timer=setTimeout(g,1e3)}))},w=e=>{m.currentRow=e,m.showNodes=!0},k=(e,l)=>{const t={FromMachineId:n.value.config.Client.Id,TransactionId:m.currentRow.TransactionId,ToMachineId:m.currentRow.RemoteMachineId,NodeId:e,Protocol:l};(0,on.uQ)(t).then((()=>{i.nk.success(a("common.oper"))})).catch((()=>{i.nk.success(a("common.operFail"))})),m.showNodes=!1};return(0,t.sV)((()=>{r.value.updateRealTime(!0),g()})),(0,t.hi)((()=>{r.value.updateRealTime(!1),clearTimeout(m.timer)})),{state:m,handleDel:p,hasTunnelRemove:o,handleNode:w,handleConnect:k}}};const dn=(0,V.A)(sn,[["render",nn],["__scopeId","data-v-8c388c86"]]);var un=dn,cn=a(9383);const hn={class:"updater-wrap t-c"},mn={class:"t-l"},pn={class:"flex mgt-1"},gn={class:"mgt-1 t-c"};function wn(e,l,a,n,o,r){const s=(0,t.g2)("el-option"),d=(0,t.g2)("el-select"),u=(0,t.g2)("el-col"),i=(0,t.g2)("el-row"),c=(0,t.g2)("el-button"),h=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(h,{class:"options-center",title:"更新","destroy-on-close":"",modelValue:n.state.show,"onUpdate:modelValue":l[2]||(l[2]=e=>n.state.show=e),width:"40rem",top:"2vh"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",hn,[(0,t.Lk)("div",mn,[(0,t.Lk)("ul",null,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.msg,(e=>((0,t.uX)(),(0,t.CE)("li",null,(0,z.v_)(e),1)))),256))])]),(0,t.Lk)("div",pn,[(0,t.bF)(i,{class:"w-100"},{default:(0,t.k6)((()=>[(0,t.bF)(u,{span:10},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.type,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.type=e),size:"large"},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.types,(e=>((0,t.uX)(),(0,t.Wv)(s,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.bF)(u,{span:4},{default:(0,t.k6)((()=>[(0,t.eW)(" -> ")])),_:1}),(0,t.bF)(u,{span:10},{default:(0,t.k6)((()=>[(0,t.bF)(d,{modelValue:n.state.version,"onUpdate:modelValue":l[1]||(l[1]=e=>n.state.version=e),size:"large",filterable:"","allow-create":"","default-first-option":""},{default:(0,t.k6)((()=>[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(n.state.versions,(e=>((0,t.uX)(),(0,t.Wv)(s,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1})])),_:1})]),(0,t.Lk)("div",gn,[(0,t.bF)(c,{type:"success",onClick:n.handleUpdate,plain:""},{default:(0,t.k6)((()=>[(0,t.eW)("确 定")])),_:1},8,["onClick"])])])])),_:1},8,["modelValue"])}var kn={props:["modelValue"],emits:["update:modelValue"],setup(e,{emit:l}){const a=(0,d.B)(),n=((0,t.EW)((()=>a.value.hasAccess("UpdateSelf"))),(0,t.EW)((()=>a.value.hasAccess("UpdateOther")))),o=(0,cn.T)(),r=(0,t.EW)((()=>a.value.signin.Version)),s=(0,t.EW)((()=>o.value.current.Version)),i=[{label:`仅【${o.value.device.MachineName}】`,value:o.value.device.MachineId},n.value?{label:"本组所有",value:"g-all"}:{},n.value?{label:"本服务器所有",value:"s-all"}:{}].filter((e=>e.value)),c=[{label:`${s.value}【最新版本】`,value:s.value},{label:`${r.value}【服务器版本】`,value:r.value}].filter((e=>e.value)),h=(0,u.Kh)({show:!0,type:i[0]||"",version:c[0]||"",types:i,versions:c,msg:[]});(0,t.wB)((()=>h.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const m=()=>{const e={MachineId:o.value.device.MachineId,Version:h.version.value||h.version,GroupAll:"g-all"==h.type,All:"s-all"==h.type};(e.All||e.GroupAll)&&(e.MachineId=""),(0,M.lJ)(e).then((()=>{})).catch((()=>{})),h.show=!1};return(0,t.sV)((()=>{(0,M.rL)().then((e=>{h.msg=e.Msg}))})),{state:h,updater:o,handleUpdate:m}}};const vn=(0,V.A)(kn,[["render",wn]]);var fn=vn;function bn(e,l,a,n,o,r){const s=(0,t.g2)("el-table-column"),d=(0,t.g2)("el-table"),u=(0,t.g2)("el-dialog");return(0,t.uX)(),(0,t.Wv)(u,{title:`${n.flow.device.name}->${e.$t("status.messengerName")}`,class:"options-center",top:"1vh","destroy-on-close":"",modelValue:n.state.show,"onUpdate:modelValue":l[0]||(l[0]=e=>n.state.show=e),width:"480"},{default:(0,t.k6)((()=>[(0,t.Lk)("div",null,[(0,t.bF)(d,{data:n.state.list,stripe:"",border:"",size:"small",width:"100%",height:"60vh"},{default:(0,t.k6)((()=>[(0,t.bF)(s,{prop:"id",label:"id",width:"200"}),(0,t.bF)(s,{prop:"request",label:"request",sortable:""},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.request)+"ms / "+(0,z.v_)(e.row.requestMax)+"ms",1)])),_:1}),(0,t.bF)(s,{prop:"response",label:"response",sortable:""},{default:(0,t.k6)((e=>[(0,t.Lk)("span",null,(0,z.v_)(e.row.response)+"ms / "+(0,z.v_)(e.row.responseMax)+"ms",1)])),_:1})])),_:1},8,["data"])])])),_:1},8,["title","modelValue"])}var Cn=a(4921),Fn={props:["modelValue"],emits:["update:modelValue"],setup(e,{emit:l}){const{t:a}=(0,rn.s9)(),n=U(),o=(0,u.Kh)({show:!0,timer:0,list:[]});(0,t.wB)((()=>o.show),(e=>{e||setTimeout((()=>{l("update:modelValue",e)}),300)}));const r=()=>{clearTimeout(o.timer),(0,Cn.iN)(n.value.device.id).then((e=>{o.list=Object.keys(e).map((l=>({id:`${a(`status.messenger${l}`)}(${l})`,request:(BigInt(e[l].SendtBytes)&BigInt(4294967295)).toString(),requestMax:(BigInt(e[l].SendtBytes)>>BigInt(32)).toString(),response:(BigInt(e[l].ReceiveBytes)&BigInt(4294967295)).toString(),responseMax:(BigInt(e[l].ReceiveBytes)>>BigInt(32)).toString()}))),o.timer=setTimeout(r,3e3)})).catch((e=>{o.timer=setTimeout(r,3e3)}))};return(0,t.sV)((()=>{r()})),(0,t.hi)((()=>{clearTimeout(o.timer)})),{state:o,flow:n}}};const yn=(0,V.A)(Fn,[["render",bn]]);var Vn=yn,_n={components:{Sort:E,Oper:$,Device:te,DeviceEdit:ue,AccessEdit:ge,Tunnel:Va,TunnelEdit:Aa,ConnectionsEdit:un,Tuntap:Ce,TuntapEdit:pl,TuntapLease:Rl,Socks5:ea,Socks5Edit:ia,Forward:Oa,ForwardEdit:tt,SForwardEdit:Dt,UpdaterConfirm:fn,Stopwatch:Vn},setup(e){const l=(0,d.B)(),a=(0,u.Kh)({height:(0,t.EW)((()=>l.value.height-90))}),{devices:n,machineId:o,_getSignList:r,_getSignList1:s,handleDeviceEdit:c,handleAccessEdit:h,handlePageChange:m,handlePageSizeChange:p,handleDel:w,clearDevicesTimeout:k,setSort:v}=(0,ie.r)(),{tuntap:b,_getTuntapInfo:F,handleTuntapEdit:y,handleTuntapRefresh:V,clearTuntapTimeout:_,getTuntapMachines:E,sortTuntapIP:L}=(0,C.O)(),{socks5:P,_getSocks5Info:I,handleSocks5Edit:T,handleSocks5Refresh:S,clearSocks5Timeout:M,getSocks5Machines:W,sortSocks5:R}=f(),{tunnel:X,_getTunnelInfo:U,handleTunnelEdit:B,handleTunnelRefresh:x,clearTunnelTimeout:$,sortTunnel:z}=ba(),{forward:D,_getForwardCountInfo:K,handleForwardEdit:Q,clearForwardTimeout:O,handleForwardRefresh:G}=g(),{sforward:j,_getSForwardCountInfo:q,handleSForwardEdit:H,clearSForwardTimeout:J,handleSForwardRefresh:Z}=za(),{connections:Y,forwardConnections:ee,_getForwardConnections:le,tuntapConnections:ae,_getTuntapConnections:te,socks5Connections:ne,_getSocks5Connections:oe,handleTunnelConnections:re,clearConnectionsTimeout:se}=(0,Gl.L2)(),{updater:de,_getUpdater:ue,_subscribeUpdater:ce,clearUpdaterTimeout:he}=(0,cn.d)(),{flow:me}=N(),{_getAccessInfo:pe,clearAccessTimeout:ge,handleAccesssRefresh:we}=(0,A.Y)(),ke=e=>{n.page.Request.Prop=e.prop,n.page.Request.Asc="ascending"==e.order;let l=new Promise(((e,l)=>{e()}));if("tunnel"==e.prop){const e=z(n.page.Request.Asc);e.length>0&&(l=v(e))}else if("tuntap"==e.prop){const e=L(n.page.Request.Asc);e.length>0&&(l=v(e))}else if("socks5"==e.prop){const e=R(n.page.Request.Asc);e.length>0&&(l=v(e))}l.then((()=>{m()})).catch((()=>{}))},ve=e=>{n.page.Request.Name=e||"",n.page.Request.Name?n.page.Request.Ids=E(n.page.Request.Name).concat(W(n.page.Request.Name)).reduce(((e,l)=>(-1==e.indexOf(l)&&e.push(l),e)),[]):n.page.Request.Ids=[],m(),x(),V(),S(),G(),Z(),we(),i.nk.success({message:"刷新成功",grouping:!0})},fe=()=>{m(),x(),V(),S(),we(),i.nk.success({message:"刷新成功",grouping:!0})};return(0,t.sV)((()=>{m(),x(),V(),S(),G(),Z(),we(),r(),s(),F(),I(),U(),le(),te(),oe(),K(),q(),ue(),ce(),pe()})),(0,t.hi)((()=>{k(),se(),_(),M(),$(),O(),J(),he(),ge()})),{state:a,devices:n,machineId:o,handleSortChange:ke,handleDeviceEdit:c,handleAccessEdit:h,handlePageRefresh:ve,handlePageSearch:fe,handlePageChange:m,handlePageSizeChange:p,handleDel:w,tuntap:b,handleTuntapEdit:y,handleTuntapRefresh:V,socks5:P,handleSocks5Edit:T,handleSocks5Refresh:S,tunnel:X,connections:Y,handleTunnelEdit:B,handleTunnelRefresh:x,handleTunnelConnections:re,forward:D,handleForwardEdit:Q,sforward:j,handleSForwardEdit:H,updater:de,flow:me}}};const En=(0,V.A)(_n,[["render",s],["__scopeId","data-v-4766ad40"]]);var Ln=En}}]);
\ No newline at end of file
diff --git a/src/linker.tray.win/web/js/app.1acc2fd0.js b/src/linker.tray.win/web/js/app.1acc2fd0.js
new file mode 100644
index 00000000..ebfe2ee7
--- /dev/null
+++ b/src/linker.tray.win/web/js/app.1acc2fd0.js
@@ -0,0 +1 @@
+(function(){"use strict";var e={8835:function(e,r,s){s.d(r,{P$:function(){return o},ai:function(){return a},zj:function(){return n}});var t=s(4);const n=()=>(0,t.zG)("config/get"),a=e=>(0,t.zG)("config/install",e),o=e=>(0,t.zG)("config/export",e)},4:function(e,r,s){s.d(r,{a1:function(){return f},e3:function(){return C},jH:function(){return S},zG:function(){return h}});s(4114),s(6573),s(8100),s(7936);var t=s(1219);let n=0,a=null,o="",l=1,u="";const i={},d={connected:!1,connecting:!1},c=()=>{const e=Date.now();for(let r in i){const s=i[r];e-s.time>s.timeout&&(s.reject("超时~"),delete i[r])}setTimeout(c,1e3)};c();const y={subs:{},add:function(e,r){"function"==typeof r&&(this.subs[e]||(this.subs[e]=[]),this.subs[e].push(r))},remove(e,r){let s=this.subs[e]||[];for(let t=s.length-1;t>=0;t--)s[t]==r&&s.splice(t,1)},push(e,r){let s=this.subs[e]||[];for(let t=s.length-1;t>=0;t--)s[t](r)}},v=()=>{d.connected=!0,d.connecting=!1,y.push(k,d.connected)},m=e=>{d.connected=!1,d.connecting=!1,y.push(k,d.connected),setTimeout((()=>{f()}),1e3)},g=e=>{if("string"!=typeof e.data)return void e.data.arrayBuffer().then((r=>{const s=new DataView(r).getInt8(),t=new FileReader;t.readAsText(e.data.slice(4,4+s),"utf8"),t.onload=()=>{let n=JSON.parse(t.result);n.Content={Name:n.Content,Img:e.data.slice(4+s,e.data.length),ArrayBuffer:r},p(n)}}));let r=JSON.parse(e.data);p(r)},p=e=>{let r=i[e.RequestId];r?(0==e.Code?r.resolve(e.Content):1==e.Code?r.reject(e.Content):255==e.Code?(r.reject(e.Content),r.errHandle||t.nk.error(`${r.path}:${e.Content}`)):y.push(e.Path,e.Content),delete i[e.RequestId]):y.push(e.Path,e.Content)},f=(e=o,r=u)=>{if(u=r,o=e,d.connecting||d.connected)return;null!=a&&a.close(),d.connecting=!0;const s=r||"snltty";a=new WebSocket(o,[s]),a.iddd=++l,a.onopen=v,a.onclose=m,a.onmessage=g,a.onerror=e=>{t.nk.error({message:"api接口连接失败,请检查接口地址或密码",grouping:!0})}},C=()=>{a&&a.close()},h=(e,r={},s=!1,t=15e3)=>new Promise(((o,l)=>{let u=++n;try{i[u]={resolve:o,reject:l,errHandle:s,path:e,time:Date.now(),timeout:t};let n=JSON.stringify({Path:e,RequestId:u,Content:"string"==typeof r?r:JSON.stringify(r)});d.connected&&1==a.readyState?a.send(n):l("网络错误~")}catch(c){console.log(c),l("网络错误~"),delete i[u]}})),k=Symbol(),S=e=>{y.add(k,e)}},9299:function(e,r,s){s.d(r,{BS:function(){return i},NT:function(){return v},SZ:function(){return o},Se:function(){return d},VN:function(){return l},gC:function(){return c},jU:function(){return a},nD:function(){return u},rd:function(){return n},zp:function(){return y}});var t=s(4);const n=e=>(0,t.zG)("signIn/set",e),a=e=>(0,t.zG)("signIn/setservers",e),o=()=>(0,t.zG)("signIn/info"),l=e=>(0,t.zG)("signIn/setorder",e),u=e=>(0,t.zG)("signIn/List",e),i=e=>(0,t.zG)("signIn/ids",e),d=e=>(0,t.zG)("signIn/del",e),c=e=>(0,t.zG)("signIn/setname",e),y=e=>(0,t.zG)("signIn/SetGroups",e),v=()=>(0,t.zG)("signIn/names")},9287:function(e,r,s){s.d(r,{Y:function(){return o},A:function(){return u}});var t=s(5931),n={"common.oper":"Operated","common.operFail":"Operation failed","common.confirm":"Confirm","common.cancel":"Cancel","common.setting":"Setting","common.operating":"In operation","common.tips":"Tips","common.option":"Option","common.access":"No access","head.home":"Home","head.server":"Server","head.protocol":"P2P Protocol","head.action":"Action","head.logger":"Logs","logger.list":"List","logger.setting":"Setting","logger.clear":"Clear","logger.refresh":"Refresh","logger.count":"Count","logger.level":"Level","logger.time":"Time","logger.content":"Content","action.text":"Set action static Json parameters","action.jsonError":"Json format error","server.messenger":"Messenger Server","server.group":"Group","server.sync":"Sync","server.messengerAddr":"Messenger Server","server.messengerText":"ip:port or domain:port","server.messengerSecretKey":"Messenger SecretKey","server.messengerSecretKeyText":"Messenger SecretKey","server.messengerUserId":"User Id","server.messengerUserIdText":"Your unique identifier,used to unlock something.","permission.closed":"Closed","permission.simple":"Simple","permission.full":"Full","permission.clear":"Clear connection","status.group":"Group manager","status.groupName":"Name","status.groupPassword":"Password","status.groupOper":"Oper","status.groupDelConfirm":"Are you sure to delete?","status.support":"Support","status.website":"Website","status.doc":"Document","status.cdkey":"CDKEY store","status.export":"Export","status.exportText":"Export the configuration to run elsewhere","status.exportSingle":"Single","status.exportName":"Name","status.exportNamePlease":"Please input device name","status.exportApiPassword":"Api Pwd","status.exportApiPasswordPlease":"Please input api password","status.api":"Manager api","status.apiClear":"Clear","status.apiAlter":"Alter","status.apiAlterConfirm":"Are you sure?","status.messenger":"Messenger server","status.messengerName":"Messenger","status.messengerChange":"change your messenger","status.messengerGroup":"Group","status.serverVersion":"Server version","status.serverNoUpdate":"No updates","status.serverNotNew":"Not latest version","status.serverNew":"Is latest version","status.serverDownloading":"Downloading","status.serverDownloaded":"Downloaded","status.serverUnZipIng":"In unzip","status.serverUnZip":"Unzip","status.serverConfirm":"Are you sure to update server?","status.serverCloseConfirm":"Are you sure to close server?","status.flowOnline":"Online","status.flowUpload":"Up","status.flowDownload":"Down","status.flowThisServer":"This Server","status.flowAllServer":"All Server","status.flowAllSend":"Send","status.flowAllReceive":"Receive","status.flowOnline7Day":"Within seven days","status.flowServer":"Server","status.flowType":"Type","status.flowOper":"Oper","status.flowDetail":"Detail","status.flowMessenger":"Messenger","status.flowRelay":"Relay","status.flowRelayNode":"Relay Node","status.flowWanPort":"Wan Port","status.flowServerForward":"Server Forward","status.flowSearchName":"Name","status.flowRelaySource":"Source","status.flowRelayTarget":"Target","status.flowSearchDomainPort":"Domain/Port","status.flowArea":"Area","status.flowNet":"Network","status.tunnelName":"Name","status.tunnelLabel":"Label","status.tunnelProtocol":"Proto","status.tunnelBuffer":"Buffer","status.tunnelReverse":"Reverse","status.tunnelSSL":"SSL","status.tunnelDisanbled":"Disable","status.tunnelSort":"Index","status.tunnelYes":"Y","status.tunnelNo":"N","server.relaySecretKey":"Relay SecretKey","server.relaySSL":"Use SSL","server.relayDisable":"Disable","server.relayUseCdkey":"Use CDKEY","server.relayUseCdkeyTitle":"If you have a relay SecretKey, ignore it\r\n Without a relay SecretKey, you can choose to use a cdkey or default relay node config","server.relayNodes":"Nodes","server.relayTitle":"Relay Nodes","server.relayName":"Name","server.relayFlow":"Traffic/Month","server.relaySpeed":"Total","server.relaySpeed1":"Single","server.relaySpeed2":"Rate","server.relayConnection":"Conn","server.relayDelay":"Delay","server.relayPublic":"Public","server.relayAllow":"Allow","server.relayUrl":"Url","server.relayOper":"Oper","server.relayUse":"Use","server.relayMyCdkey":"My CDKEY","server.relayCdkey":"Manager CDKEY","server.relayAddCdkey":"Add CDKEY","server.relayCdkeyUserId":"UserId","server.relayCdkeyBandwidth":"Bandwidth","server.relayCdkeyBytes":"Bytes","server.relayCdkeyPay":"Pay","server.relayCdkeyOrder":"Order","server.relayCdkeyPrice":"Price","server.relayCdkeyPayPrice":"Pay price","server.relayCdkeyCostPrice":"Cost price","server.relayCdkeyUserPrice":"User price","server.relayCdkeyOrderId":"OrderNo","server.relayCdkeyContact":"Email","server.relayCdkeyRemark":"Remark","server.relayCdkeyAddTime":"Add","server.relayCdkeyStartTime":"Start","server.relayCdkeyEndTime":"End Time","server.relayCdkeyUseTime":"Use Time","server.relayCdkeyYear":"Year","server.relayCdkeyMonth":"Month","server.relayCdkeyDay":"Day","server.relayCdkeyHour":"Hour","server.relayCdkeyMin":"Min","server.relayCdkeySec":"Sec","server.relayCdkeyDuration":"Duration","server.relayCdkeyOper":"Oper","server.relayCdkeyDelConfirm":"Are you sure to delete?","server.relayCdkeyFlagAll":"All","server.relayCdkeyFlagTimein":"In end time","server.relayCdkeyFlagTimeout":"Out end time","server.relayCdkeyFlagBytesin":"Has bytes","server.relayCdkeyFlagBytesout":"Not have bytes","server.relayCdkeyFlagDeleted":"Deleted","server.relayCdkeyFlagUnDeleted":"Not deleted","server.relayCdkeyTestTitle":"Test CDKEY","server.relayCdkeyTestKey":"CDKEY","server.relayCdkeyTestGB":"GB","server.relayCdkeyTestGBError":"Must > 0","server.relayCdkeyTestSpeed":"Mbps","server.relayCdkeyTestSpeedError":"Must > 0","server.relayCdkeyTestTime":"Time","server.relayCdkeyTestTimeError":"Format error","server.relayCdkeyTestUserId":"UserId","server.relayCdkeyTestUserIdError":"UserId error","server.relayCdkeyTestOrderId":"OrderNo","server.relayCdkeyTestOrderIdError":"OrderNo is empty","server.relayCdkeyTestContact":"Contact","server.relayCdkeyTestCostPrice":"Cost","server.relayCdkeyTestPrice":"Price","server.relayCdkeyTestUserPrice":"User price","server.relayCdkeyTestPayPrice":"Pay","server.relayCdkeyTestCount":"Count","server.relayCdkeyTestCountError":"Must > 0","server.relayCdkeyTestType":"Type","server.relayCdkeyTestTypeError":"Must be relay","server.relayCdkeyTestParseError":"decode fail","server.relayCdkeyImport":"Import CDKEY","server.relayCdkeyImportParse":"Decode fail","server.relayCdkeyImportField":"Field invalid","server.relayCdkeyImportNetwork":"Network error","server.relayCdkeyImportOrderId":"OrderNo has exists","server.sforwardSecretKey":"Server forward secretKey","server.sforwardText":"The server forward can be used when the key is correct","server.updaterSecretKey":"Server update secretKey","server.updaterText":"The server update can be used when the key is correct","server.updaterRate":"Update check interval","server.updaterY":"Year","server.updaterM":"Mmonth","server.updaterD":"Day","server.updaterH":"Hour","server.updaterMM":"Minute","server.updaterS":"Second","server.asyncText":"Synchronize to all clients","server.asyncSelect":"Please select","server.asyncCheckAll":"Check all","server.asyncSignInSecretKey":"Signin secretKey","server.asyncSignInServer":"Signin server","server.asyncGroupSecretKey":"Group secretKey","server.asyncRelaySecretKey":"Relay secretKey","server.asyncSForwardSecretKey":"Server forward secretKey","server.asyncUpdaterSecretKey":"Update secretKey","server.asyncTunnelTransports":"Tunnel transports","server.asyncSignInUserId":"User Id"},a={"common.oper":"已操作","common.operFail":"操作失败","common.confirm":"确认","common.cancel":"取消","common.setting":"设置","common.operating":"正在操作","common.tips":"提示","common.option":"选项","common.access":"无权限","head.home":"首页","head.server":"服务器","head.group":"分组","head.protocol":"打洞协议","head.action":"自定义验证","head.logger":"日志","logger.list":"列表","logger.setting":"设置","logger.clear":"清空","logger.refresh":"刷新","logger.count":"数量","logger.level":"等级","logger.time":"时间","logger.content":"内容","action.text":"设置定义验证的静态Json参数","action.jsonError":"json格式错误","server.messenger":"信标服务器","server.group":"分组","server.sync":"同步","server.messengerAddr":"服务器地址","server.messengerText":"ip:端口 或者 域名:端口","server.messengerSecretKey":"信标密钥","server.messengerSecretKeyText":"密钥正确时可连接服务器","server.messengerUserId":"用户id","server.messengerUserIdText":"你的唯一标识,用于解锁一些限制","permission.closed":"禁止通行","permission.simple":"简单管理","permission.full":"专业管理","permission.clear":"清除连接","status.group":"管理分组","status.groupName":"名称","status.groupPassword":"密码","status.groupOper":"操作","status.groupDelConfirm":"确认删除吗?","status.support":"赞助","status.website":"官网","status.doc":"文档","status.cdkey":"CDKEY商城","status.export":"导出配置","status.exportText":"导出配置,作为子设备运行,如果使用docker,容器映射configs文件夹即可","status.exportSingle":"单设备","status.exportName":"设备名","status.exportNamePlease":"请输入设备名","status.exportApiPassword":"接口密码","status.exportApiPasswordPlease":"请输入接口密码","status.api":"管理接口","status.apiClear":"清除","status.apiAlter":"更改","status.apiAlterConfirm":"确定你的操作?","status.messenger":"信标服务器","status.messengerChange":"更改你的连接设置","status.messengerName":"信标","status.messengerGroup":"分组名","status.messenger0":"登入信标","status.messenger1":"客户端列表","status.messenger2":"客户端删除","status.messenger4":"客户端改名(转发)","status.messenger7":"获取服务器版本","status.messenger8":"客户端搜索ids","status.messenger9":"客户端id列表","status.messenger10":"客户端排序","status.messenger11":"客户端在线","status.messenger12":"生成客户端id","status.messenger13":"登入信标V_1_3_1","status.messenger14":"名字列表","status.messenger2001":"外网端口(转发)","status.messenger2002":"外网端口(转发)","status.messenger2003":"开始打洞(转发)","status.messenger2004":"开始打洞(转发)","status.messenger2005":"打洞失败(转发)","status.messenger2006":"打洞失败(转发)","status.messenger2007":"打洞成功(转发)","status.messenger2008":"打洞成功(转发)","status.messenger2009":"隧道配置(转发)","status.messenger2010":"隧道配置(转发)","status.messenger2012":"隧道同步(转发)","status.messenger2101":"中继通知(转发)","status.messenger2102":"中继通知(转发)","status.messenger2103":"中继请求","status.messenger2105":"中继连通测试","status.messenger2201":"运行网卡(转发)","status.messenger2203":"停止网卡(转发)","status.messenger2204":"更新网卡","status.messenger2205":"更新网卡(转发)","status.messenger2208":"配置网卡网络","status.messenger2209":"获取网卡网络","status.messenger2210":"分配IP","status.messenger2211":"网卡变化","status.messenger2212":"网卡变化(转发)","status.messenger2213":"IP续约","status.messenger2214":"网卡端口转发检测","status.messenger2215":"网卡端口转发检测(转发)","status.messenger2301":"添加内网穿透","status.messenger2302":"移除内网穿透","status.messenger2303":"通知内网穿透(转发)","status.messenger2304":"通知内网穿透UDP(转发)","status.messenger2305":"获取穿透列表(转发)","status.messenger2401":"测试端口转发(转发)","status.messenger2403":"获取端口转发(转发)","status.messenger2507":"同步配置","status.messenger2508":"同步配置(转发)","status.messenger2601":"更新信息(转发)","status.messenger2602":"更新信息(转发)","status.messenger2603":"确认更新(转发)","status.messenger2604":"确认更新(转发)","status.messenger2605":"重启(转发)","status.messenger2606":"重启","status.messenger2607":"服务器更新信息","status.messenger2608":"确认服务器更新","status.messenger2609":"服务器重启","status.messenger2610":"订阅更新信息(转发)","status.messenger2611":"订阅更新信息(转发)","status.messenger2612":"检查更新","status.messenger2613":"检查更新(转发)","status.messenger2701":"服务器流量","status.messenger2702":"服务器信标流量","status.messenger2703":"服务器中继流量","status.messenger2704":"服务器内网穿透流量","status.messenger2807":"同步配置","status.messenger2808":"同步配置(转发)","status.messenger2812":"同步推送","status.messenger2813":"同步拉取","status.messenger2814":"同步通知","status.messenger2815":"同步分页拉取","status.messenger2900":"运行socks5","status.messenger2901":"运行socks5(转发)","status.messenger2902":"停止socks5","status.messenger2903":"停止socks5(转发)","status.messenger2904":"更新socks5","status.messenger2905":"更新socks5(转发)","status.messenger3003":"获取权限","status.messenger3004":"获取权限(转发)","status.messenger3005":"更新权限","status.messenger3006":"更新权限(转发)","status.serverVersion":"服务端的程序版本","status.serverNoUpdate":"未检测到更新","status.serverNotNew":"不是最新版本","status.serverNew":"是最新版本","status.serverDownloading":"正在下载","status.serverDownloaded":"已下载","status.serverUnZipIng":"正在解压","status.serverUnZip":"已解压","status.serverConfirm":"确定更新服务端吗?","status.serverCloseConfirm":"确定关闭服务端吗?","status.flowOnline":"在线","status.flowUpload":"上传","status.flowDownload":"下载","status.flowThisServer":"本服务器","status.flowAllServer":"所有服务器","status.flowAllSend":"发送","status.flowAllReceive":"接收","status.flowOnline7Day":"7天内上线","status.flowServer":"服务器","status.flowType":"类别","status.flowOper":"操作","status.flowDetail":"详情","status.flowMessenger":"信标","status.flowRelay":"中继","status.flowRelayNode":"中继节点","status.flowWanPort":"外网端口","status.flowServerForward":"内网穿透","status.flowSearchName":"名字搜索","status.flowRelaySource":"发起端","status.flowRelayTarget":"目标端","status.flowSearchDomainPort":"域名/端口","status.flowArea":"地区","status.flowNet":"网络","status.tunnelName":"名称","status.tunnelLabel":"说明","status.tunnelProtocol":"协议","status.tunnelBuffer":"缓冲区","status.tunnelReverse":"反向","status.tunnelSSL":"SSL","status.tunnelDisanbled":"禁用","status.tunnelSort":"排序","status.tunnelYes":"是","status.tunnelNo":"否","server.relaySecretKey":"中继密钥","server.relaySSL":"使用ssl","server.relayDisable":"禁用","server.relayUseCdkey":"消耗CDKEY","server.relayUseCdkeyTitle":"如果你有中继密钥,你没有任何限制,也不会消耗CDKEY,可以不管这个\r\n没有中继密钥,有CDKEY,但是不想使用CDKEY,只想使用中继节点默认的限制,就去掉勾选","server.relayNodes":"节点","server.relayTitle":"中继节点","server.relayName":"名称","server.relayFlow":"月流量","server.relayFlowLast":"剩余流量","server.relaySpeed":"带宽","server.relaySpeed1":"总带宽","server.relaySpeed2":"速率","server.relayConnection":"连接数","server.relayDelay":"延迟","server.relayPublic":"公开","server.relayAllow":"支持协议","server.relayUrl":"Url","server.relayOper":"操作","server.relayUse":"使用","server.relayMyCdkey":"我的CDKEY","server.relayCdkey":"管理CDKEY","server.relayAddCdkey":"添加CDKEY","server.relayCdkeyUserId":"用户标识","server.relayCdkeyBandwidth":"带宽","server.relayCdkeyBytes":"流量","server.relayCdkeyPay":"支付","server.relayCdkeyPrice":"原价","server.relayCdkeyPayPrice":"支付","server.relayCdkeyCostPrice":"成本","server.relayCdkeyUserPrice":"会员价","server.relayCdkeyOrder":"订单","server.relayCdkeyOrderId":"订单号","server.relayCdkeyContact":"邮箱","server.relayCdkeyRemark":"备注","server.relayCdkeyAddTime":"添加","server.relayCdkeyStartTime":"开始","server.relayCdkeyEndTime":"有效时间","server.relayCdkeyUseTime":"最后使用","server.relayCdkeyYear":"年","server.relayCdkeyMonth":"月","server.relayCdkeyDay":"日","server.relayCdkeyHour":"时","server.relayCdkeyMin":"分","server.relayCdkeySec":"秒","server.relayCdkeyDuration":"持续时间","server.relayCdkeyOper":"操作","server.relayCdkeyDelConfirm":"确认删除吗?","server.relayCdkeyFlagAll":"全部","server.relayCdkeyFlagTimein":"有效期内","server.relayCdkeyFlagTimeout":"有效期外","server.relayCdkeyFlagBytesin":"剩余","server.relayCdkeyFlagBytesout":"已用完","server.relayCdkeyFlagDeleted":"已删除","server.relayCdkeyFlagUnDeleted":"未删除","server.relayCdkeyTestTitle":"测试解密CDKEY","server.relayCdkeyTestKey":"CDKEY","server.relayCdkeyTestGB":"流量","server.relayCdkeyTestGBError":"流量要大于0","server.relayCdkeyTestSpeed":"带宽Mbps","server.relayCdkeyTestSpeedError":"带宽要大于0","server.relayCdkeyTestTime":"持续时间","server.relayCdkeyTestTimeError":"格式错误","server.relayCdkeyTestUserId":"用户标识","server.relayCdkeyTestUserIdError":"用户标识不正确","server.relayCdkeyTestOrderId":"订单","server.relayCdkeyTestOrderIdError":"订单号不能为空","server.relayCdkeyTestContact":"联系方式","server.relayCdkeyTestCostPrice":"成本","server.relayCdkeyTestPrice":"原价","server.relayCdkeyTestUserPrice":"会员价","server.relayCdkeyTestPayPrice":"支付","server.relayCdkeyTestCount":"数量","server.relayCdkeyTestCountError":"数量要大于0","server.relayCdkeyTestType":"类别","server.relayCdkeyTestTypeError":"类别应该是Relay","server.relayCdkeyTestParseError":"解密失败","server.relayCdkeyImport":"导入CDKEY","server.relayCdkeyImportParse":"解密失败","server.relayCdkeyImportField":"字段有误","server.relayCdkeyImportNetwork":"网络错误","server.relayCdkeyImportOrderId":"订单号已存在","server.sforwardSecretKey":"服务器穿透密钥","server.sforwardText":"当密钥正确是可用","server.updaterSecretKey":"服务器更新密钥","server.updaterText":"当密钥正确是可用","server.updaterRate":"检查更新频率","server.updaterY":"年","server.updaterM":"月","server.updaterD":"日","server.updaterH":"时","server.updaterMM":"分","server.updaterS":"秒","server.asyncText":"同步到所有客户端","server.asyncSelect":"请选择","server.asyncCheckAll":"全选","server.asyncSignInSecretKey":"信标密钥","server.asyncSignInServer":"信标服务器","server.asyncGroupSecretKey":"分组密钥","server.asyncRelaySecretKey":"中继密钥","server.asyncSForwardSecretKey":"服务器穿透密钥","server.asyncUpdaterSecretKey":"更新密钥","server.asyncTunnelTransports":"打洞协议","server.asyncSignInUserId":"用户唯一标识"};const o={"zh-CN":"简体中文","en-US":"English"},l=(0,t.hU)({locale:localStorage.getItem("locale-lang")||navigator.language||navigator.browserLanguage,fallbackLocale:"zh-CN",legacy:!1,allowComposition:!0,messages:{"en-US":n,"zh-CN":a}});var u=l},2773:function(e,r,s){s.d(r,{A:function(){return a}});var t=s(6768),n=s(5931);function a(){const e=(0,n.s9)(),r=(0,t.EW)((()=>e.locale.value)),s=r=>{e.locale.value!==r&&(e.locale.value=r,localStorage.setItem("locale-lang",r))};return{currentLocale:r,changeLocale:s}}},6230:function(e,r,s){var t=s(5130),n=s(6768);function a(e,r,s,t,a,o){const l=(0,n.g2)("router-view"),u=(0,n.g2)("Api"),i=(0,n.g2)("el-config-provider");return(0,n.uX)(),(0,n.CE)("div",null,[(0,n.bF)(i,{locale:t.locale},{default:(0,n.k6)((()=>[t.configed?((0,n.uX)(),(0,n.Wv)(l,{key:0})):(0,n.Q3)("",!0),(0,n.bF)(u)])),_:1},8,["locale"])])}var o=s(3830);const l={class:"port-wrap t-c"},u={class:"pdt-10"},i={class:"pdt-10"};function d(e,r,s,a,o,d){const c=(0,n.g2)("el-input"),y=(0,n.g2)("el-checkbox"),v=(0,n.g2)("el-button"),m=(0,n.g2)("el-dialog");return(0,n.uX)(),(0,n.Wv)(m,{class:"options-center",title:"管理接口","destroy-on-close":"",modelValue:a.showPort,"onUpdate:modelValue":r[3]||(r[3]=e=>a.showPort=e),center:"","show-close":!1,"close-on-click-modal":!1,"align-center":"",width:"200"},{footer:(0,n.k6)((()=>[(0,n.bF)(v,{type:"success",onClick:a.handleConnect1,plain:""},{default:(0,n.k6)((()=>[(0,n.eW)("确 定")])),_:1},8,["onClick"])])),default:(0,n.k6)((()=>[(0,n.Lk)("div",l,[(0,n.Lk)("div",null,[(0,n.eW)(" 接口 : "),(0,n.bF)(c,{modelValue:a.state.api,"onUpdate:modelValue":r[0]||(r[0]=e=>a.state.api=e),style:{width:"70%"},onKeyup:(0,t.jR)(a.handleConnect1,["enter"])},null,8,["modelValue","onKeyup"])]),(0,n.Lk)("div",u,[(0,n.eW)(" 秘钥 : "),(0,n.bF)(c,{"show-password":"",type:"password",modelValue:a.state.psd,"onUpdate:modelValue":r[1]||(r[1]=e=>a.state.psd=e),style:{width:"70%"},onKeyup:(0,t.jR)(a.handleConnect1,["enter"])},null,8,["modelValue","onKeyup"])]),(0,n.Lk)("div",i,[(0,n.bF)(y,{modelValue:a.state.save,"onUpdate:modelValue":r[2]||(r[2]=e=>a.state.save=e)},{default:(0,n.k6)((()=>[(0,n.eW)("保存密码")])),_:1},8,["modelValue"])])])])),_:1},8,["modelValue"])}var c=s(1387),y=s(144),v=s(4),m=s(9299),g=s(8835),p=s(7477),f={components:{Tools:p.S0q},props:["config"],setup(e){const r=(0,o.B)(),s=(0,c.rd)(),t=(0,c.lq)(),a={api:`${window.location.hostname}:1803`,psd:"snltty"},l=JSON.parse(sessionStorage.getItem("api-cache")||localStorage.getItem("api-cache")||JSON.stringify(a)),u=(0,y.Kh)({api:l.api,psd:l.psd,showPort:!1,save:l.save||!1}),i=(0,n.EW)((()=>0==r.value.api.connected&&u.showPort)),d=()=>{l.api=u.api,l.psd=u.psd,l.save=u.save,u.save?localStorage.setItem("api-cache",JSON.stringify(l)):localStorage.setItem("api-cache",""),sessionStorage.setItem("api-cache",JSON.stringify(l)),(0,v.e3)();const e=`ws${"https:"===window.location.protocol?"s":""}://${u.api}`;(0,v.a1)(e,u.psd)},p=()=>{d(),window.location.reload()},f=()=>{(0,g.zj)().then((e=>{r.value.config.Common=e.Common,r.value.config.Client=e.Client,r.value.config.Server=e.Server,r.value.config.Running=e.Running,r.value.config.configed=!0,setTimeout((()=>{f()}),1e3)})).catch((e=>{setTimeout((()=>{f()}),1e3)}))},C=()=>{(0,m.SZ)().then((e=>{r.value.signin.Connected=e.Connected,r.value.signin.Version=e.Version,setTimeout((()=>{C()}),1e3)})).catch((e=>{setTimeout((()=>{C()}),1e3)}))};return(0,n.sV)((()=>{setTimeout((()=>{u.showPort=!0}),500),(0,v.jH)((e=>{e&&(f(),C())})),s.isReady().then((()=>{u.api=t.query.api?`${window.location.hostname}:${t.query.api}`:u.api,u.psd=t.query.psd||u.psd,d()}))})),{state:u,showPort:i,handleConnect1:p}}},C=s(1241);const h=(0,C.A)(f,[["render",d],["__scopeId","data-v-08aa73f8"]]);var k=h,S=s(2721),w=s(6726),T=s(2773),b={components:{Api:k},setup(e){const r=(0,o.v)(),s=(0,n.EW)((()=>r.value.config.configed)),{currentLocale:t}=(0,T.A)(),a=(0,n.EW)((()=>"zh-CN"==t.value?S.A:w.A));return{configed:s,locale:a}}};const P=(0,C.A)(b,[["render",a]]);var I=P;const N=[{path:"/",name:"Full",component:()=>Promise.all([s.e(194),s.e(64),s.e(560)]).then(s.bind(s,4842)),redirect:"/full/index.html",children:[{path:"/full/index.html",name:"FullIndex",component:()=>Promise.all([s.e(194),s.e(538),s.e(968)]).then(s.bind(s,6874))},{path:"/full/servers.html",name:"FullServers",component:()=>s.e(89).then(s.bind(s,8089))},{path:"/full/transport.html",name:"FullTransport",component:()=>s.e(32).then(s.bind(s,4032))},{path:"/full/action.html",name:"FullAction",component:()=>s.e(340).then(s.bind(s,3959))},{path:"/full/logger.html",name:"FullLogger",component:()=>s.e(716).then(s.bind(s,6716))}]},{path:"/net/index.html",name:"Network",component:()=>Promise.all([s.e(194),s.e(64),s.e(538),s.e(743)]).then(s.bind(s,427))},{path:"/no-permission.html",name:"NoPermission",component:()=>s.e(228).then(s.bind(s,6100))}],D=(0,c.aE)({history:(0,c.Bt)(),routes:N});var A=D,K=s(9287),E=s(6161);s(4188),s(2355),s(1862);const U=(0,t.Ef)(I);U.use(K.A),U.use(E.A,{size:"default"}).use(A).mount("#app")},3830:function(e,r,s){s.d(r,{B:function(){return u},v:function(){return l}});var t=s(4),n=s(144),a=s(6768);const o=Symbol(),l=()=>{const e=(0,n.KR)({api:{connected:!1},width:0,height:0,isPhone:(0,a.EW)((()=>e.value.width<800)),isPc:(0,a.EW)((()=>e.value.width>=800)),config:{Common:{},Client:{Servers:[],Accesss:{}},Server:{},Running:{Relay:{Servers:[]},Tuntap:{IP:"",PrefixLength:24},Client:{Servers:[]},AutoSyncs:{}},configed:!1},signin:{Connected:!1,Version:"v1.0.0.0"},bufferSize:["1KB","2KB","4KB","8KB","16KB","32KB","64KB","128KB","256KB","512KB","1024KB"],self:{},hasAccess(e){if(void 0==this.config.Client.Accesss[e])return!1;const r=this.config.Client.Accesss[e].Value||-1,s=this.config.Client.Access||-1;return s>=0&&(0==s||+(BigInt(s)&BigInt(r)).toString()==r)}});return(0,t.jH)((r=>{e.value.api.connected=r})),(0,a.Gt)(o,e),e},u=()=>(0,a.WQ)(o)}},r={};function s(t){var n=r[t];if(void 0!==n)return n.exports;var a=r[t]={id:t,loaded:!1,exports:{}};return e[t].call(a.exports,a,a.exports,s),a.loaded=!0,a.exports}s.m=e,function(){var e=[];s.O=function(r,t,n,a){if(!t){var o=1/0;for(d=0;d=a)&&Object.keys(s.O).every((function(e){return s.O[e](t[u])}))?t.splice(u--,1):(l=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[t,n,a]}}(),function(){s.n=function(e){var r=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(r,{a:r}),r}}(),function(){s.d=function(e,r){for(var t in r)s.o(r,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}}(),function(){s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce((function(r,t){return s.f[t](e,r),r}),[]))}}(),function(){s.u=function(e){return"js/"+e+"."+{32:"07324b9c",64:"a78d050d",89:"3ea503b8",194:"c82648eb",228:"45b76490",340:"9d567527",538:"7180135c",560:"7e9318c3",716:"cf2a55b5",743:"767cfe7e",968:"855ee1b4"}[e]+".js"}}(),function(){s.miniCssF=function(e){return"css/"+e+"."+{32:"1374e89e",89:"7620f7e2",228:"b2a71eca",340:"f859e18d",560:"41f66c44",716:"ccdaa7f7",743:"0511d33e",968:"f5edca10"}[e]+".css"}}(),function(){s.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){s.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)}}(),function(){var e={},r="linker.web:";s.l=function(t,n,a,o){if(e[t])e[t].push(n);else{var l,u;if(void 0!==a)for(var i=document.getElementsByTagName("script"),d=0;d natError;
+ public bool AppNat=> linkerTunDevice?.AppNat ?? false;
+
private FrozenDictionary mapDic = new Dictionary().ToFrozenDictionary();
private uint[] masks = Array.Empty();
-
private ConcurrentDictionary natDic = new ConcurrentDictionary();
diff --git a/src/linker.tun/LinkerWinTunDevice.cs b/src/linker.tun/LinkerWinTunDevice.cs
index 5eef77bb..1b717bb6 100644
--- a/src/linker.tun/LinkerWinTunDevice.cs
+++ b/src/linker.tun/LinkerWinTunDevice.cs
@@ -26,10 +26,11 @@ namespace linker.tun
private string defaultInterfaceName = string.Empty;
private int defaultInterfaceNumber = 0;
private IPAddress defaultInterfaceIP;
+ private uint defaultInterfaceIP32;
private CancellationTokenSource tokenSource;
- private WinDivertNAT winDivertNAT;
+ private WinDivertNAT winDivertNAT = new WinDivertNAT();
public LinkerWinTunDevice()
{
@@ -218,9 +219,8 @@ namespace linker.tun
}
public void SetAppNat(LinkerTunAppNatItemInfo[] items, out string error)
{
- winDivertNAT?.Dispose();
- winDivertNAT = new WinDivertNAT(new WinDivertNAT.AddrInfo(address, prefixLength), items.Select(c => new WinDivertNAT.AddrInfo(c.IP, c.PrefixLength)).ToArray(), defaultInterfaceIP);
- winDivertNAT.Setup(out error);
+ winDivertNAT.Shutdown();
+ winDivertNAT.Setup(address, items.Select(c => new WinDivertNAT.AddrInfo(c.IP, c.PrefixLength)).ToArray(), defaultInterfaceIP, out error);
}
public void RemoveNat(out string error)
{
@@ -239,7 +239,7 @@ namespace linker.tun
try
{
- winDivertNAT?.Dispose();
+ winDivertNAT.Shutdown();
}
catch (Exception)
{
@@ -357,7 +357,7 @@ namespace linker.tun
{
if (session == 0 || tokenSource.IsCancellationRequested) return false;
- if (ToAppNat(packet)) return true;
+ if (winDivertNAT.Inject(packet)) return true;
IntPtr packetPtr = WinTun.WintunAllocateSendPacket(session, (uint)packet.Length);
if (packetPtr != 0)
@@ -375,21 +375,6 @@ namespace linker.tun
}
return false;
}
- private bool ToAppNat(ReadOnlyMemory packet)
- {
- ReadOnlySpan span = packet.Span;
- if ((byte)(span[0] >> 4 & 0b1111) == 4 && AppNat) //只支持IPV4
- {
- ReadOnlySpan ip = span.Slice(16, 4);
- uint distIP = BinaryPrimitives.ReadUInt32BigEndian(ip);
- //不是虚拟网卡,不是广播,启用了应用层NAT,NAT成功
- if (distIP != address32 && ip.GetIsBroadcastAddress() == false && winDivertNAT.Inject(packet))
- {
- return true;
- }
- }
- return false;
- }
private void GetWindowsInterfaceNum()
{
@@ -420,6 +405,7 @@ namespace linker.tun
defaultInterfaceName = inter.Name;
defaultInterfaceNumber = inter.GetIPProperties().GetIPv4Properties().Index;
defaultInterfaceIP = ip;
+ defaultInterfaceIP32 = NetworkHelper.ToValue(ip);
return;
}
}
diff --git a/src/linker.tun/WinDivertNAT.cs b/src/linker.tun/WinDivertNAT.cs
index 1779cdce..e036207f 100644
--- a/src/linker.tun/WinDivertNAT.cs
+++ b/src/linker.tun/WinDivertNAT.cs
@@ -1,5 +1,7 @@
using linker.libs;
+using linker.libs.extends;
using linker.libs.timer;
+using System.Buffers.Binary;
using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
@@ -9,7 +11,6 @@ namespace linker.tun
{
///
/// 应用层简单SNAT
- /// 大概意思是
/// 1,收到【客户端A】的数据包,10.18.18.23(客户端A的虚拟网卡IP)->192.168.56.6(局域网IP)
/// 2,改为 192.168.56.2(本机IP)->192.168.56.6(局域网IP)
/// 3,回来是 192.168.56.6(局域网IP)->192.168.56.2(本机IP)
@@ -18,40 +19,53 @@ namespace linker.tun
///
public sealed class WinDivertNAT
{
+ public bool Running => winDivert != null;
+
///
/// 驱动
///
- WinDivert winDivert;
+ private WinDivert winDivert;
+
///
- /// 源
+ /// 网卡IP,用来作为源地址
///
- AddrInfo src;
+ private NetworkIPv4Addr interfaceAddr;
+
+ private uint srcIp;
+
///
- /// 目标
+ /// 用来注入数据包
///
- AddrInfo[] dsts;
-
- IPAddress interfaceIp;
- NetworkIPv4Addr interfaceAddr;
-
- public bool Running => winDivert != null;
-
- private CancellationTokenSource cts;
- private ConcurrentDictionary<(uint src, ushort srcPort, uint dst, ushort dstPort, ProtocolType pro), NatMapInfo> natMap = new ConcurrentDictionary<(uint src, ushort srcPort, uint dst, ushort dstPort, ProtocolType pro), NatMapInfo>();
-
- public WinDivertNAT(AddrInfo src, AddrInfo[] dsts, IPAddress interfaceIp)
+ private WinDivertAddress addr = new WinDivertAddress
+ {
+ Layer = WinDivert.Layer.Network,
+ Outbound = true,
+ IPv6 = false
+ };
+ private CancellationTokenSource cts;
+
+ ///
+ /// 五元组NAT映射表
+ ///
+ private ConcurrentDictionary<(uint src, ushort srcPort, uint dst, ushort dstPort, ProtocolType pro), NatMapInfo> natMap = new ConcurrentDictionary<(uint src, ushort srcPort, uint dst, ushort dstPort, ProtocolType pro), NatMapInfo>();
+ ///
+ /// 分配端口表
+ ///
+ private ConcurrentDictionary<(uint src, ushort port), ushort> source2portMap = new ConcurrentDictionary<(uint src, ushort port), ushort>();
+
+ public WinDivertNAT()
{
- this.src = src;
- this.dsts = dsts;
- this.interfaceIp = interfaceIp;
}
///
/// 启动
///
- ///
+ /// 虚拟网卡IP
+ /// 需要NAT的IP
+ /// 本地网卡IP
+ /// false的时候会有报错信息
///
- public bool Setup(out string error)
+ public bool Setup(IPAddress src, AddrInfo[] dsts, IPAddress interfaceIp, out string error)
{
error = string.Empty;
@@ -60,18 +74,21 @@ namespace linker.tun
error = "only windows x64,x86";
return false;
}
- if (src == null || dsts == null || dsts.Length == 0)
+ if (dsts == null || dsts.Length == 0)
{
error = "src is null, or dsts empty";
return false;
}
try
{
+ srcIp = NetworkHelper.ToValue(src);
interfaceAddr = IPv4Addr.Parse(interfaceIp.ToString());
- winDivert = new WinDivert(BuildFilter(), WinDivert.Layer.Network, 0, 0);
+ winDivert = new WinDivert(BuildFilter(dsts), WinDivert.Layer.Network, 0, 0);
+
+ cts = new CancellationTokenSource();
+ Recv(cts);
+ ClearTask(cts);
- Recv();
- ClearTask();
return true;
}
catch (Exception ex)
@@ -80,14 +97,20 @@ namespace linker.tun
}
return false;
}
- private string BuildFilter()
+ ///
+ /// 过滤条件,只过滤一定的数据包
+ ///
+ ///
+ private string BuildFilter(AddrInfo[] dsts)
{
IEnumerable ipRanges = dsts.Select(c => $"(ip.SrcAddr >= {c.NetworkIP} and ip.SrcAddr <= {c.BroadcastIP})");
return $"inbound and ({string.Join(" or ", ipRanges)})";
}
- private void Recv()
+ ///
+ /// 开始接收数据包
+ ///
+ private void Recv(CancellationTokenSource cts)
{
- cts = new CancellationTokenSource();
TimerHelper.Async(() =>
{
Memory packet = new Memory(new byte[10 * WinDivert.MTUMax]);
@@ -112,7 +135,7 @@ namespace linker.tun
break;
}
}
- Dispose();
+ Shutdown();
});
}
@@ -144,28 +167,30 @@ namespace linker.tun
/// 注入数据包,让它直接走正确的网卡,路由到目的地
///
///
- public unsafe bool Inject(ReadOnlyMemory buffer)
+ public unsafe bool Inject(ReadOnlyMemory packet)
{
- fixed (byte* ptr = buffer.Span)
+ if (winDivert == null) return false;
+
+ IPV4Packet ipv4 = new IPV4Packet(packet.Span);
+ //不是 ipv4,是虚拟网卡ip,是广播,不nat
+ if (ipv4.Version != ProtocolType.IPv4 || ipv4.DstAddr == srcIp || ipv4.DstAddrSpan.GetIsBroadcastAddress()) return false;
+
+ fixed (byte* ptr = packet.Span)
{
- foreach (var (i, p) in new WinDivertIndexedPacketParser(buffer))
+ foreach (var (i, p) in new WinDivertIndexedPacketParser(packet))
{
- bool result = (ProtocolType)p.IPv4Hdr->Protocol switch
+ //本机网卡IP不需要改,直接注入就可以
+ if (p.IPv4Hdr->DstAddr != interfaceAddr)
{
- ProtocolType.Icmp => InjectIcmp(p, ptr),
- ProtocolType.Tcp => InjectTcp(p, ptr),
- ProtocolType.Udp => InjectUdp(p, ptr),
- _ => false,
- };
- if (result == false) return false;
-
- WinDivertAddress addr = new WinDivertAddress
- {
- Layer = WinDivert.Layer.Network,
- Outbound = true,
- IPv6 = false
- };
-
+ bool result = (ProtocolType)p.IPv4Hdr->Protocol switch
+ {
+ ProtocolType.Icmp => InjectIcmp(p, ptr),
+ ProtocolType.Tcp => InjectTcp(p, ptr),
+ ProtocolType.Udp => InjectUdp(p, ptr),
+ _ => false,
+ };
+ if (result == false) return false;
+ }
WinDivert.CalcChecksums(p.Packet.Span, ref addr, 0);
winDivert.SendEx(p.Packet.Span, new ReadOnlySpan(ref addr));
}
@@ -184,15 +209,16 @@ namespace linker.tun
//只操作response 和 request
if (p.ICMPv4Hdr->Type != 0 && p.ICMPv4Hdr->Type != 8) return false;
- //IP头长度
- byte ipHeaderLength = (byte)((p.Packet.Span[0] & 0b1111) * 4);
+ IPV4Packet ipv4 = new IPV4Packet(ptr);
+ if (ipv4.IsFragment) return false;
+
//原标识符,两个字节
- byte* ptr0 = ptr + ipHeaderLength + 4;
- byte* ptr1 = ptr + ipHeaderLength + 5;
+ byte* ptr0 = ipv4.IcmpIdentifier0;
+ byte* ptr1 = ipv4.IcmpIdentifier1;
//用源地址的第三个,第四个字节作为新的标识符
- byte identifier0 = p.Packet.Span[14];
- byte identifier1 = p.Packet.Span[15];
+ byte identifier0 = ipv4.SrcAddrSpan[2];
+ byte identifier1 = ipv4.SrcAddrSpan[3];
//保存,源地址。标识符0,目的地址,标识符1,ICMP
//取值,目的地址,标识符0,源地址,标识符1,ICMP
@@ -225,12 +251,12 @@ namespace linker.tun
{
//只操作response 和 request
if (p.ICMPv4Hdr->Type != 0 && p.ICMPv4Hdr->Type != 8) return false;
- //IP头长度
- byte ipHeaderLength = (byte)((*ptr & 0b1111) * 4);
+
+ IPV4Packet ipv4 = new IPV4Packet(ptr);
//标识符,两个字节
- byte* ptr0 = ptr + ipHeaderLength + 4;
- byte* ptr1 = ptr + ipHeaderLength + 5;
+ byte* ptr0 = ipv4.IcmpIdentifier0;
+ byte* ptr1 = ipv4.IcmpIdentifier1;
ValueTuple key = (p.IPv4Hdr->DstAddr.Raw, *ptr0, p.IPv4Hdr->SrcAddr.Raw, *ptr1, ProtocolType.Icmp);
if (natMap.TryRemove(key, out NatMapInfo natMapInfo))
@@ -244,46 +270,143 @@ namespace linker.tun
}
return false;
}
+ ///
+ /// 注入TCP
+ ///
+ ///
+ ///
+ ///
private unsafe bool InjectTcp(WinDivertParseResult p, byte* ptr)
{
- return false;
- byte ipHeaderLength = (byte)((p.Packet.Span[0] & 0b1111) * 4);
+ IPV4Packet ipv4 = new IPV4Packet(ptr);
- byte* ptr0 = ptr + ipHeaderLength + 4;
- byte* ptr1 = ptr + ipHeaderLength + 5;
-
- byte identifier0 = p.Packet.Span[14];
- byte identifier1 = p.Packet.Span[15];
- ValueTuple key = (interfaceAddr.Raw, identifier0, p.IPv4Hdr->DstAddr.Raw, identifier1, ProtocolType.Icmp);
- NatMapInfo natMapInfo = new NatMapInfo
+ //新端口
+ ValueTuple portKey = (p.IPv4Hdr->SrcAddr.Raw, p.TCPHdr->SrcPort);
+ if (source2portMap.TryGetValue(portKey, out ushort newPort) == false)
{
- SrcAddr = p.IPv4Hdr->SrcAddr,
- Identifier0 = *ptr0,
- Identifier1 = *ptr1,
- LastTime = Environment.TickCount64
- };
- natMap.AddOrUpdate(key, natMapInfo, (a, b) => natMapInfo);
+ //只在syn时建立
+ if (ipv4.TcpFlagSyn == false || ipv4.TcpFlagAck) return false;
+ newPort = ApplyNewPort();
+ source2portMap.TryAdd(portKey, newPort);
+ }
+
+ //添加映射
+ ValueTuple key = (interfaceAddr.Raw, newPort, p.IPv4Hdr->DstAddr.Raw, p.TCPHdr->DstPort, ProtocolType.Tcp);
+ if (natMap.TryGetValue(key, out NatMapInfo natMapInfo) == false)
+ {
+ natMapInfo = new NatMapInfo
+ {
+ SrcAddr = p.IPv4Hdr->SrcAddr,
+ SrcPort = p.TCPHdr->SrcPort,
+ LastTime = Environment.TickCount64
+ };
+ natMap.TryAdd(key, natMapInfo);
+ }
+ natMapInfo.LastTime = Environment.TickCount64;
+ //fin+ack 或者 rst 就清除
+ if (ipv4.TcpFlagFin) natMapInfo.Fin0 = ipv4.TcpFlagFin;
+ if (ipv4.TcpFlagRst) natMapInfo.Rst = ipv4.TcpFlagRst;
+ if (natMapInfo.Fin0 && ipv4.TcpFlagAck) natMapInfo.FinAck = ipv4.TcpFlagAck;
- *ptr0 = identifier0;
- *ptr1 = identifier1;
p.IPv4Hdr->SrcAddr = interfaceAddr;
-
+ p.TCPHdr->SrcPort = newPort;
return true;
}
+ ///
+ /// 还原TCP
+ ///
+ ///
+ ///
+ ///
private unsafe bool RecvTcp(WinDivertParseResult p, byte* ptr)
{
+ IPV4Packet ipv4 = new IPV4Packet(ptr);
+
+ ValueTuple key = (p.IPv4Hdr->DstAddr.Raw, p.TCPHdr->DstPort, p.IPv4Hdr->SrcAddr.Raw, p.TCPHdr->SrcPort, ProtocolType.Tcp);
+ if (natMap.TryGetValue(key, out NatMapInfo natMapInfo))
+ {
+ natMapInfo.LastTime = Environment.TickCount64;
+
+ //fin+ack 或者 rst 就清除
+ if (ipv4.TcpFlagFin) natMapInfo.Fin1 = ipv4.TcpFlagFin;
+ if (ipv4.TcpFlagRst) natMapInfo.Rst = ipv4.TcpFlagRst;
+ if (natMapInfo.Fin1 && ipv4.TcpFlagAck) natMapInfo.FinAck = ipv4.TcpFlagAck;
+
+ p.IPv4Hdr->DstAddr = natMapInfo.SrcAddr;
+ p.TCPHdr->DstPort = natMapInfo.SrcPort;
+ return true;
+ }
return false;
}
+ ///
+ /// 注入UDP
+ ///
+ ///
+ ///
+ ///
private unsafe bool InjectUdp(WinDivertParseResult p, byte* ptr)
{
+ //新端口
+ ValueTuple portKey = (p.IPv4Hdr->SrcAddr.Raw, p.UDPHdr->SrcPort);
+ if (source2portMap.TryGetValue(portKey, out ushort newPort) == false)
+ {
+ newPort = ApplyNewPort();
+ source2portMap.TryAdd(portKey, newPort);
+ }
+ //映射
+ ValueTuple key = (interfaceAddr.Raw, newPort, p.IPv4Hdr->DstAddr.Raw, p.UDPHdr->DstPort, ProtocolType.Tcp);
+ if (natMap.TryGetValue(key, out NatMapInfo natMapInfo) == false)
+ {
+ natMapInfo = new NatMapInfo
+ {
+ SrcAddr = p.IPv4Hdr->SrcAddr,
+ SrcPort = p.UDPHdr->SrcPort,
+ LastTime = Environment.TickCount64
+ };
+ natMap.TryAdd(key, natMapInfo);
+ }
+ natMapInfo.LastTime = Environment.TickCount64;
+
+ p.IPv4Hdr->SrcAddr = interfaceAddr;
+ p.UDPHdr->SrcPort = newPort;
+ return true;
+ }
+ ///
+ /// 还原UDP
+ ///
+ ///
+ ///
+ ///
+ private unsafe bool RecvUdp(WinDivertParseResult p, byte* ptr)
+ {
+ ValueTuple key = (p.IPv4Hdr->DstAddr.Raw, p.UDPHdr->DstPort, p.IPv4Hdr->SrcAddr.Raw, p.UDPHdr->SrcPort, ProtocolType.Tcp);
+ if (natMap.TryGetValue(key, out NatMapInfo natMapInfo))
+ {
+ natMapInfo.LastTime = Environment.TickCount64;
+ p.IPv4Hdr->DstAddr = natMapInfo.SrcAddr;
+ p.UDPHdr->DstPort = natMapInfo.SrcPort;
+ return true;
+ }
return false;
}
- private unsafe bool RecvUdp(WinDivertParseResult p, byte* ptr) { return false; }
///
- /// 注销
+ /// 申请一个新的端口
///
- public void Dispose()
+ ///
+ private ushort ApplyNewPort()
+ {
+ using Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
+ socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
+ socket.Bind(new IPEndPoint(IPAddress.Any, 0));
+
+ return (ushort)(socket.LocalEndPoint as IPEndPoint).Port;
+ }
+
+ ///
+ /// 关闭
+ ///
+ public void Shutdown()
{
cts?.Cancel();
@@ -291,17 +414,22 @@ namespace linker.tun
winDivert = null;
natMap.Clear();
+ source2portMap.Clear();
}
- private void ClearTask()
+ private void ClearTask(CancellationTokenSource cts)
{
TimerHelper.SetIntervalLong(() =>
{
long now = Environment.TickCount64;
- foreach (var item in natMap.Where(c => now - c.Value.LastTime > 1 * 60 * 60).Select(c => c.Key).ToList())
+ foreach (var item in natMap.Where(c => now - c.Value.LastTime > 1 * 60 * 60 || c.Value.FinAck || c.Value.Rst).Select(c => c.Key).ToList())
{
- natMap.TryRemove(item, out _);
+ if (natMap.TryRemove(item, out NatMapInfo natMapInfo))
+ {
+ source2portMap.TryRemove((natMapInfo.SrcAddr.Raw, natMapInfo.SrcPort), out _);
+ }
}
+ return cts.IsCancellationRequested == false;
}, 5000);
}
public sealed class AddrInfo
@@ -336,10 +464,112 @@ namespace linker.tun
}
sealed class NatMapInfo
{
+ //IP头
public NetworkIPv4Addr SrcAddr { get; set; }
+
+ //TCP/UDP
+ public NetworkUInt16 SrcPort { get; set; }
+
+ //ICMP
public byte Identifier0 { get; set; }
public byte Identifier1 { get; set; }
+
+ //TCP
+ public bool Fin0 { get; set; }
+ public bool Fin1 { get; set; }
+ public bool FinAck { get; set; }
+ public bool Rst { get; set; }
+
public long LastTime { get; set; } = Environment.TickCount64;
}
+
+
+ ///
+ /// IPV4 包
+ ///
+ unsafe struct IPV4Packet
+ {
+ byte* ptr;
+
+ ///
+ /// 协议版本
+ ///
+ public ProtocolType Version => (ProtocolType)((*ptr >> 4) & 0b1111);
+
+ ///
+ /// 源地址
+ ///
+ public uint SrcAddr => BinaryPrimitives.ReverseEndianness(*(uint*)(ptr + 12));
+ ///
+ /// 目的地址
+ ///
+ public uint DstAddr => BinaryPrimitives.ReverseEndianness(*(uint*)(ptr + 16));
+ ///
+ /// 源地址
+ ///
+ public ReadOnlySpan SrcAddrSpan => new Span((ptr + 12), 4);
+ ///
+ /// 目的地址
+ ///
+ public ReadOnlySpan DstAddrSpan => new Span((ptr + 16), 4);
+
+ ///
+ /// IP头长度
+ ///
+ public int IPHeadLength => (*ptr & 0b1111) * 4;
+
+ ///
+ /// IP Flag
+ ///
+ public byte Flag => (byte)(*(ptr + 6) >> 5);
+ ///
+ /// 不分片
+ ///
+ public bool DontFragment => (Flag & 0x02) == 2;
+ ///
+ /// 更多分片
+ ///
+ public bool MoreFragment => (Flag & 0x01) == 1;
+ ///
+ /// 分片偏移量
+ ///
+ public ushort Offset => (ushort)(BinaryPrimitives.ReverseEndianness(*(ushort*)(ptr + 6)) & 0x1fff);
+ ///
+ /// 是否分片
+ ///
+ public bool IsFragment => MoreFragment || Offset > 0;
+
+ ///
+ /// ICMP标志第一个字节
+ ///
+ public byte* IcmpIdentifier0 => ptr + IPHeadLength + 4;
+ ///
+ /// ICMP标志第二个字节
+ ///
+ public byte* IcmpIdentifier1 => ptr + IPHeadLength + 5;
+
+ ///
+ /// TCP Flag
+ ///
+ public byte TcpFlag => *(ptr + IPHeadLength + 13);
+ public bool TcpFlagFin => (TcpFlag & 0b000001) != 0;
+ public bool TcpFlagSyn => (TcpFlag & 0b000010) != 0;
+ public bool TcpFlagRst => (TcpFlag & 0b000100) != 0;
+ public bool TcpFlagPsh => (TcpFlag & 0b001000) != 0;
+ public bool TcpFlagAck => (TcpFlag & 0b010000) != 0;
+ public bool TcpFlagUrg => (TcpFlag & 0b100000) != 0;
+
+ public IPV4Packet(byte* ptr)
+ {
+ this.ptr = ptr;
+ }
+ public IPV4Packet(ReadOnlySpan span)
+ {
+ fixed (byte* ptr = span)
+ {
+ this.ptr = ptr;
+ }
+ }
+ }
}
}
diff --git a/src/linker.web/src/assets/style.css b/src/linker.web/src/assets/style.css
index b75c5b50..72a4223d 100644
--- a/src/linker.web/src/assets/style.css
+++ b/src/linker.web/src/assets/style.css
@@ -195,6 +195,9 @@ span.split-pad10 {
.green {
color: green !important;
}
+.app-nat {
+ color: #018a81 !important;
+}
.yellow {
color: #e68906 !important;
diff --git a/src/linker.web/src/views/full/devices/TuntapShow.vue b/src/linker.web/src/views/full/devices/TuntapShow.vue
index 22e3ad70..e203413d 100644
--- a/src/linker.web/src/views/full/devices/TuntapShow.vue
+++ b/src/linker.web/src/views/full/devices/TuntapShow.vue
@@ -10,6 +10,9 @@
{{ tuntap.list[item.MachineId].IP }}
+
+ {{ tuntap.list[item.MachineId].IP }}
+
{{ tuntap.list[item.MachineId].IP }}
diff --git a/src/linker/linker.csproj b/src/linker/linker.csproj
index f3dc2ae9..0b67e32e 100644
--- a/src/linker/linker.csproj
+++ b/src/linker/linker.csproj
@@ -22,7 +22,8 @@
snltty
1. 优化自动分配IP
2. 优化网卡,排除不明数据包
-3. 虚拟网卡点对网IP映射,用于解决网段冲突
+3. 虚拟网卡点对网IP映射,用于解决网段冲突
+4. 内置应用层SNAT,用于无法使用系统NAT的windows系统
snltty
https://github.com/snltty/linker
https://github.com/snltty/linker
diff --git a/version.txt b/version.txt
index a02ac874..d7f4b823 100644
--- a/version.txt
+++ b/version.txt
@@ -1,5 +1,6 @@
v1.7.3
-2025-04-20 00:00:20
+2025-04-20 17:21:43
1. 优化自动分配IP
2. 优化网卡,排除不明数据包
-3. 虚拟网卡点对网IP映射,用于解决网段冲突
\ No newline at end of file
+3. 虚拟网卡点对网IP映射,用于解决网段冲突
+4. 内置应用层SNAT,用于无法使用系统NAT的windows系统
\ No newline at end of file