From 00885c5c9703443d6a983bab032972755f6260a7 Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Tue, 8 Apr 2025 15:49:53 +0800 Subject: [PATCH] feat: Unify the encapsulation of the component for 'service not exist' (#8348) --- agent/app/api/v2/docker.go | 8 ++- agent/app/dto/docker.go | 7 +- agent/app/service/docker.go | 70 +++++++++---------- frontend/src/api/interface/container.ts | 4 ++ frontend/src/api/modules/container.ts | 2 +- .../layout-content/no-such-service.vue | 32 +++++++++ frontend/src/lang/modules/en.ts | 6 +- frontend/src/lang/modules/ja.ts | 7 +- frontend/src/lang/modules/ko.ts | 5 +- frontend/src/lang/modules/ms.ts | 7 +- frontend/src/lang/modules/pt-br.ts | 7 +- frontend/src/lang/modules/ru.ts | 7 +- frontend/src/lang/modules/zh-Hant.ts | 5 +- frontend/src/lang/modules/zh.ts | 5 +- .../src/views/container/compose/index.vue | 12 +++- .../src/views/container/container/index.vue | 9 +-- .../src/views/container/dashboard/index.vue | 12 +++- .../views/container/docker-status/index.vue | 18 +++-- frontend/src/views/container/image/index.vue | 13 +++- .../src/views/container/network/index.vue | 12 +++- frontend/src/views/container/repo/index.vue | 12 +++- .../src/views/container/setting/index.vue | 25 ++++--- .../src/views/container/template/index.vue | 12 +++- frontend/src/views/container/volume/index.vue | 12 +++- .../src/views/host/firewall/status/index.vue | 25 +------ .../src/views/toolbox/clam/status/index.vue | 24 +------ frontend/src/views/toolbox/fail2ban/index.vue | 25 +------ frontend/src/views/toolbox/ftp/index.vue | 23 +----- 28 files changed, 202 insertions(+), 204 deletions(-) create mode 100644 frontend/src/components/layout-content/no-such-service.vue diff --git a/agent/app/api/v2/docker.go b/agent/app/api/v2/docker.go index 9b22de872..0acbcb7bf 100644 --- a/agent/app/api/v2/docker.go +++ b/agent/app/api/v2/docker.go @@ -12,7 +12,7 @@ import ( // @Tags Container Docker // @Summary Load docker status // @Produce json -// @Success 200 {string} status +// @Success 200 {string} dto.DockerStatus // @Security ApiKeyAuth // @Security Timestamp // @Router /containers/docker/status [get] @@ -49,7 +49,11 @@ func (b *BaseApi) LoadDaemonJsonFile(c *gin.Context) { // @Security Timestamp // @Router /containers/daemonjson [get] func (b *BaseApi) LoadDaemonJson(c *gin.Context) { - conf := dockerService.LoadDockerConf() + conf, err := dockerService.LoadDockerConf() + if err != nil { + helper.InternalServer(c, err) + return + } helper.SuccessWithData(c, conf) } diff --git a/agent/app/dto/docker.go b/agent/app/dto/docker.go index 6de1926db..4d593fe00 100644 --- a/agent/app/dto/docker.go +++ b/agent/app/dto/docker.go @@ -4,10 +4,13 @@ type DaemonJsonUpdateByFile struct { File string `json:"file"` } +type DockerStatus struct { + IsActive bool `json:"isActive"` + IsExist bool `json:"isExist"` +} + type DaemonJsonConf struct { IsSwarm bool `json:"isSwarm"` - IsExist bool `json:"isExist"` - IsActive bool `json:"isActive"` Version string `json:"version"` Mirrors []string `json:"registryMirrors"` Registries []string `json:"insecureRegistries"` diff --git a/agent/app/service/docker.go b/agent/app/service/docker.go index a9285180a..6e9d7b425 100644 --- a/agent/app/service/docker.go +++ b/agent/app/service/docker.go @@ -25,8 +25,8 @@ type IDockerService interface { UpdateLogOption(req dto.LogOption) error UpdateIpv6Option(req dto.Ipv6Option) error UpdateConfByFile(info dto.DaemonJsonUpdateByFile) error - LoadDockerStatus() string - LoadDockerConf() *dto.DaemonJsonConf + LoadDockerStatus() *dto.DockerStatus + LoadDockerConf() (*dto.DaemonJsonConf, error) OperateDocker(req dto.DockerOperation) error } @@ -52,42 +52,42 @@ type logOption struct { LogMaxFile string `json:"max-file"` } -func (u *DockerService) LoadDockerStatus() string { - client, err := docker.NewDockerClient() - if err != nil { - return constant.StatusStopped - } - defer client.Close() - if _, err := client.Ping(context.Background()); err != nil { - return constant.StatusStopped - } - - return constant.StatusRunning -} - -func (u *DockerService) LoadDockerConf() *dto.DaemonJsonConf { +func (u *DockerService) LoadDockerStatus() *dto.DockerStatus { ctx := context.Background() - var data dto.DaemonJsonConf - data.IPTables = true - data.Version = "-" + var data dto.DockerStatus if !cmd.Which("docker") { data.IsExist = false return &data } data.IsExist = true - data.IsActive = true + data.IsActive, _ = systemctl.IsActive("docker") client, err := docker.NewDockerClient() if err != nil { + global.LOG.Errorf("load docker client failed, err: %v", err) data.IsActive = false - } else { - defer client.Close() - if _, err := client.Ping(ctx); err != nil { - data.IsActive = false - } - itemVersion, err := client.ServerVersion(ctx) - if err == nil { - data.Version = itemVersion.Version - } + return &data + } + defer client.Close() + if _, err := client.Ping(ctx); err != nil { + global.LOG.Errorf("ping docker client failed, err: %v", err) + data.IsActive = false + } + + return &data +} + +func (u *DockerService) LoadDockerConf() (*dto.DaemonJsonConf, error) { + ctx := context.Background() + var data dto.DaemonJsonConf + data.IPTables = true + data.Version = "-" + client, err := docker.NewDockerClient() + if err != nil { + return &data, err + } + itemVersion, err := client.ServerVersion(ctx) + if err == nil { + data.Version = itemVersion.Version } data.IsSwarm = false stdout2, _ := cmd.Exec("docker info | grep Swarm") @@ -95,23 +95,23 @@ func (u *DockerService) LoadDockerConf() *dto.DaemonJsonConf { data.IsSwarm = true } if _, err := os.Stat(constant.DaemonJsonPath); err != nil { - return &data + return &data, nil } file, err := os.ReadFile(constant.DaemonJsonPath) if err != nil { - return &data + return &data, nil } var conf daemonJsonItem daemonMap := make(map[string]interface{}) if err := json.Unmarshal(file, &daemonMap); err != nil { - return &data + return &data, nil } arr, err := json.Marshal(daemonMap) if err != nil { - return &data + return &data, err } if err := json.Unmarshal(arr, &conf); err != nil { - return &data + return &data, err } if _, ok := daemonMap["iptables"]; !ok { conf.IPTables = true @@ -133,7 +133,7 @@ func (u *DockerService) LoadDockerConf() *dto.DaemonJsonConf { data.Registries = conf.Registries data.IPTables = conf.IPTables data.LiveRestore = conf.LiveRestore - return &data + return &data, nil } func (u *DockerService) UpdateConf(req dto.SettingUpdate) error { diff --git a/frontend/src/api/interface/container.ts b/frontend/src/api/interface/container.ts index 582c308b7..166c1df8b 100644 --- a/frontend/src/api/interface/container.ts +++ b/frontend/src/api/interface/container.ts @@ -335,6 +335,10 @@ export namespace Container { export interface DaemonJsonUpdateByFile { file: string; } + export interface DockerStatus { + isActive: boolean; + isExist: boolean; + } export interface DaemonJsonConf { isSwarm: boolean; isExist: boolean; diff --git a/frontend/src/api/modules/container.ts b/frontend/src/api/modules/container.ts index 9c1f2d0d4..9c7983a63 100644 --- a/frontend/src/api/modules/container.ts +++ b/frontend/src/api/modules/container.ts @@ -187,7 +187,7 @@ export const loadDaemonJsonFile = () => { return http.get(`/containers/daemonjson/file`); }; export const loadDockerStatus = () => { - return http.get(`/containers/docker/status`); + return http.get(`/containers/docker/status`); }; export const updateDaemonJson = (key: string, value: string) => { return http.post(`/containers/daemonjson/update`, { key: key, value: value }, TimeoutEnum.T_60S); diff --git a/frontend/src/components/layout-content/no-such-service.vue b/frontend/src/components/layout-content/no-such-service.vue new file mode 100644 index 000000000..997fab19a --- /dev/null +++ b/frontend/src/components/layout-content/no-such-service.vue @@ -0,0 +1,32 @@ + + + diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 547d8a616..5a3af039b 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1046,6 +1046,7 @@ const message = { groupHelper: 'Set different groups based on script characteristics, which allows for faster script filtering operations.', handleHelper: 'Execute script {1} on {0}, continue?', + noSuchApp: 'The {0} service was not detected. Please install it quickly using the script library first!', }, }, monitor: { @@ -1185,7 +1186,6 @@ const message = { fail2ban: { sshPort: 'Listen to SSH Port', sshPortHelper: 'Current Fail2ban listens to the SSH connection port of the host', - noFail2ban: 'Fail2ban service not detected, please refer to the official documentation for installation!', unActive: 'The Fail2ban service is not enabled at present, please enable it first!', operation: 'Perform [{0}] operation on Fail2ban service, continue?', fail2banChange: 'Fail2ban Configuration Modification', @@ -1208,7 +1208,6 @@ const message = { ftp: { ftp: 'FTP Account', notStart: 'FTP service is currently not running, please start it first!', - noFtp: 'FTP (pure-ftpd) service not detected, please refer to the official documentation for installation!', operation: 'Perform [{0}] operation on FTP service, continue?', noPasswdMsg: 'Can not get the current FTP account password, please set the password and try again! ', enableHelper: @@ -1230,7 +1229,6 @@ const message = { hideFresh: 'Hide Virus Database Service', clamHelper: 'The minimum recommended configuration for ClamAV is: 3 GiB of RAM or more, single-core CPU with 2.0 GHz or higher, and at least 5 GiB of available hard disk space.', - noClam: 'ClamAV service not detected, please refer to the official documentation for installation!', notStart: 'ClamAV service is currently not running, please start it first!', removeRecord: 'Delete Report Files', removeResultHelper: 'Delete report files generated during task execution to free up storage space.', @@ -2538,8 +2536,6 @@ const message = { firewall: { create: 'Create Rule', edit: 'Edit rule', - notSupport: - 'No system firewall detected (firewalld or ufw). Please refer to the official documentation for installation.', ccDeny: 'CC Protection', ipWhiteList: 'IP Whitelist', ipBlockList: 'IP Blacklist', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index d51f96d41..492dae11b 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -1005,6 +1005,8 @@ const message = { groupHelper: 'スクリプトの特徴に基づいて異なるグループを設定することで、スクリプトのフィルタリング操作をより迅速に行うことができます。', handleHelper: '{0} で {1} スクリプトを実行します。続行しますか?', + noSuchApp: + '{0} サービスが検出されませんでした。スクリプトライブラリを使って素早くインストールしてください!', }, }, monitor: { @@ -1123,7 +1125,6 @@ const message = { fail2ban: { sshPort: 'SSHポートを聞いてください', sshPortHelper: '現在のFAL2BANは、ホストのSSH接続ポートに耳を傾けます', - noFail2ban: `Fail2banサービスは検出されません。インストールする公式ドキュメントを参照してください。`, unActive: `現在、Fail2Banサービスは有効になっていません。`, operation: 'fail2banサービスで操作「{0}」を実行します。続けたいですか?', fail2banChange: 'fail2ban構成の変更', @@ -1146,7 +1147,6 @@ const message = { ftp: { ftp: 'FTPアカウント|FTPアカウント', notStart: 'FTP Serviceは現在実行されていません。最初に開始してください!', - noFtp: `FTP(Pure-FTPD)サービスは検出されません。インストールする公式ドキュメントを参照してください。`, operation: 'これにより、FTPサービスで「{0}」操作が実行されます。続けたいですか?', noPasswdMsg: '現在のFTPアカウントパスワードを取得できません。パスワードを設定して再試行してください!', enableHelper: '選択したFTPアカウントを有効にすると、アクセス許可が復元されます。続けたいですか?', @@ -1166,7 +1166,6 @@ const message = { hideFresh: '署名のアップデーターサービスを非表示にします', clamHelper: 'Clamavの最小推奨構成は、3ギブ以上のRAM、2.0 GHz以上のシングルコアCPU、および少なくとも5 GIBの利用可能なハードディスクスペースです。', - noClam: 'CLAMAVサービスは検出されていません。インストールのための公式ドキュメントを参照してください!', notStart: 'Clamav Serviceは現在実行されていません。最初に開始してください!', removeRecord: 'ペポートファイルを削除します', noRecords: '[トリガー]ボタンをクリックしてスキャンを開始すると、ここにレコードが表示されます。', @@ -2424,8 +2423,6 @@ const message = { firewall: { create: 'ルールを作成します', edit: 'ルールを編集します', - notSupport: - 'システムファイアウォールは検出されません(ファイアウォールまたはUFW)。インストールのための公式ドキュメントを参照してください。', ccDeny: 'CC保護', ipWhiteList: 'IP AllowList', ipBlockList: 'IPブロックリスト', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 0d71bf408..128dbe233 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -999,6 +999,7 @@ const message = { groupHelper: '스크립트 특성에 따라 다양한 그룹을 설정하여 스크립트 필터링 작업을 더 빠르게 수행할 수 있습니다.', handleHelper: '{0} 에서 {1} 스크립트를 실행합니다. 계속하시겠습니까?', + noSuchApp: '{0} 서비스가 감지되지 않았습니다. 스크립트 라이브러리를 사용하여 먼저 빠르게 설치하세요!', }, }, monitor: { @@ -1114,7 +1115,6 @@ const message = { fail2ban: { sshPort: 'SSH 포트 청취', sshPortHelper: '현재 Fail2ban 은 호스트의 SSH 연결 포트를 청취합니다.', - noFail2ban: 'Fail2ban 서비스가 감지되지 않았습니다. 공식 문서를 참조하여 설치하세요.', unActive: '현재 Fail2ban 서비스가 활성화되어 있지 않습니다.', operation: 'Fail2ban 서비스에서 "{0}" 작업을 수행합니다. 계속하시겠습니까?', fail2banChange: 'Fail2ban 구성 수정', @@ -1137,7 +1137,6 @@ const message = { ftp: { ftp: 'FTP 계정 | FTP 계정들', notStart: 'FTP 서비스가 현재 실행 중이 아닙니다. 먼저 시작하세요!', - noFtp: `FTP (pure-ftpd) 서비스가 감지되지 않았습니다. 공식 문서를 참조하여 설치하세요.`, operation: 'FTP 서비스에서 "{0}" 작업을 수행합니다. 계속하시겠습니까?', noPasswdMsg: '현재 FTP 계정의 비밀번호를 가져올 수 없습니다. 비밀번호를 설정한 후 다시 시도하세요!', enableHelper: '선택한 FTP 계정을 활성화하면 접근 권한이 복원됩니다. 계속하시겠습니까?', @@ -1155,7 +1154,6 @@ const message = { hideFresh: '서명 업데이트 서비스 숨기기', clamHelper: 'ClamAV의 최소 권장 구성은 다음과 같습니다: RAM 3 GiB 이상, 2.0 GHz 이상의 단일 코어 CPU, 최소 5 GiB의 사용 가능한 하드 디스크 공간.', - noClam: 'ClamAV 서비스가 감지되지 않았습니다. 공식 문서를 참조하여 설치하세요!', notStart: 'ClamAV 서비스가 현재 실행 중이 아닙니다. 먼저 시작하세요!', removeRecord: '보고서 파일 삭제', noRecords: '"Trigger" 버튼을 클릭하여 스캔을 시작하면 이곳에서 기록을 확인할 수 있습니다.', @@ -2385,7 +2383,6 @@ const message = { firewall: { create: '규칙 만들기', edit: '규칙 수정', - notSupport: '시스템 방화벽이 감지되지 않았습니다 (firewalld 또는 ufw). 설치 방법은 공식 문서를 참조하세요.', ccDeny: 'CC 보호', ipWhiteList: 'IP 허용 목록', ipBlockList: 'IP 차단 목록', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 0634ec9c2..97a19be95 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1035,6 +1035,8 @@ const message = { groupHelper: 'Tetapkan kumpulan yang berbeza berdasarkan ciri skrip, yang membolehkan operasi penapisan skrip dilakukan dengan lebih pantas.', handleHelper: 'Akan melaksanakan skrip {1} pada {0}, teruskan?', + noSuchApp: + 'Perkhidmatan {0} tidak dikesan. Sila pasang dengan cepat menggunakan pustaka skrip terlebih dahulu!', }, }, monitor: { @@ -1161,7 +1163,6 @@ const message = { fail2ban: { sshPort: 'Dengar pada port SSH', sshPortHelper: 'Fail2ban semasa mendengar pada port sambungan SSH hos', - noFail2ban: 'Perkhidmatan Fail2ban tidak dikesan. Rujuk dokumen rasmi untuk memasang.', unActive: 'Perkhidmatan Fail2ban tidak diaktifkan pada masa ini.', operation: 'Anda akan melaksanakan operasi "{0}" pada perkhidmatan Fail2ban. Adakah anda mahu meneruskan?', fail2banChange: 'Pengubahan Konfigurasi Fail2ban', @@ -1185,7 +1186,6 @@ const message = { ftp: { ftp: 'Akaun FTP | Akaun FTP', notStart: 'Perkhidmatan FTP tidak berjalan pada masa ini, sila mulakan dahulu!', - noFtp: 'Perkhidmatan FTP (pure-ftpd) tidak dikesan. Rujuk dokumen rasmi untuk memasang.', operation: 'Ini akan melaksanakan operasi "{0}" pada perkhidmatan FTP. Adakah anda mahu meneruskan?', noPasswdMsg: 'Tidak dapat mendapatkan kata laluan akaun FTP semasa, sila tetapkan kata laluan dan cuba lagi!', @@ -1208,7 +1208,6 @@ const message = { hideFresh: 'Sembunyikan perkhidmatan pengemas kini tanda tangan', clamHelper: 'Konfigurasi minimum yang disyorkan untuk ClamAV ialah: RAM 3 GiB atau lebih, CPU teras tunggal dengan 2.0 GHz atau lebih tinggi, dan sekurang-kurangnya 5 GiB ruang cakera keras yang tersedia.', - noClam: 'Perkhidmatan ClamAV tidak dikesan, sila rujuk dokumentasi rasmi untuk pemasangan!', notStart: 'Perkhidmatan ClamAV tidak berjalan pada masa ini, sila mulakan dahulu!', removeRecord: 'Padam fail laporan', noRecords: 'Klik butang "Picu" untuk memulakan imbasan dan anda akan melihat rekod di sini.', @@ -2482,8 +2481,6 @@ const message = { firewall: { create: 'Buat peraturan', edit: 'Edit peraturan', - notSupport: - 'Tiada firewall sistem yang dikesan (firewalld atau ufw). Sila rujuk dokumentasi rasmi untuk pemasangan.', ccDeny: 'Perlindungan CC', ipWhiteList: 'Senarai putih IP', ipBlockList: 'Senarai blok IP', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 22069b0cd..7db0544da 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1024,6 +1024,8 @@ const message = { groupHelper: 'Defina grupos diferentes com base nas características do script, o que permite operações de filtragem de scripts mais rápidas.', handleHelper: 'Executar o script {1} em {0}, continuar?', + noSuchApp: + 'O serviço {0} não foi detectado. Por favor, instale-o rapidamente usando a biblioteca de scripts primeiro!', }, }, monitor: { @@ -1149,7 +1151,6 @@ const message = { fail2ban: { sshPort: 'Porta de escuta do SSH', sshPortHelper: 'O Fail2ban atual escuta a porta de conexão SSH do host', - noFail2ban: `O serviço Fail2ban não foi detectado. Consulte a documentação oficial para instalá-lo.`, unActive: `O serviço Fail2ban não está ativado no momento.`, operation: 'Você realizará a operação "{0}" no serviço Fail2ban. Deseja continuar?', fail2banChange: 'Modificação da configuração do Fail2ban', @@ -1172,7 +1173,6 @@ const message = { ftp: { ftp: 'Conta FTP | Contas FTP', notStart: 'O serviço FTP não está em execução, por favor, inicie-o primeiro!', - noFtp: `O serviço FTP (pure-ftpd) não foi detectado. Consulte a documentação oficial para instalá-lo.`, operation: 'Isso realizará a operação "{0}" no serviço FTP. Deseja continuar?', noPasswdMsg: 'Não foi possível obter a senha atual da conta FTP, por favor, defina a senha e tente novamente!', enableHelper: 'Ativar a conta FTP selecionada restaurará suas permissões de acesso. Deseja continuar?', @@ -1192,7 +1192,6 @@ const message = { hideFresh: 'Ocultar serviço de atualização de assinaturas', clamHelper: 'A configuração mínima recomendada para o ClamAV é: 3 GiB de RAM ou mais, CPU de 1 núcleo com 2.0 GHz ou superior, e pelo menos 5 GiB de espaço livre no disco rígido.', - noClam: 'Serviço ClamAV não detectado, consulte a documentação oficial para instalação!', notStart: 'O serviço ClamAV não está em execução, por favor, inicie-o primeiro!', removeRecord: 'Excluir arquivos de relatório', noRecords: 'Clique no botão "Acionar" para iniciar o scan e você verá registros aqui.', @@ -2477,8 +2476,6 @@ const message = { firewall: { create: 'Criar regra', edit: 'Editar regra', - notSupport: - 'Nenhum firewall do sistema detectado (firewalld ou ufw). Consulte a documentação oficial para instalação.', ccDeny: 'Proteção contra CC', ipWhiteList: 'Lista de IPs permitidos', ipBlockList: 'Lista de IPs bloqueados', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 9031caa01..2c07658ff 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1030,6 +1030,8 @@ const message = { groupHelper: 'Установите разные группы на основе характеристик скрипта, что позволяет быстрее выполнять операции фильтрации скриптов.', handleHelper: 'Выполнить сценарий {1} на {0}, продолжить?', + noSuchApp: + 'Служба {0} не обнаружена. Пожалуйста, сначала быстро установите её, используя библиотеку скриптов!', }, }, monitor: { @@ -1156,7 +1158,6 @@ const message = { fail2ban: { sshPort: 'Прослушивание SSH порта', sshPortHelper: 'Текущий Fail2ban прослушивает порт SSH-подключения хоста', - noFail2ban: 'Служба Fail2ban не обнаружена. Обратитесь к официальной документации для установки.', unActive: 'Служба Fail2ban в настоящее время не включена.', operation: 'Вы собираетесь выполнить операцию "{0}" над службой Fail2ban. Хотите продолжить?', fail2banChange: 'Изменение конфигурации Fail2ban', @@ -1179,7 +1180,6 @@ const message = { ftp: { ftp: 'FTP аккаунт | FTP аккаунты', notStart: 'Служба FTP в настоящее время не запущена, пожалуйста, сначала запустите её!', - noFtp: 'Служба FTP (pure-ftpd) не обнаружена. Обратитесь к официальной документации для установки.', operation: 'Это выполнит операцию "{0}" над службой FTP. Хотите продолжить?', noPasswdMsg: 'Невозможно получить текущий пароль FTP аккаунта, пожалуйста, установите пароль и попробуйте снова!', @@ -1200,7 +1200,6 @@ const message = { hideFresh: 'Скрыть службу обновления сигнатур', clamHelper: 'Минимальная рекомендуемая конфигурация для ClamAV: 3 ГБ ОЗУ или больше, одноядерный процессор с частотой 2.0 ГГц или выше, и не менее 5 ГБ свободного места на жестком диске.', - noClam: 'Служба ClamAV не обнаружена, пожалуйста, обратитесь к официальной документации для установки!', notStart: 'Служба ClamAV в настоящее время не запущена, пожалуйста, сначала запустите её!', removeRecord: 'Удалить файлы отчетов', noRecords: 'Нажмите кнопку "Запустить" для начала сканирования, и вы увидите записи здесь.', @@ -2478,8 +2477,6 @@ const message = { firewall: { create: 'Создать правило', edit: 'Редактировать правило', - notSupport: - 'Межсетевой экран не обнаружен (firewalld или ufw). Пожалуйста, обратитесь к официальной документации для установки.', ccDeny: 'CC защита', ipWhiteList: 'Белый список IP', ipBlockList: 'Черный список IP', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 811f26467..60c223cf0 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -993,6 +993,7 @@ const message = { edit: '修改腳本', groupHelper: '根據腳本特徵設置不同的分組,可以更快地對腳本進行篩選操作。', handleHelper: '將在 {0} 上執行 {1} 腳本,是否繼續?', + noSuchApp: '未檢測到 {0} 服務,請先使用腳本庫快速安裝!', }, }, monitor: { @@ -1120,7 +1121,6 @@ const message = { fail2ban: { sshPort: '監聽 SSH 端口', sshPortHelper: '當前 Fail2ban 監聽主機 SSH 連接端口', - noFail2ban: '未檢測到 Fail2ban 服務,請參考官方文檔進行安裝!', unActive: '當前未開啟 Fail2ban 服務,請先開啟!', operation: '對 Fail2ban 服務進行 [{0}] 操作,是否繼續?', fail2banChange: 'Fail2ban 配置修改', @@ -1143,7 +1143,6 @@ const message = { ftp: { ftp: 'FTP 帳戶', notStart: '當前未 FTP 服務,請先開啟!', - noFtp: '未檢測到 FTP (pure-ftpd) 服務,請參考官方文檔進行安裝!', operation: '對 FTP 服務進行 [{0}] 操作,是否繼續?', noPasswdMsg: '無法獲取當前 FTP 賬號密碼,請先設置密碼後重試!', enableHelper: '啟用選取的 FTP 帳號後,該 FTP 帳號將恢復訪問權限,是否繼續操作?', @@ -1161,7 +1160,6 @@ const message = { hideFresh: '隱藏病毒庫服務', clamHelper: 'ClamAV 的最低建議配置為:3 GiB 以上的 RAM,2.0 GHz 以上的單核 CPU,以及至少 5 GiB 的可用硬盤空間。', - noClam: '未檢測到 ClamAV 服務,請參考官方文檔進行安裝!', notStart: '當前未 ClamAV 服務,請先開啟!', removeRecord: '刪除報告文件', removeResultHelper: '刪除任務執行過程中生成的報告文件,以清理存儲空間。', @@ -2356,7 +2354,6 @@ const message = { firewall: { create: '創建規則', edit: '編輯規則', - notSupport: '未檢測到系統防火墻(firewalld 或者 ufw),請參考官方文檔進行安裝', ccDeny: 'CC 防護', ipWhiteList: 'IP 白名單', ipBlockList: 'IP 黑名單', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index da104b42e..fce7928d1 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -991,6 +991,7 @@ const message = { edit: '修改脚本', groupHelper: '针对脚本特征设置不同的分组,可以更加快速的对脚本进行筛选操作。', handleHelper: '将在 {0} 上执行 {1} 脚本,是否继续?', + noSuchApp: '未检测到 {0} 服务,请先使用脚本库安装脚本快速安装!', }, }, monitor: { @@ -1118,7 +1119,6 @@ const message = { fail2ban: { sshPort: '监听 SSH 端口', sshPortHelper: '当前 Fail2ban 监听主机 SSH 连接端口', - noFail2ban: '未检测到 Fail2ban 服务,请参考官方文档进行安装!', unActive: '当前未开启 Fail2ban 服务,请先开启!', operation: '对 Fail2ban 服务进行 [{0}] 操作,是否继续?', fail2banChange: 'Fail2ban 配置修改', @@ -1141,7 +1141,6 @@ const message = { ftp: { ftp: 'FTP 账户', notStart: '当前未开启 FTP 服务,请先开启!', - noFtp: '未检测到 FTP (pure-ftpd) 服务,请参考官方文档进行安装!', operation: '对 FTP 服务进行 [{0}] 操作,是否继续?', noPasswdMsg: '无法获取当前 FTP 账号密码,请先设置密码后重试!', enableHelper: '启用选中的 FTP 账号后,该 FTP 账号恢复访问权限,是否继续操作?', @@ -1159,7 +1158,6 @@ const message = { hideFresh: '隐藏病毒库服务', clamHelper: 'ClamAV 的最低建议配置为:3 GiB 以上的 RAM,2.0 GHz 以上的单核 CPU,以及至少 5 GiB 的可用硬盘空间', - noClam: '未检测到 ClamAV 服务,请参考官方文档进行安装!', notStart: '当前未开启 ClamAV 服务,请先开启!', removeRecord: '删除报告文件', removeResultHelper: '删除任务执行过程中生成的报告文件,以清理存储空间。', @@ -2347,7 +2345,6 @@ const message = { firewall: { create: '创建规则', edit: '编辑规则', - notSupport: '未检测到系统防火墙(firewalld 或者 ufw),请参考官方文档进行安装', ccDeny: 'CC 防护', ipWhiteList: 'IP 白名单', ipBlockList: 'IP 黑名单', diff --git a/frontend/src/views/container/compose/index.vue b/frontend/src/views/container/compose/index.vue index 59c1b3005..6abaa04ab 100644 --- a/frontend/src/views/container/compose/index.vue +++ b/frontend/src/views/container/compose/index.vue @@ -4,9 +4,14 @@ - + - +