diff --git a/frontend/src/pages/Deploy/Deployment/List/components/DeploymentConfigModal.tsx b/frontend/src/pages/Deploy/Deployment/List/components/DeploymentConfigModal.tsx index 1a35c583..f333f619 100644 --- a/frontend/src/pages/Deploy/Deployment/List/components/DeploymentConfigModal.tsx +++ b/frontend/src/pages/Deploy/Deployment/List/components/DeploymentConfigModal.tsx @@ -31,7 +31,8 @@ import { import {PlusCircle, X, Maximize2} from 'lucide-react'; import {useForm, useFieldArray} from "react-hook-form"; import {getApplicationList} from '../../../Application/List/service'; -import {getExternalSystemList, getJenkinsViewList, getJenkinsJobList} from '../service'; +import {getExternalSystemList, getJenkinsViewList, getJenkinsJobList, createDeploymentConfig} from '../service'; +import {getPublishedDefinitions} from '@/pages/Workflow/Definition/service'; import type {ExternalSystem} from '@/pages/Deploy/External/types'; import { Editor } from "@/components/Editor"; @@ -76,6 +77,7 @@ const formSchema = z.object({ externalSystemId: z.number().optional(), jenkinsViewId: z.number().optional(), jenkinsJobId: z.number().optional(), + workflowId: z.number().optional(), script: z.string(), envs: z.array(z.object({ key: envKeySchema, @@ -96,6 +98,7 @@ const DeploymentConfigModal: React.FC = ({open, onCa const [externalSystems, setExternalSystems] = useState([]); const [jenkinsViews, setJenkinsViews] = useState([]); const [jenkinsJobs, setJenkinsJobs] = useState([]); + const [workflows, setWorkflows] = useState([]); const [fullscreenEditor, setFullscreenEditor] = useState(false); const [isFullscreen, setIsFullscreen] = useState(false); @@ -106,8 +109,9 @@ const DeploymentConfigModal: React.FC = ({open, onCa externalSystemId: undefined, jenkinsViewId: undefined, jenkinsJobId: undefined, + workflowId: undefined, script: '', - envs: [] + envs: [{key: '', value: ''}] } }); @@ -129,6 +133,20 @@ const DeploymentConfigModal: React.FC = ({open, onCa } }, [open]); + // 获取工作流列表 + const fetchWorkflows = async () => { + try { + const data = await getPublishedDefinitions(); + setWorkflows(data); + } catch (error) { + console.error('Failed to fetch workflows:', error); + } + }; + + useEffect(() => { + fetchWorkflows(); + }, []); + // 当选择外部系统时获取 View 列表 const handleExternalSystemChange = async (externalSystemId: number) => { form.setValue('externalSystemId', externalSystemId); @@ -158,12 +176,28 @@ const DeploymentConfigModal: React.FC = ({open, onCa } }; - const handleSubmit = form.handleSubmit((values) => { - // 过滤掉空的环境变量 - values.envs = values.envs.filter(env => env.key || env.value); - console.log('表单提交的值:', values); - onSuccess?.(); - }); + const handleSubmit = async (values: FormValues) => { + try { + // 将环境变量数组转换为Map格式 + const envMap = values.envs.reduce((acc, {key, value}) => { + // 只有当key和value都不为空时才添加到map中 + if (key && value) { + acc[key] = value; + } + return acc; + }, {} as Record); + + const params = { + ...values, + envs: envMap + }; + + await createDeploymentConfig(params); + onSuccess?.(); + } catch (error) { + console.error('Failed to create deployment config:', error); + } + }; return ( <> @@ -184,10 +218,7 @@ const DeploymentConfigModal: React.FC = ({open, onCa 应用名称 { - field.onChange(Number(value)); - handleExternalSystemChange(Number(value)); - }} + onValueChange={(value) => field.onChange(Number(value))} value={field.value?.toString()} > - + - {externalSystems.map((system) => ( - - {system.name} + {workflows.map((workflow) => ( + + {workflow.name} ))} @@ -238,7 +266,40 @@ const DeploymentConfigModal: React.FC = ({open, onCa )} /> -
+ +
+ ( + + 三方系统 + + + + )} + /> + = ({open, onCa Jenkins视图配置