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/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) { + + +