diff --git a/internal/route/http.go b/internal/route/http.go
index d6cc9078..c02252a9 100644
--- a/internal/route/http.go
+++ b/internal/route/http.go
@@ -200,6 +200,7 @@ func (route *Http) Register(r *chi.Mux) {
r.Get("/update_info", route.home.UpdateInfo)
r.Post("/update", route.home.Update)
r.Post("/restart", route.home.Restart)
+ r.Post("/restart_server", route.home.RestartServer)
})
r.Route("/task", func(r chi.Router) {
diff --git a/internal/service/home.go b/internal/service/home.go
index 78c0eaec..08494511 100644
--- a/internal/service/home.go
+++ b/internal/service/home.go
@@ -400,3 +400,13 @@ func (s *HomeService) Restart(w http.ResponseWriter, r *http.Request) {
tools.RestartPanel()
Success(w, nil)
}
+
+func (s *HomeService) RestartServer(w http.ResponseWriter, r *http.Request) {
+ if s.taskRepo.HasRunningTask() {
+ Error(w, http.StatusInternalServerError, s.t.Get("background task is running, restart is prohibited, please try again later"))
+ return
+ }
+
+ tools.RestartServer()
+ Success(w, nil)
+}
diff --git a/pkg/tools/tools.go b/pkg/tools/tools.go
index bad91f6c..11e02665 100644
--- a/pkg/tools/tools.go
+++ b/pkg/tools/tools.go
@@ -88,6 +88,11 @@ func RestartPanel() {
_ = shell.ExecfAsync("sleep 1 && systemctl restart acepanel")
}
+// RestartServer 重启服务器
+func RestartServer() {
+ _ = shell.ExecfAsync("sleep 1 && reboot")
+}
+
// IsChina 是否中国大陆
func IsChina() bool {
client := resty.New()
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 205220c7..f30c897b 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -128,7 +128,7 @@ importers:
version: 3.7.1
'@types/node':
specifier: ^24.0.0
- version: 24.10.9
+ version: 24.10.10
'@types/node-forge':
specifier: ^1.3.14
version: 1.3.14
@@ -137,7 +137,7 @@ importers:
version: 66.6.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
'@vitejs/plugin-vue':
specifier: ^6.0.1
- version: 6.0.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
+ version: 6.0.4(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
'@vue/eslint-config-prettier':
specifier: ^10.2.0
version: 10.2.0(eslint@9.39.2(jiti@2.6.1))(prettier@3.8.1)
@@ -185,7 +185,7 @@ importers:
version: 5.9.3
unocss:
specifier: ^66.5.4
- version: 66.6.0(postcss@8.5.6)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 66.6.0(postcss@8.5.6)(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
unplugin-auto-import:
specifier: ^21.0.0
version: 21.0.0(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3)))
@@ -197,16 +197,16 @@ importers:
version: 31.0.0(vue@3.5.27(typescript@5.9.3))
vite:
specifier: ^7.1.11
- version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
vite-plugin-html:
specifier: ^3.2.2
- version: 3.2.2(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 3.2.2(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
vite-plugin-mock:
specifier: ^3.0.2
- version: 3.0.2(esbuild@0.27.2)(mockjs@1.1.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 3.0.2(esbuild@0.27.2)(mockjs@1.1.0)(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
vite-plugin-vue-devtools:
specifier: ^8.0.3
- version: 8.0.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
+ version: 8.0.5(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
vue-tsc:
specifier: ^3.1.1
version: 3.2.4(typescript@5.9.3)
@@ -1089,8 +1089,8 @@ packages:
'@types/node-forge@1.3.14':
resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==}
- '@types/node@24.10.9':
- resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==}
+ '@types/node@24.10.10':
+ resolution: {integrity: sha512-+0/4J266CBGPUq/ELg7QUHhN25WYjE0wYTPSQJn1xeu8DOlIOPxXxrNGiLmfAWl7HMMgWFWXpt9IDjMWrF5Iow==}
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
@@ -4493,9 +4493,9 @@ snapshots:
'@types/node-forge@1.3.14':
dependencies:
- '@types/node': 24.10.9
+ '@types/node': 24.10.10
- '@types/node@24.10.9':
+ '@types/node@24.10.10':
dependencies:
undici-types: 7.16.0
@@ -4595,13 +4595,13 @@ snapshots:
'@typescript-eslint/types': 8.54.0
eslint-visitor-keys: 4.2.1
- '@unocss/astro@66.6.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@unocss/astro@66.6.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@unocss/core': 66.6.0
'@unocss/reset': 66.6.0
- '@unocss/vite': 66.6.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@unocss/vite': 66.6.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
optionalDependencies:
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
'@unocss/cli@66.6.0':
dependencies:
@@ -4752,7 +4752,7 @@ snapshots:
dependencies:
'@unocss/core': 66.6.0
- '@unocss/vite@66.6.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@unocss/vite@66.6.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@jridgewell/remapping': 2.3.5
'@unocss/config': 66.6.0
@@ -4763,16 +4763,16 @@ snapshots:
pathe: 2.0.3
tinyglobby: 0.2.15
unplugin-utils: 0.3.1
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
'@vavt/copy2clipboard@1.0.3': {}
'@vavt/util@2.1.1': {}
- '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-rc.2
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
vue: 3.5.27(typescript@5.9.3)
'@volar/language-core@2.4.27':
@@ -4864,14 +4864,14 @@ snapshots:
dependencies:
'@vue/devtools-kit': 8.0.5
- '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
dependencies:
'@vue/devtools-kit': 8.0.5
'@vue/devtools-shared': 8.0.5
mitt: 3.0.1
nanoid: 5.1.6
pathe: 2.0.3
- vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
vue: 3.5.27(typescript@5.9.3)
transitivePeerDependencies:
- vite
@@ -6925,9 +6925,9 @@ snapshots:
universalify@2.0.1: {}
- unocss@66.6.0(postcss@8.5.6)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ unocss@66.6.0(postcss@8.5.6)(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
- '@unocss/astro': 66.6.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@unocss/astro': 66.6.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
'@unocss/cli': 66.6.0
'@unocss/core': 66.6.0
'@unocss/postcss': 66.6.0(postcss@8.5.6)
@@ -6945,9 +6945,9 @@ snapshots:
'@unocss/transformer-compile-class': 66.6.0
'@unocss/transformer-directives': 66.6.0
'@unocss/transformer-variant-group': 66.6.0
- '@unocss/vite': 66.6.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@unocss/vite': 66.6.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
optionalDependencies:
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- postcss
- supports-color
@@ -7025,17 +7025,17 @@ snapshots:
evtd: 0.2.4
vue: 3.5.27(typescript@5.9.3)
- vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
birpc: 2.9.0
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite-hot-client: 2.1.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- vite-hot-client@2.1.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vite-hot-client@2.1.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vite-plugin-html@3.2.2(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vite-plugin-html@3.2.2(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
'@rollup/pluginutils': 4.2.1
colorette: 2.0.20
@@ -7049,9 +7049,9 @@ snapshots:
html-minifier-terser: 6.1.0
node-html-parser: 5.4.2
pathe: 0.2.0
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vite-plugin-inspect@11.3.3(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vite-plugin-inspect@11.3.3(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
ansis: 4.2.0
debug: 4.4.3
@@ -7061,12 +7061,12 @@ snapshots:
perfect-debounce: 2.1.0
sirv: 3.0.2
unplugin-utils: 0.3.1
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- supports-color
- vite-plugin-mock@3.0.2(esbuild@0.27.2)(mockjs@1.1.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vite-plugin-mock@3.0.2(esbuild@0.27.2)(mockjs@1.1.0)(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
bundle-require: 4.2.1(esbuild@0.27.2)
chokidar: 3.6.0
@@ -7077,25 +7077,25 @@ snapshots:
mockjs: 1.1.0
path-to-regexp: 6.3.0
picocolors: 1.1.1
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-devtools@8.0.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)):
+ vite-plugin-vue-devtools@8.0.5(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)):
dependencies:
- '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
+ '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
'@vue/devtools-kit': 8.0.5
'@vue/devtools-shared': 8.0.5
sirv: 3.0.2
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vite-plugin-inspect: 11.3.3(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- vite-plugin-vue-inspector: 5.3.2(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite-plugin-inspect: 11.3.3(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite-plugin-vue-inspector: 5.3.2(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- '@nuxt/kit'
- supports-color
- vue
- vite-plugin-vue-inspector@5.3.2(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vite-plugin-vue-inspector@5.3.2(vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0)
@@ -7106,11 +7106,11 @@ snapshots:
'@vue/compiler-dom': 3.5.27
kolorist: 1.8.0
magic-string: 0.30.21
- vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
- vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vite@7.3.1(@types/node@24.10.10)(jiti@2.6.1)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.2
fdir: 6.5.0(picomatch@4.0.3)
@@ -7119,7 +7119,7 @@ snapshots:
rollup: 4.57.1
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 24.10.9
+ '@types/node': 24.10.10
fsevents: 2.3.3
jiti: 2.6.1
sass: 1.97.3
diff --git a/web/src/api/panel/home/index.ts b/web/src/api/panel/home/index.ts
index 3b1a4038..8d25b09b 100644
--- a/web/src/api/panel/home/index.ts
+++ b/web/src/api/panel/home/index.ts
@@ -21,5 +21,7 @@ export default {
// 更新面板
update: (): any => http.Post('/home/update'),
// 重启面板
- restart: (): any => http.Post('/home/restart')
+ restart: (): any => http.Post('/home/restart'),
+ // 重启服务器
+ restartServer: (): any => http.Post('/home/restart_server')
}
diff --git a/web/src/locales/en.po b/web/src/locales/en.po
index e66d38a2..e8f0381b 100644
--- a/web/src/locales/en.po
+++ b/web/src/locales/en.po
@@ -5082,6 +5082,22 @@ msgstr "Panel restarting..."
msgid "Panel restarted successfully"
msgstr "Panel restarted successfully"
+#: src/views/home/IndexView.vue:338
+msgid "Server restarting..."
+msgstr "Server restarting..."
+
+#: src/views/home/IndexView.vue:344
+msgid "Restart Panel"
+msgstr "Restart Panel"
+
+#: src/views/home/IndexView.vue:348
+msgid "Restart Server"
+msgstr "Restart Server"
+
+#: src/views/home/IndexView.vue:362
+msgid "Are you sure you want to restart the server? This will disconnect all connections."
+msgstr "Are you sure you want to restart the server? This will disconnect all connections."
+
#: src/views/home/IndexView.vue:344
msgid "Current version is the latest"
msgstr "Current version is the latest"
diff --git a/web/src/locales/zh_CN.po b/web/src/locales/zh_CN.po
index 7b7e0b0c..f0b04286 100644
--- a/web/src/locales/zh_CN.po
+++ b/web/src/locales/zh_CN.po
@@ -4845,6 +4845,22 @@ msgstr "面板重启中……"
msgid "Panel restarted successfully"
msgstr "面板重启成功"
+#: src/views/home/IndexView.vue:338
+msgid "Server restarting..."
+msgstr "服务器重启中……"
+
+#: src/views/home/IndexView.vue:344
+msgid "Restart Panel"
+msgstr "重启面板"
+
+#: src/views/home/IndexView.vue:348
+msgid "Restart Server"
+msgstr "重启服务器"
+
+#: src/views/home/IndexView.vue:362
+msgid "Are you sure you want to restart the server? This will disconnect all connections."
+msgstr "您确定要重启服务器吗?这将断开所有连接。"
+
#: src/views/home/IndexView.vue:344
msgid "Current version is the latest"
msgstr "当前版本是最新版本"
diff --git a/web/src/locales/zh_TW.po b/web/src/locales/zh_TW.po
index 1312d287..fdfa821a 100644
--- a/web/src/locales/zh_TW.po
+++ b/web/src/locales/zh_TW.po
@@ -4846,6 +4846,22 @@ msgstr "面板重啟中……"
msgid "Panel restarted successfully"
msgstr "面板重啟成功"
+#: src/views/home/IndexView.vue:338
+msgid "Server restarting..."
+msgstr "伺服器重啟中……"
+
+#: src/views/home/IndexView.vue:344
+msgid "Restart Panel"
+msgstr "重啟面板"
+
+#: src/views/home/IndexView.vue:348
+msgid "Restart Server"
+msgstr "重啟伺服器"
+
+#: src/views/home/IndexView.vue:362
+msgid "Are you sure you want to restart the server? This will disconnect all connections."
+msgstr "您確定要重啟伺服器嗎?這將斷開所有連線。"
+
#: src/views/home/IndexView.vue:344
msgid "Current version is the latest"
msgstr "當前版本是最新版本"
diff --git a/web/src/views/home/IndexView.vue b/web/src/views/home/IndexView.vue
index 9e017822..ec802da0 100644
--- a/web/src/views/home/IndexView.vue
+++ b/web/src/views/home/IndexView.vue
@@ -13,7 +13,7 @@ import {
} from 'echarts/components'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
-import { NButton, NPopconfirm, useThemeVars } from 'naive-ui'
+import { NButton, NDropdown, useThemeVars } from 'naive-ui'
import { useGettext } from 'vue3-gettext'
import draggable from 'vuedraggable'
@@ -336,6 +336,33 @@ const handleRestartPanel = () => {
})
}
+const showRestartServerConfirm = ref(false)
+
+const handleRestartServer = () => {
+ clearInterval(homeInterval)
+ window.$message.loading($gettext('Server restarting...'))
+ useRequest(home.restartServer())
+}
+
+const restartOptions = computed(() => [
+ {
+ label: $gettext('Restart Panel'),
+ key: 'panel'
+ },
+ {
+ label: $gettext('Restart Server'),
+ key: 'server'
+ }
+])
+
+const handleRestartSelect = (key: string) => {
+ if (key === 'panel') {
+ handleRestartPanel()
+ } else if (key === 'server') {
+ showRestartServerConfirm.value = true
+ }
+}
+
const handleUpdate = () => {
useRequest(home.checkUpdate()).onSuccess(({ data }) => {
if (data.update) {
@@ -470,12 +497,9 @@ if (import.meta.hot) {
{{ $gettext('Sponsor Support') }}
-
-
- {{ $gettext('Restart') }}
-
- {{ $gettext('Are you sure you want to restart the panel?') }}
-
+
+ {{ $gettext('Restart') }}
+
{{ $gettext('Update') }}
@@ -895,6 +919,18 @@ if (import.meta.hot) {
+
+
+