diff --git a/core/app/service/upgrade.go b/core/app/service/upgrade.go index 6284b2ab9..a54a9dbbb 100644 --- a/core/app/service/upgrade.go +++ b/core/app/service/upgrade.go @@ -160,7 +160,13 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error { return } - if err := files.CopyItem(false, true, path.Join(tmpDir, "1panel*.service"), "/etc/systemd/system"); err != nil { + if err := files.CopyItem(false, true, path.Join(tmpDir, "1panel-core.service"), "/etc/systemd/system"); err != nil { + global.LOG.Errorf("upgrade 1panel.service failed, err: %v", err) + _ = settingRepo.Update("SystemStatus", "Free") + u.handleRollback(originalDir, 3) + return + } + if err := files.CopyItem(false, true, path.Join(tmpDir, "1panel-agent.service"), "/etc/systemd/system"); err != nil { global.LOG.Errorf("upgrade 1panel.service failed, err: %v", err) _ = settingRepo.Update("SystemStatus", "Free") u.handleRollback(originalDir, 3) @@ -192,13 +198,19 @@ func (u *UpgradeService) Rollback(req dto.OperateByID) error { } func (u *UpgradeService) handleBackup(originalDir string) error { - if err := files.CopyItem(false, true, "/usr/local/bin/1panel*", originalDir); err != nil { + if err := files.CopyItem(false, true, "/usr/local/bin/1panel-core", originalDir); err != nil { + return err + } + if err := files.CopyItem(false, true, "/usr/local/bin/1panel-agent", originalDir); err != nil { return err } if err := files.CopyItem(false, true, "/usr/local/bin/1pctl", originalDir); err != nil { return err } - if err := files.CopyItem(false, true, "/etc/systemd/system/1panel*.service", originalDir); err != nil { + if err := files.CopyItem(false, true, "/etc/systemd/system/1panel-core.service", originalDir); err != nil { + return err + } + if err := files.CopyItem(false, true, "/etc/systemd/system/1panel-agent.service", originalDir); err != nil { return err } if err := files.CopyItem(true, true, path.Join(global.CONF.Base.InstallDir, "1panel/db"), originalDir); err != nil { diff --git a/core/i18n/lang/en.yaml b/core/i18n/lang/en.yaml index abb4a8ecb..88e9430ec 100644 --- a/core/i18n/lang/en.yaml +++ b/core/i18n/lang/en.yaml @@ -98,7 +98,7 @@ SyncNode: "Sync node data" SyncPackageData: "Package sync data [{{ .detail }}]" SyncPackageEncrypt: "Data package encryption" SyncRequest: "Request node sync API" -SyncFailedRetry: "Node data sync failed (attempt {{ .index }}), {{ .err }}" +SyncFailedRetry: "Node data sync timeout (attempt {{ .index }}), retrying..." SyncFailed: "Sync failed, please manually sync in the node list!" #upgrade node diff --git a/core/i18n/lang/ja.yaml b/core/i18n/lang/ja.yaml index 8ba169839..19ab4419f 100644 --- a/core/i18n/lang/ja.yaml +++ b/core/i18n/lang/ja.yaml @@ -99,7 +99,7 @@ SyncNode: "ノードデータ同期" SyncPackageData: "同期データのパッケージ化 [{{ .detail }}]" SyncPackageEncrypt: "データパッケージの暗号化" SyncRequest: "ノード同期APIをリクエスト" -SyncFailedRetry: "ノードデータ同期失敗 ({{ .index }}回目), {{ .err }}" +SyncFailedRetry: "ノードデータ同期タイムアウト ({{ .index }}回目)、再試行中..." SyncFailed: "同期に失敗しました、ノードリストで手動同期してください!" #upgrade node diff --git a/core/i18n/lang/ko.yaml b/core/i18n/lang/ko.yaml index cfbf9cb51..4649711fb 100644 --- a/core/i18n/lang/ko.yaml +++ b/core/i18n/lang/ko.yaml @@ -98,7 +98,7 @@ SyncNode: "노드 데이터 동기화" SyncPackageData: "동기화 데이터 패키징 [{{ .detail }}]" SyncPackageEncrypt: "데이터 패키지 암호화" SyncRequest: "노드 동기화 API 요청" -SyncFailedRetry: "노드 데이터 동기화 실패 ({{ .index }}번째 시도), {{ .err }}" +SyncFailedRetry: "노드 데이터 동기화 시간 초과 ({{ .index }}번째 시도), 재시도 중..." SyncFailed: "동기화 실패, 노드 목록에서 수동 동기화를 실행하세요!" #upgrade node diff --git a/core/i18n/lang/ms.yml b/core/i18n/lang/ms.yml index f12d7735d..871701e1b 100644 --- a/core/i18n/lang/ms.yml +++ b/core/i18n/lang/ms.yml @@ -98,7 +98,7 @@ SyncNode: "Segerakkan data nod" SyncPackageData: "Pakej data segerak [{{ .detail }}]" SyncPackageEncrypt: "Enkripsi pakej data" SyncRequest: "Permintaan API segerak nod" -SyncFailedRetry: "Gagal segerak data nod (percubaan ke-{{ .index }}), {{ .err }}" +SyncFailedRetry: "Segerakan data nod tamat masa (percubaan ke-{{ .index }}), mencuba semula..." SyncFailed: "Segerakan gagal, sila segerakkan secara manual dalam senarai nod!" #upgrade node diff --git a/core/i18n/lang/pt-BR.yaml b/core/i18n/lang/pt-BR.yaml index dba84a3f8..3846e2d02 100644 --- a/core/i18n/lang/pt-BR.yaml +++ b/core/i18n/lang/pt-BR.yaml @@ -98,7 +98,7 @@ SyncNode: "Sincronizar dados do nó" SyncPackageData: "Empacotar dados de sincronização [{{ .detail }}]" SyncPackageEncrypt: "Criptografia de pacote de dados" SyncRequest: "Solicitar API de sincronização de nó" -SyncFailedRetry: "Falha na sincronização de dados do nó (tentativa {{ .index }}), {{ .err }}" +SyncFailedRetry: "Tempo esgotado na sincronização de dados do nó (tentativa {{ .index }}), tentando novamente..." SyncFailed: "Falha na sincronização, por favor sincronize manualmente na lista de nós!" #upgrade node diff --git a/core/i18n/lang/ru.yaml b/core/i18n/lang/ru.yaml index f4e9d160d..26eec4633 100644 --- a/core/i18n/lang/ru.yaml +++ b/core/i18n/lang/ru.yaml @@ -98,7 +98,7 @@ SyncNode: "Синхронизация данных узла" SyncPackageData: "Упаковка данных синхронизации [{{ .detail }}]" SyncPackageEncrypt: "Шифрование пакета данных" SyncRequest: "Запрос API синхронизации узла" -SyncFailedRetry: "Ошибка синхронизации данных узла (попытка {{ .index }}), {{ .err }}" +SyncFailedRetry: "Таймаут синхронизации данных узла (попытка {{ .index }}), повторная попытка..." SyncFailed: "Ошибка синхронизации, выполните ручную синхронизацию в списке узлов!" #upgrade node diff --git a/core/i18n/lang/zh-Hant.yaml b/core/i18n/lang/zh-Hant.yaml index 62c7b139e..8317460d3 100644 --- a/core/i18n/lang/zh-Hant.yaml +++ b/core/i18n/lang/zh-Hant.yaml @@ -98,7 +98,7 @@ SyncNode: "同步節點數據" SyncPackageData: "打包同步數據 [{{ .detail }}]" SyncPackageEncrypt: "數據包加密" SyncRequest: "請求節點同步接口" -SyncFailedRetry: "第 {{ .index }} 次同步節點數據失敗,{{ .err }}" +SyncFailedRetry: "第 {{ .index }} 次同步節點數據失敗逾時,正在重試..." SyncFailed: "同步失敗,請在節點列表中手動同步!" #upgrade node diff --git a/core/i18n/lang/zh.yaml b/core/i18n/lang/zh.yaml index f56ec51dd..9aec301b6 100644 --- a/core/i18n/lang/zh.yaml +++ b/core/i18n/lang/zh.yaml @@ -99,7 +99,7 @@ SyncNode: "同步节点数据" SyncPackageData: "打包同步数据 [{{ .detail }}]" SyncPackageEncrypt: "数据包加密" SyncRequest: "请求节点同步接口" -SyncFailedRetry: "第 {{ .index }} 次同步节点数据失败,{{ .err }}" +SyncFailedRetry: "第 {{ .index }} 次同步节点数据失败超时,正在重试..." SyncFailed: "同步失败,请在节点列表中手动同步!" #upgrade node diff --git a/core/utils/terminal/local_cmd.go b/core/utils/terminal/local_cmd.go index 256c429cf..02ac335b2 100644 --- a/core/utils/terminal/local_cmd.go +++ b/core/utils/terminal/local_cmd.go @@ -32,14 +32,14 @@ func NewCommand(script string) (*LocalCommand, error) { } else { cmd.Env = append(os.Environ(), "TERM=xterm") } - cmd.Env = append(cmd.Env, "1PANEL_INIT_SCRIPT="+script) + cmd.Env = append(cmd.Env, "INIT_SCRIPT="+script) pty, err := pty.Start(cmd) if err != nil { return nil, errors.Wrapf(err, "failed to start command") } if len(script) != 0 { time.Sleep(100 * time.Millisecond) - _, _ = pty.Write([]byte("bash -c \"$1PANEL_INIT_SCRIPT\"\n")) + _, _ = pty.Write([]byte("bash -c \"$INIT_SCRIPT\"\n")) } lcmd := &LocalCommand{ diff --git a/core/utils/terminal/ws_session.go b/core/utils/terminal/ws_session.go index 98ba47f2a..03030d817 100644 --- a/core/utils/terminal/ws_session.go +++ b/core/utils/terminal/ws_session.go @@ -89,7 +89,7 @@ func NewLogicSshWsSession(cols, rows int, sshClient *ssh.Client, wsConn *websock } if len(initCmd) != 0 { time.Sleep(100 * time.Millisecond) - _, _ = stdinP.Write([]byte(initCmd + "\n")) + _, _ = stdinP.Write([]byte(" clear &&" + initCmd + "\n")) } return &LogicSshWsSession{ stdinPipe: stdinP, diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 9d5f39dfa..907936768 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -347,6 +347,7 @@ const message = { ssl: 'Certificate', database: 'Database', aiTools: 'AI', + mcp: 'MCP', container: 'Container', cronjob: 'Cronjob', system: 'System', @@ -1891,7 +1892,7 @@ const message = { license: 'License', bindNode: 'Bind Node', menuSetting: 'Menu Settings', - menuSettingHelper: 'If only 1 menu is kept, the sidebar will directly display that menu.', + menuSettingHelper: 'When only 1 submenu exists, the menu bar will display only that submenu', showAll: 'Show All', hideALL: 'Hide All', ifShow: 'Whether to Show', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index f0de7844e..5f2469951 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -339,6 +339,7 @@ const message = { ssl: '証明書|証明書', database: 'データベース|データベース', aiTools: 'AI', + mcp: 'MCP', container: 'コンテナ|コンテナ', cronjob: 'クロンジョブ|クロンの仕事', system: 'システム', @@ -1799,7 +1800,7 @@ const message = { license: 'ライセンス', bindNode: 'ノードをバインド', menuSetting: 'メニュー設定', - menuSettingHelper: '1つのメニューだけを保持する場合、サイドバーにはそのメニューが直接表示されます。', + menuSettingHelper: 'サブメニューが1つしか存在しない場合、メニューバーにはそのサブメニューのみが表示されます', showAll: 'すべてを表示します', hideALL: 'すべてを隠します', ifShow: '表示するかどうか', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index d01766ebc..79f289bd5 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -341,6 +341,7 @@ const message = { ssl: '인증서 | 인증서들', database: '데이터베이스 | 데이터베이스들', aiTools: 'AI', + mcp: 'MCP', container: '컨테이너 | 컨테이너들', cronjob: '크론 작업 | 크론 작업들', system: '시스템', @@ -1771,7 +1772,7 @@ const message = { license: '라이선스', bindNode: '노드 바인딩', menuSetting: '메뉴 설정', - menuSettingHelper: '메뉴를 1개만 유지하면 사이드바에 해당 메뉴가 직접 표시됩니다.', + menuSettingHelper: '하위 메뉴가 1개만 존재할 경우, 메뉴 바에는 해당 하위 메뉴만 표시됩니다', showAll: '모두 표시', hideALL: '모두 숨기기', ifShow: '표시 여부', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 347b47d2e..184f6b095 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -347,6 +347,7 @@ const message = { ssl: 'Certificate | Certificates', database: 'Database | Databases', aiTools: 'AI', + mcp: 'MCP', container: 'Container | Containers', cronjob: 'Cron Job | Cron Jobs', system: 'System', @@ -1856,7 +1857,7 @@ const message = { license: 'Lesen', bindNode: 'Ikatan Nod', menuSetting: 'Tetapan Menu', - menuSettingHelper: 'Jika hanya 1 menu yang disimpan, bar sisi akan langsung menampilkan menu tersebut.', + menuSettingHelper: 'Apabila hanya terdapat 1 submenu, bar menu hanya akan memaparkan submenu tersebut', showAll: 'Papar Semua', hideALL: 'Sembunyikan Semua', ifShow: 'Sama ada untuk Dipaparkan', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index e1c9f0601..6c27a4ed5 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -345,6 +345,7 @@ const message = { ssl: 'Certificado | Certificados', database: 'Banco de Dados | Bancos de Dados', aiTools: 'AI', + mcp: 'MCP', container: 'Container | Containers', cronjob: 'Tarefa Cron | Tarefas Cron', system: 'Sistema', @@ -1842,7 +1843,7 @@ const message = { license: 'Licença', bindNode: 'Vincular Nó', menuSetting: 'Configurações do Menu', - menuSettingHelper: 'Se apenas 1 menu for mantido, a barra lateral exibirá diretamente esse menu.', + menuSettingHelper: 'Quando apenas 1 submenu existir, a barra de menus exibirá apenas esse submenu', showAll: 'Mostrar Tudo', hideALL: 'Ocultar Tudo', ifShow: 'Exibir?', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 75c2d7430..94bb9c129 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -342,6 +342,7 @@ const message = { ssl: 'Сертификат | Сертификаты', database: 'База данных | Базы данных', aiTools: 'AI', + mcp: 'MCP', container: 'Контейнер | Контейнеры', cronjob: 'Cron | Задачи Cron', system: 'Система', @@ -1841,7 +1842,7 @@ const message = { license: 'Лицензия', bindNode: 'Привязать Узел', menuSetting: 'Настройки меню', - menuSettingHelper: 'Если оставить только 1 меню, боковая панель будет напрямую отображать это меню.', + menuSettingHelper: 'Если существует только 1 подменю, в панели меню будет отображаться только это подменю', showAll: 'Показать все', hideALL: 'Скрыть все', ifShow: 'Показывать', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index a3e6de69f..fa6a77fa1 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -341,6 +341,7 @@ const message = { ssl: '證書', database: '數據庫', aiTools: 'AI', + mcp: 'MCP', container: '容器', cronjob: '計劃任務', system: '系統', @@ -1758,7 +1759,7 @@ const message = { license: '許可證', bindNode: '綁定節點', menuSetting: '菜單設定', - menuSettingHelper: '如果只保留 1 個菜單,則側邊欄會直接顯示該菜單。', + menuSettingHelper: '當只存在 1 個子選單時,選單列將僅展示該子選單', showAll: '全部顯示', hideALL: '全部隱藏', ifShow: '是否顯示', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 0a69668c1..11aa105d7 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -339,6 +339,7 @@ const message = { ssl: '证书', database: '数据库', aiTools: 'AI', + mcp: 'MCP', container: '容器', cronjob: '计划任务', system: '系统', @@ -1751,7 +1752,7 @@ const message = { license: '许可证', bindNode: '绑定节点', menuSetting: '菜单设置', - menuSettingHelper: '如果只保留 1 个菜单,则侧边栏会直接显示该菜单', + menuSettingHelper: '当只存在 1 个子菜单时,菜单栏将仅展示该子菜单', showAll: '全部显示', hideALL: '全部隐藏', ifShow: '是否显示', diff --git a/frontend/src/layout/components/Sidebar/components/Collapse.vue b/frontend/src/layout/components/Sidebar/components/Collapse.vue index a2672c359..b37088611 100644 --- a/frontend/src/layout/components/Sidebar/components/Collapse.vue +++ b/frontend/src/layout/components/Sidebar/components/Collapse.vue @@ -61,7 +61,7 @@ import('@/views/ai/mcp/server/index.vue'), meta: { - title: 'MCP', + title: 'menu.mcp', requiresAuth: true, }, }, diff --git a/frontend/src/views/cronjob/library/index.vue b/frontend/src/views/cronjob/library/index.vue index 9eb8f488b..fa0125ce6 100644 --- a/frontend/src/views/cronjob/library/index.vue +++ b/frontend/src/views/cronjob/library/index.vue @@ -19,7 +19,12 @@
- + +
@@ -47,7 +52,10 @@ system - {{ item }} + + {{ $t('commons.table.default') }} + + {{ item }} diff --git a/frontend/src/views/cronjob/library/operate/index.vue b/frontend/src/views/cronjob/library/operate/index.vue index 812b6a626..541f43674 100644 --- a/frontend/src/views/cronjob/library/operate/index.vue +++ b/frontend/src/views/cronjob/library/operate/index.vue @@ -12,7 +12,14 @@ - +
+ + +
{{ $t('cronjob.library.groupHelper') }}
diff --git a/frontend/src/views/setting/snapshot/create/index.vue b/frontend/src/views/setting/snapshot/create/index.vue index bf4e5312f..c4e7163c4 100644 --- a/frontend/src/views/setting/snapshot/create/index.vue +++ b/frontend/src/views/setting/snapshot/create/index.vue @@ -218,6 +218,8 @@ const emit = defineEmits(['search']); const acceptParams = (): void => { form.downloadAccountID = ''; form.fromAccounts = []; + form.description = ''; + form.secret = ''; nowIndex.value = 0; search(); loadBackups();