fix(ai): 拆解原型无需求ID任务
This commit is contained in:
@@ -28,6 +28,16 @@ interface Props {
|
||||
readOnly?: boolean;
|
||||
}
|
||||
|
||||
const NO_REQUIREMENT_GROUP_PREFIX = '__no_requirement__';
|
||||
|
||||
function getTestCaseGroupKey(testCase: { requirementId?: string; requirementName?: string }): string {
|
||||
return testCase.requirementId || `${NO_REQUIREMENT_GROUP_PREFIX}${testCase.requirementName || '未命名需求'}`;
|
||||
}
|
||||
|
||||
function getNoRequirementGroupName(groupKey: string): string {
|
||||
return groupKey.slice(NO_REQUIREMENT_GROUP_PREFIX.length) || '未命名需求';
|
||||
}
|
||||
|
||||
export function TestCaseTab({ versionId, requirementIds, readOnly = false }: Props) {
|
||||
const { testCases, fetchTestCases, createTestCases, deleteTestCase } = useTestCaseStore();
|
||||
const { bugs, fetchBugs } = useBugStore();
|
||||
@@ -71,8 +81,8 @@ export function TestCaseTab({ versionId, requirementIds, readOnly = false }: Pro
|
||||
);
|
||||
|
||||
const versionDevTasks = useMemo(
|
||||
() => devTasks.filter((t) => reqIdSet.has(t.requirementId)),
|
||||
[devTasks, reqIdSet],
|
||||
() => devTasks.filter((t) => t.versionId === versionId || (!t.versionId && reqIdSet.has(t.requirementId))),
|
||||
[devTasks, reqIdSet, versionId],
|
||||
);
|
||||
|
||||
const stats = calcTestProgress(activeRoundCases, versionBugs);
|
||||
@@ -150,7 +160,7 @@ export function TestCaseTab({ versionId, requirementIds, readOnly = false }: Pro
|
||||
const groupedByReq = useMemo(() => {
|
||||
const map = new Map<string, typeof paged>();
|
||||
for (const c of paged) {
|
||||
const key = c.requirementId || '__none__';
|
||||
const key = getTestCaseGroupKey(c);
|
||||
const list = map.get(key) || [];
|
||||
list.push(c);
|
||||
map.set(key, list);
|
||||
@@ -246,7 +256,9 @@ export function TestCaseTab({ versionId, requirementIds, readOnly = false }: Pro
|
||||
</div>
|
||||
) : (
|
||||
Array.from(groupedByReq.entries()).map(([reqId, cases]) => {
|
||||
const req = reqId === '__none__' ? null : requirementMap.get(reqId);
|
||||
const isNoRequirementGroup = reqId.startsWith(NO_REQUIREMENT_GROUP_PREFIX);
|
||||
const req = isNoRequirementGroup ? null : requirementMap.get(reqId);
|
||||
const noRequirementName = isNoRequirementGroup ? getNoRequirementGroupName(reqId) : '';
|
||||
const reqPassed = cases.filter((c) => c.status === 'passed').length;
|
||||
const deliveryStatus = req ? getRequirementDeliveryStatus(req.id, versionDevTasks) : null;
|
||||
return (
|
||||
@@ -259,8 +271,12 @@ export function TestCaseTab({ versionId, requirementIds, readOnly = false }: Pro
|
||||
)}
|
||||
<div className="flex flex-1 min-w-0 items-center gap-2 px-4 py-2">
|
||||
<span className="h-2 w-2 shrink-0" />
|
||||
<span className="w-14 min-w-0 shrink-0 truncate text-[11px] font-mono text-[var(--ink-muted)]" title={req?.code || '通用'}>{req?.code || '通用'}</span>
|
||||
<span className="text-[12px] font-medium text-[var(--ink)] flex-1 truncate">{req?.title || '未关联需求'}</span>
|
||||
<span className="w-16 min-w-0 shrink-0 truncate text-[11px] font-mono text-[var(--ink-muted)]" title={isNoRequirementGroup ? '无需求ID' : req?.code || '通用'}>
|
||||
{isNoRequirementGroup ? '无需求ID' : req?.code || '通用'}
|
||||
</span>
|
||||
<span className="text-[12px] font-medium text-[var(--ink)] flex-1 truncate">
|
||||
{isNoRequirementGroup ? noRequirementName : req?.title || '未关联需求'}
|
||||
</span>
|
||||
{deliveryStatus && (
|
||||
<span className={`inline-flex h-5 w-14 shrink-0 items-center justify-center rounded px-1.5 text-[10px] font-medium whitespace-nowrap ${
|
||||
deliveryStatus === 'submitted'
|
||||
|
||||
Reference in New Issue
Block a user