修正企微主办边界与工作台摘要(portal-task-first-redesign)
这个提交包含在:
@@ -28,6 +28,7 @@ type WorkItem = {
|
||||
severity: "normal" | "warning" | "high";
|
||||
icon: string;
|
||||
priority: number;
|
||||
count: number;
|
||||
};
|
||||
|
||||
type EmptyAction = {
|
||||
@@ -107,6 +108,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: "warning",
|
||||
icon: "fact_check",
|
||||
priority: 100,
|
||||
count: payload.pendingTasks.count,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -125,6 +127,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: highPriorityCount > 0 ? "high" : "normal",
|
||||
icon: "check_circle",
|
||||
priority: 90,
|
||||
count: openTodoCount,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -139,6 +142,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: payload.weeklyReport.needsHelp ? "high" : "warning",
|
||||
icon: "article",
|
||||
priority: 72,
|
||||
count: 1,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -154,6 +158,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: "high",
|
||||
icon: "priority_high",
|
||||
priority: 96,
|
||||
count: payload.financeSummary.failedItemCount,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -168,6 +173,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: "high",
|
||||
icon: "shield_person",
|
||||
priority: 94,
|
||||
count: payload.financeSummary.riskCount,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -182,6 +188,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: "warning",
|
||||
icon: "payments",
|
||||
priority: 86,
|
||||
count: payload.financeSummary.pendingBatchCount,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -197,6 +204,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: "warning",
|
||||
icon: "workspaces",
|
||||
priority: 64,
|
||||
count: payload.projectSummary.highPriorityTaskCount,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -211,6 +219,7 @@ function buildTodayActionItems(payload: PortalHomePayload, roleCapabilities: Rol
|
||||
severity: "warning",
|
||||
icon: "event_upcoming",
|
||||
priority: 62,
|
||||
count: payload.projectSummary.followUpDueTodayCount,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -231,6 +240,7 @@ function buildProgressItems(payload: PortalHomePayload) {
|
||||
severity: "normal",
|
||||
icon: "done_all",
|
||||
priority: 30,
|
||||
count: 1,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -255,6 +265,7 @@ function buildTeamBlockers(payload: PortalHomePayload, roleCapabilities: RoleCap
|
||||
severity: "warning",
|
||||
icon: "article",
|
||||
priority: 78,
|
||||
count: payload.weeklySummary?.missingCount ?? 0,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -269,6 +280,7 @@ function buildTeamBlockers(payload: PortalHomePayload, roleCapabilities: RoleCap
|
||||
severity: "high",
|
||||
icon: "support_agent",
|
||||
priority: 82,
|
||||
count: payload.weeklySummary?.needsHelpCount ?? 0,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -283,6 +295,7 @@ function buildTeamBlockers(payload: PortalHomePayload, roleCapabilities: RoleCap
|
||||
severity: "warning",
|
||||
icon: "groups",
|
||||
priority: 58,
|
||||
count: payload.teamPresence?.unspecified ?? 0,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -297,6 +310,7 @@ function buildTeamBlockers(payload: PortalHomePayload, roleCapabilities: RoleCap
|
||||
severity: "warning",
|
||||
icon: "flag",
|
||||
priority: 74,
|
||||
count: payload.projectSummary?.overdueMilestonesCount ?? 0,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -311,6 +325,7 @@ function buildTeamBlockers(payload: PortalHomePayload, roleCapabilities: RoleCap
|
||||
severity: "high",
|
||||
icon: "warning",
|
||||
priority: 76,
|
||||
count: payload.projectSummary?.openRiskCount ?? 0,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -325,6 +340,7 @@ function buildTeamBlockers(payload: PortalHomePayload, roleCapabilities: RoleCap
|
||||
severity: "warning",
|
||||
icon: "inventory_2",
|
||||
priority: 60,
|
||||
count: (payload.peopleLifecycle?.offboardingCount ?? 0) + (payload.peopleLifecycle?.assetReturnPendingCount ?? 0),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -353,6 +369,7 @@ function buildManagementReminders(
|
||||
severity: "warning",
|
||||
icon: "settings",
|
||||
priority: 88,
|
||||
count: 1,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -370,6 +387,7 @@ function buildManagementReminders(
|
||||
severity: "warning",
|
||||
icon: "manage_accounts",
|
||||
priority: 52,
|
||||
count: inactiveLoginCount,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -391,6 +409,10 @@ function buildEmptyActions(permissions: string[], roleCapabilities: RoleCapabili
|
||||
return actions.slice(0, roleCapabilities.canManageSystem && actions.length > 2 ? 3 : 2);
|
||||
}
|
||||
|
||||
function sumWorkItemCount(items: WorkItem[]) {
|
||||
return items.reduce((total, item) => total + Math.max(1, item.count), 0);
|
||||
}
|
||||
|
||||
function SummaryStrip({
|
||||
userName,
|
||||
actionCount,
|
||||
@@ -561,6 +583,10 @@ export function PortalHomePage() {
|
||||
const managementReminders = buildManagementReminders(payload, roleCapabilities, canSetupWorkspace);
|
||||
const emptyActions = buildEmptyActions(permissions, roleCapabilities);
|
||||
const primaryItem = todayActionItems[0] ?? null;
|
||||
const actionCount = sumWorkItemCount(todayActionItems);
|
||||
const progressCount = sumWorkItemCount(progressItems);
|
||||
const blockerCount = sumWorkItemCount(teamBlockers);
|
||||
const reminderCount = sumWorkItemCount(managementReminders);
|
||||
|
||||
function handleCloseWelcome() {
|
||||
clearWelcomeDialogFlag();
|
||||
@@ -575,10 +601,10 @@ export function PortalHomePage() {
|
||||
|
||||
<SummaryStrip
|
||||
userName={payload.greeting.name}
|
||||
actionCount={todayActionItems.length}
|
||||
progressCount={progressItems.length}
|
||||
blockerCount={teamBlockers.length}
|
||||
reminderCount={managementReminders.length}
|
||||
actionCount={actionCount}
|
||||
progressCount={progressCount}
|
||||
blockerCount={blockerCount}
|
||||
reminderCount={reminderCount}
|
||||
primaryItem={primaryItem}
|
||||
emptyActions={emptyActions}
|
||||
/>
|
||||
|
||||
在新工单中引用
屏蔽一个用户