feat(org-chart): add core cards and fixed-layout integration
This commit is contained in:
1 parent
d18e3c3380
commit
61c6f8d1f1
161 files changed
+13044
-1
No files matched your search
@@ -0,0 +1,53 @@
|
||||
import businessLeader from '../assets/cards/경영기획팀.svg?inline';
|
||||
import businessEmployee from '../assets/cards/경영기획팀-sm.svg?inline';
|
||||
import managementLeader from '../assets/cards/사업관리팀.svg?inline';
|
||||
import managementEmployee from '../assets/cards/사업관리팀-sm.svg?inline';
|
||||
import designLeader from '../assets/cards/디자인기획팀.svg?inline';
|
||||
import designEmployee from '../assets/cards/디자인기획팀-sm.svg?inline';
|
||||
import solutionLeader from '../assets/cards/솔루션통합팀.svg?inline';
|
||||
import solutionEmployee from '../assets/cards/솔루션통합팀-sm.svg?inline';
|
||||
import talentLeader from '../assets/cards/인재성장팀.svg?inline';
|
||||
import talentEmployee from '../assets/cards/인재성장팀-sm.svg?inline';
|
||||
import systemLeader from '../assets/cards/통합시스템 디비전.svg?inline';
|
||||
import systemEmployee from '../assets/cards/통합시스템 디비전-sm.svg?inline';
|
||||
|
||||
export type DepartmentCardSize = 'leader' | 'employee';
|
||||
export interface DepartmentCardAsset {
|
||||
departmentId: string;
|
||||
label: string;
|
||||
size: DepartmentCardSize;
|
||||
url: string;
|
||||
width: number;
|
||||
height: number;
|
||||
}
|
||||
|
||||
// Presentation-only mapping. The ten supplied SVGs are copied byte-for-byte;
|
||||
// business-management uses vectors generated from the supplied PNG's colors.
|
||||
// Vite embeds both in ESM/IIFE bundles, including file:// consumers.
|
||||
// User-approved alias: 솔루션통합팀 assets -> existing solution-sales data.
|
||||
const departments = new Map([
|
||||
['business-management', { label: '사업관리팀', leader: managementLeader, employee: managementEmployee }],
|
||||
['business-planning', { label: '경영기획팀', leader: businessLeader, employee: businessEmployee }],
|
||||
['design-planning', { label: '디자인기획팀', leader: designLeader, employee: designEmployee }],
|
||||
['solution-sales', { label: '솔루션통합팀', leader: solutionLeader, employee: solutionEmployee }],
|
||||
['talent-growth', { label: '인재성장팀', leader: talentLeader, employee: talentEmployee }],
|
||||
['integrated-system', { label: '통합시스템 Div', leader: systemLeader, employee: systemEmployee }],
|
||||
]);
|
||||
|
||||
/** Resolve actual ancestry; do not infer a department from ID spelling/colors.
|
||||
* Unknown organizations and departments without supplied assets stay unchanged. */
|
||||
export function getDepartmentCardAsset(
|
||||
departmentId: string, size: DepartmentCardSize,
|
||||
organizations: readonly { id: string; parentId: string | null }[] = [],
|
||||
): DepartmentCardAsset | undefined {
|
||||
const visited = new Set<string>();
|
||||
let current: string | null = departmentId;
|
||||
while (current && !visited.has(current)) {
|
||||
visited.add(current);
|
||||
const entry = departments.get(current);
|
||||
if (entry) return { departmentId: current, label: entry.label, size, url: entry[size],
|
||||
width: size === 'leader' ? 146 : 108, height: size === 'leader' ? 68 : 52 };
|
||||
current = organizations.find(item => item.id === current)?.parentId ?? null;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
Reference in new issue
Block a user