From 92e30b0328f45d04b3989916124046e3c688bd30 Mon Sep 17 00:00:00 2001 From: ssongliu Date: Wed, 15 Jan 2025 11:27:29 +0800 Subject: [PATCH] feat: Merge code from dev --- agent/app/service/image.go | 10 ++-- agent/constant/errs.go | 9 ++-- agent/i18n/lang/en.yaml | 1 + agent/i18n/lang/zh-Hant.yaml | 1 + agent/i18n/lang/zh.yaml | 3 +- agent/utils/firewall/client/firewalld.go | 4 +- agent/utils/firewall/client/ufw.go | 4 +- agent/utils/postgresql/client/remote.go | 2 +- frontend/package.json | 3 -- frontend/src/components/app-status/index.vue | 35 ++++++------- frontend/src/components/backup/index.vue | 1 - .../src/components/codemirror-pro/index.vue | 4 +- frontend/src/components/copy-button/index.vue | 2 +- frontend/src/components/upload/index.vue | 1 - frontend/src/global/form-rules.ts | 19 +++++++ frontend/src/lang/modules/en.ts | 12 ++++- frontend/src/lang/modules/tw.ts | 11 +++- frontend/src/lang/modules/zh.ts | 11 +++- .../views/container/compose/create/index.vue | 2 +- .../src/views/container/container/index.vue | 2 +- .../container/container/operate/index.vue | 35 ++++++++----- frontend/src/views/cronjob/backup/index.vue | 1 - frontend/src/views/cronjob/helper.ts | 50 +++++-------------- frontend/src/views/setting/license/index.vue | 2 +- 24 files changed, 123 insertions(+), 102 deletions(-) diff --git a/agent/app/service/image.go b/agent/app/service/image.go index 05a4d4ae9f2c..8fbd42ffb4ee 100644 --- a/agent/app/service/image.go +++ b/agent/app/service/image.go @@ -7,24 +7,23 @@ import ( "encoding/json" "errors" "fmt" - "github.com/1Panel-dev/1Panel/agent/app/repo" "io" "os" "path" "strings" "time" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/image" - "github.com/1Panel-dev/1Panel/agent/app/dto" "github.com/1Panel-dev/1Panel/agent/app/model" + "github.com/1Panel-dev/1Panel/agent/app/repo" "github.com/1Panel-dev/1Panel/agent/app/task" "github.com/1Panel-dev/1Panel/agent/buserr" "github.com/1Panel-dev/1Panel/agent/constant" "github.com/1Panel-dev/1Panel/agent/i18n" "github.com/1Panel-dev/1Panel/agent/utils/docker" "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/registry" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/homedir" @@ -419,6 +418,9 @@ func (u *ImageService) ImageRemove(req dto.BatchDelete) (dto.ContainerPruneRepor } return report, buserr.WithDetail(constant.ErrInUsed, id, nil) } + if strings.Contains(err.Error(), "image has dependent") { + return report, buserr.New(constant.ErrObjectBeDependent) + } return report, err } report.DeletedNumber++ diff --git a/agent/constant/errs.go b/agent/constant/errs.go index 014a3d26c863..3cde3ad933c2 100644 --- a/agent/constant/errs.go +++ b/agent/constant/errs.go @@ -103,10 +103,11 @@ var ( // container var ( - ErrInUsed = "ErrInUsed" - ErrObjectInUsed = "ErrObjectInUsed" - ErrPortRules = "ErrPortRules" - ErrPgImagePull = "ErrPgImagePull" + ErrInUsed = "ErrInUsed" + ErrObjectInUsed = "ErrObjectInUsed" + ErrObjectBeDependent = "ErrObjectBeDependent" + ErrPortRules = "ErrPortRules" + ErrPgImagePull = "ErrPgImagePull" ) // runtime diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index a64ae83ea78f..7cf1e60cb232 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -157,6 +157,7 @@ ErrTypeOfRedis: "The recovery file type does not match the current persistence m #container ErrInUsed: "{{ .detail }} is in use and cannot be deleted" ErrObjectInUsed: "This object is in use and cannot be deleted" +ErrObjectBeDependent: "This image is dependent on other images and can't be deleted" ErrPortRules: "The number of ports does not match, please re-enter!" ErrPgImagePull: "Image pull timeout. Please configure image acceleration or manually pull the postgres:16.0-alpine image and try again" diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 747fdc33e5cd..1326be9bdb2d 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -158,6 +158,7 @@ ErrTypeOfRedis: "恢復文件類型與當前持久化方式不符,請修改後 #container ErrInUsed: "{{ .detail }} 正被使用,無法刪除" ErrObjectInUsed: "該對象正被使用,無法刪除" +ErrObjectBeDependent: "該鏡像依賴於其他鏡像,無法刪除" ErrPortRules: "端口數目不匹配,請重新輸入!" ErrPgImagePull: "鏡像拉取超時,請配置鏡像加速或手動拉取 postgres:16.0-alpine 鏡像後重試" diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 3f94a8675a75..304105cc0b6a 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -156,8 +156,9 @@ ErrTypeOfRedis: "恢复文件类型与当前持久化方式不符,请修改后 #container ErrInUsed: "{{ .detail }} 正被使用,无法删除" ErrObjectInUsed: "该对象正被使用,无法删除" +ErrObjectBeDependent: "该镜像依赖于其他镜像,无法删除" ErrPortRules: "端口数目不匹配,请重新输入!" -ErrPgImagePull: "镜像拉取超时,请配置镜像加速或手动拉取 postgres:16.0-alpine 镜像后重试" +ErrPgImagePull: "镜像拉取超时,请配置镜像加速或手动拉取 {{ .name }} 镜像后重试" #runtime ErrDirNotFound: "build 文件夹不存在!请检查文件完整性!" diff --git a/agent/utils/firewall/client/firewalld.go b/agent/utils/firewall/client/firewalld.go index 88c813b5cc16..1016682f03cb 100644 --- a/agent/utils/firewall/client/firewalld.go +++ b/agent/utils/firewall/client/firewalld.go @@ -25,12 +25,12 @@ func (f *Firewall) Name() string { } func (f *Firewall) Status() (bool, error) { - stdout, _ := cmd.Exec("firewall-cmd --state") + stdout, _ := cmd.Exec("LANGUAGE=en_US:en firewall-cmd --state") return stdout == "running\n", nil } func (f *Firewall) Version() (string, error) { - stdout, err := cmd.Exec("firewall-cmd --version") + stdout, err := cmd.Exec("LANGUAGE=en_US:en firewall-cmd --version") if err != nil { return "", fmt.Errorf("load the firewall version failed, err: %s", stdout) } diff --git a/agent/utils/firewall/client/ufw.go b/agent/utils/firewall/client/ufw.go index ca09516be8f2..6cf77d863cb7 100644 --- a/agent/utils/firewall/client/ufw.go +++ b/agent/utils/firewall/client/ufw.go @@ -17,9 +17,9 @@ type Ufw struct { func NewUfw() (*Ufw, error) { var ufw Ufw if cmd.HasNoPasswordSudo() { - ufw.CmdStr = "sudo ufw" + ufw.CmdStr = "LANGUAGE=en_US:en sudo ufw" } else { - ufw.CmdStr = "ufw" + ufw.CmdStr = "LANGUAGE=en_US:en ufw" } return &ufw, nil } diff --git a/agent/utils/postgresql/client/remote.go b/agent/utils/postgresql/client/remote.go index 04430a46abc4..92ae075fec94 100644 --- a/agent/utils/postgresql/client/remote.go +++ b/agent/utils/postgresql/client/remote.go @@ -306,7 +306,7 @@ func loadImageTag() (string, error) { defer cancel() if _, err := client.ImagePull(ctx, itemTag, image.PullOptions{}); err != nil { if errors.Is(ctx.Err(), context.DeadlineExceeded) { - return itemTag, buserr.New(constant.ErrPgImagePull) + return itemTag, buserr.WithName(constant.ErrPgImagePull, itemTag) } global.LOG.Errorf("image %s pull failed, err: %v", itemTag, err) return itemTag, fmt.Errorf("image %s pull failed, err: %v", itemTag, err) diff --git a/frontend/package.json b/frontend/package.json index 3d3b84bfc35d..0d4de55c6409 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,10 +20,7 @@ "prettier": "prettier --write ." }, "dependencies": { - "@codemirror/lang-html": "^6.4.9", - "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-json": "^6.0.1", - "@codemirror/lang-php": "^6.0.1", "@codemirror/language": "^6.10.2", "@codemirror/legacy-modes": "^6.4.0", "@codemirror/theme-one-dark": "^6.1.2", diff --git a/frontend/src/components/app-status/index.vue b/frontend/src/components/app-status/index.vue index b79eec2b35c3..e15bb695eb49 100644 --- a/frontend/src/components/app-status/index.vue +++ b/frontend/src/components/app-status/index.vue @@ -134,7 +134,6 @@ const onCheck = async (key: any, name: any) => { }; const onOperate = async (operation: string) => { - em('update:maskShow', false); operateReq.operate = operation; ElMessageBox.confirm( i18n.global.t('app.operatorHelper', [i18n.global.t('app.' + operation)]), @@ -144,25 +143,21 @@ const onOperate = async (operation: string) => { cancelButtonText: i18n.global.t('commons.button.cancel'), type: 'info', }, - ) - .then(() => { - em('update:maskShow', true); - em('update:loading', true); - em('before'); - InstalledOp(operateReq) - .then(() => { - em('update:loading', false); - MsgSuccess(i18n.global.t('commons.msg.operationSuccess')); - onCheck(key.value, name.value); - em('after'); - }) - .catch(() => { - em('update:loading', false); - }); - }) - .catch(() => { - em('update:maskShow', true); - }); + ).then(() => { + em('update:maskShow', true); + em('update:loading', true); + em('before'); + InstalledOp(operateReq) + .then(() => { + em('update:loading', false); + MsgSuccess(i18n.global.t('commons.msg.operationSuccess')); + onCheck(key.value, name.value); + em('after'); + }) + .catch(() => { + em('update:loading', false); + }); + }); }; onMounted(() => { diff --git a/frontend/src/components/backup/index.vue b/frontend/src/components/backup/index.vue index b4484cdd6ee2..75b08a7b98a1 100644 --- a/frontend/src/components/backup/index.vue +++ b/frontend/src/components/backup/index.vue @@ -130,7 +130,6 @@ const taskLogRef = ref(); const data = ref(); const paginationConfig = reactive({ - cacheSizeKey: 'backup-page-size', currentPage: 1, pageSize: 10, total: 0, diff --git a/frontend/src/components/codemirror-pro/index.vue b/frontend/src/components/codemirror-pro/index.vue index 63eb3e9874ec..d12024f161fa 100644 --- a/frontend/src/components/codemirror-pro/index.vue +++ b/frontend/src/components/codemirror-pro/index.vue @@ -8,13 +8,13 @@ import { CSSProperties } from 'vue'; import { basicSetup, EditorView } from 'codemirror'; import { EditorState } from '@codemirror/state'; -import { javascript } from '@codemirror/lang-javascript'; import { oneDark } from '@codemirror/theme-one-dark'; import { StreamLanguage } from '@codemirror/language'; import { nginx } from './nginx'; import { yaml } from '@codemirror/legacy-modes/mode/yaml'; import { shell } from '@codemirror/legacy-modes/mode/shell'; import { dockerFile } from '@codemirror/legacy-modes/mode/dockerfile'; +import { javascript } from '@codemirror/legacy-modes/mode/javascript'; import { placeholder } from '@codemirror/view'; import { json } from '@codemirror/lang-json'; @@ -94,7 +94,7 @@ const initCodeMirror = () => { extensions.push(StreamLanguage.define(dockerFile)); break; case 'javascript': - extensions.push(javascript()); + extensions.push(StreamLanguage.define(javascript)); break; case 'nginx': extensions.push(StreamLanguage.define(nginx)); diff --git a/frontend/src/components/copy-button/index.vue b/frontend/src/components/copy-button/index.vue index f7f1ad693413..633353b6d045 100644 --- a/frontend/src/components/copy-button/index.vue +++ b/frontend/src/components/copy-button/index.vue @@ -1,6 +1,6 @@