diff --git a/frontend/src/components/audit/components/BasicConfig.tsx b/frontend/src/components/audit/components/BasicConfig.tsx index c82968e..b613f85 100644 --- a/frontend/src/components/audit/components/BasicConfig.tsx +++ b/frontend/src/components/audit/components/BasicConfig.tsx @@ -9,7 +9,7 @@ import { } from "@/components/ui/select"; import { GitBranch, Zap, Info } from "lucide-react"; import type { Project, CreateAuditTaskForm } from "@/shared/types"; -import { isRepositoryProject, isZipProject } from "@/shared/utils/projectUtils"; +import { isRepositoryProject, isZipProject, getRepositoryPlatformLabel } from "@/shared/utils/projectUtils"; import ZipFileSection from "./ZipFileSection"; import type { ZipFileMeta } from "@/shared/utils/zipStorage"; @@ -138,7 +138,7 @@ function ProjectInfoCard({ project }: { project: Project }) { {isRepo && ( <>

- 仓库平台:{project.repository_type?.toUpperCase() || "OTHER"} + 仓库平台:{getRepositoryPlatformLabel(project.repository_type)}

默认分支:{project.default_branch}

diff --git a/frontend/src/pages/ProjectDetail.tsx b/frontend/src/pages/ProjectDetail.tsx index 9d282c2..28ea711 100644 --- a/frontend/src/pages/ProjectDetail.tsx +++ b/frontend/src/pages/ProjectDetail.tsx @@ -34,13 +34,13 @@ import { api } from "@/shared/config/database"; import { runRepositoryAudit, scanStoredZipFile } from "@/features/projects/services"; import type { Project, AuditTask, CreateProjectForm } from "@/shared/types"; import { hasZipFile } from "@/shared/utils/zipStorage"; -import { isRepositoryProject, getSourceTypeLabel } from "@/shared/utils/projectUtils"; +import { isRepositoryProject, getSourceTypeLabel, getRepositoryPlatformLabel } from "@/shared/utils/projectUtils"; import { toast } from "sonner"; import CreateTaskDialog from "@/components/audit/CreateTaskDialog"; import FileSelectionDialog from "@/components/audit/FileSelectionDialog"; import TerminalProgressDialog from "@/components/audit/TerminalProgressDialog"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; -import { SUPPORTED_LANGUAGES } from "@/shared/constants"; +import { SUPPORTED_LANGUAGES, REPOSITORY_PLATFORMS } from "@/shared/constants"; export default function ProjectDetail() { const { id } = useParams<{ id: string }>(); @@ -475,8 +475,7 @@ export default function ProjectDetail() {
仓库平台 - {project.repository_type === 'github' ? 'GitHub' : - project.repository_type === 'gitlab' ? 'GitLab' : '其他'} + {getRepositoryPlatformLabel(project.repository_type)}
@@ -529,12 +528,11 @@ export default function ProjectDetail() { className="flex items-center justify-between p-3 bg-muted/50 rounded-lg hover:bg-muted transition-all group" >
-
+ task.status === 'failed' ? 'bg-rose-500/20' : + 'bg-muted' + }`}> {getStatusIcon(task.status)}
@@ -579,12 +577,11 @@ export default function ProjectDetail() {
-
+ task.status === 'failed' ? 'bg-rose-500/20' : + 'bg-muted' + }`}> {getStatusIcon(task.status)}
@@ -676,12 +673,11 @@ export default function ProjectDetail() {
-
+ issue.severity === 'medium' ? 'bg-amber-500/20 text-amber-600 dark:text-amber-400' : + 'bg-sky-500/20 text-sky-600 dark:text-sky-400' + }`}>
@@ -695,13 +691,13 @@ export default function ProjectDetail() { {issue.severity === 'critical' ? '严重' : issue.severity === 'high' ? '高' : - issue.severity === 'medium' ? '中等' : '低'} + issue.severity === 'medium' ? '中等' : '低'}

@@ -783,9 +779,11 @@ export default function ProjectDetail() { - GitHub - GitLab - 其他 + {REPOSITORY_PLATFORMS.map((platform) => ( + + {platform.label} + + ))}

@@ -831,14 +829,14 @@ export default function ProjectDetail() { className={`flex items-center space-x-2 p-3 border cursor-pointer transition-all rounded ${editForm.programming_languages?.includes(lang) ? 'border-primary bg-primary/10 text-primary' : 'border-border hover:border-border text-muted-foreground' - }`} + }`} onClick={() => handleToggleLanguage(lang)} >
{editForm.programming_languages?.includes(lang) && ( diff --git a/frontend/src/pages/Projects.tsx b/frontend/src/pages/Projects.tsx index f2c0a72..4e3cb0c 100644 --- a/frontend/src/pages/Projects.tsx +++ b/frontend/src/pages/Projects.tsx @@ -44,7 +44,7 @@ import { Link } from "react-router-dom"; import { toast } from "sonner"; import CreateTaskDialog from "@/components/audit/CreateTaskDialog"; import TerminalProgressDialog from "@/components/audit/TerminalProgressDialog"; -import { SUPPORTED_LANGUAGES } from "@/shared/constants"; +import { SUPPORTED_LANGUAGES, REPOSITORY_PLATFORMS } from "@/shared/constants"; export default function Projects() { const [projects, setProjects] = useState([]); @@ -485,10 +485,11 @@ export default function Projects() { - GITHUB - GITLAB - GITEA - OTHER + {REPOSITORY_PLATFORMS.map((platform) => ( + + {platform.label} + + ))}
@@ -1016,10 +1017,11 @@ export default function Projects() { - GITHUB - GITLAB - GITEA - OTHER + {REPOSITORY_PLATFORMS.map((platform) => ( + + {platform.label} + + ))}
diff --git a/frontend/src/pages/TaskDetail.tsx b/frontend/src/pages/TaskDetail.tsx index 0d05359..21d3372 100644 --- a/frontend/src/pages/TaskDetail.tsx +++ b/frontend/src/pages/TaskDetail.tsx @@ -36,7 +36,7 @@ import type { AuditTask, AuditIssue } from "@/shared/types"; import { toast } from "sonner"; import ExportReportDialog from "@/components/reports/ExportReportDialog"; import { calculateTaskProgress } from "@/shared/utils/utils"; -import { isRepositoryProject, getSourceTypeLabel } from "@/shared/utils/projectUtils"; +import { isRepositoryProject, getSourceTypeLabel, getRepositoryPlatformLabel } from "@/shared/utils/projectUtils"; // AI explanation parser function parseAIExplanation(aiExplanation: string) { @@ -86,12 +86,11 @@ function IssuesList({ issues }: { issues: AuditIssue[] }) {
-
+
{getTypeIcon(issue.issue_type)}
@@ -112,7 +111,7 @@ function IssuesList({ issues }: { issues: AuditIssue[] }) { {issue.severity === 'critical' ? '严重' : issue.severity === 'high' ? '高' : - issue.severity === 'medium' ? '中等' : '低'} + issue.severity === 'medium' ? '中等' : '低'}
@@ -702,7 +701,7 @@ export default function TaskDetail() { {isRepositoryProject(task.project) && (

仓库平台

-

{task.project.repository_type?.toUpperCase() || 'OTHER'}

+

{getRepositoryPlatformLabel(task.project.repository_type)}

)} {task.project.programming_languages && ( diff --git a/frontend/src/shared/constants/index.ts b/frontend/src/shared/constants/index.ts index 2f48818..401ecb2 100644 --- a/frontend/src/shared/constants/index.ts +++ b/frontend/src/shared/constants/index.ts @@ -62,13 +62,6 @@ export const PROJECT_SOURCE_TYPES = { ZIP: 'zip', } as const; -// 仓库平台类型 -export const REPOSITORY_TYPES = { - GITHUB: 'github', - GITLAB: 'gitlab', - OTHER: 'other', -} as const; - // 分析深度 export const ANALYSIS_DEPTH = { BASIC: 'basic', diff --git a/frontend/src/shared/constants/projectTypes.ts b/frontend/src/shared/constants/projectTypes.ts index 55e6d47..4e78e9b 100644 --- a/frontend/src/shared/constants/projectTypes.ts +++ b/frontend/src/shared/constants/projectTypes.ts @@ -22,17 +22,23 @@ export const PROJECT_SOURCE_TYPES: Array<{ } ]; +// 仓库平台显示名称 +export const REPOSITORY_PLATFORM_LABELS: Record = { + github: 'GitHub', + gitlab: 'GitLab', + gitea: 'Gitea', + other: '其他', +}; + // 仓库平台选项 export const REPOSITORY_PLATFORMS: Array<{ value: RepositoryPlatform; label: string; icon?: string; -}> = [ - { value: 'github', label: 'GitHub' }, - { value: 'gitlab', label: 'GitLab' }, - { value: 'gitea', label: 'Gitea' }, - { value: 'other', label: '其他' } - ]; +}> = Object.entries(REPOSITORY_PLATFORM_LABELS).map(([value, label]) => ({ + value: value as RepositoryPlatform, + label +})); // 项目来源类型的颜色配置 export const SOURCE_TYPE_COLORS: Record = { - github: 'GitHub', - gitlab: 'GitLab', - gitea: 'Gitea', - other: '其他' - }; - return labels[platform || 'other'] || '其他'; + return REPOSITORY_PLATFORM_LABELS[platform as keyof typeof REPOSITORY_PLATFORM_LABELS] || REPOSITORY_PLATFORM_LABELS.other; } /**