fix: locales, empty link in add worker

This commit is contained in:
jialin
2026-06-06 14:29:49 +08:00
committed by jialin
parent 15a9e23243
commit d3ebea9090
12 changed files with 52 additions and 37 deletions
+1 -1
View File
@@ -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 <a href={link} target="_blank">prerequisites</a> for {label} are met before executing the following command.',
'Please make sure the <a href={link} target="_blank">prerequisites</a> 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':
+1 -1
View File
@@ -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',
+1 -1
View File
@@ -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 <a href={link} target="_blank">prerequisites</a> for {label} are met before executing the following command.',
'Please make sure the <a href={link} target="_blank">prerequisites</a> 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':
+1 -1
View File
@@ -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',
+1 -1
View File
@@ -39,7 +39,7 @@ export default {
'clusters.workerpool.batchSize.desc':
'Количество воркеров, создаваемых одновременно в пуле воркеров',
'clusters.create.addworker.tips':
'Пожалуйста, убедитесь, что выполнены <a href={link} target="_blank">предварительные условия</a> для {label} перед выполнением следующей команды.',
'Пожалуйста, убедитесь, что выполнены <a href={link} target="_blank">предварительные условия</a> перед выполнением следующей команды.',
'clusters.create.addCommand.tips':
'На воркере, который необходимо добавить, выполните следующую команду, чтобы присоединить его к кластеру.',
'clusters.create.addCommand.k8s.tips':
+1 -1
View File
@@ -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': 'Воркеры',
+1 -1
View File
@@ -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 <a href={link} target="_blank">ön koşulların</a> karşılandığından emin olun.',
'Aşağıdaki komutu çalıştırmadan önce lütfen <a href={link} target="_blank">ön koşulların</a> 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':
+1 -1
View File
@@ -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',
+1 -1
View File
@@ -38,7 +38,7 @@ export default {
'clusters.create.noRegions': '无可用的区域',
'clusters.workerpool.batchSize.desc': '节点池中同时创建的节点数量。',
'clusters.create.addworker.tips':
'在执行以下命令之前,请确保已满足 {label} 的<a href={link} target="_blank">先决条件</a>。',
'在执行以下命令之前,请确保已满足<a href={link} target="_blank">先决条件</a>。',
'clusters.create.addCommand.tips':
'在需要添加的节点上运行以下命令,将其加入到集群中。',
'clusters.create.addCommand.k8s.tips':
+1 -1
View File
@@ -2,7 +2,7 @@ export default {
'dashboard.workers': '节点',
'dashboard.deployments': '部署',
'dashboard.clusters': '集群',
'dashboard.totalgpus': 'GPUs',
'dashboard.totalgpus': 'GPU',
'dashboard.systemload': '系统负载',
'dashboard.memory': '内存',
'dashboard.vram': '显存',
+1 -1
View File
@@ -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': '节点',
@@ -36,9 +36,7 @@ const SelectVendor: React.FC<AddWorkerStepProps> = ({ disabled }) => {
// for the Kubernetes provider; other providers stay single-select.
const multiCapable = provider === ProviderValueMap.Kubernetes;
const [selectedKeys, setSelectedKeys] = useState<string[]>([
GPUDriverMap.NVIDIA
]);
const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
// No vendor is gated anymore — every card stays selectable.
const availableKeys = undefined;
@@ -49,18 +47,6 @@ const SelectVendor: React.FC<AddWorkerStepProps> = ({ 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<AddWorkerStepProps> = ({ 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<AddWorkerStepProps> = ({ 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 (
<StepCollapse
disabled={disabled}