import KFModal from '@/components/KFModal'; import { AvailableRange } from '@/enums'; import { type CodeConfigData } from '@/pages/CodeConfig/List'; import { addCodeConfigReq, updateCodeConfigReq } from '@/services/codeConfig'; import { to } from '@/utils/promise'; import { Form, Input, Radio, message, type FormRule, type ModalProps } from 'antd'; import { omit } from 'lodash'; import { useMemo } from 'react'; export enum VerifyMode { Password = 0, // 用户名密码 SSH = 1, // SSH Key } export enum OperationType { Create = 0, // 新建 Update = 1, // 更新 } type FormData = Partial; interface AddCodeConfigModalProps extends Omit { opType: OperationType; codeConfigData?: CodeConfigData; onOk: () => void; } function AddCodeConfigModal({ opType, codeConfigData, onOk, ...rest }: AddCodeConfigModalProps) { const [form] = Form.useForm(); const isPublic = Form.useWatch('code_repo_vis', form) === AvailableRange.Public; const urlExample = useMemo( () => isPublic ? 'https://gitlink.org.cn/ci4s/ci4sManagement-cloud.git' : 'git@code.gitlink.org.cn:ci4s/ci4sManagement-cloud.git', [isPublic], ); // /^(git@[\w.-]+:[\w./-]+\.git)$/ const urlRules: FormRule[] = useMemo( () => isPublic ? [ { type: 'url', message: '请输入正确的 Git 地址', }, ] : ([] as FormRule[]), [isPublic], ); // 创建 const createCodeConfig = async (formData: FormData) => { const params: FormData & { id?: number } = { ...formData, }; // 清除多余的信息 if (formData.code_repo_vis === AvailableRange.Public) { omit(params, ['verify_mode', 'git_user_name', 'git_password', 'ssh_key']); } if (formData.verify_mode === VerifyMode.Password) { omit(params, ['ssh_key']); } else if (formData.verify_mode === VerifyMode.SSH) { omit(params, ['git_user_name', 'git_password']); } if (opType === OperationType.Update) { params.id = codeConfigData?.id; } const request = opType === OperationType.Create ? addCodeConfigReq : updateCodeConfigReq; const [res] = await to(request(params)); if (res) { message.success(opType === OperationType.Create ? '创建成功' : '修改成功'); onOk?.(); } }; // 提交 const onFinish = (formData: FormData) => { createCodeConfig(formData); }; // 设置初始值 const initialValues: FormData = codeConfigData ?? { code_repo_vis: AvailableRange.Public, verify_mode: VerifyMode.Password, }; if (initialValues.verify_mode === undefined || initialValues.verify_mode === null) { initialValues.verify_mode = VerifyMode.Password; } return (
公开 私有 prevValues?.code_repo_vis !== currentValues?.code_repo_vis } > {({ getFieldValue }) => { return getFieldValue('code_repo_vis') === AvailableRange.Private ? ( <> 用户名/密码 SSH Key prevValues?.verify_mode !== currentValues?.verify_mode } > {({ getFieldValue }) => { return getFieldValue('verify_mode') === VerifyMode.Password ? ( <> ) : ( ); }} ) : null; }}
); } export default AddCodeConfigModal;