From 3d454a080253593e17b02a3dcddf4e82d6a1b87a Mon Sep 17 00:00:00 2001 From: dengqichen Date: Tue, 11 Nov 2025 14:06:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=89=E6=96=B9=E7=B3=BB=E7=BB=9F=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E5=8A=A0=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../External/List/components/DeleteDialog.tsx | 6 +- .../External/List/components/EditDialog.tsx | 85 ++++++++++++++++--- 2 files changed, 73 insertions(+), 18 deletions(-) diff --git a/frontend/src/pages/Resource/External/List/components/DeleteDialog.tsx b/frontend/src/pages/Resource/External/List/components/DeleteDialog.tsx index 41982967..c239c77d 100644 --- a/frontend/src/pages/Resource/External/List/components/DeleteDialog.tsx +++ b/frontend/src/pages/Resource/External/List/components/DeleteDialog.tsx @@ -50,12 +50,8 @@ const DeleteDialog: React.FC = ({ onSuccess(); onOpenChange(false); } catch (error) { + // 错误已经在 request 拦截器中显示了,这里只需要记录日志 console.error('删除失败:', error); - toast({ - title: '删除失败', - description: error instanceof Error ? error.message : '未知错误', - variant: 'destructive' - }); } }; diff --git a/frontend/src/pages/Resource/External/List/components/EditDialog.tsx b/frontend/src/pages/Resource/External/List/components/EditDialog.tsx index 18119bdf..fe516fb6 100644 --- a/frontend/src/pages/Resource/External/List/components/EditDialog.tsx +++ b/frontend/src/pages/Resource/External/List/components/EditDialog.tsx @@ -40,22 +40,32 @@ const EditDialog: React.FC = ({ authType: 'BASIC' as AuthType, }); + // 保存原始密码和Token(用于判断是否被修改) + const [originalPassword, setOriginalPassword] = useState(undefined); + const [originalToken, setOriginalToken] = useState(undefined); + useEffect(() => { if (open) { if (record) { + // 保存原始掩码值 + setOriginalPassword(record.password); + setOriginalToken(record.token); + setFormData({ name: record.name, type: record.type, url: record.url, authType: record.authType, username: record.username, - password: undefined, // 不显示密码 - token: undefined, + password: record.password || '', // 显示掩码或空 + token: record.token || '', // 显示掩码或空 sort: record.sort, remark: record.remark, enabled: record.enabled, }); } else { + setOriginalPassword(undefined); + setOriginalToken(undefined); setFormData({ enabled: true, sort: 1, authType: 'BASIC' as AuthType }); } } @@ -89,36 +99,71 @@ const EditDialog: React.FC = ({ toast({ title: '提示', description: '请输入用户名', variant: 'destructive' }); return; } + // 新建时必须输入密码 if (!record && !formData.password) { toast({ title: '提示', description: '请输入密码', variant: 'destructive' }); return; } + // 编辑时,如果清空了原有密码(掩码),也需要输入新密码 + if (record && originalPassword === '********' && !formData.password?.trim()) { + toast({ title: '提示', description: '请输入新密码或保持原密码不变', variant: 'destructive' }); + return; + } } if (formData.authType === 'TOKEN') { + // 新建时必须输入Token if (!record && !formData.token) { toast({ title: '提示', description: '请输入访问令牌', variant: 'destructive' }); return; } + // 编辑时,如果清空了原有Token(掩码),也需要输入新Token + if (record && originalToken === '********' && !formData.token?.trim()) { + toast({ title: '提示', description: '请输入新令牌或保持原令牌不变', variant: 'destructive' }); + return; + } + } + + // 准备提交数据 + const submitData: ExternalSystemRequest = { + ...formData as ExternalSystemRequest, + }; + + // 处理密码:如果用户没有修改,保持掩码;如果修改了,提交新值 + if (formData.authType === 'BASIC') { + if (record && formData.password === originalPassword) { + // 没有修改,保持掩码 + submitData.password = originalPassword; + } else { + // 修改了或新建,提交新密码 + submitData.password = formData.password; + } + } + + // 处理Token:如果用户没有修改,保持掩码;如果修改了,提交新值 + if (formData.authType === 'TOKEN') { + if (record && formData.token === originalToken) { + // 没有修改,保持掩码 + submitData.token = originalToken; + } else { + // 修改了或新建,提交新Token + submitData.token = formData.token; + } } if (record) { - await updateExternalSystem(record.id, formData as ExternalSystemRequest); + await updateExternalSystem(record.id, submitData); toast({ title: '更新成功', description: `系统 "${formData.name}" 已更新` }); } else { - await createExternalSystem(formData as ExternalSystemRequest); + await createExternalSystem(submitData); toast({ title: '创建成功', description: `系统 "${formData.name}" 已创建` }); } onSuccess(); onOpenChange(false); } catch (error) { + // 错误已经在 request 拦截器中显示了,这里只需要记录日志 console.error('保存失败:', error); - toast({ - title: '保存失败', - description: error instanceof Error ? error.message : '未知错误', - variant: 'destructive' - }); } }; @@ -196,13 +241,20 @@ const EditDialog: React.FC = ({ />
- + setFormData({ ...formData, password: e.target.value })} - placeholder={record ? '不修改请留空' : '请输入密码'} + placeholder={record ? (originalPassword === '********' ? '保持不变或输入新密码' : '请输入密码') : '请输入密码'} />
@@ -210,13 +262,20 @@ const EditDialog: React.FC = ({ {formData.authType === 'TOKEN' && (
- + setFormData({ ...formData, token: e.target.value })} - placeholder={record ? '不修改请留空' : '请输入访问令牌'} + placeholder={record ? (originalToken === '********' ? '保持不变或输入新令牌' : '请输入访问令牌') : '请输入访问令牌'} />
)}