perf(web): 优化大数据量页面切换与聚合性能

This commit is contained in:
Script Generator
2026-07-03 09:43:36 +08:00
parent 554ab520d1
commit a509bb4922
32 changed files with 1087 additions and 360 deletions

View File

@@ -13,7 +13,7 @@ import { useAuthStore } from '@/stores/useAuthStore';
import { useTaskWorklogStore } from '@/stores/useTaskWorklogStore';
import { useWorkActivityStore } from '@/stores/useWorkActivityStore';
import { flattenVersions } from '@/lib/derive';
import { aggregateWorkItems, WORK_ITEM_TYPE_LABEL } from '@/lib/workspace-engine';
import { aggregateWorkItems, getWorkspacePendingCountByVersion, WORK_ITEM_TYPE_LABEL } from '@/lib/workspace-engine';
import type { WorkItem, WorkItemType } from '@/lib/workspace-engine';
import { DailyReportPanel } from '@/components/workspace/DailyReportPanel';
import { PlanDetailDrawer } from '@/components/version/PlanDetailDrawer';
@@ -96,6 +96,7 @@ export default function WorkspacePage() {
aggregateWorkItems(userName, plans, devTasks, testCases, bugs, versionMap, requirementVersionMap),
[userName, plans, devTasks, testCases, bugs, versionMap, requirementVersionMap]
);
const pendingCountByVersion = useMemo(() => getWorkspacePendingCountByVersion(workItems), [workItems]);
// 构建树:只显示跟自己有关的产品/项目/版本
const tree = useMemo(() => {
@@ -108,14 +109,14 @@ export default function WorkspacePage() {
const prod = productMap.get(v.productName)!;
if (!prod.projects.has(v.projectName)) prod.projects.set(v.projectName, { name: v.projectName, versions: [] });
const proj = prod.projects.get(v.projectName)!;
const pending = workItems.filter((i) => i.versionId === v.id && !i.completed).length;
const pending = pendingCountByVersion.get(v.id) ?? 0;
if (!proj.versions.find((ver) => ver.id === v.id)) {
proj.versions.push({ id: v.id, name: v.name, status: v.status, pendingCount: pending });
}
});
return productMap;
}, [allVersions, workItems]);
}, [allVersions, pendingCountByVersion, workItems]);
const filteredItems = useMemo(() => {
let items = workItems;