diff --git a/frontend/src/pages/Resource/External/List/components/EditDialog.tsx b/frontend/src/pages/Resource/External/List/components/EditDialog.tsx index 82d549d8..f189599c 100644 --- a/frontend/src/pages/Resource/External/List/components/EditDialog.tsx +++ b/frontend/src/pages/Resource/External/List/components/EditDialog.tsx @@ -43,6 +43,7 @@ const EditDialog: React.FC = ({ // 标记是否有原始密码和Token(用于判断是否需要提交) const [hasOriginalPassword, setHasOriginalPassword] = useState(false); const [hasOriginalToken, setHasOriginalToken] = useState(false); + const [hasOriginalConfig, setHasOriginalConfig] = useState(false); // 掩码常量 const MASK = '********'; @@ -50,12 +51,14 @@ const EditDialog: React.FC = ({ useEffect(() => { if (open) { if (record) { - // 判断是否有密码/Token(无论返回什么值,只要不为空就认为有) + // 判断是否有密码/Token/Config(无论返回什么值,只要不为空就认为有) const hasPwd = !!record.password && record.password.trim() !== ''; const hasTkn = !!record.token && record.token.trim() !== ''; + const hasCfg = !!record.config && record.config.trim() !== ''; setHasOriginalPassword(hasPwd); setHasOriginalToken(hasTkn); + setHasOriginalConfig(hasCfg); setFormData({ name: record.name, @@ -67,6 +70,8 @@ const EditDialog: React.FC = ({ password: hasPwd ? MASK : '', // 如果有Token,显示掩码;否则显示空 token: hasTkn ? MASK : '', + // 如果有Config,显示掩码;否则显示空 + config: hasCfg ? MASK : '', sort: record.sort, remark: record.remark, enabled: record.enabled, @@ -74,6 +79,7 @@ const EditDialog: React.FC = ({ } else { setHasOriginalPassword(false); setHasOriginalToken(false); + setHasOriginalConfig(false); setFormData({ enabled: true, sort: 1, authType: 'BASIC' as AuthType }); } } @@ -132,6 +138,19 @@ const EditDialog: React.FC = ({ } } + if (formData.authType === 'KUBECONFIG') { + // 新建时必须输入Kubeconfig + if (!record && !formData.config) { + toast({ title: '提示', description: '请输入Kubeconfig配置', variant: 'destructive' }); + return; + } + // 编辑时,如果清空了原有Config(掩码),需要提示 + if (record && hasOriginalConfig && !formData.config?.trim()) { + toast({ title: '提示', description: 'Kubeconfig不能为空,请输入新配置或保持原配置不变', variant: 'destructive' }); + return; + } + } + // 准备提交数据 const submitData: ExternalSystemRequest = { ...formData as ExternalSystemRequest, @@ -159,6 +178,17 @@ const EditDialog: React.FC = ({ } } + // 处理Config:如果值还是掩码,说明没修改,提交掩码;否则提交新值 + if (formData.authType === 'KUBECONFIG') { + if (record && formData.config === MASK) { + // 没有修改,保持掩码 + submitData.config = MASK; + } else { + // 修改了或新建,提交新Config + submitData.config = formData.config; + } + } + if (record) { await updateExternalSystem(record.id, submitData); toast({ title: '更新成功', description: `系统 "${formData.name}" 已更新` }); @@ -206,6 +236,7 @@ const EditDialog: React.FC = ({ Jenkins Git 禅道 + K8S @@ -233,6 +264,7 @@ const EditDialog: React.FC = ({ 用户名密码 令牌 OAuth2 + Kubeconfig @@ -288,6 +320,30 @@ const EditDialog: React.FC = ({ )} + {formData.authType === 'KUBECONFIG' && ( +
+ +