diff --git a/.gitignore b/.gitignore
index 0f1422b0b..dd60221b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,4 @@ target/
.flattened-pom.xml
data/
+rebel.xml
\ No newline at end of file
diff --git a/snail-job-server/.gitignore b/snail-job-server/.gitignore
index d4847f3cf..b973dbb3d 100644
--- a/snail-job-server/.gitignore
+++ b/snail-job-server/.gitignore
@@ -30,3 +30,6 @@ target/
# Maven ignore
.flattened-pom.xml
+
+# Frontend
+/snail-job-server-ui/src/main/frontend/
\ No newline at end of file
diff --git a/snail-job-server/pom.xml b/snail-job-server/pom.xml
index 0a61fe16b..e9a1213ec 100644
--- a/snail-job-server/pom.xml
+++ b/snail-job-server/pom.xml
@@ -20,6 +20,7 @@
snail-job-server-retry-task
snail-job-server-job-task
snail-job-server-starter
+ snail-job-server-ui
@@ -53,6 +54,11 @@
snail-job-server-job-task
${revision}
+
+ com.aizuda
+ snail-job-server-ui
+ ${revision}
+
com.typesafe.akka
akka-actor-typed_2.13
diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java
index 99025c071..9c8014360 100644
--- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java
+++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java
@@ -1,12 +1,11 @@
package com.aizuda.snailjob.server.common.allocate.client;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
import com.aizuda.snailjob.server.common.ClientLoadBalance;
import com.aizuda.snailjob.server.common.allocate.client.ClientLoadBalanceManager.AllocationAlgorithmEnum;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Objects;
-import java.util.TreeSet;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -43,9 +42,15 @@ public class ClientLoadBalanceLRU implements ClientLoadBalance {
}
// 删除已经下线的节点
+ List delKeys = new ArrayList<>();
for (String address : lruItem.keySet()) {
if (!clientAllAddressSet.contains(address)) {
- lruItem.remove(address);
+ delKeys.add(address);
+ }
+ }
+ if (CollectionUtil.isNotEmpty(delKeys)) {
+ for (String delKey : delKeys) {
+ lruItem.remove(delKey);
}
}
diff --git a/snail-job-server/snail-job-server-starter/pom.xml b/snail-job-server/snail-job-server-starter/pom.xml
index 8687c4c1a..7736583a6 100644
--- a/snail-job-server/snail-job-server-starter/pom.xml
+++ b/snail-job-server/snail-job-server-starter/pom.xml
@@ -50,6 +50,10 @@
com.aizuda
snail-job-server-common
+
+ com.aizuda
+ snail-job-server-ui
+
org.springframework.boot
spring-boot-starter-web
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/aizuda.png b/snail-job-server/snail-job-server-starter/src/main/resources/admin/aizuda.png
deleted file mode 100644
index bfbfc0da9..000000000
Binary files a/snail-job-server/snail-job-server-starter/src/main/resources/admin/aizuda.png and /dev/null differ
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/logo.png b/snail-job-server/snail-job-server-starter/src/main/resources/admin/logo.png
deleted file mode 100644
index adbf832aa..000000000
Binary files a/snail-job-server/snail-job-server-starter/src/main/resources/admin/logo.png and /dev/null differ
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/ryp.png b/snail-job-server/snail-job-server-starter/src/main/resources/admin/ryp.png
deleted file mode 100644
index f26a15a84..000000000
Binary files a/snail-job-server/snail-job-server-starter/src/main/resources/admin/ryp.png and /dev/null differ
diff --git a/snail-job-server/snail-job-server-ui/README.md b/snail-job-server/snail-job-server-ui/README.md
new file mode 100644
index 000000000..975908cea
--- /dev/null
+++ b/snail-job-server/snail-job-server-ui/README.md
@@ -0,0 +1,33 @@
+## 自定义前端指南
+
+为了在项目中集成自定义前端界面,请按照以下步骤操作:
+
+### 1. 创建前端目录
+
+首先,在 [`snail-job-server-ui`]() 的 [`src/main`](src/main) 目录下创建一个名为 [`frontend`](src/main/frontend) 的新目录:
+
+```
+snail-job-server-ui/
+└─ src/
+ └─ main/
+ └─ frontend/ # 新建的前端目录
+```
+
+### 2. 拉取前端代码
+
+使用 Git 命令拉取前端代码库到 frontend 目录中:
+
+```bash
+cd src/main/frontend
+git clone https://gitee.com/opensnail/snail-job-admin.git
+```
+
+> 注意:确保你在 [`frontend`](src/main/frontend) 目录中执行 `git clone` 命令,这样代码会被克隆到当前目录而不是创建一个新的子目录。
+
+### 3. 自定义前端
+
+在 [`frontend`](src/main/frontend) 目录中对前端代码进行必要的修改。你可以编辑文件、添加新文件或删除不必要的文件来满足你的自定义需求。
+
+### 4. 打包程序
+
+在 `Maven` 配置中找到 `skipFrontend` 选项,并确保其未被勾选,以便在打包时包含前端代码的修改,然后运行 `Maven` 打包命令来构建项目。
diff --git a/snail-job-server/snail-job-server-ui/pom.xml b/snail-job-server/snail-job-server-ui/pom.xml
new file mode 100644
index 000000000..45a80435c
--- /dev/null
+++ b/snail-job-server/snail-job-server-ui/pom.xml
@@ -0,0 +1,144 @@
+
+
+ 4.0.0
+
+ com.aizuda
+ snail-job-server
+ ${revision}
+ ../pom.xml
+
+
+ snail-job-server-ui
+ snail-job-server-ui
+ snail-job-server-ui
+ jar
+
+
+ 17
+ 17
+ 17
+ UTF-8
+ v18.20.2
+ 9.4.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ true
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ none
+ execute
+
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+ ${maven-clean-plugin.version}
+
+
+
+ src/main/frontend/
+ false
+
+ dist/**
+
+
+
+
+
+
+ com.github.eirslett
+ frontend-maven-plugin
+
+ target
+ src/main/frontend
+
+
+
+ install node and pnpm
+
+ install-node-and-pnpm
+
+
+ ${node.version}
+ ${pnpm.version}
+
+
+
+ pnpm install
+
+ pnpm
+
+ generate-resources
+
+ install
+ https://registry.npmmirror.com
+ true
+
+
+
+ pnpm build
+
+ pnpm
+
+ generate-resources
+
+ build
+
+
+
+
+
+
+
+ src/main/frontend/dist
+ admin
+
+
+ src/main/resources
+
+ **/*
+
+
+
+
+
+
+ skipFrontend
+
+ true
+
+
+
+
+ com.github.eirslett
+ frontend-maven-plugin
+
+ true
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/snail-job-server/snail-job-server-ui/src/main/java/com/aizuda/snailjob/server/ui/config/SnailJobAdminServerUiAutoConfiguration.java b/snail-job-server/snail-job-server-ui/src/main/java/com/aizuda/snailjob/server/ui/config/SnailJobAdminServerUiAutoConfiguration.java
new file mode 100644
index 000000000..044e7006d
--- /dev/null
+++ b/snail-job-server/snail-job-server-ui/src/main/java/com/aizuda/snailjob/server/ui/config/SnailJobAdminServerUiAutoConfiguration.java
@@ -0,0 +1,21 @@
+package com.aizuda.snailjob.server.ui.config;
+
+import org.springframework.boot.autoconfigure.web.WebProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class SnailJobAdminServerUiAutoConfiguration {
+
+ @Bean
+ public WebProperties webProperties() {
+ WebProperties properties = new WebProperties();
+ WebProperties.Resources resources = properties.getResources();
+ resources.setStaticLocations(new String[]{"classpath:admin/"});
+ return properties;
+ }
+
+}
\ No newline at end of file
diff --git a/snail-job-server/snail-job-server-ui/src/main/java/com/aizuda/snailjob/server/ui/controller/WebController.java b/snail-job-server/snail-job-server-ui/src/main/java/com/aizuda/snailjob/server/ui/controller/WebController.java
new file mode 100644
index 000000000..258b7d0a5
--- /dev/null
+++ b/snail-job-server/snail-job-server-ui/src/main/java/com/aizuda/snailjob/server/ui/controller/WebController.java
@@ -0,0 +1,20 @@
+package com.aizuda.snailjob.server.ui.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+
+/**
+ * 默认接口
+ *
+ * @author: opensnail
+ * @date : 2022-03-28 22:17
+ */
+@Controller
+public class WebController {
+
+ @GetMapping
+ public String forwardIndex() {
+ return "index";
+ }
+
+}
diff --git a/snail-job-server/snail-job-server-ui/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/snail-job-server/snail-job-server-ui/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 000000000..447b48a4d
--- /dev/null
+++ b/snail-job-server/snail-job-server-ui/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+com.aizuda.snailjob.server.ui.config.SnailJobAdminServerUiAutoConfiguration
\ No newline at end of file
diff --git a/snail-job-server/snail-job-server-ui/src/main/resources/admin/aizuda.png b/snail-job-server/snail-job-server-ui/src/main/resources/admin/aizuda.png
new file mode 100644
index 000000000..e69de29bb
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/DescriptionsItem-LhWljJnV.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/DescriptionsItem-LhWljJnV.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/DescriptionsItem-LhWljJnV.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/DescriptionsItem-LhWljJnV.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/Grid-CRDcRyPk.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/Grid-CRDcRyPk.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/Grid-CRDcRyPk.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/Grid-CRDcRyPk.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/Progress-BRSG0yYs.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/Progress-BRSG0yYs.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/Progress-BRSG0yYs.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/Progress-BRSG0yYs.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/_url_-rMAKsN2P.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/_url_-rMAKsN2P.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/_url_-rMAKsN2P.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/_url_-rMAKsN2P.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/auth-C5d9H5Pz.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/auth-C5d9H5Pz.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/auth-C5d9H5Pz.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/auth-C5d9H5Pz.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/code-mirror.vue_vue_type_script_setup_true_lang-CLSflgjt.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/code-mirror.vue_vue_type_script_setup_true_lang-CLSflgjt.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/code-mirror.vue_vue_type_script_setup_true_lang-CLSflgjt.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/code-mirror.vue_vue_type_script_setup_true_lang-CLSflgjt.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/dashboard-dvIvAY5p.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/dashboard-dvIvAY5p.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/dashboard-dvIvAY5p.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/dashboard-dvIvAY5p.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/datetime-range.vue_vue_type_script_setup_true_lang-LaVXNa0e.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/datetime-range.vue_vue_type_script_setup_true_lang-LaVXNa0e.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/datetime-range.vue_vue_type_script_setup_true_lang-LaVXNa0e.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/datetime-range.vue_vue_type_script_setup_true_lang-LaVXNa0e.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/detail-drawer-6eZaB4pC.css b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/detail-drawer-6eZaB4pC.css
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/detail-drawer-6eZaB4pC.css
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/detail-drawer-6eZaB4pC.css
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/detail-drawer-CeEIcqT0.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/detail-drawer-CeEIcqT0.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/detail-drawer-CeEIcqT0.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/detail-drawer-CeEIcqT0.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/download-ip38Mwxm.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/download-ip38Mwxm.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/download-ip38Mwxm.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/download-ip38Mwxm.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/exception-base.vue_vue_type_script_setup_true_lang-CgitO2V0.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/exception-base.vue_vue_type_script_setup_true_lang-CgitO2V0.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/exception-base.vue_vue_type_script_setup_true_lang-CgitO2V0.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/exception-base.vue_vue_type_script_setup_true_lang-CgitO2V0.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/group-frwXGSCG.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/group-frwXGSCG.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/group-frwXGSCG.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/group-frwXGSCG.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index--naHqliG.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index--naHqliG.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index--naHqliG.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index--naHqliG.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-2ay5PpNs.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-2ay5PpNs.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-2ay5PpNs.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-2ay5PpNs.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BJEHbRVM.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BJEHbRVM.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BJEHbRVM.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BJEHbRVM.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BQrXbjze.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BQrXbjze.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BQrXbjze.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BQrXbjze.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BZQfv1PK.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BZQfv1PK.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BZQfv1PK.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BZQfv1PK.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BideD3ow.css b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BideD3ow.css
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BideD3ow.css
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BideD3ow.css
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BkhNq40I.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BkhNq40I.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BkhNq40I.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BkhNq40I.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BxR_p-ch.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BxR_p-ch.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-BxR_p-ch.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-BxR_p-ch.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-C6cEahYO.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-C6cEahYO.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-C6cEahYO.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-C6cEahYO.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CUXEi-rX.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CUXEi-rX.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CUXEi-rX.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CUXEi-rX.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CUZ-ZGC7.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CUZ-ZGC7.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CUZ-ZGC7.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CUZ-ZGC7.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-C_Yl51GR.css b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-C_Yl51GR.css
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-C_Yl51GR.css
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-C_Yl51GR.css
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CdrPBtCH.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CdrPBtCH.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CdrPBtCH.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CdrPBtCH.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CgPArJSH.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CgPArJSH.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CgPArJSH.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CgPArJSH.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-Cm2e7Lv-.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-Cm2e7Lv-.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-Cm2e7Lv-.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-Cm2e7Lv-.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CoKgXZDN.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CoKgXZDN.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CoKgXZDN.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CoKgXZDN.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CrVQ8ETu.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CrVQ8ETu.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-CrVQ8ETu.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-CrVQ8ETu.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-D2gKOuoY.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-D2gKOuoY.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-D2gKOuoY.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-D2gKOuoY.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-D3rICic-.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-D3rICic-.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-D3rICic-.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-D3rICic-.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DGSV_nw-.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DGSV_nw-.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DGSV_nw-.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DGSV_nw-.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DGuwZRaA.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DGuwZRaA.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DGuwZRaA.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DGuwZRaA.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DHVgWJ-0.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DHVgWJ-0.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DHVgWJ-0.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DHVgWJ-0.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DWyLBvsm.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DWyLBvsm.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DWyLBvsm.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DWyLBvsm.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DpGIIkG6.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DpGIIkG6.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-DpGIIkG6.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-DpGIIkG6.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-FxD56JQl.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-FxD56JQl.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-FxD56JQl.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-FxD56JQl.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-fyfyZBK4.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-fyfyZBK4.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-fyfyZBK4.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-fyfyZBK4.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-jlqTxuuS.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-jlqTxuuS.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-jlqTxuuS.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-jlqTxuuS.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-kEpqoCjH.css b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-kEpqoCjH.css
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-kEpqoCjH.css
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-kEpqoCjH.css
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-luHl0WMJ.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-luHl0WMJ.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-luHl0WMJ.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-luHl0WMJ.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-wQfBWnrg.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-wQfBWnrg.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/index-wQfBWnrg.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/index-wQfBWnrg.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/job-8-wbHxv4.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/job-8-wbHxv4.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/job-8-wbHxv4.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/job-8-wbHxv4.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/log-BdmE3tAM.css b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/log-BdmE3tAM.css
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/log-BdmE3tAM.css
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/log-BdmE3tAM.css
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/log-CNFmopnc.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/log-CNFmopnc.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/log-CNFmopnc.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/log-CNFmopnc.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/notify-BmtrPduQ.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/notify-BmtrPduQ.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/notify-BmtrPduQ.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/notify-BmtrPduQ.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/route-key.vue_vue_type_script_setup_true_lang-Cls4SKv2.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/route-key.vue_vue_type_script_setup_true_lang-Cls4SKv2.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/route-key.vue_vue_type_script_setup_true_lang-Cls4SKv2.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/route-key.vue_vue_type_script_setup_true_lang-Cls4SKv2.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/search-form.vue_vue_type_script_setup_true_lang-xYfW9G7N.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/search-form.vue_vue_type_script_setup_true_lang-xYfW9G7N.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/search-form.vue_vue_type_script_setup_true_lang-xYfW9G7N.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/search-form.vue_vue_type_script_setup_true_lang-xYfW9G7N.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/select-group.vue_vue_type_script_setup_true_lang-Bk3YnuuX.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/select-group.vue_vue_type_script_setup_true_lang-Bk3YnuuX.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/select-group.vue_vue_type_script_setup_true_lang-Bk3YnuuX.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/select-group.vue_vue_type_script_setup_true_lang-Bk3YnuuX.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/select-scene.vue_vue_type_script_setup_true_lang-DxzzLcAX.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/select-scene.vue_vue_type_script_setup_true_lang-DxzzLcAX.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/select-scene.vue_vue_type_script_setup_true_lang-DxzzLcAX.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/select-scene.vue_vue_type_script_setup_true_lang-DxzzLcAX.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/status-switch.vue_vue_type_script_setup_true_lang-DuU56cot.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/status-switch.vue_vue_type_script_setup_true_lang-DuU56cot.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/status-switch.vue_vue_type_script_setup_true_lang-DuU56cot.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/status-switch.vue_vue_type_script_setup_true_lang-DuU56cot.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/task-batch-status.vue_vue_type_script_setup_true_lang-jyvTK0pm.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/task-batch-status.vue_vue_type_script_setup_true_lang-jyvTK0pm.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/task-batch-status.vue_vue_type_script_setup_true_lang-jyvTK0pm.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/task-batch-status.vue_vue_type_script_setup_true_lang-jyvTK0pm.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/text-CH5rbrd1.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/text-CH5rbrd1.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/text-CH5rbrd1.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/text-CH5rbrd1.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/workflow-DX1Amij-.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/workflow-DX1Amij-.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/workflow-DX1Amij-.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/workflow-DX1Amij-.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/workflow.vue_vue_type_script_setup_true_lang-CDR_Hxib.js b/snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/workflow.vue_vue_type_script_setup_true_lang-CDR_Hxib.js
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/assets/workflow.vue_vue_type_script_setup_true_lang-CDR_Hxib.js
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/assets/workflow.vue_vue_type_script_setup_true_lang-CDR_Hxib.js
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/favicon.svg b/snail-job-server/snail-job-server-ui/src/main/resources/admin/favicon.svg
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/favicon.svg
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/favicon.svg
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/ant-design.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/ant-design.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/ant-design.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/ant-design.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/carbon.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/carbon.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/carbon.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/carbon.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/cbi.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/cbi.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/cbi.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/cbi.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/eos-icons.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/eos-icons.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/eos-icons.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/eos-icons.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/fluent.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/fluent.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/fluent.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/fluent.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/heroicons.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/heroicons.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/heroicons.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/heroicons.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/line-md.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/line-md.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/line-md.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/line-md.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/lucide.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/lucide.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/lucide.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/lucide.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/majesticons.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/majesticons.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/majesticons.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/majesticons.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/material-symbols.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/material-symbols.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/material-symbols.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/material-symbols.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/mdi.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/mdi.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/mdi.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/mdi.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/octicon.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/octicon.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/octicon.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/octicon.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/oui.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/oui.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/oui.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/oui.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/ph.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/ph.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/ph.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/ph.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/simple-icons.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/simple-icons.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/simple-icons.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/simple-icons.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/streamline.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/streamline.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/streamline.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/streamline.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/tabler.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/tabler.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/tabler.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/tabler.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/typcn.json b/snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/typcn.json
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/iconify/typcn.json
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/iconify/typcn.json
diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/admin/index.html b/snail-job-server/snail-job-server-ui/src/main/resources/admin/index.html
similarity index 100%
rename from snail-job-server/snail-job-server-starter/src/main/resources/admin/index.html
rename to snail-job-server/snail-job-server-ui/src/main/resources/admin/index.html
diff --git a/snail-job-server/snail-job-server-ui/src/main/resources/admin/logo.png b/snail-job-server/snail-job-server-ui/src/main/resources/admin/logo.png
new file mode 100644
index 000000000..e69de29bb
diff --git a/snail-job-server/snail-job-server-ui/src/main/resources/admin/ryp.png b/snail-job-server/snail-job-server-ui/src/main/resources/admin/ryp.png
new file mode 100644
index 000000000..e69de29bb