mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 09:13:49 +08:00
feat: add server restart option to home page restart button (#1324)
* Initial plan * feat: add server restart functionality to home page restart button Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com> * refactor: remove unreachable success callback for server restart Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: devhaozi <115467771+devhaozi@users.noreply.github.com>
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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')
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 "当前版本是最新版本"
|
||||
|
||||
@@ -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 "當前版本是最新版本"
|
||||
|
||||
@@ -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) {
|
||||
<n-button type="primary" @click="toSponsor">
|
||||
{{ $gettext('Sponsor Support') }}
|
||||
</n-button>
|
||||
<n-popconfirm @positive-click="handleRestartPanel">
|
||||
<template #trigger>
|
||||
<n-button type="warning"> {{ $gettext('Restart') }} </n-button>
|
||||
</template>
|
||||
{{ $gettext('Are you sure you want to restart the panel?') }}
|
||||
</n-popconfirm>
|
||||
<n-dropdown :options="restartOptions" @select="handleRestartSelect">
|
||||
<n-button type="warning"> {{ $gettext('Restart') }} </n-button>
|
||||
</n-dropdown>
|
||||
<n-button type="info" @click="handleUpdate"> {{ $gettext('Update') }} </n-button>
|
||||
</n-flex>
|
||||
</template>
|
||||
@@ -895,6 +919,18 @@ if (import.meta.hot) {
|
||||
</n-space>
|
||||
</div>
|
||||
</app-page>
|
||||
|
||||
<!-- 服务器重启确认弹窗 -->
|
||||
<n-modal
|
||||
v-model:show="showRestartServerConfirm"
|
||||
preset="dialog"
|
||||
type="warning"
|
||||
:title="$gettext('Restart Server')"
|
||||
:content="$gettext('Are you sure you want to restart the server? This will disconnect all connections.')"
|
||||
:positive-text="$gettext('Confirm')"
|
||||
:negative-text="$gettext('Cancel')"
|
||||
@positive-click="handleRestartServer"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
Reference in New Issue
Block a user