fix(ai): 拆解原型无需求ID任务

This commit is contained in:
Script Generator
2026-07-01 13:33:04 +08:00
parent 24e8635a94
commit 756621d366
23 changed files with 371 additions and 45 deletions

View File

@@ -28,6 +28,16 @@ interface Props {
readOnly?: boolean;
}
const NO_REQUIREMENT_GROUP_PREFIX = '__no_requirement__';
function getDevTaskGroupKey(task: DevTask): string {
return task.requirementId || `${NO_REQUIREMENT_GROUP_PREFIX}${task.requirementName || '未命名需求'}`;
}
function getNoRequirementGroupName(groupKey: string): string {
return groupKey.slice(NO_REQUIREMENT_GROUP_PREFIX.length) || '未命名需求';
}
export function DevTaskTab({ versionId, requirementIds, versionDeadline, readOnly = false }: Props) {
const { tasks, fetchTasks, deleteTask } = useDevTaskStore();
const { categories, fetchCategories } = useTaskCategoryStore();
@@ -42,8 +52,8 @@ export function DevTaskTab({ versionId, requirementIds, versionDeadline, readOnl
const reqIdSet = useMemo(() => new Set(requirementIds), [requirementIds]);
const versionTasks = useMemo(
() => tasks.filter((t) => reqIdSet.has(t.requirementId)),
[tasks, reqIdSet],
() => tasks.filter((t) => t.versionId === versionId || (!t.versionId && reqIdSet.has(t.requirementId))),
[tasks, reqIdSet, versionId],
);
const [filterAssignee, setFilterAssignee] = useState('');
@@ -107,9 +117,10 @@ export function DevTaskTab({ versionId, requirementIds, versionDeadline, readOnl
const groupedByReq = useMemo(() => {
const map = new Map<string, DevTask[]>();
for (const t of paged) {
const list = map.get(t.requirementId) || [];
const key = getDevTaskGroupKey(t);
const list = map.get(key) || [];
list.push(t);
map.set(t.requirementId, list);
map.set(key, list);
}
return map;
}, [paged]);
@@ -197,7 +208,9 @@ export function DevTaskTab({ versionId, requirementIds, versionDeadline, readOnl
</div>
) : (
Array.from(groupedByReq.entries()).map(([reqId, reqTasks]) => {
const req = requirementMap.get(reqId);
const isNoRequirementGroup = reqId.startsWith(NO_REQUIREMENT_GROUP_PREFIX);
const req = isNoRequirementGroup ? undefined : requirementMap.get(reqId);
const noRequirementName = isNoRequirementGroup ? getNoRequirementGroupName(reqId) : '';
const reqProgress = calcGroupProgress(reqTasks);
return (
<div key={reqId} className="rounded-lg border border-[var(--line)] bg-[var(--bg-card)] overflow-hidden">
@@ -209,8 +222,12 @@ export function DevTaskTab({ versionId, requirementIds, versionDeadline, readOnl
)}
<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-16 shrink-0 truncate text-[11px] font-mono text-[var(--ink-muted)]" title={req?.code}>{req?.code}</span>
<span className="min-w-0 flex-1 truncate text-[12px] font-medium text-[var(--ink)]">{req?.title}</span>
<span className="w-16 shrink-0 truncate text-[11px] font-mono text-[var(--ink-muted)]" title={isNoRequirementGroup ? '无需求ID' : req?.code}>
{isNoRequirementGroup ? '无需求ID' : req?.code}
</span>
<span className="min-w-0 flex-1 truncate text-[12px] font-medium text-[var(--ink)]">
{isNoRequirementGroup ? noRequirementName : req?.title}
</span>
<span className="shrink-0 text-[11px] text-[var(--ink-muted)]">{reqProgress}%</span>
</div>
</div>