fix(requirement): 修复需求池录入人员显示

This commit is contained in:
2026-07-06 11:14:49 +08:00
parent b4a3c990b4
commit 84344e81f6
7 changed files with 47 additions and 13 deletions

View File

@@ -406,12 +406,20 @@ function RequirementsPageContent() {
return list;
}, [scopedRequirements, search, statusFilter, priorityFilter, typeFilter, versionFilter, dateSort, requirementDevStatusMap]);
const appDataRequirementIds = useMemo(() => new Set(requirements.map((item) => item.id)), [requirements]);
const appDataRequirementById = useMemo(() => new Map(requirements.map((item) => [item.id, item])), [requirements]);
const appDataRequirementIds = useMemo(() => new Set(appDataRequirementById.keys()), [appDataRequirementById]);
const usingV22Requirements = Boolean(v22RequirementQuery) && !v22RequirementsFailed;
const appTotalPages = Math.max(1, Math.ceil(filtered.length / pageSize));
const appPage = Math.min(page, appTotalPages);
const appPaged = filtered.slice((appPage - 1) * pageSize, appPage * pageSize);
const displayedRequirements = usingV22Requirements ? v22Requirements : appPaged;
const displayedRequirements = useMemo(() => {
if (!usingV22Requirements) return appPaged;
return v22Requirements.map((req) => {
if (req.creator) return req;
const appDataRequirement = appDataRequirementById.get(req.id);
return appDataRequirement?.creator ? { ...req, creator: appDataRequirement.creator } : req;
});
}, [appDataRequirementById, appPaged, usingV22Requirements, v22Requirements]);
const total = usingV22Requirements
? (page - 1) * pageSize + v22Requirements.length + (v22NextCursor ? 1 : 0)
: filtered.length;

View File

@@ -45,6 +45,7 @@ test('V2.2 version detail API maps relation rows to existing frontend scope type
sourceTarget: 'ACME',
platform: 'web, ios',
creatorId: 'member-1',
creator: { id: 'member-1', name: 'Product manager' },
createdAt: '2026-01-01T00:00:00.000Z',
}],
versionPlans: [{
@@ -129,7 +130,7 @@ test('V2.2 version detail API maps relation rows to existing frontend scope type
assert.equal(result.scope.requirements[0].typeId, 'feature');
assert.deepEqual(result.scope.requirements[0].platforms, ['web', 'ios']);
assert.equal(result.scope.requirements[0].priority, 'P1');
assert.equal(result.scope.requirements[0].creator, 'member-1');
assert.equal(result.scope.requirements[0].creator, 'Product manager');
assert.equal(result.scope.devTasks[0].taskNo, 'DEV-001');
assert.equal(result.scope.devTasks[0].actualStartAt, '2026-01-02T09:00:00.000Z');
assert.equal(result.scope.devTasks[0].actualEndAt, undefined);

View File

@@ -39,6 +39,8 @@ interface V22RequirementRow {
sourceTarget?: string | null;
platform?: string | null;
creatorId?: string | null;
creatorName?: string | null;
creator?: { id?: string | null; name?: string | null } | null;
createdAt?: V22DateValue;
updatedAt?: V22DateValue;
}
@@ -284,7 +286,7 @@ function mapRequirement(row: V22RequirementRow): Requirement {
status: toRequirementStatus(row.status),
priority: toPriority(row.priority),
effort: 'M',
creator: row.creatorId ?? '',
creator: row.creator?.name ?? row.creatorName ?? row.creatorId ?? '',
createdAt: requiredIso(row.createdAt),
};
}