CodeReview/frontend/src/shared/utils/projectUtils.ts

102 lines
2.4 KiB
TypeScript
Raw Normal View History

/**
*
*
*/
import type { Project, ProjectSourceType } from '@/shared/types';
/**
*
*/
export function isRepositoryProject(project: Project): boolean {
return project.source_type === 'repository';
}
/**
* ZIP上传类型
*/
export function isZipProject(project: Project): boolean {
return project.source_type === 'zip';
}
/**
*
*/
export function getSourceTypeLabel(sourceType: ProjectSourceType): string {
const labels: Record<ProjectSourceType, string> = {
repository: '远程仓库',
zip: 'ZIP上传'
};
return labels[sourceType] || '未知';
}
/**
*
*/
export function getSourceTypeBadge(sourceType: ProjectSourceType): string {
const badges: Record<ProjectSourceType, string> = {
repository: 'REPO',
zip: 'ZIP'
};
return badges[sourceType] || 'UNKNOWN';
}
/**
*
*/
export function getRepositoryPlatformLabel(platform?: string): string {
const labels: Record<string, string> = {
github: 'GitHub',
gitlab: 'GitLab',
2025-12-16 16:36:08 +08:00
gitea: 'Gitea',
other: '其他'
};
return labels[platform || 'other'] || '其他';
}
/**
*
*/
export function canSelectBranch(project: Project): boolean {
return isRepositoryProject(project) && !!project.repository_url;
}
/**
* ZIP文件进行扫描
*/
export function requiresZipUpload(project: Project): boolean {
return isZipProject(project);
}
/**
*
*/
export function getScanMethodDescription(project: Project): string {
if (isRepositoryProject(project)) {
return `${getRepositoryPlatformLabel(project.repository_type)} 仓库拉取代码`;
}
return '上传ZIP文件进行扫描';
}
/**
*
*/
export function validateProjectConfig(project: Project): { valid: boolean; errors: string[] } {
const errors: string[] = [];
if (!project.name?.trim()) {
errors.push('项目名称不能为空');
}
if (isRepositoryProject(project)) {
if (!project.repository_url?.trim()) {
errors.push('仓库地址不能为空');
}
}
return {
valid: errors.length === 0,
errors
};
}