diff --git a/src/locales/en-US/clusters.ts b/src/locales/en-US/clusters.ts index 314dc594..c92b3fc3 100644 --- a/src/locales/en-US/clusters.ts +++ b/src/locales/en-US/clusters.ts @@ -39,7 +39,7 @@ export default { 'clusters.workerpool.batchSize.desc': 'Number of workers created simultaneously in the Worker pool', 'clusters.create.addworker.tips': - 'Please make sure the prerequisites for {label} are met before executing the following command.', + 'Please make sure the prerequisites are met before executing the following command.', 'clusters.create.addCommand.tips': 'On the Worker that needs to be added, run the following command to join it to the cluster.', 'clusters.create.addCommand.k8s.tips': diff --git a/src/locales/en-US/menu.ts b/src/locales/en-US/menu.ts index 4c35707a..ae6892be 100644 --- a/src/locales/en-US/menu.ts +++ b/src/locales/en-US/menu.ts @@ -36,7 +36,7 @@ export default { 'menu.login': 'Login', 'menu.usage': 'Usage', 'menu.usage.usage': 'Usage', - 'menu.billingAndUsage': 'Billing & Usage', + 'menu.billingAndUsage': 'Usage & Billing', 'menu.billingAndUsage.usage': 'Usage', 'menu.404': '404', 'menu.resources.clusters': 'Clusters', diff --git a/src/locales/ja-JP/clusters.ts b/src/locales/ja-JP/clusters.ts index ce1b7244..e655636c 100644 --- a/src/locales/ja-JP/clusters.ts +++ b/src/locales/ja-JP/clusters.ts @@ -39,7 +39,7 @@ export default { 'clusters.workerpool.batchSize.desc': 'Number of workers created simultaneously in the Worker pool', 'clusters.create.addworker.tips': - 'Please make sure the prerequisites for {label} are met before executing the following command.', + 'Please make sure the prerequisites are met before executing the following command.', 'clusters.create.addCommand.tips': 'On the Worker that needs to be added, run the following command to join it to the cluster.', 'clusters.create.addCommand.k8s.tips': diff --git a/src/locales/ja-JP/menu.ts b/src/locales/ja-JP/menu.ts index 8fa294e0..bc685b54 100644 --- a/src/locales/ja-JP/menu.ts +++ b/src/locales/ja-JP/menu.ts @@ -27,7 +27,7 @@ export default { 'menu.login': 'ログイン', 'menu.usage': '使用状況', 'menu.usage.usage': '使用状況', - 'menu.billingAndUsage': '請求と使用状況', + 'menu.billingAndUsage': '使用状況と請求', 'menu.billingAndUsage.usage': '使用状況', 'menu.404': '404', 'menu.settings': 'Settings', diff --git a/src/locales/ru-RU/clusters.ts b/src/locales/ru-RU/clusters.ts index b56e2a7f..92406fdf 100644 --- a/src/locales/ru-RU/clusters.ts +++ b/src/locales/ru-RU/clusters.ts @@ -39,7 +39,7 @@ export default { 'clusters.workerpool.batchSize.desc': 'Количество воркеров, создаваемых одновременно в пуле воркеров', 'clusters.create.addworker.tips': - 'Пожалуйста, убедитесь, что выполнены предварительные условия для {label} перед выполнением следующей команды.', + 'Пожалуйста, убедитесь, что выполнены предварительные условия перед выполнением следующей команды.', 'clusters.create.addCommand.tips': 'На воркере, который необходимо добавить, выполните следующую команду, чтобы присоединить его к кластеру.', 'clusters.create.addCommand.k8s.tips': diff --git a/src/locales/ru-RU/menu.ts b/src/locales/ru-RU/menu.ts index ae81bd9d..1225945b 100644 --- a/src/locales/ru-RU/menu.ts +++ b/src/locales/ru-RU/menu.ts @@ -27,7 +27,7 @@ export default { 'menu.login': 'Авторизация', 'menu.usage': 'Использование', 'menu.usage.usage': 'Использование', - 'menu.billingAndUsage': 'Биллинг и использование', + 'menu.billingAndUsage': 'Использование и биллинг', 'menu.billingAndUsage.usage': 'Использование', 'menu.404': 'Ошибка 404', 'menu.resources.workers': 'Воркеры', diff --git a/src/locales/tr-TR/clusters.ts b/src/locales/tr-TR/clusters.ts index 27249305..efacc6d3 100644 --- a/src/locales/tr-TR/clusters.ts +++ b/src/locales/tr-TR/clusters.ts @@ -39,7 +39,7 @@ export default { 'clusters.workerpool.batchSize.desc': 'İşçi havuzunda eşzamanlı olarak oluşturulan işçi düğüm sayısı', 'clusters.create.addworker.tips': - 'Aşağıdaki komutu çalıştırmadan önce lütfen {label} için ön koşulların karşılandığından emin olun.', + 'Aşağıdaki komutu çalıştırmadan önce lütfen ön koşulların karşılandığından emin olun.', 'clusters.create.addCommand.tips': 'Eklenmesi gereken İşçi Düğümde, kümeye katılması için aşağıdaki komutu çalıştırın.', 'clusters.create.addCommand.k8s.tips': diff --git a/src/locales/tr-TR/menu.ts b/src/locales/tr-TR/menu.ts index 71a8455f..81f96b0d 100644 --- a/src/locales/tr-TR/menu.ts +++ b/src/locales/tr-TR/menu.ts @@ -34,7 +34,7 @@ export default { 'menu.login': 'Giriş', 'menu.usage': 'Kullanım', 'menu.usage.usage': 'Kullanım', - 'menu.billingAndUsage': 'Faturalandırma ve Kullanım', + 'menu.billingAndUsage': 'Kullanım ve Faturalandırma', 'menu.billingAndUsage.usage': 'Kullanım', 'menu.404': '404', 'menu.resources.clusters': 'Kümeler', diff --git a/src/locales/zh-CN/clusters.ts b/src/locales/zh-CN/clusters.ts index 33321fc0..f4e87e8e 100644 --- a/src/locales/zh-CN/clusters.ts +++ b/src/locales/zh-CN/clusters.ts @@ -38,7 +38,7 @@ export default { 'clusters.create.noRegions': '无可用的区域', 'clusters.workerpool.batchSize.desc': '节点池中同时创建的节点数量。', 'clusters.create.addworker.tips': - '在执行以下命令之前,请确保已满足 {label} 的先决条件。', + '在执行以下命令之前,请确保已满足先决条件。', 'clusters.create.addCommand.tips': '在需要添加的节点上运行以下命令,将其加入到集群中。', 'clusters.create.addCommand.k8s.tips': diff --git a/src/locales/zh-CN/dashboard.ts b/src/locales/zh-CN/dashboard.ts index b9052ecf..7a42b97d 100644 --- a/src/locales/zh-CN/dashboard.ts +++ b/src/locales/zh-CN/dashboard.ts @@ -2,7 +2,7 @@ export default { 'dashboard.workers': '节点', 'dashboard.deployments': '部署', 'dashboard.clusters': '集群', - 'dashboard.totalgpus': 'GPUs', + 'dashboard.totalgpus': 'GPU', 'dashboard.systemload': '系统负载', 'dashboard.memory': '内存', 'dashboard.vram': '显存', diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index 7d724ee5..40da5533 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -29,7 +29,7 @@ export default { 'menu.login': '登录', 'menu.usage': '使用量', 'menu.usage.usage': '使用量', - 'menu.billingAndUsage': '计费与用量', + 'menu.billingAndUsage': '用量与计费', 'menu.billingAndUsage.usage': '用量统计', 'menu.404': '404', 'menu.resources.workers': '节点', diff --git a/src/pages/cluster-management/components/add-worker/select-vendor.tsx b/src/pages/cluster-management/components/add-worker/select-vendor.tsx index 8e05bdab..b8cc4631 100644 --- a/src/pages/cluster-management/components/add-worker/select-vendor.tsx +++ b/src/pages/cluster-management/components/add-worker/select-vendor.tsx @@ -36,9 +36,7 @@ const SelectVendor: React.FC = ({ disabled }) => { // for the Kubernetes provider; other providers stay single-select. const multiCapable = provider === ProviderValueMap.Kubernetes; - const [selectedKeys, setSelectedKeys] = useState([ - GPUDriverMap.NVIDIA - ]); + const [selectedKeys, setSelectedKeys] = useState([]); // No vendor is gated anymore — every card stays selectable. const availableKeys = undefined; @@ -49,18 +47,6 @@ const SelectVendor: React.FC = ({ disabled }) => { {} ); - // Push current selection into the shared summary so consumers - // (K8sRunCommand, CheckEnvironment, VendorNotes) can read it. - useEffect(() => { - const primary = selectedKeys[0] || ''; - updateField('currentGPU', primary); - updateField('selectedGPUs', selectedKeys); - updateField( - 'workerCommand', - primary ? buildWorkerCommand(primary, itemMetaRef.current[primary]) : null - ); - }, [selectedKeys]); - useEffect(() => { const unregister1 = registerField('currentGPU'); const unregister2 = registerField('workerCommand'); @@ -72,6 +58,29 @@ const SelectVendor: React.FC = ({ disabled }) => { }; }, []); + const buildSelectedKeys = (key: string) => { + const prev = [...selectedKeys]; + const has = prev.includes(key); + if (has) { + // Clicking a selected card always toggles it off. + return prev.filter((v) => v !== key); + } + // K8s clusters support multiple GPU runtimes, so accumulate picks. + // Other providers stay single-select and replace the current pick. + if (multiCapable) return [...prev, key]; + return [key]; + }; + + const updateFieldsOnSelect = (keys: string[]) => { + const primary = keys[0] || ''; + updateField('currentGPU', primary); + updateField('selectedGPUs', keys); + updateField( + 'workerCommand', + primary ? buildWorkerCommand(primary, itemMetaRef.current[primary]) : null + ); + }; + const handleSelect = (key: string, item: any) => { if (item) { itemMetaRef.current[key] = { @@ -79,19 +88,25 @@ const SelectVendor: React.FC = ({ disabled }) => { link: item.link }; } - setSelectedKeys((prev) => { - const has = prev.includes(key); - if (has) { - // Clicking a selected card always toggles it off. - return prev.filter((v) => v !== key); - } - // K8s clusters support multiple GPU runtimes, so accumulate picks. - // Other providers stay single-select and replace the current pick. - if (multiCapable) return [...prev, key]; - return [key]; - }); + const keys = buildSelectedKeys(key); + updateFieldsOnSelect(keys); + setSelectedKeys(keys); }; + useEffect(() => { + // init a default selection + handleSelect(GPUDriverMap.NVIDIA, { + label: 'NVIDIA', + hiddenTitle: true, + value: GPUDriverMap.NVIDIA, + description: '', + key: GPUDriverMap.NVIDIA, + locale: false, + notes: AddWorkerDockerNotes[GPUDriverMap.NVIDIA], + link: 'https://docs.gpustack.ai/latest/installation/requirements/#nvidia-gpu' + }); + }, []); + return (