20 Commits

Author SHA1 Message Date
wujiawei
ac38d8dfd7 [update] 1.3.4-JDK24-SNAPSHOT 2025-07-21 22:18:05 +08:00
wujiawei
6142105ac3 [update] 1.3.3-JDK24 2025-07-21 22:07:44 +08:00
wujiawei
ff3681fc46 [update] 1.3.1-JDK24 2025-07-21 16:59:53 +08:00
wujiawei
9e1a47f4e9 [update] 1.3.1-JDK24 2025-07-19 22:57:56 +08:00
wujiawei
13858a0b7c [add] 修改中央仓库https://central.sonatype.com/account 2025-07-17 19:25:36 +08:00
wujiawei
caff71be87 [add] 修改中央仓库https://central.sonatype.com/account 2025-07-17 00:06:24 +08:00
wujiawei
04c683cb9a [add] 修改中央仓库https://central.sonatype.com/account 2025-07-16 23:49:03 +08:00
wujiawei
e5f53b520b 【fix】授权调整 2025-07-16 21:49:01 +08:00
wujiawei
50b2b1866c 【fix】授权调整 2025-07-16 21:30:09 +08:00
wujiawei
841c24a6ed 【fix】注释udp、通道关闭验证通道关联通道是否存在 2025-07-15 16:20:06 +08:00
wujiawei
e387a43437 【fix】ui 调整 2025-07-15 15:17:19 +08:00
wujiawei
438198bcc5 【fix】ui 调整 2025-07-15 15:16:07 +08:00
wujiawei
afe1a1417f 【fix】ui 调整 2025-07-15 13:24:36 +08:00
wujiawei
d9d82a99d5 【fix】ui 调整 2025-07-15 13:23:53 +08:00
wujiawei
c5aeb6f0f7 【fix】proxy代理支持令牌验证 2025-07-14 18:54:10 +08:00
wujiawei
f8f485a14a 【fix】本地代理支持代理日志记录 2025-07-13 14:52:18 +08:00
wujiawei
7178974abb 【fix】 本地socket代理通道添加属性。目标ip、目标端口、访客ID 2025-07-12 12:07:40 +08:00
wujiawei
f2fede4a96 【fix】 添加版本记录 2025-07-09 22:15:54 +08:00
wujiawei
74eab26478 [add] 修改inethost字段长度 2025-07-01 20:28:44 +08:00
wujiawei
faabae3d19 [add] 添加socks授权验证 2025-06-26 21:00:20 +08:00
247 changed files with 1149 additions and 479 deletions

View File

@@ -7,15 +7,15 @@
#### 操作步骤拥有公网ip的服务器开发6001web、7001端口tcp然后执行命令启动服务端
```shell
docker run -d -it -p 6001:6001 -p 7001:7001 -e spring.profiles.active=prod -e MAIN_DB_HOST=localhost:3306 -e MAIN_DB_PASSWORD=root -e MAIN_DB_PASSWORD=root --name wu-lazy-cloud-heartbeat-server-start registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-server-start:1.3.1-JDK24-SNAPSHOT
docker run -d -it -p 6001:6001 -p 7001:7001 -e spring.profiles.active=prod -e MAIN_DB_HOST=localhost:3306 -e MAIN_DB_PASSWORD=root -e MAIN_DB_PASSWORD=root --name wu-lazy-cloud-heartbeat-server-start registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-server-start:1.3.1-JDK24
```
#### 操作步骤:杭州本地机房所在网络服务器启动客户端、你老家所在网络中启动客户端,命令如下
```shell
docker run -d -it --privileged --name hangzhou-client --restart=always -e spring.lazy.netty.client.inet-host=公网IP -e spring.lazy.netty.client.inet-port=7001 -e spring.lazy.netty.client.client-id="hangzhou-jifang" registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24-SNAPSHOT
docker run -d -it --privileged --name hangzhou-client --restart=always -e spring.lazy.netty.client.inet-host=公网IP -e spring.lazy.netty.client.inet-port=7001 -e spring.lazy.netty.client.client-id="hangzhou-jifang" registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24
```
```shell
docker run -d -it --privileged --name my-home-client --restart=always -e spring.lazy.netty.client.inet-host=公网IP -e spring.lazy.netty.client.inet-port=7001 -e spring.lazy.netty.client.client-id="my-home" registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24-SNAPSHOT
docker run -d -it --privileged --name my-home-client --restart=always -e spring.lazy.netty.client.inet-host=公网IP -e spring.lazy.netty.client.inet-port=7001 -e spring.lazy.netty.client.client-id="my-home" registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24
```
#### 操作步骤:配置端口
![client_permeate_port_pool.png](client_permeate_port_pool.png)

View File

@@ -91,21 +91,21 @@ ORM操作数据库使用环境JDK24 Spring Boot 3.5.0。的网络穿透、渗
| 模块 | 版本 | 描述 |
|------------------------------------------------------------------------------------------------------------|----------------------|------------------------------|
| [wu-lazy-cloud-heartbeat-common](wu-lazy-cloud-heartbeat-common) | 1.3.1-JDK24-SNAPSHOT | 内网穿透公共模块(声明接口、枚举、常量、适配器、解析器) |
| [wu-lazy-cloud-heartbeat-client](wu-lazy-cloud-heartbeat-client) | 1.3.1-JDK24-SNAPSHOT | 客户端(支持二次开发) |
| [wu-lazy-cloud-heartbeat-server](wu-lazy-cloud-heartbeat-server) | 1.3.1-JDK24-SNAPSHOT | 服务端(支持二次开发) |
| [wu-lazy-cloud-heartbeat-client-start](wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start) | 1.3.1-JDK24-SNAPSHOT | 客户端样例 |
| [wu-lazy-cloud-heartbeat-server-start](wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start) | 1.3.1-JDK24-SNAPSHOT | 服务端样例 |
| [wu-lazy-cloud-heartbeat-common](wu-lazy-cloud-heartbeat-common) | 1.3.1-JDK24 | 内网穿透公共模块(声明接口、枚举、常量、适配器、解析器) |
| [wu-lazy-cloud-heartbeat-client](wu-lazy-cloud-heartbeat-client) | 1.3.1-JDK24 | 客户端(支持二次开发) |
| [wu-lazy-cloud-heartbeat-server](wu-lazy-cloud-heartbeat-server) | 1.3.1-JDK24 | 服务端(支持二次开发) |
| [wu-lazy-cloud-heartbeat-client-start](wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start) | 1.3.1-JDK24 | 客户端样例 |
| [wu-lazy-cloud-heartbeat-server-start](wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start) | 1.3.1-JDK24 | 服务端样例 |
### 使用技术
| 框架 | 版本 | 描述 |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------|--------------|
| spring-boot | 3.0.7 | springboot框架 |
| [wu-framework-web](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-framework-web) | 1.3.1-JDK24-SNAPSHOT | web容器 |
| [Lazy -ORM](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-inner-intergration/wu-database-parent) | 1.3.1-JDK24-SNAPSHOT | ORM |
| [wu-framework-web](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-framework-web) | 1.3.1-JDK24 | web容器 |
| [Lazy -ORM](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-inner-intergration/wu-database-parent) | 1.3.1-JDK24 | ORM |
| mysql-connector-j | 8.0.33 | mysql驱动 |
| [wu-authorization-server-platform-starter](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-smart-platform/wu-authorization-server-platform-starter) | 1.3.1-JDK24-SNAPSHOT | 用户授权体系 |
| [wu-authorization-server-platform-starter](https://gitee.com/wujiawei1207537021/wu-framework-parent/tree/master/wu-smart-platform/wu-authorization-server-platform-starter) | 1.3.1-JDK24 | 用户授权体系 |
### 使用环境
@@ -118,7 +118,7 @@ ORM操作数据库使用环境JDK24 Spring Boot 3.5.0。的网络穿透、渗
docker启动
docker run -d -it -p 18080:18080 --name wu-lazy-cloud-heartbeat-server registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-server:1.3.1-JDK24-SNAPSHOT
docker run -d -it -p 18080:18080 --name wu-lazy-cloud-heartbeat-server registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-server:1.3.1-JDK24
http://127.0.0.1:18080/swagger-ui/index.html

View File

@@ -28,7 +28,7 @@ spec:
containers:
- name: wu-lazy-cloud-heartbeat-local-client-start
image: >-
registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24-SNAPSHOT
registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24
env:
- name: spring.lazy.netty.client.inet-host
value: 124.222.48.62

View File

@@ -9,7 +9,7 @@
```shell
docker run -d -it -p 6001:6001 -p 7001:7001 -p 8001:8001 -p 9001:9001 --name wlcn-s registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-server:1.3.1-JDK24-SNAPSHOT
docker run -d -it -p 6001:6001 -p 7001:7001 -p 8001:8001 -p 9001:9001 --name wlcn-s registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-server:1.3.1-JDK24
```
##### 启动客户端
@@ -24,5 +24,5 @@ docker run -d -it -p 6001:6001 -p 7001:7001 -p 8001:8001 -p 9001:9001 --nam
- 打开浏览器访问界面 http://127.0.0.1:6004/netty-client-local-ui/index.html
```shell
docker run -d -it --privileged -p 6004:6004 --name wlcn-c --restart=always -e spring.lazy.netty.client.inet-host=192.168.xx.xx -e spring.lazy.netty.client.inet-port=7001 -e spring.lazy.netty.client.client-id="wlcn-c" registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24-SNAPSHOT
docker run -d -it --privileged -p 6004:6004 --name wlcn-c --restart=always -e spring.lazy.netty.client.inet-host=192.168.xx.xx -e spring.lazy.netty.client.inet-port=7001 -e spring.lazy.netty.client.client-id="wlcn-c" registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.3.1-JDK24
```

224
pom.xml
View File

@@ -8,14 +8,33 @@
<parent>
<artifactId>wu-framework-parent</artifactId>
<groupId>top.wu2020</groupId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</parent>
<artifactId>wu-lazy-cloud-network</artifactId>
<packaging>pom</packaging>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
<description>云上云下</description>
<name>wlcn项目</name>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
<!-->开发者的信息<-->
<developers>
<developer>
<name>Jia Wei Wu</name>
<email>1207537021@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-->项目的版本管理地址<-->
<scm>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
</scm>
<modules>
<!-- 云上服务组件 -->
@@ -38,6 +57,7 @@
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
@@ -57,12 +77,14 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>3.5.3</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${spring-boot-starter.version}</version>
</dependency>
</dependencies>
@@ -71,7 +93,7 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-dependencies</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@@ -79,200 +101,6 @@
</dependencyManagement>
<profiles>
<profile>
<id>oss</id>
<build>
<plugins>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Javadoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<locale>en_US</locale>
<encoding>UTF-8</encoding>
<charset>UTF-8</charset>
<doclint>none</doclint>
</configuration>
</execution>
</executions>
</plugin>
<!-- GPG -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${maven-gpg-plugin.version}</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- flatten -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-->发布的地址<-->
<distributionManagement>
<snapshotRepository>
<id>oss-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>oss-snapshots</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
<profile>
<id>native</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Spring-Boot-Native-Processed>true</Spring-Boot-Native-Processed>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<builder>paketobuildpacks/builder-jammy-tiny:latest</builder>
<env>
<BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
</env>
</image>
</configuration>
<executions>
<execution>
<id>process-aot</id>
<goals>
<goal>process-aot</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
<requiredVersion>22.3</requiredVersion>
</configuration>
<executions>
<execution>
<id>add-reachability-metadata</id>
<goals>
<goal>add-reachability-metadata</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile>
<id>nativeTest</id>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>process-test-aot</id>
<goals>
<goal>process-test-aot</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
<requiredVersion>22.3</requiredVersion>
</configuration>
<executions>
<execution>
<id>native-test</id>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -40,7 +40,8 @@
[add] 新增代理流量监控
[add] docker仓库上架dockerhub搜索https://hub.docker.com/search?q=wlcn
#### 1.3.1-JDK24-SNAPSHOT
#### 1.3.1-JDK24
[add] 新增代理流量监控
[add] 升级使用jdk24、springboot 3.5.0
[add] 添加socks授权验证
#### 下一版本计划

View File

@@ -5,13 +5,33 @@
<parent>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-network</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wu-lazy-cloud-heartbeat-client</artifactId>
<description>云下心跳客户端</description>
<name>wlcn客户端模块</name>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
<!-->开发者的信息<-->
<developers>
<developer>
<name>Jia Wei Wu</name>
<email>1207537021@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-->项目的版本管理地址<-->
<scm>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
</scm>
<properties>
<maven.compiler.source>24</maven.compiler.source>
<maven.compiler.target>24</maven.compiler.target>
@@ -22,11 +42,12 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-common</artifactId>
<version>${wu-lazy-cloud-heartbeat-common.version}</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-protocol-proxy</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>${wu-lazy-cloud-heartbeat-protocol-proxy.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
@@ -38,14 +59,17 @@
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.3.232</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-web-spring-starter</artifactId>
<version>${wu-framework-web-spring-starter.version}</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-database-lazy-orm-plus-starter</artifactId>
<version>${wu-database-lazy-orm-plus-starter.version}</version>
</dependency>
</dependencies>

View File

@@ -7,6 +7,8 @@ import org.framework.lazy.cloud.network.heartbeat.client.config.NettyClientPrope
import org.framework.lazy.cloud.network.heartbeat.client.config.PropertiesType;
import org.framework.lazy.cloud.network.heartbeat.client.infrastructure.entity.LazyNettyServerPropertiesDO;
import org.framework.lazy.cloud.network.heartbeat.common.enums.ProtocolType;
import org.framework.lazy.cloud.network.heartbeat.protocol.token.AuthenticationToken;
import org.framework.lazy.cloud.network.heartbeat.protocol.token.AuthenticationTokenContext;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
@@ -51,6 +53,7 @@ public class NettyClientSocketApplicationListener implements ApplicationListener
log.warn("配置信息为空,请通过页面添加配置信息:{}", nettyClientProperties);
return;
}
LazyNettyServerPropertiesDO lazyNettyServerPropertiesDO = new LazyNettyServerPropertiesDO();
lazyNettyServerPropertiesDO.setClientId(clientId);
@@ -73,6 +76,12 @@ public class NettyClientSocketApplicationListener implements ApplicationListener
if (!exists) {
lazyLambdaStream.insert(lazyNettyServerPropertiesDO);
}
// 添加本地token
AuthenticationToken authenticationToken = new AuthenticationToken();
authenticationToken.setUsedByClientId(clientId);
authenticationToken.setAppKey(appKey);
authenticationToken.setAppSecret(appSecret);
AuthenticationTokenContext.setAuthenticationToken(clientId, appKey, appSecret);
}catch (Exception e){
e.printStackTrace();
}

View File

@@ -65,7 +65,7 @@ public class LazyNettyServerPropertiesDO {
* 服务端host
*/
@Schema(description ="服务端host",name ="inetHost",example = "")
@LazyTableFieldUnique(name="inet_host",comment="服务端host",columnType="varchar(25)")
@LazyTableFieldUnique(name="inet_host",comment="服务端host",columnType="varchar(255)")
private String inetHost;
/**

View File

@@ -6,11 +6,32 @@
<parent>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-network</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</parent>
<artifactId>wu-lazy-cloud-heartbeat-common</artifactId>
<description>wlcn项目通用模块</description>
<name>wlcn项目通用模块</name>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
<!-->开发者的信息<-->
<developers>
<developer>
<name>Jia Wei Wu</name>
<email>1207537021@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-->项目的版本管理地址<-->
<scm>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
</scm>
<properties>
<maven.compiler.source>24</maven.compiler.source>
<maven.compiler.target>24</maven.compiler.target>
@@ -20,19 +41,22 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.122.Final</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-web</artifactId>
<version>${wu-framework-web.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>${spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-queue</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -11,6 +11,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
public class ChannelAttributeKeyUtils {
private static final AttributeKey<String> VISITOR_ID = AttributeKey.newInstance("visitorId");
private static final AttributeKey<String> REQUEST_ID = AttributeKey.newInstance("request_id");
private static final AttributeKey<Integer> VISITOR_PORT = AttributeKey.newInstance("visitorPort");
private static final AttributeKey<String> CLIENT_ID = AttributeKey.newInstance("clientId");
private static final AttributeKey<String> APP_KEY = AttributeKey.newInstance("appKey");
@@ -58,6 +59,26 @@ public class ChannelAttributeKeyUtils {
}
/**
* 为通道绑定 访客Request属性
*
* @param channel 通道
* @param requestId requestId
*/
public static void buildRequestId(Channel channel, String requestId) {
channel.attr(REQUEST_ID).set(requestId);
}
/**
* 获取 通道中Request ID
*
* @param channel 通道
*/
public static String getRequestId(Channel channel) {
return channel.attr(REQUEST_ID).get();
}
/**
* 为通道绑定 访客属性
*
@@ -316,7 +337,7 @@ public class ChannelAttributeKeyUtils {
* 为通道绑定 目标端口
*
* @param channel 通道
* @param targetIp 目标端口
* @param targetPort 目标端口
*/
public static void buildTargetPort(Channel channel, Integer targetPort) {
channel.attr(TARGET_PORT).set(targetPort);

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-network</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -13,6 +13,26 @@
<artifactId>wu-lazy-cloud-heartbeat-dns</artifactId>
<description>云上心跳服务dns</description>
<name>wlcn项目DNS</name>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
<!-->开发者的信息<-->
<developers>
<developer>
<name>Jia Wei Wu</name>
<email>1207537021@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-->项目的版本管理地址<-->
<scm>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
</scm>
<properties>
<maven.compiler.source>24</maven.compiler.source>
<maven.compiler.target>24</maven.compiler.target>
@@ -22,11 +42,13 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-web</artifactId>
<version>${wu-framework-web.version}</version>
</dependency>
<!-- 通用心跳包 -->
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-common</artifactId>
<version>${wu-lazy-cloud-heartbeat-common.version}</version>
</dependency>
<!-- 数据库 -->
<dependency>
@@ -38,6 +60,7 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-database-lazy-orm-plus-starter</artifactId>
<version>${wu-database-lazy-orm-plus-starter.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
@@ -52,6 +75,7 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-lazy-orm-spring-starter</artifactId>
<version>${wu-framework-lazy-orm-spring-starter.version}</version>
</dependency>
</dependencies>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-network</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -13,6 +13,27 @@
<artifactId>wu-lazy-cloud-heartbeat-protocol-proxy</artifactId>
<description>云上心跳服务协议代理</description>
<name>wlcn项目代理组件</name>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
<!-->开发者的信息<-->
<developers>
<developer>
<name>Jia Wei Wu</name>
<email>1207537021@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-->项目的版本管理地址<-->
<scm>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
</scm>
<properties>
<maven.compiler.source>24</maven.compiler.source>
<maven.compiler.target>24</maven.compiler.target>
@@ -22,11 +43,13 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-web</artifactId>
<version>${wu-framework-web.version}</version>
</dependency>
<!-- 通用心跳包 -->
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-common</artifactId>
<version>${wu-lazy-cloud-heartbeat-common.version}</version>
</dependency>
<!-- 数据库 -->
<dependency>
@@ -38,6 +61,7 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-database-lazy-orm-plus-starter</artifactId>
<version>${wu-database-lazy-orm-plus-starter.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
@@ -52,6 +76,12 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-lazy-orm-spring-starter</artifactId>
<version>${wu-framework-lazy-orm-spring-starter.version}</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-queue</artifactId>
<version>1.3.4-JDK24-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -13,7 +13,10 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyC
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettySocketChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.socks.AbstractHandleSocketLocalProxyTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder;
import org.framework.lazy.cloud.network.heartbeat.common.encoder.TransferEncoder;
import org.framework.lazy.cloud.network.heartbeat.common.factory.EventLoopGroupFactory;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.protocol.handler.NettyProxy2RealInboundHandler;
import org.framework.lazy.cloud.network.heartbeat.protocol.handler.NettySocketBackendHandler;
import org.framework.lazy.cloud.network.heartbeat.protocol.handler.NettySocks5CommandRequestHandler;
@@ -34,11 +37,11 @@ public class NettySocketProtocolHandleSocketLocalProxyTypeAdvanced
@Override
protected void doHandler(NettyChannelContext nettyChannelContext, NettyProxyMsg nettyProxyMsg) {
NettySocketChannelContext nettySocketChannelContext = (NettySocketChannelContext) nettyChannelContext;
Channel channel = nettySocketChannelContext.channel();
ChannelHandlerContext channelHandlerContext = nettySocketChannelContext.channelHandlerContext();
Channel proxyChannel = nettySocketChannelContext.channel();
EventLoopGroup group = EventLoopGroupFactory.createClientWorkGroup();
String host = nettyProxyMsg.targetIp();
Integer port = Integer.parseInt(nettyProxyMsg.targetPort());
String visitorId = nettyProxyMsg.visitorId();
Bootstrap b = new Bootstrap();
Socks5AddressType socks5AddressType = nettySocketChannelContext.getSocks5AddressType();
@@ -48,25 +51,38 @@ public class NettySocketProtocolHandleSocketLocalProxyTypeAdvanced
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new NettySocketBackendHandler(channelHandlerContext));
ch.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024 * 10));
ch.pipeline().addLast(new TransferEncoder());
ch.pipeline().addLast(new NettySocketBackendHandler());
}
});
log.info("准备连接目标服务器ip={},port={}", host, port);
ChannelFuture f = b.connect(new InetSocketAddress(host, port));
f.addListener((ChannelFutureListener) future -> {
Channel realChannel = future.channel();
// 绑定real 通道对应的 目标host、port
ChannelAttributeKeyUtils.buildTargetIp(realChannel,host);
ChannelAttributeKeyUtils.buildTargetPort(realChannel,port);
if (future.isSuccess()) {
log.info("目标服务器连接成功");
// 绑定next通道
ChannelAttributeKeyUtils.buildNextChannel(realChannel, proxyChannel);
ChannelAttributeKeyUtils.buildNextChannel(proxyChannel, realChannel);
ChannelAttributeKeyUtils.buildVisitorId(realChannel, visitorId);
//添加客户端转发请求到服务端的Handler
channel.pipeline().addLast(new NettyProxy2RealInboundHandler(future));
// 解码、编码
proxyChannel.pipeline().addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024 * 10));
proxyChannel.pipeline().addLast(new TransferEncoder());
proxyChannel.pipeline().addLast(new NettyProxy2RealInboundHandler());
DefaultSocks5CommandResponse commandResponse = new DefaultSocks5CommandResponse(Socks5CommandStatus.SUCCESS, socks5AddressType);
channel.writeAndFlush(commandResponse);
channel.pipeline().remove(NettySocks5CommandRequestHandler.class);
channel.pipeline().remove(Socks5CommandRequestDecoder.class);
proxyChannel.writeAndFlush(commandResponse);
proxyChannel.pipeline().remove(NettySocks5CommandRequestHandler.class);
proxyChannel.pipeline().remove(Socks5CommandRequestDecoder.class);
} else {
log.error("连接目标服务器失败,address={},port={}", host, port);
DefaultSocks5CommandResponse commandResponse = new DefaultSocks5CommandResponse(Socks5CommandStatus.FAILURE, socks5AddressType);
channel.writeAndFlush(commandResponse);
future.channel().close();
proxyChannel.writeAndFlush(commandResponse);
realChannel.close();
}
});

View File

@@ -0,0 +1,19 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.auth;
public abstract class AbstractNettyPasswordAuth implements NettyPasswordAuth {
public abstract boolean doVerify(String username, String password);
/**
* 验证账号密码
*
* @param username 用户
* @param password 密码
* @return
*/
@Override
public boolean verify(String username, String password) {
return doVerify(username, password);
}
}

View File

@@ -0,0 +1,24 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.auth;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.protocol.properties.ProtocolProxyProperties;
import org.framework.lazy.cloud.network.heartbeat.protocol.token.AuthenticationTokenContext;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
public class DefaultNettyPasswordAuth extends AbstractNettyPasswordAuth {
@Override
public boolean doVerify(String username, String password) {
boolean verify = AuthenticationTokenContext.verify(username, password);
if (!verify) {
log.error("授权失败");
}
return verify;
}
}

View File

@@ -0,0 +1,13 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.auth;
public interface NettyPasswordAuth {
/**
* 验证账号密码
*
* @param username 用户
* @param password 密码
* @return
*/
boolean verify(String username, String password);
}

View File

@@ -1,17 +1,15 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.filter;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.socksx.v5.Socks5CommandRequestDecoder;
import io.netty.handler.codec.socksx.v5.Socks5InitialRequestDecoder;
import io.netty.handler.codec.socksx.v5.Socks5ServerEncoder;
import io.netty.handler.codec.socksx.SocksPortUnificationServerHandler;
import io.netty.handler.codec.socksx.v5.*;
import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelTypeAdapter;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.factory.EventLoopGroupFactory;
import org.framework.lazy.cloud.network.heartbeat.common.filter.DebugChannelInitializer;
import org.framework.lazy.cloud.network.heartbeat.protocol.handler.NettySocks5CommandRequestHandler;
import org.framework.lazy.cloud.network.heartbeat.protocol.handler.NettySocks5InitialRequestHandler;
import org.framework.lazy.cloud.network.heartbeat.protocol.auth.NettyPasswordAuth;
import org.framework.lazy.cloud.network.heartbeat.protocol.handler.*;
import org.framework.lazy.cloud.network.heartbeat.protocol.properties.ProtocolProxyProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -25,9 +23,13 @@ import java.util.List;
@Component
public class NettyTcpProxyFilter extends DebugChannelInitializer<SocketChannel> {
private final List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList;
private final NettyPasswordAuth nettyPasswordAuth;
private final ProtocolProxyProperties protocolProxyProperties;
public NettyTcpProxyFilter(List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList) {
public NettyTcpProxyFilter(List<HandleChannelTypeAdvanced> handleChannelTypeAdvancedList, NettyPasswordAuth nettyPasswordAuth, ProtocolProxyProperties protocolProxyProperties) {
this.handleChannelTypeAdvancedList = handleChannelTypeAdvancedList;
this.nettyPasswordAuth = nettyPasswordAuth;
this.protocolProxyProperties = protocolProxyProperties;
}
@Override
@@ -35,20 +37,21 @@ public class NettyTcpProxyFilter extends DebugChannelInitializer<SocketChannel>
ChannelPipeline pipeline = ch.pipeline();
// 类型处理器适配器
ChannelTypeAdapter channelTypeAdapter = new ChannelTypeAdapter(handleChannelTypeAdvancedList);
//
// //添加 SOCKS 协议统一处理器
// pipeline.addLast(new SocksPortUnificationServerHandler());
//socks5响应最后一个encode
pipeline.addLast(Socks5ServerEncoder.DEFAULT);
// 初始化连接
pipeline.addLast(new Socks5InitialRequestDecoder());
pipeline.addLast(new NettySocks5InitialRequestHandler());
pipeline.addLast(new NettySocks5InitialRequestHandler(protocolProxyProperties, nettyPasswordAuth));
// 认证
// ch.pipeline().addLast(new Socks5PasswordAuthRequestDecoder());
// ch.pipeline().addLast(new Socks5PasswordAuthRequestInboundHandler());
EventLoopGroup clientWorkGroup = EventLoopGroupFactory.createClientWorkGroup();
if (protocolProxyProperties.getAuthentication()) {
// 认证
pipeline.addLast(new Socks5PasswordAuthRequestDecoder());
pipeline.addLast(new NettySocks5PasswordAuthRequestInboundHandler(nettyPasswordAuth));
}
// 连接请求
pipeline.addLast(new Socks5CommandRequestDecoder());

View File

@@ -1,23 +1,31 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.handler;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.*;
import io.netty.util.CharsetUtil;
import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.protocol.log.ProxyLog;
import org.framework.lazy.cloud.network.heartbeat.protocol.properties.ProtocolProxyProperties;
import org.framework.wu.framework.queue.Message;
import org.framework.wu.framework.queue.MessageQueue;
import org.framework.wu.framework.queue.MessageQueueFactory;
import org.wu.framework.spring.utils.SpringContextHolder;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
/**
* 代理,真实通道发送数据
*/
@Slf4j
public class NettyProxy2RealInboundHandler extends ChannelInboundHandlerAdapter {
public class NettyProxy2RealInboundHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
private final ChannelFuture dstChannelFuture;
public NettyProxy2RealInboundHandler(ChannelFuture dstChannelFuture) {
this.dstChannelFuture = dstChannelFuture;
}
@Override
public void channelActive(ChannelHandlerContext ctx) {
@@ -25,20 +33,63 @@ public class NettyProxy2RealInboundHandler extends ChannelInboundHandlerAdapter
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception {
log.debug("本地转发客户端的请求到代理服务器");
if (dstChannelFuture.channel().isActive()) {
dstChannelFuture.channel().writeAndFlush(msg);
Channel currentChannel = ctx.channel();
byte[] data = nettyByteBuf.getData();
// 把数据转到真实服务
ByteBuf buf = currentChannel.config().getAllocator().buffer(data.length);
buf.writeBytes(data);
log.info("发送请求到真实客户端:{}", new String(data, StandardCharsets.UTF_8));
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(currentChannel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
// 设置请求ID
String requestId = UUID.randomUUID().toString();
ChannelAttributeKeyUtils.buildRequestId(currentChannel, requestId);
ChannelAttributeKeyUtils.buildRequestId(nextChannel, requestId);
if (nextChannel.isActive()) {
ProtocolProxyProperties protocolProxyProperties = SpringContextHolder.getBean(ProtocolProxyProperties.class);
if (protocolProxyProperties.getEnableProxyLog()) {
log.debug("记录代理发送日志开始");
try {
String visitorId = ChannelAttributeKeyUtils.getVisitorId(nextChannel);
String sendMsgQueue = protocolProxyProperties.getSendMsgQueue();
MessageQueue queue = MessageQueueFactory.getQueue(sendMsgQueue);
Message message = new Message();
message.setTopic(sendMsgQueue);
message.setId(visitorId);
ProxyLog proxyLog = new ProxyLog();
proxyLog.setVisitorId(visitorId);
proxyLog.setHost(targetIp);
proxyLog.setPort(targetPort);
proxyLog.setSend(data);
proxyLog.setRequestId(requestId);
message.setBody(proxyLog);
queue.send(message);
} catch (Exception e) {
log.error(e.getMessage());
}
log.debug("记录代理发送日志结束");
}
nextChannel.writeAndFlush(buf);
} else {
log.info("释放内存");
ReferenceCountUtil.release(msg);
ReferenceCountUtil.release(buf);
}
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
log.debug("客户端与代理服务器的连接已经断开,即将断开代理服务器和目标服务器的连接");
if (dstChannelFuture.channel().isActive()) {
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(ctx.channel());
if (nextChannel.isActive()) {
if (ctx.channel().isActive()) {
ctx.channel().writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
}

View File

@@ -1,21 +1,27 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.handler;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.*;
import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyByteBuf;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.protocol.log.ProxyLog;
import org.framework.lazy.cloud.network.heartbeat.protocol.properties.ProtocolProxyProperties;
import org.framework.wu.framework.queue.Message;
import org.framework.wu.framework.queue.MessageQueue;
import org.framework.wu.framework.queue.MessageQueueFactory;
import org.wu.framework.core.utils.ObjectUtils;
import org.wu.framework.spring.utils.SpringContextHolder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
@Slf4j
public class NettySocketBackendHandler extends ChannelInboundHandlerAdapter {
public class NettySocketBackendHandler extends SimpleChannelInboundHandler<NettyByteBuf> {
private final ChannelHandlerContext clientChannelHandlerContext;
public NettySocketBackendHandler(ChannelHandlerContext clientChannelHandlerContext) {
this.clientChannelHandlerContext = clientChannelHandlerContext;
}
@Override
public void channelActive(ChannelHandlerContext ctx) {
@@ -23,21 +29,59 @@ public class NettySocketBackendHandler extends ChannelInboundHandlerAdapter {
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
public void channelRead0(ChannelHandlerContext ctx, NettyByteBuf nettyByteBuf) throws Exception {
log.trace("开始写回客户端数据");
if (clientChannelHandlerContext.channel().isActive()) {
clientChannelHandlerContext.writeAndFlush(msg);
Channel currentChannel = ctx.channel();
byte[] data = nettyByteBuf.getData();
// 把数据转到真实服务
ByteBuf buf = currentChannel.config().getAllocator().buffer(data.length);
buf.writeBytes(data);
log.info("将数据返回给客户端:{}", new String(data, StandardCharsets.UTF_8));
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(currentChannel);
String targetIp = ChannelAttributeKeyUtils.getTargetIp(nextChannel);
Integer targetPort = ChannelAttributeKeyUtils.getTargetPort(nextChannel);
String requestId = ChannelAttributeKeyUtils.getRequestId(currentChannel);
if (nextChannel.isActive()) {
ProtocolProxyProperties protocolProxyProperties = SpringContextHolder.getBean(ProtocolProxyProperties.class);
if (protocolProxyProperties.getEnableProxyLog()) {
log.debug("记录代理返回日志开始");
try {
String visitorId = ChannelAttributeKeyUtils.getVisitorId(nextChannel);
String receiverMsgQueue = protocolProxyProperties.getReceiverMsgQueue();
MessageQueue queue = MessageQueueFactory.getQueue(receiverMsgQueue);
Message message = new Message();
message.setTopic(receiverMsgQueue);
message.setId(visitorId);
ProxyLog proxyLog = new ProxyLog();
proxyLog.setVisitorId(visitorId);
proxyLog.setHost(targetIp);
proxyLog.setPort(targetPort);
proxyLog.setReceiver(data);
proxyLog.setRequestId(requestId);
message.setBody(proxyLog);
queue.send(message);
} catch (Exception e) {
log.error(e.getMessage());
}
log.debug("记录代理返回日志结束");
}
nextChannel.writeAndFlush(buf);
} else {
log.info("释放内存");
ReferenceCountUtil.release(msg);
ReferenceCountUtil.release(buf);
}
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
log.trace("代理服务器和目标服务器的连接已经断开,即将断开客户端和代理服务器的连接");
if (clientChannelHandlerContext.channel().isActive()) {
clientChannelHandlerContext.channel().writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(ctx.channel());
if (nextChannel.isActive()) {
nextChannel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
}
}

View File

@@ -56,6 +56,9 @@ public class NettySocks5CommandRequestHandler extends SimpleChannelInboundHandle
int originPort = request.dstPort();
Socks5AddressType socks5AddressType = request.dstAddrType();
String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel());
ChannelAttributeKeyUtils.buildTargetIp(ctx.channel(),originHost);
ChannelAttributeKeyUtils.buildTargetPort(ctx.channel(),originPort);
NettyProxyMsg proxyMsg = new NettyProxyMsg();
proxyMsg.setVisitorId(visitorId);

View File

@@ -4,9 +4,20 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.socksx.v5.*;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.protocol.auth.NettyPasswordAuth;
import org.framework.lazy.cloud.network.heartbeat.protocol.properties.ProtocolProxyProperties;
@Slf4j
public class NettySocks5InitialRequestHandler extends SimpleChannelInboundHandler<Socks5InitialRequest> {
private final ProtocolProxyProperties protocolProxyProperties;
private final NettyPasswordAuth nettyPasswordAuth;
public NettySocks5InitialRequestHandler(ProtocolProxyProperties protocolProxyProperties, NettyPasswordAuth nettyPasswordAuth) {
this.protocolProxyProperties = protocolProxyProperties;
this.nettyPasswordAuth = nettyPasswordAuth;
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, Socks5InitialRequest msg) throws Exception {
boolean failure = msg.decoderResult().isFailure();
@@ -18,9 +29,18 @@ public class NettySocks5InitialRequestHandler extends SimpleChannelInboundHandle
}
log.info("初始化socket连接");
// 不验证账号密码
Socks5InitialResponse socks5InitialResponse = new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH);
ctx.writeAndFlush(socks5InitialResponse);
if(protocolProxyProperties.getAuthentication()){
// 验证账号密码
Socks5InitialResponse socks5InitialResponse =
new DefaultSocks5InitialResponse(Socks5AuthMethod.PASSWORD);
ctx.writeAndFlush(socks5InitialResponse);
}else {
// 不验证账号密码
Socks5InitialResponse socks5InitialResponse =
new DefaultSocks5InitialResponse(Socks5AuthMethod.NO_AUTH);
ctx.writeAndFlush(socks5InitialResponse);
}
ctx.pipeline().remove(this);
ctx.pipeline().remove(Socks5InitialRequestDecoder.class);

View File

@@ -0,0 +1,50 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.handler;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.socksx.v5.*;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.protocol.auth.NettyPasswordAuth;
@Slf4j
public class NettySocks5PasswordAuthRequestInboundHandler extends SimpleChannelInboundHandler<DefaultSocks5PasswordAuthRequest> {
private final NettyPasswordAuth nettyPasswordAuth;
public NettySocks5PasswordAuthRequestInboundHandler(NettyPasswordAuth nettyPasswordAuth) {
this.nettyPasswordAuth = nettyPasswordAuth;
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, DefaultSocks5PasswordAuthRequest msg) throws Exception {
//认证成功
String username = msg.username();
String password = msg.password();
if (nettyPasswordAuth.verify(username, password)) {
log.debug("login with username:{} password:{}", username, password);
log.debug("认证直接成功");
Socks5PasswordAuthResponse passwordAuthResponse = new DefaultSocks5PasswordAuthResponse(Socks5PasswordAuthStatus.SUCCESS);
ctx.writeAndFlush(passwordAuthResponse);
ctx.pipeline().remove(this);
ctx.pipeline().remove(Socks5PasswordAuthRequestDecoder.class);
} else {
log.error("授权失败: with username:{} password:{}", username, password);
// 认证失败
Socks5PasswordAuthResponse passwordAuthResponse = new DefaultSocks5PasswordAuthResponse(Socks5PasswordAuthStatus.FAILURE);
//发送鉴权失败消息完成后关闭channel
ctx.writeAndFlush(passwordAuthResponse).addListener(ChannelFutureListener.CLOSE);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
System.err.println("处理 SOCKS5 密码认证时发生异常: " + cause.getMessage());
ctx.close();
}
}

View File

@@ -0,0 +1,16 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.log;
import lombok.Data;
@Data
public class ProxyLog {
private String requestId;
private String host;;
private Integer port;
private String visitorId;
private byte[] receiver;
private byte[] send;
}

View File

@@ -0,0 +1,72 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.log;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.flow.permeate.ChannelFlow;
import org.framework.lazy.cloud.network.heartbeat.protocol.properties.ProtocolProxyProperties;
import org.framework.wu.framework.queue.Message;
import org.framework.wu.framework.queue.MessageQueue;
import org.framework.wu.framework.queue.MessageQueueFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.wu.framework.core.utils.ObjectUtils;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Slf4j
@Component
public class ProxyReceiverLog implements CommandLineRunner {
private final ProtocolProxyProperties protocolProxyProperties;
private final LazyLambdaStream lazyLambdaStream;
ThreadPoolExecutor CHANNEL_LOG_EXECUTOR =
new ThreadPoolExecutor(10, 20, 3L, TimeUnit.MINUTES,
new LinkedBlockingDeque<>(50), new ThreadPoolExecutor.AbortPolicy());
public ProxyReceiverLog(ProtocolProxyProperties protocolProxyProperties, LazyLambdaStream lazyLambdaStream) {
this.protocolProxyProperties = protocolProxyProperties;
this.lazyLambdaStream = lazyLambdaStream;
}
@Override
public void run(String... args) throws Exception {
String receiverMsgQueue = protocolProxyProperties.getReceiverMsgQueue();
MessageQueue receiverQueue = MessageQueueFactory.getQueue(receiverMsgQueue);
// 创建监听线程
Thread thread = new Thread(() -> {
while (true) {
Message receive = receiverQueue.receive();
if (ObjectUtils.isNotEmpty(receive)) {
ProxyLog proxyLog = (ProxyLog) receive.getBody();
lazyLambdaStream.upsert(proxyLog);
}
}
});
CHANNEL_LOG_EXECUTOR.submit(thread::start);
String sendMsgQueue = protocolProxyProperties.getSendMsgQueue();
MessageQueue sendQueue = MessageQueueFactory.getQueue(sendMsgQueue);
// 创建监听线程
Thread sendThread = new Thread(() -> {
while (true) {
Message receive = sendQueue.receive();
if (ObjectUtils.isNotEmpty(receive)) {
ProxyLog proxyLog = (ProxyLog) receive.getBody();
lazyLambdaStream.upsert(proxyLog);
}
}
});
CHANNEL_LOG_EXECUTOR.submit(sendThread::start);
}
}

View File

@@ -1,5 +1,6 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.properties;
import jdk.jfr.Description;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@@ -13,6 +14,29 @@ import org.springframework.context.annotation.Configuration;
public class ProtocolProxyProperties {
public static final String prefix = "spring.lazy.netty.protocol.proxy";
/**
* 是否验证权限账号
*/
private Boolean authentication = false;
/**
* 是否允许记录代理日志
*/
@Description("是否允许记录代理日志")
private Boolean enableProxyLog = true;
/**
* 发送数据对应通道
*/
@Description("发送数据对应通道")
private String sendMsgQueue="wlcn-send-queue";
/**
* 接收数据对应通道
*/
@Description("接收数据对应通道")
private String receiverMsgQueue="wlcn-receiver-queue";
/**
* http协议代理

View File

@@ -0,0 +1,39 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.token;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 授权信息
*/
@Data
public class AuthenticationToken {
/**
* 令牌key
*/
@Schema(description = "令牌key", name = "appKey", example = "")
private String appKey;
/**
* 令牌密钥
*/
@Schema(description = "令牌密钥", name = "appSecret", example = "")
private String appSecret;
/**
* 过期时间
*/
@Schema(description = "过期时间", name = "expireInTime", example = "")
private LocalDateTime expireInTime;
/**
* 被使用的客户端ID
*/
@Schema(description = "被使用的客户端ID", name = "usedByClientId", example = "")
private String usedByClientId;
}

View File

@@ -0,0 +1,83 @@
package org.framework.lazy.cloud.network.heartbeat.protocol.token;
import org.wu.framework.core.utils.ObjectUtils;
import java.util.concurrent.ConcurrentHashMap;
public class AuthenticationTokenContext {
// key appid value AuthenticationToken
private static final ConcurrentHashMap<String, AuthenticationToken> m = new ConcurrentHashMap<>();
/**
* 设置授权信息
*
* @param clientId 客户端ID
* @param appKey 令牌
* @param appSecret 迷药
*/
public static void setAuthenticationToken(String clientId, String appKey, String appSecret) {
AuthenticationToken authenticationToken = new AuthenticationToken();
authenticationToken.setUsedByClientId(clientId);
authenticationToken.setAppKey(appKey);
authenticationToken.setAppSecret(appSecret);
AuthenticationTokenContext.setAuthenticationToken(authenticationToken);
}
/**
* 设置授权信息
*
* @param authenticationToken 授权信息
*/
public static void setAuthenticationToken(AuthenticationToken authenticationToken) {
String key = authenticationToken.getAppKey();
if (m.containsKey(key)) {
m.put(key, authenticationToken);
return;
}
m.put(key, authenticationToken);
}
/**
* 获取授权信息
*
* @param appKey 令牌key
*/
public static AuthenticationToken getAuthenticationToken(String appKey) {
AuthenticationToken p = m.values()
.stream()
.filter(authenticationToken -> authenticationToken.getAppKey().equals(appKey))
.findFirst()
.orElse(null);
return p;
}
/**
* 删除授权信息
*
* @param appKey 令牌key
*/
public static void removeAuthenticationToken(String appKey) {
m.remove(appKey);
}
/**
* 验证令牌
*
* @param appKey 令牌key
*/
public static Boolean verify(String appKey, String appSecret) {
AuthenticationToken p = m.values()
.stream()
.filter(authenticationToken -> authenticationToken.getAppKey().equals(appKey)
&& authenticationToken.getAppSecret().equals(appSecret)
)
.findFirst()
.orElse(null);
return ObjectUtils.isNotEmpty(p);
}
}

View File

@@ -5,13 +5,34 @@
<parent>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-network</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wu-lazy-cloud-heartbeat-server-cluster</artifactId>
<description>云上心跳服务端集群</description>
<name>wlcn项目集群方式</name>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
<!-->开发者的信息<-->
<developers>
<developer>
<name>Jia Wei Wu</name>
<email>1207537021@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-->项目的版本管理地址<-->
<scm>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
</scm>
<properties>
<maven.compiler.source>24</maven.compiler.source>
<maven.compiler.target>24</maven.compiler.target>
@@ -22,11 +43,13 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-server</artifactId>
<version>${wu-lazy-cloud-heartbeat-server.version}</version>
</dependency>
<!-- 客户端 -->
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-client</artifactId>
<version>${wu-lazy-cloud-heartbeat-client.version}</version>
</dependency>
</dependencies>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-network</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>1.3.4-JDK24-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -13,6 +13,27 @@
<artifactId>wu-lazy-cloud-heartbeat-server</artifactId>
<description>云上心跳服务端</description>
<name>wlcn项目服务端组件</name>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
<!-->开发者的信息<-->
<developers>
<developer>
<name>Jia Wei Wu</name>
<email>1207537021@qq.com</email>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-->项目的版本管理地址<-->
<scm>
<url>https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network</url>
</scm>
<properties>
<maven.compiler.source>24</maven.compiler.source>
<maven.compiler.target>24</maven.compiler.target>
@@ -22,16 +43,18 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-web</artifactId>
<version>${wu-framework-web.version}</version>
</dependency>
<!-- 通用心跳包 -->
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-common</artifactId>
<version>${wu-lazy-cloud-heartbeat-common.version}</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-protocol-proxy</artifactId>
<version>1.3.1-JDK24-SNAPSHOT</version>
<version>${wu-lazy-cloud-heartbeat-protocol-proxy.version}</version>
</dependency>
<!-- 数据库 -->
<dependency>
@@ -43,16 +66,19 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-database-lazy-orm-plus-starter</artifactId>
<version>${wu-database-lazy-orm-plus-starter.version}</version>
</dependency>
<!-- 授权平台 -->
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-authorization-server-platform-starter</artifactId>
<version>${wu-authorization-server-platform-starter.version}</version>
</dependency>
<!-- jvm -->
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-jvm-server-platform-starter</artifactId>
<version>${wu-jvm-server-platform-starter.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
@@ -67,15 +93,18 @@
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-framework-lazy-orm-spring-starter</artifactId>
<version>${wu-framework-lazy-orm-spring-starter.version}</version>
</dependency>
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-log-server-platform-starter</artifactId>
<version>${wu-log-server-platform-starter.version}</version>
</dependency>
<!-- 内网穿透客户端 -->
<dependency>
<groupId>top.wu2020</groupId>
<artifactId>wu-lazy-cloud-heartbeat-client</artifactId>
<version>${wu-lazy-cloud-heartbeat-client.version}</version>
</dependency>
</dependencies>

View File

@@ -1,14 +1,10 @@
package org.framework.lazy.cloud.network.heartbeat.server.cluster.application.assembler;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.*;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.application.dto.LazyNettyClusterNodeDTO;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.domain.model.cluster.node.LazyNettyClusterNode;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node.LazyNettyClusterNodeQueryOneCommand;
import org.wu.framework.core.mapper.LazyStructMappers;
import org.wu.framework.core.mapper.LazyStructMapper;
import org.wu.framework.core.mapper.LazyStructMappers;
/**
* describe 集群配置信息

View File

@@ -1,14 +1,11 @@
package org.framework.lazy.cloud.network.heartbeat.server.cluster.application.command.lazy.netty.cluster.node;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus;
import java.lang.String;
import java.lang.Integer;
import java.time.LocalDateTime;
import java.lang.Boolean;
/**
* describe 集群配置信息

View File

@@ -15,7 +15,7 @@ import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodePr
import org.springframework.stereotype.Component;
@Slf4j
@Component
//@Component
public class NettyUdpServerSocketApplicationListener implements SocketApplicationListener {
private final EventLoopGroup bossGroup = "linux".equalsIgnoreCase(SystemPropertyUtil.get("os.name")) ? new EpollEventLoopGroup() : new NioEventLoopGroup();

View File

@@ -0,0 +1,43 @@
package org.framework.lazy.cloud.network.heartbeat.server.init;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.protocol.token.AuthenticationTokenContext;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.token.bucket.LazyNettyClientTokenBucket;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.token.bucket.LazyNettyClientTokenBucketRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class InitAuthenticationToken implements CommandLineRunner {
private final LazyNettyClientTokenBucketRepository lazyNettyClientTokenBucketRepository;
public InitAuthenticationToken(LazyNettyClientTokenBucketRepository lazyNettyClientTokenBucketRepository) {
this.lazyNettyClientTokenBucketRepository = lazyNettyClientTokenBucketRepository;
}
@Override
public void run(String... args) throws Exception {
try {
LazyNettyClientTokenBucket lazyNettyClientTokenBucket = new LazyNettyClientTokenBucket();
lazyNettyClientTokenBucket.setIsDeleted(false);
for (LazyNettyClientTokenBucket nettyClientTokenBucket : lazyNettyClientTokenBucketRepository.findList(lazyNettyClientTokenBucket)
.getData()) {
String clientId = nettyClientTokenBucket.getUsedByClientId();
if (clientId != null) {
String appKey = nettyClientTokenBucket.getAppKey();
String appSecret = nettyClientTokenBucket.getAppSecret();
AuthenticationTokenContext.setAuthenticationToken(clientId, appKey, appSecret);
}
}
} catch (Exception e) {
e.printStackTrace();
log.error("初始化令牌桶失败:{}", e.getMessage());
}
}
}

View File

@@ -16,7 +16,8 @@ import org.springframework.context.annotation.Import;
*/
@Slf4j
@Configuration
@Import({NettyTcpServerSocketApplicationListener.class, NettyUdpServerSocketApplicationListener.class})
@Import({NettyTcpServerSocketApplicationListener.class})
//@Import({NettyTcpServerSocketApplicationListener.class, NettyUdpServerSocketApplicationListener.class})
public class InitServerSocket {

View File

@@ -119,12 +119,16 @@ public class NettyTcpServerHandler extends SimpleChannelInboundHandler<NettyProx
log.warn("client: {} channel:{}, disconnect with visitorId:{}", clientId, channel.id().toString(), visitorId);
// 访客通道 关闭访客通道
NettyCommunicationIdContext.clear(visitorId);
// 关闭通信通道
Channel nextChannel = ChannelAttributeKeyUtils.getNextChannel(channel);
Channel transferNextChannel = ChannelAttributeKeyUtils.getTransferNextChannel(channel);
// 关闭通信通道
channel.close();
nextChannel.close();
transferNextChannel.close();
if (ObjectUtils.isNotEmpty(nextChannel)) {
nextChannel.close();
}
if (ObjectUtils.isNotEmpty(transferNextChannel)) {
transferNextChannel.close();
}
super.channelInactive(ctx);
} else if (!ObjectUtils.isEmpty(clientId)) {
// 断开客户端的连接:{}

View File

@@ -1,19 +1,13 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.record.LazyNettyClientStateRecord;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.record.LazyNettyClientStateRecordRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.record.LazyNettyClientStateRecordStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.record.LazyNettyClientStateRecordUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.record.LazyNettyClientStateRecordQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.record.LazyNettyClientStateRecordQueryOneCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.record.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateRecordDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.record.LazyNettyClientStateRecord;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.web.response.Result;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 客户端状态变更记录
*

View File

@@ -1,20 +1,15 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientFlowPerDayEchartsDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientPortFlowPerDayEchartsDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyVisitorPortPerDayFlowDTO;
import org.wu.framework.web.response.Result;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.visitor.port.per.day.flow.LazyVisitorPortPerDayFlow;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowRemoveCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowStoryCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowUpdateCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.visitor.port.per.day.flow.LazyVisitorPortPerDayFlowQueryOneCommand;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.web.response.Result;
import java.util.List;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
/**
* describe 每日统计流量
*

View File

@@ -1,13 +1,10 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.route;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Boolean;
/**
* describe 客户端代理路由规则

View File

@@ -1,13 +1,10 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.route;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Boolean;
/**
* describe 客户端代理路由规则

View File

@@ -1,13 +1,10 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.route;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import java.lang.String;
import java.time.LocalDateTime;
import java.lang.Long;
import java.lang.Boolean;
/**
* describe 客户端代理路由规则

View File

@@ -18,7 +18,7 @@ import org.springframework.stereotype.Repository;
import org.wu.framework.core.NormalUsedString;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyUpdateSetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazySetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
@@ -183,7 +183,7 @@ public class LazyNettyClientRouteRepositoryImpl implements LazyNettyClientRouteR
@Override
public Result<LazyNettyClientRoute> remove(LazyNettyClientRoute lazyNettyClientRoute) {
lazyLambdaStream.update(LazyUpdateSetValueWrappers.<LazyNettyClientRouteDO>lambdaWrapper()
lazyLambdaStream.update(LazySetValueWrappers.<LazyNettyClientRouteDO>lambdaWrapper()
.set(LazyNettyClientRouteDO::getIsDeleted, true),
LazyWrappers
.<LazyNettyClientRouteDO>lambdaWrapper()

View File

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository;
import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyUpdateSetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazySetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
@@ -57,7 +57,7 @@ public class LazyNettyClientStateRepositoryImpl implements LazyNettyClientStateR
@Override
public Result<LazyNettyClientState> updateOne(LazyNettyClientState lazyNettyClientState) {
LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState);
lazyLambdaStream.update(LazyUpdateSetValueWrappers.
lazyLambdaStream.update(LazySetValueWrappers.
lambdaWrapperBeanIgnoreEmpty(lazyNettyClientStateDO)
,

View File

@@ -1,6 +1,7 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.protocol.token.AuthenticationTokenContext;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.token.bucket.LazyNettyClientTokenBucket;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.token.bucket.LazyNettyClientTokenBucketRepository;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyClientTokenBucketConverter;
@@ -8,7 +9,7 @@ import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructu
import org.springframework.stereotype.Repository;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyUpdateSetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazySetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
@@ -177,7 +178,7 @@ public class LazyNettyClientTokenBucketRepositoryImpl implements LazyNettyClient
// 绑定客户端ID
lazyLambdaStream.update(
LazyUpdateSetValueWrappers.<LazyNettyClientTokenBucketDO>lambdaWrapper()
LazySetValueWrappers.<LazyNettyClientTokenBucketDO>lambdaWrapper()
.set(LazyNettyClientTokenBucketDO::getUsedByClientId, clientId)
.set(LazyNettyClientTokenBucketDO::getUpdateTime, LocalDateTime.now())
,
@@ -186,6 +187,9 @@ public class LazyNettyClientTokenBucketRepositoryImpl implements LazyNettyClient
.eq(LazyNettyClientTokenBucketDO::getAppKey, appKey)
.eq(LazyNettyClientTokenBucketDO::getAppSecret, appSecret)
);
AuthenticationTokenContext.setAuthenticationToken(clientId,appKey,appSecret);
return ResultFactory.successOf(true);
}

View File

@@ -16,7 +16,7 @@ import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructu
import org.springframework.stereotype.Repository;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyUpdateSetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazySetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
@@ -171,7 +171,7 @@ public class LazyNettyClientVirtualRouteRepositoryImpl implements LazyNettyClien
@Override
public Result<LazyNettyClientVirtualRoute> remove(LazyNettyClientVirtualRoute lazyNettyClientVirtualRoute) {
LazyNettyClientVirtualRouteDO lazyNettyClientVirtualRouteDO = LazyNettyClientVirtualRouteConverter.INSTANCE.fromLazyNettyClientVirtualRoute(lazyNettyClientVirtualRoute);
lazyLambdaStream.update(LazyUpdateSetValueWrappers.<LazyNettyClientVirtualRouteDO>lambdaWrapper()
lazyLambdaStream.update(LazySetValueWrappers.<LazyNettyClientVirtualRouteDO>lambdaWrapper()
.set(LazyNettyClientVirtualRouteDO::getIsDeleted, true),
LazyWrappers
.<LazyNettyClientVirtualRouteDO>lambdaWrapper()

View File

@@ -18,7 +18,7 @@ import org.springframework.stereotype.Repository;
import org.wu.framework.core.NormalUsedString;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyUpdateSetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazySetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
@@ -176,7 +176,7 @@ public class LazyNettyServerRouteRepositoryImpl implements LazyNettyServerRouteR
@Override
public Result<LazyNettyServerRoute> remove(LazyNettyServerRoute lazyNettyServerRoute) {
lazyLambdaStream.update(LazyUpdateSetValueWrappers.<LazyNettyServerRouteDO>lambdaWrapper()
lazyLambdaStream.update(LazySetValueWrappers.<LazyNettyServerRouteDO>lambdaWrapper()
.set(LazyNettyServerRouteDO::getIsDeleted, true),
LazyWrappers
.<LazyNettyServerRouteDO>lambdaWrapper()

View File

@@ -16,7 +16,7 @@ import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructu
import org.springframework.stereotype.Repository;
import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage;
import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyUpdateSetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazySetValueWrappers;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
@@ -171,7 +171,7 @@ public class LazyNettyServerVirtualRouteRepositoryImpl implements LazyNettyServe
@Override
public Result<LazyNettyServerVirtualRoute> remove(LazyNettyServerVirtualRoute lazyNettyServerVirtualRoute) {
LazyNettyServerVirtualRouteDO lazyNettyServerVirtualRouteDO = LazyNettyServerVirtualRouteConverter.INSTANCE.fromLazyNettyServerVirtualRoute(lazyNettyServerVirtualRoute);
lazyLambdaStream.update(LazyUpdateSetValueWrappers.<LazyNettyServerVirtualRouteDO>lambdaWrapper()
lazyLambdaStream.update(LazySetValueWrappers.<LazyNettyServerVirtualRouteDO>lambdaWrapper()
.set(LazyNettyServerVirtualRouteDO::getIsDeleted, true),
LazyWrappers
.<LazyNettyServerVirtualRouteDO>lambdaWrapper()

View File

@@ -10,7 +10,7 @@ import org.wu.framework.web.ui.LazyUI;
public class NettyServerLazyUI implements LazyUI {
public static final String UI_URL = "/netty-server-ui/**";
public static final String UI_URL_INDEX = "/netty-server-ui/index.html";
public static final String CLASSPATH = "classpath:/netty-server-ui/v1/";
public static final String CLASSPATH = "classpath:/wlcn-server-ui/v1/";
/**
* 是否支持 default false

View File

@@ -10,7 +10,7 @@ import org.wu.framework.web.ui.LazyUI;
public class WLCNUI implements LazyUI {
public static final String UI_URL = "/wlcn/**";
public static final String UI_URL_INDEX = "/wlcn/index.html";
public static final String CLASSPATH = "classpath:/netty-server-ui/v1/";
public static final String CLASSPATH = "classpath:/wlcn-server-ui/v1/";
/**
* 是否支持 default false

View File

@@ -1 +0,0 @@
.el-form-item[data-v-259b6f0a]{width:100%}.fl{float:left}.p0{padding:0!important}.application_item_class_[data-v-5a34f483],.el-form-item[data-v-8c51848e],.el-form-item[data-v-af3b3260],.menu_edit_item[data-v-0823986f],.role_edit_item{width:100%}.ve_table .ve_table_page[data-v-11019130],.ve_table[data-v-11019130]{flex:1;display:flex;flex-direction:column}.ve_table .ve_table_page .ve_table_content[data-v-11019130]{flex:1}

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[1079],{11079:function(e,l,t){t.r(l),t.d(l,{default:function(){return a}});var o=t(47038),r=t(71802);var a={__name:"ServerPermeateClientPortPoolEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const t={visitorPort:[{required:!0,message:"请输入访客端口",trigger:"blur"}]},a=e,u=l,{title:i,rowData:d}=(0,r.BK)(a),n=()=>{u("closeDialog",!1)},s=(0,r.iH)(null),v=(0,r.qj)({visitorPort:"",describe:""}),{visitorPort:c,describe:m}=(0,r.BK)(v);d.value&&(c.value=d.value.visitorPort,m.value=d.value.describe);return(0,o.bv)((async()=>{})),(l,a)=>{const u=(0,o.up)("el-input"),p=(0,o.up)("el-form-item"),_=(0,o.up)("el-form"),f=(0,o.up)("el-button"),w=(0,o.up)("el-dialog");return(0,o.wg)(),(0,o.j4)(w,{title:(0,r.SU)(i),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:a[4]||(a[4]=e=>n())},{footer:(0,o.w5)((()=>[(0,o._)("span",null,[(0,o.Wm)(f,{onClick:a[2]||(a[2]=e=>n())},{default:(0,o.w5)((()=>a[5]||(a[5]=[(0,o.Uk)("取消")]))),_:1,__:[5]}),(0,o.Wm)(f,{type:"primary",onClick:a[3]||(a[3]=e=>{s.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===i.value?await VE_API.cloudNetworkServerPerMeate.lazyNettyServerPermeatePortPoolSave(v):await VE_API.cloudNetworkServerPerMeate.lazyNettyServerPermeatePortPoolUpdate({visitorPort:d.value.visitorPort,...v});const{code:l}=e;0===l&&n()}}))})},{default:(0,o.w5)((()=>a[6]||(a[6]=[(0,o.Uk)("确定")]))),_:1,__:[6]})])])),default:(0,o.w5)((()=>[(0,o.Wm)(_,{model:v,ref_key:"formRef",ref:s,rules:t,"label-width":"80px",inline:!1},{default:(0,o.w5)((()=>[(0,o.Wm)(p,{label:"访客端口",prop:"visitorPort"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{modelValue:(0,r.SU)(c),"onUpdate:modelValue":a[0]||(a[0]=e=>(0,r.dq)(c)?c.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(p,{label:"描述",prop:"describe"},{default:(0,o.w5)((()=>[(0,o.Wm)(u,{modelValue:(0,r.SU)(m),"onUpdate:modelValue":a[1]||(a[1]=e=>(0,r.dq)(m)?m.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[1572],{71572:function(e,l,a){a.r(l),a.d(l,{default:function(){return d}});a(35239),a(16738);var t=a(47038),o=a(71802),u=a(46537);const r={style:{float:"left"}};var d={__name:"ServerPermeateClientNetWorkMappingEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={clientId:[{required:!0,message:"请输入选择客户端",trigger:"blur"}],clientTargetIp:[{required:!0,message:"请输入客户端目标IP",trigger:"blur"}],clientTargetPort:[{required:!0,message:"请输入客户端目标端口",trigger:"blur"}],visitorPort:[{required:!0,message:"请选择访客端口",trigger:"blur"}]},d=e,i=l,{title:n,rowData:c}=(0,o.BK)(d),p=()=>{i("closeDialog",!1)},s=(0,o.iH)(null),v=(0,o.iH)(null),m=(0,o.iH)(null),g=(0,o.qj)({visitorPort:"",targetClientId:"",clientTargetIp:"0.0.0.0",clientTargetPort:"",describe:""}),{visitorPort:w,targetClientId:b,clientTargetIp:_,clientTargetPort:f,describe:P}=(0,o.BK)(g);c.value&&(b.value=c.value.targetClientId,_.value=c.value.clientTargetIp,f.value=c.value.clientTargetPort,w.value=c.value.visitorPort,P.value=c.value.describe);return(0,t.bv)((async()=>{await(async()=>{let e=await VE_API.cloudNetworkServerPerMeate.lazyNettyServerPermeatePortPoolList({});const{code:l}=e;0===l&&(e.data.map((e=>{e.label=e.describe,e.value=e.visitorPort})),m.value=e.data?e.data:[])})(),await(async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient({}).then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),v.value=e.data?e.data:[])}))})()})),(l,d)=>{const i=(0,t.up)("el-option"),y=(0,t.up)("el-select"),I=(0,t.up)("el-form-item"),V=(0,t.up)("el-input"),k=(0,t.up)("el-form"),U=(0,t.up)("el-button"),W=(0,t.up)("el-dialog");return(0,t.wg)(),(0,t.j4)(W,{title:(0,o.SU)(n),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:d[7]||(d[7]=e=>p())},{footer:(0,t.w5)((()=>[(0,t._)("span",null,[(0,t.Wm)(U,{onClick:d[5]||(d[5]=e=>p())},{default:(0,t.w5)((()=>d[8]||(d[8]=[(0,t.Uk)("取消")]))),_:1,__:[8]}),(0,t.Wm)(U,{type:"primary",onClick:d[6]||(d[6]=e=>{s.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===n.value?await VE_API.cloudNetwork.networkMappingSave(g):await VE_API.cloudNetwork.networkMappingUpdate({clientTargetPort:c.value.clientTargetPort,...g});const{code:l}=e;0===l&&p()}}))})},{default:(0,t.w5)((()=>d[9]||(d[9]=[(0,t.Uk)("确定")]))),_:1,__:[9]})])])),default:(0,t.w5)((()=>[(0,t.Wm)(k,{model:g,ref_key:"formRef",ref:s,rules:a,"label-width":"80px",inline:!1},{default:(0,t.w5)((()=>[(0,t.Wm)(I,{label:"访问端口",prop:"visitorPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(y,{modelValue:(0,o.SU)(w),"onUpdate:modelValue":d[0]||(d[0]=e=>(0,o.dq)(w)?w.value=e:null),placeholder:"访问端口",clearable:""},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(m.value,(e=>((0,t.wg)(),(0,t.j4)(i,{key:e.value,label:e.label,value:e.value},{default:(0,t.w5)((()=>[(0,t._)("span",r," 端口:【"+(0,u.zw)(e.value)+"】"+(0,u.zw)(e.label),1)])),_:2},1032,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"目标客户端ID",prop:"targetClientId"},{default:(0,t.w5)((()=>[(0,t.Wm)(y,{modelValue:(0,o.SU)(b),"onUpdate:modelValue":d[1]||(d[1]=e=>(0,o.dq)(b)?b.value=e:null),placeholder:"目标客户端ID",clearable:""},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(v.value,(e=>((0,t.wg)(),(0,t.j4)(i,{key:e.value,label:e.label,value:e.value,namespace:e},null,8,["label","value","namespace"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"客户端目标地址",prop:"clientTargetIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,o.SU)(_),"onUpdate:modelValue":d[2]||(d[2]=e=>(0,o.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"客户端目标端口",prop:"clientTargetPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,o.SU)(f),"onUpdate:modelValue":d[3]||(d[3]=e=>(0,o.dq)(f)?f.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"描述",prop:"describe"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,o.SU)(P),"onUpdate:modelValue":d[4]||(d[4]=e=>(0,o.dq)(P)?P.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[2021],{72021:function(e,n,u){u.r(n),u.d(n,{default:function(){return _}});var t=u(47038),o=u(7280),a=u(69125),l={__name:"Hamburger",setup(e){const n=(0,a.oR)(),u=(0,t.Fl)((()=>n.getters.opened)),l=()=>{n.dispatch(`app/${o.qL}`)};return(e,n)=>{const o=(0,t.up)("el-icon");return(0,t.wg)(),(0,t.iD)("div",{class:"ve_slider_menu",onClick:l},[(0,t.Wm)(o,null,{default:(0,t.w5)((()=>[((0,t.wg)(),(0,t.j4)((0,t.LL)(u.value?"expand":"fold")))])),_:1})])}}};var _=(0,u(60199).Z)(l,[["__scopeId","data-v-6e3be609"]])}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[2149],{42149:function(e,l,a){a.r(l),a.d(l,{default:function(){return o}});a(35239),a(16738);var t=a(47038),u=a(71802);var o={__name:"ClientRouteEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={clientId:[{required:!0,message:"请选择客户端",trigger:"blur"}],routeIp:[{required:!0,message:"请输入路由IP",trigger:"blur"}]},o=e,d=l,{title:n,rowData:r}=(0,u.BK)(o),i=(0,u.iH)(null),c=()=>{d("closeDialog",!1)},p=(0,u.iH)(null),s=(0,u.qj)({clientId:"",routeIp:"",describe:""}),{clientId:m,routeIp:v,describe:w}=(0,u.BK)(s);r.value&&(m.value=r.value.clientId,v.value=r.value.routeIp,w.value=r.value.describe);return(0,t.bv)((async()=>{await(async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient({}).then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),i.value=e.data?e.data:[])}))})()})),(l,o)=>{const d=(0,t.up)("el-option"),_=(0,t.up)("el-select"),b=(0,t.up)("el-form-item"),f=(0,t.up)("el-input"),y=(0,t.up)("el-form"),I=(0,t.up)("el-button"),g=(0,t.up)("el-dialog");return(0,t.wg)(),(0,t.j4)(g,{title:(0,u.SU)(n),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:o[5]||(o[5]=e=>c())},{footer:(0,t.w5)((()=>[(0,t._)("span",null,[(0,t.Wm)(I,{onClick:o[3]||(o[3]=e=>c())},{default:(0,t.w5)((()=>o[6]||(o[6]=[(0,t.Uk)("取消")]))),_:1,__:[6]}),(0,t.Wm)(I,{type:"primary",onClick:o[4]||(o[4]=e=>{p.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===n.value?await VE_API.cloudNetworkRoute.lazyNettyClientRouteSave(s):await VE_API.cloudNetworkRoute.lazyNettyClientRouteUpdate({id:r.value.id,...s});const{code:l}=e;0===l&&c()}}))})},{default:(0,t.w5)((()=>o[7]||(o[7]=[(0,t.Uk)("确定")]))),_:1,__:[7]})])])),default:(0,t.w5)((()=>[(0,t.Wm)(y,{model:s,ref_key:"formRef",ref:p,rules:a,"label-width":"80px",inline:!1},{default:(0,t.w5)((()=>[(0,t.Wm)(b,{label:"客户端ID",prop:"clientId"},{default:(0,t.w5)((()=>[(0,t.Wm)(_,{modelValue:(0,u.SU)(m),"onUpdate:modelValue":o[0]||(o[0]=e=>(0,u.dq)(m)?m.value=e:null),placeholder:"客户端ID",clearable:""},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(i.value,(e=>((0,t.wg)(),(0,t.j4)(d,{key:e.value,label:e.label,value:e.value,namespace:e},null,8,["label","value","namespace"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(b,{label:"路由IP",prop:"routeIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(f,{modelValue:(0,u.SU)(v),"onUpdate:modelValue":o[1]||(o[1]=e=>(0,u.dq)(v)?v.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(b,{label:"描述",prop:"describe"},{default:(0,t.w5)((()=>[(0,t.Wm)(f,{modelValue:(0,u.SU)(w),"onUpdate:modelValue":o[2]||(o[2]=e=>(0,u.dq)(w)?w.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[2160,6238],{14975:function(e,a,l){l.r(a),l.d(a,{default:function(){return i}});l(47619);var r=l(47038),s=l(71802),u=l(27538),o=l(7280),d=l(71770),t=l(69125),n=l(37911);const p={class:"ve_container"};var m={__name:"Register",setup(e){const a={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],checkPassword:[{required:!0,message:"密码确认",trigger:"blur"}]},{proxy:l}=(0,r.FN)(),m=(0,t.oR)(),i=(0,n.tv)(),_=(0,s.qj)({username:"",password:"",checkPassword:""}),{username:c,password:w,checkPassword:f}=(0,s.BK)(_),g=(0,s.iH)(null),h=(0,s.iH)(!1);sessionStorage.clear(),m.dispatch(`app/${o.L4}`,""),i.options.isAddDynamicMenuRoutes=!1;const v=()=>{_.password===_.checkPassword?g.value.validate((async e=>{if(e){const e=await VE_API.system.register(_);0===e.code&&(m.dispatch(`app/${o.L4}`,e.data),m.dispatch(`app/${o.TR}`,_.username),h.value=!0,i.push({name:"AppMain"}))}})):l.$message({type:"error",message:"请确认,两次输入密码是否一致!"})};return(e,l)=>{const o=(0,r.up)("router-link"),t=(0,r.up)("Avatar"),n=(0,r.up)("el-icon"),m=(0,r.up)("el-input"),i=(0,r.up)("el-form-item"),W=(0,r.up)("Key"),y=(0,r.up)("el-button"),k=(0,r.up)("el-form"),b=(0,r.up)("el-card");return(0,r.wg)(),(0,r.j4)((0,s.SU)(d.default),null,{default:(0,r.w5)((()=>[(0,r._)("div",p,[(0,r.Wm)(b,{"body-style":{background:"rgba(0,0,0,0.15)"}},{default:(0,r.w5)((()=>[(0,r.Wm)(o,{style:{float:"right"},to:{path:"login"}},{default:(0,r.w5)((()=>l[3]||(l[3]=[(0,r.Uk)("登录")]))),_:1,__:[3]}),l[5]||(l[5]=(0,r._)("h1",null,"网络渗透",-1)),(0,r.Wm)(u.uT,{name:"el-fade-in-linear"},{default:(0,r.w5)((()=>[(0,r.wy)((0,r.Wm)(k,{model:_,rules:a,class:"ve_form",ref_key:"ref_form",ref:g,inline:!1,onKeyup:(0,u.D2)(v,["enter"])},{default:(0,r.w5)((()=>[(0,r.Wm)(i,{prop:"username",label:"注册账号"},{default:(0,r.w5)((()=>[(0,r.Wm)(m,{modelValue:(0,s.SU)(c),"onUpdate:modelValue":l[0]||(l[0]=e=>(0,s.dq)(c)?c.value=e:null),modelModifiers:{trim:!0},placeholder:"注册账号"},{prepend:(0,r.w5)((()=>[(0,r.Wm)(n,{size:20},{default:(0,r.w5)((()=>[(0,r.Wm)(t)])),_:1})])),_:1},8,["modelValue"])])),_:1}),(0,r.Wm)(i,{prop:"password",label:"账号密码"},{default:(0,r.w5)((()=>[(0,r.Wm)(m,{modelValue:(0,s.SU)(w),"onUpdate:modelValue":l[1]||(l[1]=e=>(0,s.dq)(w)?w.value=e:null),modelModifiers:{trim:!0},"show-password":"",placeholder:"账号密码"},{prepend:(0,r.w5)((()=>[(0,r.Wm)(n,{size:20},{default:(0,r.w5)((()=>[(0,r.Wm)(W)])),_:1})])),_:1},8,["modelValue"])])),_:1}),(0,r.Wm)(i,{prop:"checkPassword",label:"密码确认"},{default:(0,r.w5)((()=>[(0,r.Wm)(m,{modelValue:(0,s.SU)(f),"onUpdate:modelValue":l[2]||(l[2]=e=>(0,s.dq)(f)?f.value=e:null),modelModifiers:{trim:!0},"show-password":"",placeholder:"密码确认"},{prepend:(0,r.w5)((()=>[(0,r.Wm)(n,{size:20},{default:(0,r.w5)((()=>[(0,r.Wm)(W)])),_:1})])),_:1},8,["modelValue"])])),_:1}),(0,r.Wm)(i,null,{default:(0,r.w5)((()=>[(0,r.Wm)(y,{class:"ve_submit",type:"primary",onClick:v},{default:(0,r.w5)((()=>l[4]||(l[4]=[(0,r.Uk)(" 注册 ")]))),_:1,__:[4]})])),_:1})])),_:1},8,["model"]),[[u.F8,!h.value]])])),_:1})])),_:1,__:[5]})])])),_:1})}}};var i=(0,l(60199).Z)(m,[["__scopeId","data-v-216052e6"]])}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[2226],{68469:function(e){e.exports={main_bg_color:"#f5f5f5",base_color:"#409EFF",nav_height:"50px",nav_menu_height:"50px",side_close_width:"65px",side_open_width:"160px",sideBgColor:"#545c64",sideTextColor:"#fff",sideActiveTextColor:"#ffd04b"}},92226:function(e,n,o){"use strict";o.r(n),o.d(n,{default:function(){return s}});var t=o(27538),a=o(71802),r=o(47038),l=o(68469);const i={"element-loading-text":"拼命加载中","element-loading-spinner":"el-icon-loading"},u=["src"];var _={__name:"IFrame",props:{url:{type:String}},setup(e){(0,t.sj)((e=>({"4916a745":(0,a.SU)(l.nav_height)})));const n=e,o=(0,a.iH)(!0),_=(0,a.iH)(null);return(0,r.bv)((()=>{(()=>{const e=()=>{o.value=!1};_.value.attachEvent?_.value.attachEvent("onload",e):_.value.onload=e})()})),(e,t)=>{const a=(0,r.Q2)("loading");return(0,r.wy)(((0,r.wg)(),(0,r.iD)("div",i,[(0,r._)("iframe",{ref_key:"iframe",ref:_,src:n.url,frameborder:"0"},null,8,u)])),[[a,o.value]])}}};var s=(0,o(60199).Z)(_,[["__scopeId","data-v-03589f92"]])}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[2236],{42236:function(e,l,a){a.r(l),a.d(l,{default:function(){return t}});var o=a(47038),u=a(71802);var t={__name:"ApplicationEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a=e,t=l,{title:d,rowData:n}=(0,u.BK)(a),i=()=>{t("closeDialog",!1)},r=(0,u.qj)({code:"",icon:"",name:"",isStation:!0,openNewWindow:!0,url:""}),{code:p,icon:m,name:_,isStation:c,openNewWindow:s,url:w}=(0,u.BK)(r),f=(0,u.iH)(null),v={name:[{required:!0,message:"请输入应用名称",trigger:"blur"}],code:[{required:!0,message:"请输入应用编码",trigger:"blur"}],isStation:[{required:!0,message:"请选择是否站内",trigger:"blur"}],openNewWindow:[{required:!0,message:"请选择是否新窗口打开",trigger:"blur"}]};n.value&&(_.value=n.value.name,p.value=n.value.code,m.value=n.value.icon,c.value=n.value.isStation,s.value=n.value.openNewWindow,w.value=n.value.url);return(0,o.bv)((async()=>{})),(l,a)=>{const t=(0,o.up)("el-input"),b=(0,o.up)("el-form-item"),W=(0,o.up)("el-radio-button"),g=(0,o.up)("el-radio-group"),V=(0,o.up)("el-form"),U=(0,o.up)("el-button"),S=(0,o.up)("el-dialog");return(0,o.wg)(),(0,o.j4)(S,{title:(0,u.SU)(d),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:a[8]||(a[8]=e=>i())},{footer:(0,o.w5)((()=>[(0,o._)("span",null,[(0,o.Wm)(U,{onClick:a[6]||(a[6]=e=>i())},{default:(0,o.w5)((()=>a[13]||(a[13]=[(0,o.Uk)("取消")]))),_:1,__:[13]}),(0,o.Wm)(U,{type:"primary",onClick:a[7]||(a[7]=e=>{f.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e,l=new FormData;l.append("name",r.name),l.append("code",r.code),l.append("icon",r.icon),l.append("isStation",r.isStation),l.append("openNewWindow",r.openNewWindow),l.append("url",r.url),e="添加"===d.value?await VE_API.application.applicationStory(r):await VE_API.application.applicationStory({id:n.value.id,...r});const{code:a}=e;0===a&&i()}}))})},{default:(0,o.w5)((()=>a[14]||(a[14]=[(0,o.Uk)("确定")]))),_:1,__:[14]})])])),default:(0,o.w5)((()=>[(0,o.Wm)(V,{model:r,ref_key:"formRef",ref:f,rules:v,inline:!1,"label-width":"120px"},{default:(0,o.w5)((()=>[(0,o.Wm)(b,{label:"应用名称",prop:"name",class:"role_edit_item"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(_),"onUpdate:modelValue":a[0]||(a[0]=e=>(0,u.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(b,{label:"应用编码",prop:"code",class:"role_edit_item"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(p),"onUpdate:modelValue":a[1]||(a[1]=e=>(0,u.dq)(p)?p.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(b,{label:"应用图标",prop:"icon",class:"role_edit_item"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(m),"onUpdate:modelValue":a[2]||(a[2]=e=>(0,u.dq)(m)?m.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(b,{label:"是否站内",prop:"isStation",class:"role_edit_item"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{modelValue:(0,u.SU)(c),"onUpdate:modelValue":a[3]||(a[3]=e=>(0,u.dq)(c)?c.value=e:null)},{default:(0,o.w5)((()=>[(0,o.Wm)(W,{label:!0},{default:(0,o.w5)((()=>a[9]||(a[9]=[(0,o.Uk)("站内")]))),_:1,__:[9]}),(0,o.Wm)(W,{label:!1},{default:(0,o.w5)((()=>a[10]||(a[10]=[(0,o.Uk)("站外")]))),_:1,__:[10]})])),_:1},8,["modelValue"])])),_:1}),(0,o.Wm)(b,{label:"应用地址",prop:"url",class:"role_edit_item"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(w),"onUpdate:modelValue":a[4]||(a[4]=e=>(0,u.dq)(w)?w.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(b,{label:"是否新窗口打开",prop:"openNewWindow",class:"role_edit_item"},{default:(0,o.w5)((()=>[(0,o.Wm)(g,{modelValue:(0,u.SU)(s),"onUpdate:modelValue":a[5]||(a[5]=e=>(0,u.dq)(s)?s.value=e:null)},{default:(0,o.w5)((()=>[(0,o.Wm)(W,{label:!0},{default:(0,o.w5)((()=>a[11]||(a[11]=[(0,o.Uk)("新窗口打开")]))),_:1,__:[11]}),(0,o.Wm)(W,{label:!1},{default:(0,o.w5)((()=>a[12]||(a[12]=[(0,o.Uk)("当前页面跳转")]))),_:1,__:[12]})])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[2244],{52244:function(e,l,a){a.r(l),a.d(l,{default:function(){return d}});a(35239),a(16738);var t=a(47038),r=a(71802),u=a(46537);const o={style:{float:"left"}};var d={__name:"ClientPermeateServerNetworkMappingEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={clientId:[{required:!0,message:"请选择客户端",trigger:"blur"}],visitorPort:[{required:!0,message:"请选择访客端口",trigger:"blur"}],permeateTargetIp:[{required:!0,message:"请输入客户端目标IP",trigger:"blur"}],permeateTargetPort:[{required:!0,message:"请输入客户端目标端口",trigger:"blur"}]},d=e,n=l,{title:i,rowData:p}=(0,r.BK)(d),m=()=>{n("closeDialog",!1)},c=(0,r.iH)(null),v=(0,r.iH)(null),s=(0,r.iH)(null),g=(0,r.qj)({permeateTargetIp:"0.0.0.0",permeateTargetPort:"",visitorPort:"",clientId:"",describe:"",id:""}),{permeateTargetIp:w,permeateTargetPort:b,visitorPort:_,clientId:f,describe:P,id:y}=(0,r.BK)(g);p.value&&(w.value=p.value.permeateTargetIp,f.value=p.value.clientId,b.value=p.value.permeateTargetPort,_.value=p.value.visitorPort,P.value=p.value.describe,y.value=p.value.id);return(0,t.bv)((async()=>{await(async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient({}).then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),s.value=e.data?e.data:[])}))})()})),(l,d)=>{const n=(0,t.up)("el-option"),y=(0,t.up)("el-select"),I=(0,t.up)("el-form-item"),V=(0,t.up)("el-input"),k=(0,t.up)("el-form"),S=(0,t.up)("el-button"),U=(0,t.up)("el-dialog");return(0,t.wg)(),(0,t.j4)(U,{title:(0,r.SU)(i),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:d[8]||(d[8]=e=>m())},{footer:(0,t.w5)((()=>[(0,t._)("span",null,[(0,t.Wm)(S,{onClick:d[6]||(d[6]=e=>m())},{default:(0,t.w5)((()=>d[9]||(d[9]=[(0,t.Uk)("取消")]))),_:1,__:[9]}),(0,t.Wm)(S,{type:"primary",onClick:d[7]||(d[7]=e=>{c.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===i.value?await VE_API.cloudNetworkServerPerMeate.lazyInternalNetworkClientPermeateServerMappingSave(g):await VE_API.cloudNetworkServerPerMeate.lazyInternalNetworkClientPermeateServerMappingUpdate({permeateTargetPort:p.value.permeateTargetPort,...g});const{code:l}=e;0===l&&m()}}))})},{default:(0,t.w5)((()=>d[10]||(d[10]=[(0,t.Uk)("确定")]))),_:1,__:[10]})])])),default:(0,t.w5)((()=>[(0,t.Wm)(k,{model:g,ref_key:"formRef",ref:c,rules:a,"label-width":"80px",inline:!1},{default:(0,t.w5)((()=>[(0,t.Wm)(I,{label:"客户端ID",prop:"clientId"},{default:(0,t.w5)((()=>[(0,t.Wm)(y,{modelValue:(0,r.SU)(f),"onUpdate:modelValue":d[0]||(d[0]=e=>(0,r.dq)(f)?f.value=e:null),placeholder:"客户端ID",clearable:"",onChange:d[1]||(d[1]=e=>(async e=>{let l=await VE_API.cloudNetworkServerPerMeate.lazyNettyClientPermeatePortPoolList({clientId:e});const{code:a}=l;0===a&&l.data&&(l.data.map((e=>{e.label=e.describe,e.value=e.visitorPort})),v.value=l.data?l.data:[])})((0,r.SU)(f)))},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(s.value,(e=>((0,t.wg)(),(0,t.j4)(n,{key:e.value,label:e.label,value:e.value,namespace:e},null,8,["label","value","namespace"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"客户端访问端口",prop:"visitorPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(y,{modelValue:(0,r.SU)(_),"onUpdate:modelValue":d[2]||(d[2]=e=>(0,r.dq)(_)?_.value=e:null),placeholder:"客户端访问端口",clearable:""},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(v.value,(e=>((0,t.wg)(),(0,t.j4)(n,{key:e.value,label:e.label,value:e.value},{default:(0,t.w5)((()=>[(0,t._)("span",o," 端口:【"+(0,u.zw)(e.value)+"】"+(0,u.zw)(e.label),1)])),_:2},1032,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"服务端目标地址",prop:"permeateTargetIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,r.SU)(w),"onUpdate:modelValue":d[3]||(d[3]=e=>(0,r.dq)(w)?w.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"服务端目标端口",prop:"permeateTargetPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,r.SU)(b),"onUpdate:modelValue":d[4]||(d[4]=e=>(0,r.dq)(b)?b.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"描述",prop:"describe"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,r.SU)(P),"onUpdate:modelValue":d[5]||(d[5]=e=>(0,r.dq)(P)?P.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[2278],{72278:function(e,l,a){a.r(l),a.d(l,{default:function(){return r}});a(35239),a(16738);var t=a(47038),u=a(71802);var r={__name:"ClientVirtualRouteEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={targetClientId:[{required:!0,message:"请选择客户端",trigger:"blur"}],virtualIp:[{required:!0,message:"请输入虚拟IP",trigger:"blur"}],virtualPort:[{required:!0,message:"请输入虚拟端口",trigger:"blur"}],targetIp:[{required:!0,message:"请输入目标IP",trigger:"blur"}],targetPort:[{required:!0,message:"请输入目标端口",trigger:"blur"}]},r=e,o=l,{title:d,rowData:i}=(0,u.BK)(r),n=(0,u.iH)(null),p=()=>{o("closeDialog",!1)},m=(0,u.iH)(null),v=(0,u.qj)({targetClientId:"",virtualIp:"",virtualPort:"*",targetIp:"",targetPort:"*",describe:""}),{targetClientId:c,virtualIp:s,virtualPort:g,targetIp:b,targetPort:w,describe:_}=(0,u.BK)(v);i.value&&(c.value=i.value.targetClientId,s.value=i.value.virtualIp,g.value=i.value.virtualPort,b.value=i.value.targetIp,w.value=i.value.targetPort,_.value=i.value.describe);return(0,t.bv)((async()=>{await(async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient({}).then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),n.value=e.data?e.data:[])}))})()})),(l,r)=>{const o=(0,t.up)("el-option"),f=(0,t.up)("el-select"),I=(0,t.up)("el-form-item"),V=(0,t.up)("el-input"),y=(0,t.up)("el-form"),P=(0,t.up)("el-button"),U=(0,t.up)("el-dialog");return(0,t.wg)(),(0,t.j4)(U,{title:(0,u.SU)(d),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:r[8]||(r[8]=e=>p())},{footer:(0,t.w5)((()=>[(0,t._)("span",null,[(0,t.Wm)(P,{onClick:r[6]||(r[6]=e=>p())},{default:(0,t.w5)((()=>r[9]||(r[9]=[(0,t.Uk)("取消")]))),_:1,__:[9]}),(0,t.Wm)(P,{type:"primary",onClick:r[7]||(r[7]=e=>{m.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===d.value?await VE_API.cloudNetworkRoute.lazyNettyClientVirtualRouteSave(v):await VE_API.cloudNetworkRoute.lazyNettyClientVirtualRouteUpdate({id:i.value.id,...v});const{code:l}=e;0===l&&p()}}))})},{default:(0,t.w5)((()=>r[10]||(r[10]=[(0,t.Uk)("确定")]))),_:1,__:[10]})])])),default:(0,t.w5)((()=>[(0,t.Wm)(y,{model:v,ref_key:"formRef",ref:m,rules:a,"label-width":"80px",inline:!1},{default:(0,t.w5)((()=>[(0,t.Wm)(I,{label:"客户端ID",prop:"targetClientId"},{default:(0,t.w5)((()=>[(0,t.Wm)(f,{modelValue:(0,u.SU)(c),"onUpdate:modelValue":r[0]||(r[0]=e=>(0,u.dq)(c)?c.value=e:null),placeholder:"客户端ID",clearable:""},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(n.value,(e=>((0,t.wg)(),(0,t.j4)(o,{key:e.value,label:e.label,value:e.value,namespace:e},null,8,["label","value","namespace"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"虚拟IP",prop:"virtualIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,u.SU)(s),"onUpdate:modelValue":r[1]||(r[1]=e=>(0,u.dq)(s)?s.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"虚拟端口",prop:"virtualPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,u.SU)(g),"onUpdate:modelValue":r[2]||(r[2]=e=>(0,u.dq)(g)?g.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"目标IP",prop:"targetIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,u.SU)(b),"onUpdate:modelValue":r[3]||(r[3]=e=>(0,u.dq)(b)?b.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"目标端口",prop:"targetPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,u.SU)(w),"onUpdate:modelValue":r[4]||(r[4]=e=>(0,u.dq)(w)?w.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(I,{label:"描述",prop:"describe"},{default:(0,t.w5)((()=>[(0,t.Wm)(V,{modelValue:(0,u.SU)(_),"onUpdate:modelValue":r[5]||(r[5]=e=>(0,u.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[275],{20275:function(e,n,r){r.r(n),r.d(n,{default:function(){return m}});r(47619),r(35239),r(58958);var t=r(47038),a=r(71802),i=r(46537),u=r(37911),l=r(14791),c=r(21470),o=r(5003),s=r.n(o);const d={class:"el-menu-item-text"},p={class:"el-menu-item-text"};var m={__name:"SlideMenu",props:["menu"],setup(e){const n=e,{menu:r}=(0,a.BK)(n),o=(0,u.tv)(),m=e=>{let n=`/${e.url.replace(/\//g,"-")}-${e.code}`;return 1===e.iframe&&(n=`/i-${e.code}`),n};return(e,n)=>{const u=(0,t.up)("el-icon"),y=(0,t.up)("slide-menu",!0),f=(0,t.up)("el-sub-menu"),h=(0,t.up)("el-menu-item");return 0===(0,a.SU)(r).type&&(e=>{if(e&&e.length>0)return s().toTreeArray(e).some((e=>1===e.type));return!1})((0,a.SU)(r).children)?((0,t.wg)(),(0,t.j4)(f,{key:0,index:(0,a.SU)(r).code+""},{title:(0,t.w5)((()=>[(0,t.Wm)(u,{size:16,style:{"margin-right":"6px"}},{default:(0,t.w5)((()=>[((0,t.wg)(),(0,t.j4)((0,t.LL)((0,a.SU)(r).icon)))])),_:1}),(0,t._)("span",d,(0,i.zw)((0,a.SU)(r).name),1)])),default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)((0,a.SU)(r).children,(e=>((0,t.wg)(),(0,t.j4)(y,{key:e.code,menu:e},null,8,["menu"])))),128))])),_:1},8,["index"])):1===(0,a.SU)(r).type?((0,t.wg)(),(0,t.j4)(h,{key:1,index:m((0,a.SU)(r)),onClick:n[0]||(n[0]=e=>(e=>{let n=e.url.replace(/\//g,"-")+`-${e.code}`;1===e.iframe&&(n=`i-${e.code}`),l.Z.dispatch(`tabbar/${c.cn}`,{barName:e.name,barCode:n}),o.push({name:n})})((0,a.SU)(r)))},{title:(0,t.w5)((()=>[(0,t.Wm)(u,{size:16,style:{"margin-right":"6px"}},{default:(0,t.w5)((()=>[((0,t.wg)(),(0,t.j4)((0,t.LL)((0,a.SU)(r).icon)))])),_:1}),(0,t._)("span",p,(0,i.zw)((0,a.SU)(r).name),1)])),_:1},8,["index"])):(0,t.kq)("",!0)}}}},5003:function(e,n,r){var t=r(3410),a=r(33144),i=r(48297),u=r(77916),l=r(81837),c=r(65252),o=r(55614),s=r(66571),d=r(81669),p=r(60550),m=r(95462),y=r(34321),f=r(75790),h=r(13801),w=r(14026),_=r(93079),g=r(13556),k=r(45739),S=r(96021),x=r(28065),U=r(72474),z=r(44206),b=r(24133),v=r(87454),T=r(29413),j=r(74428),A=r(77793),L=r(28235),$=r(11991),C=r(95511),B=r(49745),K=r(85167),O=r(48577),W=r(44125),q=r(64817),E={uniq:o,union:s,sortBy:p,orderBy:m,shuffle:y,sample:f,some:a,every:i,slice:h,filter:w,find:k,findLast:S,findKey:_,includes:g,arrayIndexOf:r(87397),arrayLastIndexOf:r(74985),map:t,reduce:x,copyWithin:U,chunk:z,zip:b,unzip:v,zipObject:T,flatten:j,toArray:d,includeArrays:u,pluck:A,invoke:L,arrayEach:l,lastArrayEach:c,toArrayTree:$,toTreeArray:C,findTree:B,eachTree:K,mapTree:O,filterTree:W,searchTree:q};e.exports=E}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[3995],{63995:function(e,l,t){t.r(l),t.d(l,{default:function(){return u}});t(35239),t(16738);var a=t(47038),o=t(71802);var u={__name:"ServerRouteEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const t={routeIp:[{required:!0,message:"请输入路由IP",trigger:"blur"}]},u=e,r=l,{title:d,rowData:n}=(0,o.BK)(u),i=(0,o.iH)(null),p=()=>{r("closeDialog",!1)},c=(0,o.iH)(null),s=(0,o.qj)({routeIp:"",describe:""}),{routeIp:m,describe:_}=(0,o.BK)(s);n.value&&(m.value=n.value.routeIp,_.value=n.value.describe);return(0,a.bv)((async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient().then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),i.value=e.data?e.data:[])}))})),(l,u)=>{const r=(0,a.up)("el-input"),i=(0,a.up)("el-form-item"),v=(0,a.up)("el-form"),w=(0,a.up)("el-button"),f=(0,a.up)("el-dialog");return(0,a.wg)(),(0,a.j4)(f,{title:(0,o.SU)(d),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:u[4]||(u[4]=e=>p())},{footer:(0,a.w5)((()=>[(0,a._)("span",null,[(0,a.Wm)(w,{onClick:u[2]||(u[2]=e=>p())},{default:(0,a.w5)((()=>u[5]||(u[5]=[(0,a.Uk)("取消")]))),_:1,__:[5]}),(0,a.Wm)(w,{type:"primary",onClick:u[3]||(u[3]=e=>{c.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===d.value?await VE_API.cloudNetworkRoute.lazyNettyServerRouteSave(s):await VE_API.cloudNetworkRoute.lazyNettyServerRouteUpdate({id:n.value.id,...s});const{code:l}=e;0===l&&p()}}))})},{default:(0,a.w5)((()=>u[6]||(u[6]=[(0,a.Uk)("确定")]))),_:1,__:[6]})])])),default:(0,a.w5)((()=>[(0,a.Wm)(v,{model:s,ref_key:"formRef",ref:c,rules:t,"label-width":"80px",inline:!1},{default:(0,a.w5)((()=>[(0,a.Wm)(i,{label:"路由IP","label-width":"140px",prop:"routeIp"},{default:(0,a.w5)((()=>[(0,a.Wm)(r,{modelValue:(0,o.SU)(m),"onUpdate:modelValue":u[0]||(u[0]=e=>(0,o.dq)(m)?m.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,a.Wm)(i,{label:"描述",prop:"describe"},{default:(0,a.w5)((()=>[(0,a.Wm)(r,{modelValue:(0,o.SU)(_),"onUpdate:modelValue":u[1]||(u[1]=e=>(0,o.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[4050],{34050:function(e,l,a){a.r(l),a.d(l,{default:function(){return d}});var u=a(47038),o=a(71802),t={__name:"UsersEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],roleIds:[{required:!0,message:"请选择角色",trigger:"change"}]},t=e,d=l,{title:r,rowData:s}=(0,o.BK)(t),n=()=>{d("closeDialog",!1)},i=(0,o.iH)(null),m=(0,o.qj)({username:"",password:"",roleIds:[],status:!0}),{username:p,password:w,roleIds:_,status:c}=(0,o.BK)(m),f=(0,o.iH)([]);s.value&&(p.value=s.value.username,w.value=s.value.password,_.value=s.value.roleIds,c.value=s.value.status);(0,u.bv)((async()=>{await(async()=>{const{code:e,data:l}=await VE_API.system.roleList();0===e&&(f.value=l)})()}));return(l,t)=>{const d=(0,u.up)("el-input"),v=(0,u.up)("el-form-item"),b=(0,u.up)("el-option"),g=(0,u.up)("el-select"),y=(0,u.up)("el-radio-button"),V=(0,u.up)("el-radio-group"),U=(0,u.up)("el-form"),W=(0,u.up)("el-button"),h=(0,u.up)("el-dialog");return(0,u.wg)(),(0,u.j4)(h,{title:(0,o.SU)(r),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:t[6]||(t[6]=e=>n())},{footer:(0,u.w5)((()=>[(0,u._)("span",null,[(0,u.Wm)(W,{onClick:t[4]||(t[4]=e=>n())},{default:(0,u.w5)((()=>t[9]||(t[9]=[(0,u.Uk)("取消")]))),_:1,__:[9]}),(0,u.Wm)(W,{type:"primary",onClick:t[5]||(t[5]=e=>{i.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===r.value?await VE_API.system.userAdd(m):await VE_API.system.userEdit({id:s.value.id,...m});const{code:l}=e;0===l&&n()}}))})},{default:(0,u.w5)((()=>t[10]||(t[10]=[(0,u.Uk)("确定")]))),_:1,__:[10]})])])),default:(0,u.w5)((()=>[(0,u.Wm)(U,{model:m,ref_key:"formRef",ref:i,rules:a,"label-width":"80px",inline:!1},{default:(0,u.w5)((()=>[(0,u.Wm)(v,{label:"用户名",prop:"username"},{default:(0,u.w5)((()=>[(0,u.Wm)(d,{modelValue:(0,o.SU)(p),"onUpdate:modelValue":t[0]||(t[0]=e=>(0,o.dq)(p)?p.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(v,{label:"密码",prop:"password"},{default:(0,u.w5)((()=>[(0,u.Wm)(d,{modelValue:(0,o.SU)(w),"onUpdate:modelValue":t[1]||(t[1]=e=>(0,o.dq)(w)?w.value=e:null),"show-password":"",placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(v,{label:"角色",prop:"roleIds"},{default:(0,u.w5)((()=>[(0,u.Wm)(g,{style:{width:"100%"},modelValue:(0,o.SU)(_),"onUpdate:modelValue":t[2]||(t[2]=e=>(0,o.dq)(_)?_.value=e:null),multiple:"",placeholder:"",clearable:""},{default:(0,u.w5)((()=>[((0,u.wg)(!0),(0,u.iD)(u.HY,null,(0,u.Ko)(f.value,(e=>((0,u.wg)(),(0,u.j4)(b,{key:e.id,label:e.name,value:e.id},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,u.Wm)(v,{label:"状态"},{default:(0,u.w5)((()=>[(0,u.Wm)(V,{modelValue:(0,o.SU)(c),"onUpdate:modelValue":t[3]||(t[3]=e=>(0,o.dq)(c)?c.value=e:null)},{default:(0,u.w5)((()=>[(0,u.Wm)(y,{label:!0},{default:(0,u.w5)((()=>t[7]||(t[7]=[(0,u.Uk)("启用")]))),_:1,__:[7]}),(0,u.Wm)(y,{label:!1},{default:(0,u.w5)((()=>t[8]||(t[8]=[(0,u.Uk)("停用")]))),_:1,__:[8]})])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}};var d=(0,a(60199).Z)(t,[["__scopeId","data-v-259b6f0a"]])}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[4938],{54938:function(e,l,a){a.r(l),a.d(l,{default:function(){return t}});var o=a(47038),u=a(71802);var t={__name:"DictionaryDataEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a=e,t=l,{title:d,rowData:n}=(0,u.BK)(a),r=()=>{t("closeDialog",!1)},i=(0,u.qj)({code:"",name:"",description:"",dictionaryCode:"",type:1}),{code:m,name:p,description:c,dictionaryCode:s,type:_}=(0,u.BK)(i),f=(0,u.iH)(null),v={name:[{required:!0,message:"请输入字典项名称",trigger:"blur"}],code:[{required:!0,message:"请输入字典项编码",trigger:"blur"}]};n.value&&(p.value=n.value.name,m.value=n.value.code,c.value=n.value.description,s.value=n.value.dictionaryCode,_.value=n.value.type);return(0,o.bv)((async()=>{})),(l,a)=>{const t=(0,o.up)("el-input"),w=(0,o.up)("el-form-item"),y=(0,o.up)("el-radio-button"),b=(0,o.up)("el-radio-group"),g=(0,o.up)("el-form"),V=(0,o.up)("el-button"),U=(0,o.up)("el-dialog");return(0,o.wg)(),(0,o.j4)(U,{title:(0,u.SU)(d),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:a[7]||(a[7]=e=>r())},{footer:(0,o.w5)((()=>[(0,o._)("span",null,[(0,o.Wm)(V,{onClick:a[5]||(a[5]=e=>r())},{default:(0,o.w5)((()=>a[10]||(a[10]=[(0,o.Uk)("取消")]))),_:1,__:[10]}),(0,o.Wm)(V,{type:"primary",onClick:a[6]||(a[6]=e=>{f.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===d.value?await VE_API.system.dictionaryDataAdd(i):await VE_API.system.dictionaryDataEdit({id:n.value.id,...i});const{code:l}=e;"00"==l&&r()}}))})},{default:(0,o.w5)((()=>a[11]||(a[11]=[(0,o.Uk)("确定")]))),_:1,__:[11]})])])),default:(0,o.w5)((()=>[(0,o.Wm)(g,{model:i,ref_key:"formRef",ref:f,rules:v,"label-width":"80px",inline:!1},{default:(0,o.w5)((()=>[(0,o.Wm)(w,{label:"字典项名称",prop:"name"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(p),"onUpdate:modelValue":a[0]||(a[0]=e=>(0,u.dq)(p)?p.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(w,{label:"字典项编码",prop:"code"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(m),"onUpdate:modelValue":a[1]||(a[1]=e=>(0,u.dq)(m)?m.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(w,{label:"字典项描述",prop:"description"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(c),"onUpdate:modelValue":a[2]||(a[2]=e=>(0,u.dq)(c)?c.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(w,{label:"字典编码",prop:"dictionaryCode"},{default:(0,o.w5)((()=>[(0,o.Wm)(t,{modelValue:(0,u.SU)(s),"onUpdate:modelValue":a[3]||(a[3]=e=>(0,u.dq)(s)?s.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,o.Wm)(w,{label:"字典类型",prop:"status"},{default:(0,o.w5)((()=>[(0,o.Wm)(b,{modelValue:(0,u.SU)(_),"onUpdate:modelValue":a[4]||(a[4]=e=>(0,u.dq)(_)?_.value=e:null)},{default:(0,o.w5)((()=>[(0,o.Wm)(y,{label:1},{default:(0,o.w5)((()=>a[8]||(a[8]=[(0,o.Uk)("树状")]))),_:1,__:[8]}),(0,o.Wm)(y,{label:0},{default:(0,o.w5)((()=>a[9]||(a[9]=[(0,o.Uk)("列表")]))),_:1,__:[9]})])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[5545],{75545:function(e,t,n){n.r(t),n.d(t,{default:function(){return r}});var u=n(47038),o=n(71802);var r={__name:"FunctionPage",props:{title:{type:String,require:!0}},setup(e){const t=e,{title:n}=(0,o.BK)(t);return(e,t)=>{const r=(0,u.up)("el-page-header"),l=(0,u.up)("el-alert"),c=(0,u.up)("el-divider");return(0,u.wg)(),(0,u.iD)("div",null,[(0,u.Wm)(r,{onBack:t[0]||(t[0]=t=>e.$router.back()),content:(0,o.SU)(n)},null,8,["content"]),(0,u.Wm)(l,{style:{"margin-top":"20px"},type:"info",description:"当前为动态权限页面!离开后将无法访问!刷新页面请使用本系统自带刷新按钮!!!","show-icon":"","close-text":"知道了"}),(0,u.Wm)(c),(0,u.WI)(e.$slots,"default")])}}}}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[5738],{35738:function(e,l,a){a.r(l),a.d(l,{default:function(){return d}});var u=a(47038),o=a(71802),t={__name:"LazyZoneApplicationEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],roleIds:[{required:!0,message:"请选择角色",trigger:"change"}]},t=e,d=l,{title:r,rowData:s}=(0,o.BK)(t),n=()=>{d("closeDialog",!1)},i=(0,o.iH)(null),m=(0,o.qj)({username:"",password:"",roleIds:[],status:!0}),{username:p,password:w,roleIds:_,status:c}=(0,o.BK)(m),f=(0,o.iH)([]);s.value&&(p.value=s.value.username,w.value=s.value.password,_.value=s.value.roleIds,c.value=s.value.status);(0,u.bv)((async()=>{await(async()=>{const{code:e,data:l}=await VE_API.system.roleList();0===e&&(f.value=l)})()}));return(l,t)=>{const d=(0,u.up)("el-input"),v=(0,u.up)("el-form-item"),b=(0,u.up)("el-option"),g=(0,u.up)("el-select"),y=(0,u.up)("el-radio-button"),V=(0,u.up)("el-radio-group"),U=(0,u.up)("el-form"),W=(0,u.up)("el-button"),h=(0,u.up)("el-dialog");return(0,u.wg)(),(0,u.j4)(h,{title:(0,o.SU)(r),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:t[6]||(t[6]=e=>n())},{footer:(0,u.w5)((()=>[(0,u._)("span",null,[(0,u.Wm)(W,{onClick:t[4]||(t[4]=e=>n())},{default:(0,u.w5)((()=>t[9]||(t[9]=[(0,u.Uk)("取消")]))),_:1,__:[9]}),(0,u.Wm)(W,{type:"primary",onClick:t[5]||(t[5]=e=>{i.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===r.value?await VE_API.system.userAdd(m):await VE_API.system.userEdit({id:s.value.id,...m});const{code:l}=e;0===l&&n()}}))})},{default:(0,u.w5)((()=>t[10]||(t[10]=[(0,u.Uk)("确定")]))),_:1,__:[10]})])])),default:(0,u.w5)((()=>[(0,u.Wm)(U,{model:m,ref_key:"formRef",ref:i,rules:a,"label-width":"80px",inline:!1},{default:(0,u.w5)((()=>[(0,u.Wm)(v,{label:"用户名",prop:"username"},{default:(0,u.w5)((()=>[(0,u.Wm)(d,{modelValue:(0,o.SU)(p),"onUpdate:modelValue":t[0]||(t[0]=e=>(0,o.dq)(p)?p.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(v,{label:"密码",prop:"password"},{default:(0,u.w5)((()=>[(0,u.Wm)(d,{modelValue:(0,o.SU)(w),"onUpdate:modelValue":t[1]||(t[1]=e=>(0,o.dq)(w)?w.value=e:null),"show-password":"",placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(v,{label:"角色",prop:"roleIds"},{default:(0,u.w5)((()=>[(0,u.Wm)(g,{style:{width:"100%"},modelValue:(0,o.SU)(_),"onUpdate:modelValue":t[2]||(t[2]=e=>(0,o.dq)(_)?_.value=e:null),multiple:"",placeholder:"",clearable:""},{default:(0,u.w5)((()=>[((0,u.wg)(!0),(0,u.iD)(u.HY,null,(0,u.Ko)(f.value,(e=>((0,u.wg)(),(0,u.j4)(b,{key:e.id,label:e.name,value:e.id},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,u.Wm)(v,{label:"状态"},{default:(0,u.w5)((()=>[(0,u.Wm)(V,{modelValue:(0,o.SU)(c),"onUpdate:modelValue":t[3]||(t[3]=e=>(0,o.dq)(c)?c.value=e:null)},{default:(0,u.w5)((()=>[(0,u.Wm)(y,{label:!0},{default:(0,u.w5)((()=>t[7]||(t[7]=[(0,u.Uk)("启用")]))),_:1,__:[7]}),(0,u.Wm)(y,{label:!1},{default:(0,u.w5)((()=>t[8]||(t[8]=[(0,u.Uk)("停用")]))),_:1,__:[8]})])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}};var d=(0,a(60199).Z)(t,[["__scopeId","data-v-af3b3260"]])}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[580],{80580:function(e,l,t){t.r(l),t.d(l,{default:function(){return u}});var a=t(47038),o=t(71802);var u={__name:"CloudServerSendMessage2Client",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const t={clientId:[{required:!0,message:"请输入选择客户端",trigger:"blur"}],clientTargetIp:[{required:!0,message:"请输入客户端目标IP",trigger:"blur"}],clientTargetPort:[{required:!0,message:"请输入客户端目标端口",trigger:"blur"}],visitorPort:[{required:!0,message:"请选择访客端口",trigger:"blur"}]},u=e,r=l,{title:n,rowData:d}=(0,o.BK)(u),i=()=>{r("closeDialog",!1)},s=(0,o.iH)(null),c=(0,o.qj)({message:"",clientId:""}),{clientId:m,message:p}=(0,o.BK)(c);d.value&&(m.value=d.value.clientId);return(0,a.bv)((async()=>{})),(l,u)=>{const r=(0,a.up)("el-input"),d=(0,a.up)("el-form-item"),g=(0,a.up)("el-form"),_=(0,a.up)("el-button"),f=(0,a.up)("el-dialog");return(0,a.wg)(),(0,a.j4)(f,{title:(0,o.SU)(n),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:u[4]||(u[4]=e=>i())},{footer:(0,a.w5)((()=>[(0,a._)("span",null,[(0,a.Wm)(_,{onClick:u[2]||(u[2]=e=>i())},{default:(0,a.w5)((()=>u[5]||(u[5]=[(0,a.Uk)("取消")]))),_:1,__:[5]}),(0,a.Wm)(_,{type:"primary",onClick:u[3]||(u[3]=e=>{s.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e=await VE_API.cloudNetwork.sendMessage2HeartbeatClient(c);const{code:l}=e;0===l&&i()}}))})},{default:(0,a.w5)((()=>u[6]||(u[6]=[(0,a.Uk)("发送")]))),_:1,__:[6]})])])),default:(0,a.w5)((()=>[(0,a.Wm)(g,{model:c,ref_key:"formRef",ref:s,rules:t,"label-width":"80px",inline:!1},{default:(0,a.w5)((()=>[(0,a.Wm)(d,{label:"客户端ID",prop:"clientId"},{default:(0,a.w5)((()=>[(0,a.Wm)(r,{modelValue:(0,o.SU)(m),"onUpdate:modelValue":u[0]||(u[0]=e=>(0,o.dq)(m)?m.value=e:null),placeholder:"",disabled:""},null,8,["modelValue"])])),_:1}),(0,a.Wm)(d,{label:"发送的消息",prop:"describe"},{default:(0,a.w5)((()=>[(0,a.Wm)(r,{modelValue:(0,o.SU)(p),"onUpdate:modelValue":u[1]||(u[1]=e=>(0,o.dq)(p)?p.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[5945],{15945:function(e,t,n){n.r(t),n.d(t,{default:function(){return r}});n(47619);var i=n(47038),a=n(28914),s=n(86455);const o={class:"ve_container"},l={data:()=>({description:"客户端访问流量",type:"1",icon:"DataLine",name:"客户端访问流量",parentMenu:s.Z})};var r=Object.assign(l,{__name:"ClientPerDayFlow",setup(e){return(0,i.bv)((async()=>{const{code:e,data:t}=await VE_API.cloudNetworkReport.findClientPerDayFlow();0===e&&console.log(t);const n=document.getElementById("client_per_day_flow"),i=a.S1(n,null,{renderer:"canvas",useDirtyRect:!1});let s;const o=[];o.push({type:"line",name:"进口流量",emphasis:{focus:"series"},data:t.clientInFlowList}),o.push({type:"line",name:"出口流量",emphasis:{focus:"series"},data:t.clientOutFlowList}),o.push({type:"line",name:"进、出流量",emphasis:{focus:"series"},data:t.clientAllFlowList}),s={animationDuration:1e4,tooltip:{trigger:"axis"},legend:{},grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},xAxis:[{type:"category",data:t.dayList}],yAxis:[{type:"value"}],series:o,toolbox:{feature:{saveAsImage:{}}}},s&&i.setOption(s),window.addEventListener("resize",i.resize)})),(e,t)=>((0,i.wg)(),(0,i.iD)("div",o,t[0]||(t[0]=[(0,i._)("div",{id:"client_per_day_flow",style:{width:"100%",height:"600px"}},null,-1)])))}})}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[7059],{57059:function(e,l,a){a.r(l),a.d(l,{default:function(){return r}});a(35239),a(16738);var t=a(47038),u=a(71802);var r={__name:"ServerVirtualRouteEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={virtualIp:[{required:!0,message:"请输入虚拟IP",trigger:"blur"}],virtualPort:[{required:!0,message:"请输入虚拟端口",trigger:"blur"}],targetIp:[{required:!0,message:"请输入目标IP",trigger:"blur"}],targetPort:[{required:!0,message:"请输入目标端口",trigger:"blur"}]},r=e,o=l,{title:d,rowData:i}=(0,u.BK)(r),n=(0,u.iH)(null),p=()=>{o("closeDialog",!1)},m=(0,u.iH)(null),v=(0,u.qj)({virtualIp:"",virtualPort:"*",targetIp:"",targetPort:"*",describe:""}),{virtualIp:c,virtualPort:s,targetIp:g,targetPort:b,describe:_}=(0,u.BK)(v);i.value&&(c.value=i.value.virtualIp,s.value=i.value.virtualPort,g.value=i.value.targetIp,b.value=i.value.targetPort,_.value=i.value.describe);return(0,t.bv)((async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient().then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),n.value=e.data?e.data:[])}))})),(l,r)=>{const o=(0,t.up)("el-input"),n=(0,t.up)("el-form-item"),w=(0,t.up)("el-form"),f=(0,t.up)("el-button"),V=(0,t.up)("el-dialog");return(0,t.wg)(),(0,t.j4)(V,{title:(0,u.SU)(d),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:r[7]||(r[7]=e=>p())},{footer:(0,t.w5)((()=>[(0,t._)("span",null,[(0,t.Wm)(f,{onClick:r[5]||(r[5]=e=>p())},{default:(0,t.w5)((()=>r[8]||(r[8]=[(0,t.Uk)("取消")]))),_:1,__:[8]}),(0,t.Wm)(f,{type:"primary",onClick:r[6]||(r[6]=e=>{m.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===d.value?await VE_API.cloudNetworkRoute.lazyNettyServerVirtualRouteSave(v):await VE_API.cloudNetworkRoute.lazyNettyServerVirtualRouteUpdate({id:i.value.id,...v});const{code:l}=e;0===l&&p()}}))})},{default:(0,t.w5)((()=>r[9]||(r[9]=[(0,t.Uk)("确定")]))),_:1,__:[9]})])])),default:(0,t.w5)((()=>[(0,t.Wm)(w,{model:v,ref_key:"formRef",ref:m,rules:a,"label-width":"80px",inline:!1},{default:(0,t.w5)((()=>[(0,t.Wm)(n,{label:"虚拟IP","label-width":"140px",prop:"virtualIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{modelValue:(0,u.SU)(c),"onUpdate:modelValue":r[0]||(r[0]=e=>(0,u.dq)(c)?c.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(n,{label:"虚拟端口",prop:"virtualPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{modelValue:(0,u.SU)(s),"onUpdate:modelValue":r[1]||(r[1]=e=>(0,u.dq)(s)?s.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(n,{label:"目标IP","label-width":"140px",prop:"targetIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{modelValue:(0,u.SU)(g),"onUpdate:modelValue":r[2]||(r[2]=e=>(0,u.dq)(g)?g.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(n,{label:"目标端口",prop:"targetPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{modelValue:(0,u.SU)(b),"onUpdate:modelValue":r[3]||(r[3]=e=>(0,u.dq)(b)?b.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(n,{label:"描述",prop:"describe"},{default:(0,t.w5)((()=>[(0,t.Wm)(o,{modelValue:(0,u.SU)(_),"onUpdate:modelValue":r[4]||(r[4]=e=>(0,u.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[7282],{38840:function(e,l,a){a.r(l),a.d(l,{default:function(){return d}});a(35239),a(16738);var t=a(47038),r=a(71802),o=a(46537);const u={style:{float:"left"}};var d={__name:"ServerPermeateServerNetworkMappingEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={permeateTargetIp:[{required:!0,message:"请输入客户端目标IP",trigger:"blur"}],permeateTargetPort:[{required:!0,message:"请输入客户端目标端口",trigger:"blur"}],visitorPort:[{required:!0,message:"请选择访客端口",trigger:"blur"}]},d=e,p=l,{title:i,rowData:n}=(0,r.BK)(d),m=()=>{p("closeDialog",!1)},s=(0,r.iH)(null),v=(0,r.iH)(null),c=(0,r.qj)({permeateTargetIp:"0.0.0.0",permeateTargetPort:"",visitorPort:"",describe:""}),{permeateTargetIp:g,permeateTargetPort:w,visitorPort:_,describe:b}=(0,r.BK)(c);n.value&&(g.value=n.value.permeateTargetIp,w.value=n.value.permeateTargetPort,_.value=n.value.visitorPort,b.value=n.value.describe);return(0,t.bv)((async()=>{await(async()=>{let e=await VE_API.cloudNetworkServerPerMeate.lazyNettyServerPermeatePortPoolList();const{code:l}=e;0===l&&(e.data.map((e=>{e.label=e.describe,e.value=e.visitorPort})),v.value=e.data?e.data:[])})()})),(l,d)=>{const p=(0,t.up)("el-option"),f=(0,t.up)("el-select"),P=(0,t.up)("el-form-item"),y=(0,t.up)("el-input"),k=(0,t.up)("el-form"),S=(0,t.up)("el-button"),V=(0,t.up)("el-dialog");return(0,t.wg)(),(0,t.j4)(V,{title:(0,r.SU)(i),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:d[6]||(d[6]=e=>m())},{footer:(0,t.w5)((()=>[(0,t._)("span",null,[(0,t.Wm)(S,{onClick:d[4]||(d[4]=e=>m())},{default:(0,t.w5)((()=>d[7]||(d[7]=[(0,t.Uk)("取消")]))),_:1,__:[7]}),(0,t.Wm)(S,{type:"primary",onClick:d[5]||(d[5]=e=>{s.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===i.value?await VE_API.cloudNetworkServerPerMeate.lazyInternalNetworkServerPermeateMappingSave(c):await VE_API.cloudNetworkServerPerMeate.lazyInternalNetworkServerPermeateMappingUpdate({permeateTargetPort:n.value.permeateTargetPort,...c});const{code:l}=e;0===l&&m()}}))})},{default:(0,t.w5)((()=>d[8]||(d[8]=[(0,t.Uk)("确定")]))),_:1,__:[8]})])])),default:(0,t.w5)((()=>[(0,t.Wm)(k,{model:c,ref_key:"formRef",ref:s,rules:a,"label-width":"80px",inline:!1},{default:(0,t.w5)((()=>[(0,t.Wm)(P,{label:"访问端口",prop:"visitorPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(f,{modelValue:(0,r.SU)(_),"onUpdate:modelValue":d[0]||(d[0]=e=>(0,r.dq)(_)?_.value=e:null),placeholder:"访问端口",clearable:""},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(v.value,(e=>((0,t.wg)(),(0,t.j4)(p,{key:e.value,label:e.label,value:e.value},{default:(0,t.w5)((()=>[(0,t._)("span",u," 端口:【"+(0,o.zw)(e.value)+"】"+(0,o.zw)(e.label),1)])),_:2},1032,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(P,{label:"客户端目标地址",prop:"permeateTargetIp"},{default:(0,t.w5)((()=>[(0,t.Wm)(y,{modelValue:(0,r.SU)(g),"onUpdate:modelValue":d[1]||(d[1]=e=>(0,r.dq)(g)?g.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(P,{label:"客户端目标端口",prop:"permeateTargetPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(y,{modelValue:(0,r.SU)(w),"onUpdate:modelValue":d[2]||(d[2]=e=>(0,r.dq)(w)?w.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(P,{label:"描述",prop:"describe"},{default:(0,t.w5)((()=>[(0,t.Wm)(y,{modelValue:(0,r.SU)(b),"onUpdate:modelValue":d[3]||(d[3]=e=>(0,r.dq)(b)?b.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[7591],{57591:function(e,l,a){a.r(l),a.d(l,{default:function(){return t}});var u=a(47038),o=a(71802);var t={__name:"DictionaryEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a=e,t=l,{title:d,rowData:n}=(0,o.BK)(a),r=()=>{t("closeDialog",!1)},i=(0,o.qj)({code:"",name:"",type:1}),{code:m,name:p,type:s}=(0,o.BK)(i),c=(0,o.iH)(null),_={name:[{required:!0,message:"请输入字典名称",trigger:"blur"}],code:[{required:!0,message:"请输入字典编码",trigger:"blur"}]};n.value&&(p.value=n.value.name,m.value=n.value.code,s.value=n.value.type);return(0,u.bv)((async()=>{})),(l,a)=>{const t=(0,u.up)("el-input"),f=(0,u.up)("el-form-item"),w=(0,u.up)("el-radio-button"),v=(0,u.up)("el-radio-group"),y=(0,u.up)("el-form"),b=(0,u.up)("el-button"),g=(0,u.up)("el-dialog");return(0,u.wg)(),(0,u.j4)(g,{title:(0,o.SU)(d),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:a[5]||(a[5]=e=>r())},{footer:(0,u.w5)((()=>[(0,u._)("span",null,[(0,u.Wm)(b,{onClick:a[3]||(a[3]=e=>r())},{default:(0,u.w5)((()=>a[8]||(a[8]=[(0,u.Uk)("取消")]))),_:1,__:[8]}),(0,u.Wm)(b,{type:"primary",onClick:a[4]||(a[4]=e=>{c.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===d.value?await VE_API.system.dictionaryAdd(i):await VE_API.system.dictionaryEdit({id:n.value.id,...i});const{code:l}=e;"00"==l&&r()}}))})},{default:(0,u.w5)((()=>a[9]||(a[9]=[(0,u.Uk)("确定")]))),_:1,__:[9]})])])),default:(0,u.w5)((()=>[(0,u.Wm)(y,{model:i,ref_key:"formRef",ref:c,rules:_,"label-width":"80px",inline:!1},{default:(0,u.w5)((()=>[(0,u.Wm)(f,{label:"字典名称",prop:"name"},{default:(0,u.w5)((()=>[(0,u.Wm)(t,{modelValue:(0,o.SU)(p),"onUpdate:modelValue":a[0]||(a[0]=e=>(0,o.dq)(p)?p.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(f,{label:"字典编码",prop:"code"},{default:(0,u.w5)((()=>[(0,u.Wm)(t,{modelValue:(0,o.SU)(m),"onUpdate:modelValue":a[1]||(a[1]=e=>(0,o.dq)(m)?m.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(f,{label:"字典类型",prop:"status"},{default:(0,u.w5)((()=>[(0,u.Wm)(v,{modelValue:(0,o.SU)(s),"onUpdate:modelValue":a[2]||(a[2]=e=>(0,o.dq)(s)?s.value=e:null)},{default:(0,u.w5)((()=>[(0,u.Wm)(w,{label:1},{default:(0,u.w5)((()=>a[6]||(a[6]=[(0,u.Uk)("树状")]))),_:1,__:[6]}),(0,u.Wm)(w,{label:0},{default:(0,u.w5)((()=>a[7]||(a[7]=[(0,u.Uk)("列表")]))),_:1,__:[7]})])),_:1},8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[7660],{97660:function(e,l,a){a.r(l),a.d(l,{default:function(){return u}});a(35239),a(16738);var t=a(47038),o=a(71802);var u={__name:"ClientPermeatePortPoolEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={clientId:[{required:!0,message:"请选择客户端",trigger:"blur"}],visitorPort:[{required:!0,message:"请输入端口",trigger:"blur"}],applicationName:[{required:!0,message:"请输入应用名",trigger:"blur"}]},u=e,r=l,{title:i,rowData:d}=(0,o.BK)(u),n=(0,o.iH)(null),c=()=>{r("closeDialog",!1)},s=(0,o.iH)(null),p=(0,o.qj)({clientId:"",visitorPort:"",describe:""}),{clientId:m,visitorPort:v,describe:w}=(0,o.BK)(p);d.value&&(m.value=d.value.clientId,v.value=d.value.visitorPort,w.value=d.value.describe);return(0,t.bv)((async()=>{await(async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient({}).then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),n.value=e.data?e.data:[])}))})()})),(l,u)=>{const r=(0,t.up)("el-option"),_=(0,t.up)("el-select"),b=(0,t.up)("el-form-item"),f=(0,t.up)("el-input"),g=(0,t.up)("el-form"),P=(0,t.up)("el-button"),y=(0,t.up)("el-dialog");return(0,t.wg)(),(0,t.j4)(y,{title:(0,o.SU)(i),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:u[5]||(u[5]=e=>c())},{footer:(0,t.w5)((()=>[(0,t._)("span",null,[(0,t.Wm)(P,{onClick:u[3]||(u[3]=e=>c())},{default:(0,t.w5)((()=>u[6]||(u[6]=[(0,t.Uk)("取消")]))),_:1,__:[6]}),(0,t.Wm)(P,{type:"primary",onClick:u[4]||(u[4]=e=>{s.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===i.value?await VE_API.cloudNetworkServerPerMeate.lazyNettyClientPermeatePortPoolSave(p):await VE_API.cloudNetworkServerPerMeate.lazyNettyClientPermeatePortPoolUpdate({visitorPort:d.value.visitorPort,...p});const{code:l}=e;0===l&&c()}}))})},{default:(0,t.w5)((()=>u[7]||(u[7]=[(0,t.Uk)("确定")]))),_:1,__:[7]})])])),default:(0,t.w5)((()=>[(0,t.Wm)(g,{model:p,ref_key:"formRef",ref:s,rules:a,"label-width":"80px",inline:!1},{default:(0,t.w5)((()=>[(0,t.Wm)(b,{label:"客户端ID",prop:"clientId"},{default:(0,t.w5)((()=>[(0,t.Wm)(_,{modelValue:(0,o.SU)(m),"onUpdate:modelValue":u[0]||(u[0]=e=>(0,o.dq)(m)?m.value=e:null),placeholder:"客户端ID",clearable:""},{default:(0,t.w5)((()=>[((0,t.wg)(!0),(0,t.iD)(t.HY,null,(0,t.Ko)(n.value,(e=>((0,t.wg)(),(0,t.j4)(r,{key:e.value,label:e.label,value:e.value,namespace:e},null,8,["label","value","namespace"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,t.Wm)(b,{label:"渗透端口",prop:"visitorPort"},{default:(0,t.w5)((()=>[(0,t.Wm)(f,{modelValue:(0,o.SU)(v),"onUpdate:modelValue":u[1]||(u[1]=e=>(0,o.dq)(v)?v.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,t.Wm)(b,{label:"描述",prop:"describe"},{default:(0,t.w5)((()=>[(0,t.Wm)(f,{modelValue:(0,o.SU)(w),"onUpdate:modelValue":u[2]||(u[2]=e=>(0,o.dq)(w)?w.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[7787],{37787:function(e,l,a){a.r(l),a.d(l,{default:function(){return d}});var u=a(47038),t=a(71802),o={__name:"UsersEditRoute",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={name:[{required:!0,message:"请输入用户名",trigger:"blur"}],userName:[{required:!0,message:"请输入账户",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}],role:[{required:!0,message:"请选择角色",trigger:"change"}]},o=e,d=l,{title:r,rowData:s}=(0,t.BK)(o),m=()=>{d("closeDialog",!1)},n=(0,t.iH)(null),i=(0,t.qj)({name:"",userName:"",password:"",role:"",status:1}),{userName:p,name:_,password:w,role:c,status:f}=(0,t.BK)(i),v=(0,t.iH)([]);s.value&&(_.value=s.value.name,p.value=s.value.userName,w.value=s.value.password,c.value=s.value.role,f.value=s.value.status);(async()=>{const{code:e,data:l}=await VE_API.system.roleList({page:1,size:10},{Global:!1});if("0"===e){const{list:e}=l;v.value=e}})();return(e,l)=>{const o=(0,u.up)("el-input"),d=(0,u.up)("el-form-item"),b=(0,u.up)("el-option"),g=(0,u.up)("el-select"),V=(0,u.up)("el-radio-button"),y=(0,u.up)("el-radio-group"),U=(0,u.up)("el-button"),W=(0,u.up)("el-form");return(0,u.wg)(),(0,u.j4)(W,{model:i,ref_key:"formRef",ref:n,rules:a,"label-width":"80px",inline:!1},{default:(0,u.w5)((()=>[(0,u.Wm)(d,{label:"账号",prop:"name"},{default:(0,u.w5)((()=>[(0,u.Wm)(o,{modelValue:(0,t.SU)(_),"onUpdate:modelValue":l[0]||(l[0]=e=>(0,t.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(d,{label:"用户名",prop:"userName"},{default:(0,u.w5)((()=>[(0,u.Wm)(o,{modelValue:(0,t.SU)(p),"onUpdate:modelValue":l[1]||(l[1]=e=>(0,t.dq)(p)?p.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(d,{label:"密码",prop:"password"},{default:(0,u.w5)((()=>[(0,u.Wm)(o,{modelValue:(0,t.SU)(w),"onUpdate:modelValue":l[2]||(l[2]=e=>(0,t.dq)(w)?w.value=e:null),"show-password":"",placeholder:"",clearable:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(d,{label:"角色",prop:"role"},{default:(0,u.w5)((()=>[(0,u.Wm)(g,{style:{width:"100%"},modelValue:(0,t.SU)(c),"onUpdate:modelValue":l[3]||(l[3]=e=>(0,t.dq)(c)?c.value=e:null),placeholder:"",clearable:""},{default:(0,u.w5)((()=>[((0,u.wg)(!0),(0,u.iD)(u.HY,null,(0,u.Ko)(v.value,(e=>((0,u.wg)(),(0,u.j4)(b,{key:e.id,label:e.name,value:e.id,disabled:0==e.status},null,8,["label","value","disabled"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,u.Wm)(d,{label:"状态"},{default:(0,u.w5)((()=>[(0,u.Wm)(y,{modelValue:(0,t.SU)(f),"onUpdate:modelValue":l[4]||(l[4]=e=>(0,t.dq)(f)?f.value=e:null)},{default:(0,u.w5)((()=>[(0,u.Wm)(V,{label:1},{default:(0,u.w5)((()=>l[7]||(l[7]=[(0,u.Uk)("启用")]))),_:1,__:[7]}),(0,u.Wm)(V,{label:0},{default:(0,u.w5)((()=>l[8]||(l[8]=[(0,u.Uk)("停用")]))),_:1,__:[8]})])),_:1},8,["modelValue"])])),_:1}),(0,u.Wm)(d,null,{default:(0,u.w5)((()=>[(0,u.Wm)(U,{onClick:l[5]||(l[5]=e=>m())},{default:(0,u.w5)((()=>l[9]||(l[9]=[(0,u.Uk)("取消")]))),_:1,__:[9]}),(0,u.Wm)(U,{type:"primary",onClick:l[6]||(l[6]=e=>{n.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===r.value?await VE_API.system.userAdd(i):await VE_API.system.userEdit({id:s.value.id,...i});const{code:l}=e;"0"===l&&m()}}))})},{default:(0,u.w5)((()=>l[10]||(l[10]=[(0,u.Uk)("确定")]))),_:1,__:[10]})])),_:1})])),_:1},8,["model"])}}};var d=(0,a(60199).Z)(o,[["__scopeId","data-v-8c51848e"]])}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[7832,6238],{92452:function(e,u,n){n.r(u),n.d(u,{default:function(){return r}});var t=n(47038),_=n(71802),o=n(71770);var r={__name:"404",setup(e){return(e,u)=>((0,t.wg)(),(0,t.j4)((0,_.SU)(o.default)))}}}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[8058],{88058:function(e,a,l){l.r(a),l.d(a,{default:function(){return m}});l(47619),l(35239),l(97122);var o=l(47038),n=l(71802),t=l(14791),u=l(37911),r=l(21470),d=l(85553);const b={class:"ve_nav_bar"},s={style:{position:"absolute",right:"40px",top:"80px"}},p={class:"ve_nav_dropdown"};var c={__name:"NavigateMenuBar",setup(e){const a=(0,u.tv)(),l=(0,o.Fl)({get:()=>t.Z.getters.currentBar,set:e=>t.Z.dispatch(`tabbar/${r.RV}`,e)}),c=(0,n.iH)({barCode:"Home",barName:"首页"}),m=(0,o.Fl)({get:()=>t.Z.getters.barList}),v=e=>{t.Z.dispatch(`tabbar/${r.i7}`,e.barCode),e.barCode===l.value.barCode&&(t.Z.dispatch(`tabbar/${r.RV}`,c.value),a.push({name:c.value.barCode}))},_=()=>{console.log("closeOtherBar"),m.value.forEach((e=>{e.barCode!==l.value.barCode&&t.Z.dispatch(`tabbar/${r.i7}`,e.barCode)}))},i=e=>{a.push({name:e.paneName.barCode}),t.Z.dispatch(`tabbar/${r.RV}`,e.paneName)};return(0,o.bv)((async()=>{})),(e,a)=>{const t=(0,o.up)("el-tab-pane"),u=(0,o.up)("el-tabs"),r=(0,o.up)("el-icon"),w=(0,o.up)("el-dropdown-item"),C=(0,o.up)("el-dropdown-menu"),f=(0,o.up)("el-dropdown");return(0,o.wg)(),(0,o.iD)("div",b,[(0,o.Wm)(u,{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=e=>l.value=e),type:"card",closable:"",onTabRemove:v,onTabClick:i},{default:(0,o.w5)((()=>[((0,o.wg)(),(0,o.j4)(t,{key:c.value.barCode,label:c.value.barName,name:c.value,closable:"false"},null,8,["label","name"])),((0,o.wg)(!0),(0,o.iD)(o.HY,null,(0,o.Ko)(m.value,(e=>((0,o.wg)(),(0,o.j4)(t,{key:e.barCode,label:e.barName,name:e},null,8,["label","name"])))),128))])),_:1},8,["modelValue"]),(0,o._)("div",s,[(0,o.Wm)(f,{onCommand:_},{dropdown:(0,o.w5)((()=>[(0,o.Wm)(C,null,{default:(0,o.w5)((()=>[(0,o.Wm)(w,{onCommand:_},{default:(0,o.w5)((()=>a[1]||(a[1]=[(0,o.Uk)(" 关闭其他 ")]))),_:1,__:[1]})])),_:1})])),default:(0,o.w5)((()=>[(0,o._)("span",p,[(0,o.Wm)(r,null,{default:(0,o.w5)((()=>[(0,o.Wm)((0,n.SU)(d.ArrowDownBold))])),_:1})])])),_:1})])])}}};var m=(0,l(60199).Z)(c,[["__scopeId","data-v-3ca12f2e"]])}}]);

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[8324],{18324:function(e,l,t){t.r(l),t.d(l,{default:function(){return o}});var a=t(47038),u=t(71802);var o={__name:"ClientTokenBucketEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const t={describe:[{required:!0,message:"请选择输入令牌桶描述",trigger:"blur"}],expireInTime:[{required:!0,message:"请选择过期时间",trigger:"blur"}]},o=e,i=l,{title:r,rowData:n}=(0,u.BK)(o),p=[{text:"一周",value:()=>{const e=new Date;return e.setDate(e.getDate()+7),e}},{text:"三个月",value:()=>{const e=new Date;return e.setFullYear(e.getFullYear(),e.getMonth()+3,e.getDate()),e}},{text:"一年",value:()=>{const e=new Date;return e.setFullYear(e.getFullYear()+1,e.getMonth(),e.getDate()),e}}],d=()=>{i("closeDialog",!1)},m=(0,u.iH)(null),s=(0,u.qj)({appKey:"",appSecret:"",usedByClientId:"",limitTime:!1,expireInTime:"",describe:""}),{appKey:c,appSecret:v,usedByClientId:w,limitTime:f,expireInTime:y,describe:_}=(0,u.BK)(s);n.value&&(c.value=n.value.appKey,v.value=n.value.appSecret,w.value=n.value.usedByClientId,f.value=!(void 0===n.value.expireInTime||null==n.value.expireInTime),y.value=n.value.expireInTime,_.value=n.value.describe);return(0,a.bv)((async()=>{})),(l,o)=>{const i=(0,a.up)("el-switch"),c=(0,a.up)("el-form-item"),v=(0,a.up)("el-date-picker"),w=(0,a.up)("el-input"),g=(0,a.up)("el-form"),b=(0,a.up)("el-button"),k=(0,a.up)("el-dialog");return(0,a.wg)(),(0,a.j4)(k,{title:(0,u.SU)(r),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:o[5]||(o[5]=e=>d())},{footer:(0,a.w5)((()=>[(0,a._)("span",null,[(0,a.Wm)(b,{onClick:o[3]||(o[3]=e=>d())},{default:(0,a.w5)((()=>o[6]||(o[6]=[(0,a.Uk)("取消")]))),_:1,__:[6]}),(0,a.Wm)(b,{type:"primary",onClick:o[4]||(o[4]=e=>{m.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;s.limitTime||(s.expireInTime=null),e="添加"===r.value?await VE_API.cloudNetwork.lazyNettyClientTokenBucketProviderSave(s):await VE_API.cloudNetwork.lazyNettyClientTokenBucketProviderUpdate({appKey:n.value.appKey,...s});const{code:l}=e;0===l&&d()}}))})},{default:(0,a.w5)((()=>o[7]||(o[7]=[(0,a.Uk)("确定")]))),_:1,__:[7]})])])),default:(0,a.w5)((()=>[(0,a.Wm)(g,{model:s,ref_key:"formRef",ref:m,rules:t,"label-width":"80px",inline:!1},{default:(0,a.w5)((()=>[(0,a.Wm)(c,{label:"限制时间",prop:"limitTime"},{default:(0,a.w5)((()=>[(0,a.Wm)(i,{modelValue:(0,u.SU)(f),"onUpdate:modelValue":o[0]||(o[0]=e=>(0,u.dq)(f)?f.value=e:null),"inline-prompt":"","active-text":"限制时间","inactive-text":"不限制时间",style:{"--el-switch-on-color":"#13ce66","--el-switch-off-color":"#ff4949"}},null,8,["modelValue"])])),_:1}),(0,u.SU)(f)?((0,a.wg)(),(0,a.j4)(c,{key:0,label:"过期时间","label-width":"140px",prop:"expireInTime"},{default:(0,a.w5)((()=>[(0,a.Wm)(v,{modelValue:(0,u.SU)(y),"onUpdate:modelValue":o[1]||(o[1]=e=>(0,u.dq)(y)?y.value=e:null),type:"datetime",format:"YYYY/MM/DD hh:mm:ss","value-format":"YYYY-MM-DD hh:mm:ss",placeholder:"选择令牌桶过期时间",shortcuts:p},null,8,["modelValue"])])),_:1})):(0,a.kq)("",!0),(0,a.Wm)(c,{label:"描述",prop:"describe"},{default:(0,a.w5)((()=>[(0,a.Wm)(w,{modelValue:(0,u.SU)(_),"onUpdate:modelValue":o[2]||(o[2]=e=>(0,u.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
"use strict";(self.webpackChunkwu_vue_zone_ecology_net=self.webpackChunkwu_vue_zone_ecology_net||[]).push([[9050],{69050:function(e,l,a){a.r(l),a.d(l,{default:function(){return o}});a(35239),a(16738);var u=a(47038),t=a(71802);var o={__name:"CloudClientEdit",props:{showDialog:{type:Boolean,default:!0},title:{type:String,default:"添加"},rowData:{type:Object,default:null}},emits:["closeDialog"],setup(e,{emit:l}){const a={clientId:[{required:!0,message:"请选择客户端",trigger:"blur"}],clientNum:[{required:!0,message:"禁止改变客户端",trigger:"blur"}],onLineNum:[{required:!0,message:"禁止改变在线数量",trigger:"blur"}],onStagingNum:[{required:!0,message:"禁止改变暂存数量",trigger:"blur"}],describe:[{required:!0,message:"请输入描述",trigger:"blur"}]},o=e,d=l,{title:n,rowData:i}=(0,t.BK)(o),r=(0,t.iH)(null),m=()=>{d("closeDialog",!1)},c=(0,t.iH)(null),p=(0,t.qj)({clientId:"",clientNum:"",onLineNum:"",onStagingNum:"",describe:""}),{clientId:s,clientNum:g,onLineNum:b,onStagingNum:v,describe:_}=(0,t.BK)(p);i.value&&(s.value=i.value.clientId,g.value=i.value.clientNum,b.value=i.value.onLineNum,v.value=i.value.onStagingNum,_.value=i.value.describe);return(0,u.bv)((async()=>{VE_API.cloudNetwork.cloudClientFindListGroupByClient().then((e=>{0===e.code&&e.data&&(e.data.map((e=>{e.label=e.clientId,e.value=e.clientId})),r.value=e.data?e.data:[])}))})),(l,o)=>{const d=(0,u.up)("el-option"),w=(0,u.up)("el-select"),f=(0,u.up)("el-form-item"),N=(0,u.up)("el-input"),V=(0,u.up)("el-form"),U=(0,u.up)("el-button"),y=(0,u.up)("el-dialog");return(0,u.wg)(),(0,u.j4)(y,{title:(0,t.SU)(n),"append-to-body":"","destroy-on-close":"","model-value":e.showDialog,onClose:o[7]||(o[7]=e=>m())},{footer:(0,u.w5)((()=>[(0,u._)("span",null,[(0,u.Wm)(U,{onClick:o[5]||(o[5]=e=>m())},{default:(0,u.w5)((()=>o[8]||(o[8]=[(0,u.Uk)("取消")]))),_:1,__:[8]}),(0,u.Wm)(U,{type:"primary",onClick:o[6]||(o[6]=e=>{c.value.validate((async e=>{if(!e)return console.log("error submit!!"),!1;{let e;e="添加"===n.value?await VE_API.cloudNetwork.cloudClientUpdateDescribe(p):await VE_API.cloudNetwork.cloudClientUpdateDescribe({id:i.value.id,...p});const{code:l}=e;0===l&&m()}}))})},{default:(0,u.w5)((()=>o[9]||(o[9]=[(0,u.Uk)("确定")]))),_:1,__:[9]})])])),default:(0,u.w5)((()=>[(0,u.Wm)(V,{model:p,ref_key:"formRef",ref:c,rules:a,"label-width":"80px",inline:!1},{default:(0,u.w5)((()=>[(0,u.Wm)(f,{label:"客户端ID",prop:"clientId"},{default:(0,u.w5)((()=>[(0,u.Wm)(w,{modelValue:(0,t.SU)(s),"onUpdate:modelValue":o[0]||(o[0]=e=>(0,t.dq)(s)?s.value=e:null),placeholder:"客户端ID",disabled:""},{default:(0,u.w5)((()=>[((0,u.wg)(!0),(0,u.iD)(u.HY,null,(0,u.Ko)(r.value,(e=>((0,u.wg)(),(0,u.j4)(d,{key:e.value,label:e.label,value:e.value,namespace:e},null,8,["label","value","namespace"])))),128))])),_:1},8,["modelValue"])])),_:1}),(0,u.Wm)(f,{label:"客户端数量",prop:"clientNum"},{default:(0,u.w5)((()=>[(0,u.Wm)(N,{modelValue:(0,t.SU)(g),"onUpdate:modelValue":o[1]||(o[1]=e=>(0,t.dq)(g)?g.value=e:null),placeholder:"",disabled:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(f,{label:"在线数量",prop:"onLineNum"},{default:(0,u.w5)((()=>[(0,u.Wm)(N,{modelValue:(0,t.SU)(b),"onUpdate:modelValue":o[2]||(o[2]=e=>(0,t.dq)(b)?b.value=e:null),placeholder:"",disabled:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(f,{label:"暂存开启数量",prop:"onStagingNum"},{default:(0,u.w5)((()=>[(0,u.Wm)(N,{modelValue:(0,t.SU)(v),"onUpdate:modelValue":o[3]||(o[3]=e=>(0,t.dq)(v)?v.value=e:null),placeholder:"",disabled:""},null,8,["modelValue"])])),_:1}),(0,u.Wm)(f,{label:"客户端描述",prop:"describe"},{default:(0,u.w5)((()=>[(0,u.Wm)(N,{modelValue:(0,t.SU)(_),"onUpdate:modelValue":o[4]||(o[4]=e=>(0,t.dq)(_)?_.value=e:null),placeholder:"",clearable:""},null,8,["modelValue"])])),_:1})])),_:1},8,["model"])])),_:1},8,["title","model-value"])}}}}}]);

Some files were not shown because too many files have changed in this diff Show More