fix: K8s 集群添加缺少 code 必填字段

- KubernetesClusterDialog: 新增 code 表单字段
- 名称变更自动生成 code(小写+连字符)
- handleSubmit 增加 code 校验 + toast 提示
- payload 增加 code 字段(后端 binding:required)
This commit is contained in:
attacker committed 2026-06-21 09:50:07 +00:00
1 parent f24fe43ac0
commit ce438c9f05
18 files changed
+3941 -144

No files matched your search

@@ -13,9 +13,11 @@ import {
DialogTitle,
} from '@/components/ui/dialog';
import { kubernetesApi } from '@/services/api';
import { toast } from 'sonner';
const emptyForm = {
name: '',
code: '',
version: '',
description: '',
config_type: 1, // 0=Token, 1=Kubeconfig
@@ -51,6 +53,7 @@ export function KubernetesClusterDialog({
setHasKubeConfig(!!d.has_kube_config);
setFormData({
name: d.name || '',
code: d.code || d.name?.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/^-+|-+$/g, '') || '',
version: d.version || '',
description: d.description || '',
config_type: Number(d.config_type ?? 1),
@@ -62,6 +65,7 @@ export function KubernetesClusterDialog({
// 降级:用列表数据
setFormData({
name: editingCluster.name || '',
code: editingCluster.code || editingCluster.name?.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/^-+|-+$/g, '') || '',
version: editingCluster.version || '',
description: editingCluster.description || '',
config_type: Number(editingCluster.config_type ?? 1),
@@ -93,11 +97,12 @@ export function KubernetesClusterDialog({
};
const handleSubmit = async () => {
if (!formData.name.trim()) return;
if (!formData.name.trim() || !formData.code.trim()) { toast.error('请填写集群名称和代码'); return; }
try {
setSubmitting(true);
const payload = {
name: formData.name,
code: formData.code,
version: formData.version,
description: formData.description,
config_type: formData.config_type,
@@ -136,11 +141,24 @@ export function KubernetesClusterDialog({
<Label className="text-[var(--dg-text-secondary)]">集群名称</Label>
<Input
value={formData.name}
onChange={(e) => setFormData({ ...formData, name: e.target.value })}
onChange={(e) => {
const name = e.target.value;
const code = name.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/^-+|-+$/g, '');
setFormData({ ...formData, name, code: formData.code || code });
}}
placeholder="例如:prod-cluster"
className="bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"
/>
</div>
<div className="space-y-2">
<Label className="text-[var(--dg-text-secondary)]">集群代码 (Code)</Label>
<Input
value={formData.code}
onChange={(e) => setFormData({ ...formData, code: e.target.value })}
placeholder="如: prod-cluster"
className="bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] font-mono text-sm"
/>
</div>
<div className="space-y-2">
<Label className="text-[var(--dg-text-secondary)]">版本(可选)</Label>
<Input
@@ -233,7 +251,7 @@ export function KubernetesClusterDialog({
</Button>
<Button
onClick={handleSubmit}
disabled={submitting || !formData.name.trim()}
disabled={submitting || !formData.name.trim() || !formData.code.trim()}
className="bg-[var(--dg-blue)] hover:opacity-90 text-white"
>
{submitting ? '保存中...' : editingCluster ? '保存' : '添加'}