From a6d4d9cc5a169a11c550c79b5dce380052e53515 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Fri, 10 Jan 2025 10:03:36 +0800 Subject: [PATCH] 1 --- frontend/package-lock.json | 32 ++++++++++ .../List/components/ApplicationModal.tsx | 63 +++++++++++++++---- .../pages/Deploy/Application/List/schema.ts | 3 +- .../pages/Deploy/Application/List/service.ts | 10 ++- .../pages/Deploy/Application/List/types.ts | 15 +++++ 5 files changed, 110 insertions(+), 13 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d49c8220..d4738a1a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,7 @@ "@radix-ui/react-label": "^2.1.1", "@radix-ui/react-navigation-menu": "^1.2.3", "@radix-ui/react-progress": "^1.1.1", + "@radix-ui/react-scroll-area": "^1.2.2", "@radix-ui/react-select": "^2.1.4", "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", @@ -2509,6 +2510,37 @@ } } }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.2.tgz", + "integrity": "sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-select": { "version": "2.1.4", "resolved": "https://registry.npmmirror.com/@radix-ui/react-select/-/react-select-2.1.4.tgz", diff --git a/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx b/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx index 89ab9a67..de24a45b 100644 --- a/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx +++ b/frontend/src/pages/Deploy/Application/List/components/ApplicationModal.tsx @@ -1,7 +1,7 @@ import React, {useEffect, useState} from 'react'; -import type {Application} from '../types'; +import type {Application, RepositoryGroup} from '../types'; import {DevelopmentLanguageTypeEnum} from '../types'; -import {createApplication, updateApplication} from '../service'; +import {createApplication, updateApplication, getRepositoryGroupList} from '../service'; import type {ExternalSystemResponse} from '@/pages/Deploy/External/types'; import {SystemType} from '@/pages/Deploy/External/types'; import {getExternalSystems} from '@/pages/Deploy/External/service'; @@ -51,9 +51,10 @@ const ApplicationModal: React.FC = ({ initialValues, projectGroupId, }) => { + const [gitInstances, setGitInstances] = useState([]); + const [repositoryGroups, setRepositoryGroups] = useState([]); const {toast} = useToast(); const isEdit = !!initialValues?.id; - const [gitInstances, setGitInstances] = useState([]); const [selectedGitInstance, setSelectedGitInstance] = useState(); const form = useForm({ @@ -67,6 +68,7 @@ const ApplicationModal: React.FC = ({ enabled: true, sort: 0, gitInstanceId: undefined, + repositoryGroupId: undefined, }, }); @@ -105,6 +107,7 @@ const ApplicationModal: React.FC = ({ enabled: initialValues.enabled, sort: initialValues.sort, gitInstanceId: initialValues.gitInstanceId, + repositoryGroupId: initialValues.repositoryGroupId, }); const gitInstance = gitInstances.find(instance => instance.id === initialValues.gitInstanceId); if (gitInstance) { @@ -113,12 +116,21 @@ const ApplicationModal: React.FC = ({ } }, [initialValues, form, gitInstances]); - // 处理Git实例选择 - const handleGitInstanceChange = (value: string) => { - const instance = gitInstances.find(item => item.id === Number(value)); - setSelectedGitInstance(instance); - // 清空仓库地址 - form.setValue("repoUrl", ""); + // 当选择Git实例时,获取对应的仓库组列表 + const handleGitInstanceChange = async (gitInstanceId: number) => { + try { + const data = await getRepositoryGroupList(gitInstanceId); + setRepositoryGroups(data); + // 清空已选择的仓库组 + form.setValue('repositoryGroupId', undefined); + } catch (error) { + console.error('Failed to fetch repository groups:', error); + toast({ + title: "错误", + description: "获取仓库组列表失败", + variant: "destructive", + }); + } }; const handleSubmit = async (values: ApplicationFormValues) => { @@ -231,8 +243,8 @@ const ApplicationModal: React.FC = ({ field.onChange(Number(value))} + value={field.value?.toString()} + disabled={!form.watch('gitInstanceId')} + > + + + + + + + {repositoryGroups.map((group) => ( + + {group.name} + + ))} + + + + + )} + /> + @@ -33,5 +34,12 @@ export const getApplicationList = () => export const getApplicationListByCondition = (params?: ApplicationQuery) => request.get(`${BASE_URL}/list`, { params }); +// 获取开发语言列表 export const getDevelopmentLanguages = () => request.get(`${BASE_URL}/development-languages`); + +// 获取仓库组列表 +export const getRepositoryGroupList = (externalSystemId: number) => + request.get(`${REPOSITORY_GROUP_URL}/list`, { + params: { externalSystemId }, + }); diff --git a/frontend/src/pages/Deploy/Application/List/types.ts b/frontend/src/pages/Deploy/Application/List/types.ts index a4939280..f2a5e759 100644 --- a/frontend/src/pages/Deploy/Application/List/types.ts +++ b/frontend/src/pages/Deploy/Application/List/types.ts @@ -49,3 +49,18 @@ export interface DevelopmentLanguageType { code: string; name: string; } + +export interface RepositoryGroup { + id: number; + name: string; + description?: string; + groupId: number; + parentId?: number; + path: string; + externalSystemId: number; + avatarUrl?: string; + webUrl?: string; + visibility?: string; + sort?: number; + enabled?: boolean; +}