From b01a9fc08ecd6c1c8d9b25ef0fdf26489469a0a8 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Thu, 9 Jan 2025 17:43:31 +0800 Subject: [PATCH] 1 --- .../List/components/ApplicationModal.tsx | 90 +++++++++++++++++-- .../pages/Deploy/Application/List/schema.ts | 1 + .../pages/Deploy/Application/List/types.ts | 2 + 3 files changed, 87 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx b/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx index fec28053..89ab9a67 100644 --- a/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx +++ b/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx @@ -1,7 +1,10 @@ -import React, {useEffect} from 'react'; +import React, {useEffect, useState} from 'react'; import type {Application} from '../types'; import {DevelopmentLanguageTypeEnum} from '../types'; import {createApplication, updateApplication} from '../service'; +import type {ExternalSystemResponse} from '@/pages/Deploy/External/types'; +import {SystemType} from '@/pages/Deploy/External/types'; +import {getExternalSystems} from '@/pages/Deploy/External/service'; import { Dialog, DialogContent, @@ -50,6 +53,8 @@ const ApplicationModal: React.FC = ({ }) => { const {toast} = useToast(); const isEdit = !!initialValues?.id; + const [gitInstances, setGitInstances] = useState([]); + const [selectedGitInstance, setSelectedGitInstance] = useState(); const form = useForm({ resolver: zodResolver(applicationFormSchema), @@ -61,9 +66,34 @@ const ApplicationModal: React.FC = ({ language: undefined, enabled: true, sort: 0, + gitInstanceId: undefined, }, }); + // 加载Git实例列表 + const loadGitInstances = async () => { + try { + const response = await getExternalSystems({ + type: SystemType.GIT, + enabled: true, + }); + if (response?.content) { + setGitInstances(response.content); + } + } catch (error) { + toast({ + variant: "destructive", + title: "加载Git实例失败", + description: error instanceof Error ? error.message : undefined, + duration: 3000, + }); + } + }; + + useEffect(() => { + loadGitInstances(); + }, []); + useEffect(() => { if (initialValues) { form.reset({ @@ -74,9 +104,22 @@ const ApplicationModal: React.FC = ({ language: initialValues.language, enabled: initialValues.enabled, sort: initialValues.sort, + gitInstanceId: initialValues.gitInstanceId, }); + const gitInstance = gitInstances.find(instance => instance.id === initialValues.gitInstanceId); + if (gitInstance) { + setSelectedGitInstance(gitInstance); + } } - }, [initialValues, form]); + }, [initialValues, form, gitInstances]); + + // 处理Git实例选择 + const handleGitInstanceChange = (value: string) => { + const instance = gitInstances.find(item => item.id === Number(value)); + setSelectedGitInstance(instance); + // 清空仓库地址 + form.setValue("repoUrl", ""); + }; const handleSubmit = async (values: ApplicationFormValues) => { try { @@ -179,6 +222,38 @@ const ApplicationModal: React.FC = ({ )} /> + ( + + Git实例 + + + + )} + /> + = ({ 仓库地址 - +
+ +
diff --git a/frontend/src/pages/Deploy/Application/List/schema.ts b/frontend/src/pages/Deploy/Application/List/schema.ts index f3861fc7..e3cf25ea 100644 --- a/frontend/src/pages/Deploy/Application/List/schema.ts +++ b/frontend/src/pages/Deploy/Application/List/schema.ts @@ -12,6 +12,7 @@ export const applicationFormSchema = z.object({ appCode: z.string().min(1, "请输入应用编码").max(50, "应用编码不能超过50个字符"), appName: z.string().min(1, "请输入应用名称").max(50, "应用名称不能超过50个字符"), appDesc: z.string().max(200, "应用描述不能超过200个字符").optional(), + gitInstanceId: z.string().min(1, "请选择Git实例"), repoUrl: z.string().url("请输入有效的URL地址").min(1, "请输入仓库地址"), language: z.nativeEnum(DevelopmentLanguageTypeEnum, { required_error: "请选择开发语言", diff --git a/frontend/src/pages/Deploy/Application/List/types.ts b/frontend/src/pages/Deploy/Application/List/types.ts index 84075af7..a4939280 100644 --- a/frontend/src/pages/Deploy/Application/List/types.ts +++ b/frontend/src/pages/Deploy/Application/List/types.ts @@ -18,6 +18,7 @@ export interface Application { enabled: boolean; sort: number; projectGroup: ProjectGroup; + gitInstanceId?: number; } export interface CreateApplicationRequest { @@ -29,6 +30,7 @@ export interface CreateApplicationRequest { language: DevelopmentLanguageTypeEnum; enabled: boolean; sort: number; + gitInstanceId: number; } export interface UpdateApplicationRequest extends CreateApplicationRequest {