fix(workspace): 兼容成员ID匹配与我相关任务

This commit is contained in:
2026-07-06 11:22:43 +08:00
parent 84344e81f6
commit b170ac9caf
4 changed files with 56 additions and 18 deletions

View File

@@ -28,7 +28,7 @@ interface VersionContext {
}
export function aggregateWorkItems(
userName: string,
userRef: string | string[],
plans: VersionPlan[],
devTasks: DevTask[],
testCases: TestCase[],
@@ -37,10 +37,12 @@ export function aggregateWorkItems(
requirementVersionMap: Map<string, string>,
): WorkItem[] {
const items: WorkItem[] = [];
if (!userName.trim()) return items;
const userRefs = normalizeUserRefs(userRef);
if (userRefs.size === 0) return items;
const isCurrentUser = (value?: string | null): boolean => Boolean(value && userRefs.has(value));
// Plans: owner === userName
plans.filter((p) => p.owner === userName).forEach((p) => {
// Plans: owner matches the current user's name or stable member id.
plans.filter((p) => isCurrentUser(p.owner)).forEach((p) => {
const ver = versionMap.get(p.versionId);
items.push({
id: p.id,
@@ -57,8 +59,8 @@ export function aggregateWorkItems(
});
});
// DevTasks: assigneeId === userName
devTasks.filter((t) => t.assigneeId === userName).forEach((t) => {
// DevTasks: assignee matches the current user's name or stable member id.
devTasks.filter((t) => isCurrentUser(t.assigneeId)).forEach((t) => {
const versionId = t.versionId || requirementVersionMap.get(t.requirementId) || '';
const ver = versionMap.get(versionId);
items.push({
@@ -83,8 +85,8 @@ export function aggregateWorkItems(
});
});
// TestCases: assigneeId === userName
testCases.filter((c) => c.assigneeId === userName).forEach((c) => {
// TestCases: assignee matches the current user's name or stable member id.
testCases.filter((c) => isCurrentUser(c.assigneeId)).forEach((c) => {
const ver = versionMap.get(c.versionId);
items.push({
id: c.id,
@@ -102,8 +104,8 @@ export function aggregateWorkItems(
});
});
// Bugs: assigneeId === userName
bugs.filter((b) => b.assigneeId === userName).forEach((b) => {
// Bugs: assignee matches the current user's name or stable member id.
bugs.filter((b) => isCurrentUser(b.assigneeId)).forEach((b) => {
const ver = versionMap.get(b.versionId);
items.push({
id: b.id,
@@ -124,6 +126,11 @@ export function aggregateWorkItems(
return items;
}
function normalizeUserRefs(userRef: string | string[]): Set<string> {
const refs = Array.isArray(userRef) ? userRef : [userRef];
return new Set(refs.map((ref) => ref.trim()).filter(Boolean));
}
export function getWorkspacePendingCount(items: ReadonlyArray<Pick<WorkItem, 'completed'>>): number {
return items.reduce((sum, item) => sum + (item.completed ? 0 : 1), 0);
}