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('Are you sure you want to restart the panel?') }} - + + {{ $gettext('Restart') }} + {{ $gettext('Update') }} @@ -895,6 +919,18 @@ if (import.meta.hot) { + + +