From 86d47385d9d2ab148f2539f086e85968d34a672d Mon Sep 17 00:00:00 2001 From: ssongliu Date: Fri, 17 Oct 2025 11:57:36 +0800 Subject: [PATCH] fix: Optimize the container command input method --- frontend/src/api/interface/container.ts | 2 - frontend/src/lang/modules/en.ts | 3 +- frontend/src/lang/modules/es-es.ts | 4 +- frontend/src/lang/modules/ja.ts | 3 +- frontend/src/lang/modules/ko.ts | 4 +- frontend/src/lang/modules/ms.ts | 4 +- frontend/src/lang/modules/pt-br.ts | 4 +- frontend/src/lang/modules/ru.ts | 4 +- frontend/src/lang/modules/tr.ts | 3 +- frontend/src/lang/modules/zh-Hant.ts | 3 +- frontend/src/lang/modules/zh.ts | 3 +- .../container/container/operate/index.vue | 74 +++---------------- 12 files changed, 24 insertions(+), 87 deletions(-) diff --git a/frontend/src/api/interface/container.ts b/frontend/src/api/interface/container.ts index 76c05989bdef..fd82dc0ae81a 100644 --- a/frontend/src/api/interface/container.ts +++ b/frontend/src/api/interface/container.ts @@ -66,8 +66,6 @@ export namespace Container { ipv4: string; ipv6: string; dns: Array; - cmdStr: string; - entrypointStr: string; memoryItem: number; cmd: Array; workingDir: string; diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 52e2a28cc611..d2b830aad7cf 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -835,8 +835,7 @@ const message = { containerExample: '80 or 80-88', exposePort: 'Expose port', exposeAll: 'Expose all', - cmdHelper: 'Example: nginx -g "daemon off;"', - entrypointHelper: 'Example: docker-entrypoint.sh', + cmdHelper: 'Enter a command and press Enter to continue inputting. Commands can be dragged to reorder.', autoRemove: 'Auto remove', cpuQuota: 'Number of CPU cores', memoryLimit: 'Memory', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index e54bb75e61fd..9c667d4816c8 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -838,8 +838,8 @@ const message = { containerExample: '80 o 80-88', exposePort: 'Exponer puerto', exposeAll: 'Exponer todos', - cmdHelper: 'Ejemplo: nginx -g "daemon off;"', - entrypointHelper: 'Ejemplo: docker-entrypoint.sh', + cmdHelper: + 'Ingrese un comando y presione Enter para continuar ingresando. Los comandos se pueden arrastrar para reordenar.', autoRemove: 'Eliminar automáticamente', cpuQuota: 'Cantidad de núcleos de CPU', memoryLimit: 'Memoria', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index eb6bb1967033..56a7214f73fc 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -813,8 +813,7 @@ const message = { containerExample: '80または80-88', exposePort: 'ポートを公開します', exposeAll: 'すべてを公開します', - cmdHelper: '例:nginx -g "daemon off;"', - entrypointHelper: '例:docker-entrypoint.sh', + cmdHelper: 'コマンドを入力後、Enterキーを押して入力を続行します。コマンドはドラッグで順序変更できます。', autoRemove: '自動削除', cpuQuota: 'CPUコアの数', memoryLimit: 'メモリ', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 0673ca9b4ec7..6c2b4287c1fe 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -807,8 +807,8 @@ const message = { containerExample: '80 또는 80-88', exposePort: '포트 노출', exposeAll: '모든 포트 노출', - cmdHelper: '예시: nginx -g "daemon off;"', - entrypointHelper: '예시: docker-entrypoint.sh', + cmdHelper: + '명령어를 입력한 후 Enter 키를 눌러 입력을 계속합니다. 명령어는 드래그하여 순서를 변경할 수 있습니다.', autoRemove: '자동 제거', cpuQuota: 'CPU 코어 수', memoryLimit: '메모리', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 2fd1516a415f..1413f31d6136 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -829,8 +829,8 @@ const message = { containerExample: '80 atau 80-88', exposePort: 'Dedahkan port', exposeAll: 'Dedahkan semua', - cmdHelper: 'Contoh: nginx -g "daemon off;"', - entrypointHelper: 'Contoh: docker-entrypoint.sh', + cmdHelper: + 'Masukkan satu arahan dan tekan Enter untuk terus memasukkan. Arahan boleh disusun semula dengan menyeret.', autoRemove: 'Buang automatik', cpuQuota: 'Bilangan teras CPU', memoryLimit: 'Memori', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 12e8fe432a09..45dcd14c3115 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -825,8 +825,8 @@ const message = { containerExample: '80 ou 80-88', exposePort: 'Expor porta', exposeAll: 'Expor todas', - cmdHelper: 'Exemplo: nginx -g "daemon off;"', - entrypointHelper: 'Exemplo: docker-entrypoint.sh', + cmdHelper: + 'Digite um comando e pressione Enter para continuar a inserção. Os comandos podem ser arrastados para reordenar.', autoRemove: 'Remover automaticamente', cpuQuota: 'Número de núcleos de CPU', memoryLimit: 'Memória', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index c5b974e49ea0..c43464178647 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -826,8 +826,8 @@ const message = { containerExample: '80 или 80-88', exposePort: 'Открыть порт', exposeAll: 'Открыть все', - cmdHelper: 'Пример: nginx -g "daemon off;"', - entrypointHelper: 'Пример: docker-entrypoint.sh', + cmdHelper: + 'Введите команду и нажмите Enter для продолжения ввода. Команды можно перетаскивать для изменения порядка.', autoRemove: 'Автоудаление', cpuQuota: 'Количество ядер CPU', memoryLimit: 'Память', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index de1b79913605..273443848b28 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -844,8 +844,7 @@ const message = { containerExample: '80 veya 80-88', exposePort: 'Portu göster', exposeAll: 'Tümünü göster', - cmdHelper: 'Örnek: nginx -g "daemon off;"', - entrypointHelper: 'Örnek: docker-entrypoint.sh', + cmdHelper: "Bir komut girin ve girişe devam etmek için Enter'a basın. Komutlar sıralamak için sürüklenebilir.", autoRemove: 'Otomatik kaldır', cpuQuota: 'CPU çekirdek sayısı', memoryLimit: 'Bellek', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 99f0b8e801ce..a66b94f2e511 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -800,8 +800,7 @@ const message = { containerExample: '80 或者 80-88', exposePort: '暴露埠', exposeAll: '暴露所有', - cmdHelper: '例: nginx -g "daemon off;"', - entrypointHelper: '例: docker-entrypoint.sh', + cmdHelper: '輸入一個命令後回車繼續輸入,命令可拖拽排序。', autoRemove: '容器退出後自動刪除容器', cpuQuota: 'CPU 限制', memoryLimit: '記憶體限制', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index ddb6daf91d4b..0e02d13f3cc1 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -799,8 +799,7 @@ const message = { containerExample: '80 或者 80-88', exposePort: '暴露端口', exposeAll: '暴露所有', - cmdHelper: '例: nginx -g "daemon off;"', - entrypointHelper: '例: docker-entrypoint.sh', + cmdHelper: '输入一个命令后回车继续输入,命令可拖拽顺序。', autoRemove: '容器退出后自动删除容器', cpuQuota: 'CPU 限制', memoryLimit: '内存限制', diff --git a/frontend/src/views/container/container/operate/index.vue b/frontend/src/views/container/container/operate/index.vue index c852e75cf8f8..e92b1477728c 100644 --- a/frontend/src/views/container/container/operate/index.vue +++ b/frontend/src/views/container/container/operate/index.vue @@ -199,21 +199,21 @@ - - + + + {{ $t('container.cmdHelper') }} - - + + {{ $t('container.cmdHelper') }} @@ -406,8 +406,6 @@ const form = reactive({ ipv4: '', ipv6: '', dns: [], - cmdStr: '', - entrypointStr: '', memoryItem: 0, cmd: [], workingDir: '', @@ -453,27 +451,8 @@ const search = async () => { form.user = res.data.user; form.workingDir = res.data.workingDir; - let itemCmd = ''; form.cmd = res.data.cmd || []; - for (const item of form.cmd) { - if (item.indexOf(' ') !== -1) { - itemCmd += `"${escapeQuotes(item)}" `; - } else { - itemCmd += item + ' '; - } - } - form.cmdStr = itemCmd.trimEnd(); - let itemEntrypoint = ''; form.entrypoint = res.data.entrypoint || []; - for (const item of form.entrypoint) { - if (item.indexOf(' ') !== -1) { - itemEntrypoint += `"${escapeQuotes(item)}" `; - } else { - itemEntrypoint += item + ' '; - } - } - form.entrypointStr = itemEntrypoint.trimEnd(); - form.labels = res.data.labels || []; form.env = res.data.env || []; form.exposedPorts = res.data.exposedPorts || []; @@ -579,21 +558,7 @@ const onSubmit = async (formEl: FormInstance | undefined) => { }); }; const submit = async () => { - form.cmd = []; form.taskID = newUUID(); - if (form.cmdStr) { - let itemCmd = splitStringIgnoringQuotes(form.cmdStr); - for (const item of itemCmd) { - form.cmd.push(item.replace(/(? { return false; }; -const escapeQuotes = (input) => { - return input.replace(/(? { - input = input.replace(/\\"/g, ''); - const regex = /"([^"]*)"|(\S+)/g; - const result = []; - let match; - - while ((match = regex.exec(input)) !== null) { - if (match[1]) { - result.push(match[1].replaceAll('', '\\"')); - } else if (match[2]) { - result.push(match[2].replaceAll('', '\\"')); - } - } - - return result; -}; - const checkExist = async () => { let params = { page: 1,