feat(org-chart): implement expandable layout and multi-company navigation
Integrate P5-1B through P5-4 shared Core layout, collapse, zoom/pan/fit, company roots and keyboard accessibility. Include React/HTML examples, virtual 20/100/300 employee fixtures, focused checks and the additive data contract.
This commit is contained in:
1 parent
a92913d6bc
commit
064517ec46
30 files changed
+7532
-183
No files matched your search
@@ -0,0 +1,375 @@
|
||||
{
|
||||
"schemaVersion": "0.1-draft",
|
||||
"organizations": [
|
||||
{
|
||||
"id": "hanmac-root",
|
||||
"companyId": "hanmac",
|
||||
"parentId": null,
|
||||
"name": "한맥기술 · 가상 조직",
|
||||
"type": "root",
|
||||
"leaderId": "virtual-001",
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "hanmac-division-0",
|
||||
"companyId": "hanmac",
|
||||
"parentId": "hanmac-root",
|
||||
"name": "가상 사업본부",
|
||||
"type": "division",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "hanmac-office-0",
|
||||
"companyId": "hanmac",
|
||||
"parentId": "hanmac-division-0",
|
||||
"name": "가상 1실",
|
||||
"type": "office",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "hanmac-division-1",
|
||||
"companyId": "hanmac",
|
||||
"parentId": "hanmac-root",
|
||||
"name": "가상 지원본부",
|
||||
"type": "division",
|
||||
"leaderId": null,
|
||||
"displayOrder": 1
|
||||
},
|
||||
{
|
||||
"id": "hanmac-office-1",
|
||||
"companyId": "hanmac",
|
||||
"parentId": "hanmac-division-1",
|
||||
"name": "가상 2실",
|
||||
"type": "office",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "saman-root",
|
||||
"companyId": "saman",
|
||||
"parentId": null,
|
||||
"name": "삼안 · 가상 조직",
|
||||
"type": "root",
|
||||
"leaderId": "virtual-002",
|
||||
"displayOrder": 1
|
||||
},
|
||||
{
|
||||
"id": "saman-division-0",
|
||||
"companyId": "saman",
|
||||
"parentId": "saman-root",
|
||||
"name": "가상 사업본부",
|
||||
"type": "division",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "saman-office-0",
|
||||
"companyId": "saman",
|
||||
"parentId": "saman-division-0",
|
||||
"name": "가상 1실",
|
||||
"type": "office",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "saman-division-1",
|
||||
"companyId": "saman",
|
||||
"parentId": "saman-root",
|
||||
"name": "가상 지원본부",
|
||||
"type": "division",
|
||||
"leaderId": null,
|
||||
"displayOrder": 1
|
||||
},
|
||||
{
|
||||
"id": "saman-office-1",
|
||||
"companyId": "saman",
|
||||
"parentId": "saman-division-1",
|
||||
"name": "가상 2실",
|
||||
"type": "office",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "jangheon-industry-root",
|
||||
"companyId": "jangheon-industry",
|
||||
"parentId": null,
|
||||
"name": "장헌산업 · 가상 조직",
|
||||
"type": "root",
|
||||
"leaderId": "virtual-003",
|
||||
"displayOrder": 2
|
||||
},
|
||||
{
|
||||
"id": "jangheon-industry-division-0",
|
||||
"companyId": "jangheon-industry",
|
||||
"parentId": "jangheon-industry-root",
|
||||
"name": "가상 사업본부",
|
||||
"type": "division",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "jangheon-industry-office-0",
|
||||
"companyId": "jangheon-industry",
|
||||
"parentId": "jangheon-industry-division-0",
|
||||
"name": "가상 1실",
|
||||
"type": "office",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
},
|
||||
{
|
||||
"id": "jangheon-industry-division-1",
|
||||
"companyId": "jangheon-industry",
|
||||
"parentId": "jangheon-industry-root",
|
||||
"name": "가상 지원본부",
|
||||
"type": "division",
|
||||
"leaderId": null,
|
||||
"displayOrder": 1
|
||||
},
|
||||
{
|
||||
"id": "jangheon-industry-office-1",
|
||||
"companyId": "jangheon-industry",
|
||||
"parentId": "jangheon-industry-division-1",
|
||||
"name": "가상 2실",
|
||||
"type": "office",
|
||||
"leaderId": null,
|
||||
"displayOrder": 0
|
||||
}
|
||||
],
|
||||
"employees": [
|
||||
{
|
||||
"id": "virtual-001",
|
||||
"organizationId": "hanmac-root",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상책임자 1",
|
||||
"position": "회장",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-002",
|
||||
"organizationId": "saman-root",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상책임자 2",
|
||||
"position": "사업총괄",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-003",
|
||||
"organizationId": "jangheon-industry-root",
|
||||
"affiliationId": "jangheon-industry",
|
||||
"name": "가상책임자 3",
|
||||
"position": "본부장",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-004",
|
||||
"organizationId": "hanmac-division-0",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 004",
|
||||
"position": "선임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-005",
|
||||
"organizationId": "hanmac-office-0",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 005",
|
||||
"position": "책임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-006",
|
||||
"organizationId": "hanmac-office-0",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "홍길동",
|
||||
"position": "수석",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-007",
|
||||
"organizationId": "hanmac-division-1",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 007",
|
||||
"position": "사원",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-008",
|
||||
"organizationId": "hanmac-division-1",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 008",
|
||||
"position": "선임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-009",
|
||||
"organizationId": "hanmac-division-1",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 009",
|
||||
"position": "책임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-010",
|
||||
"organizationId": "hanmac-office-1",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 010",
|
||||
"position": "수석",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-011",
|
||||
"organizationId": "hanmac-office-1",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 011",
|
||||
"position": "사원",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-012",
|
||||
"organizationId": "hanmac-office-1",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 012",
|
||||
"position": "선임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-013",
|
||||
"organizationId": "hanmac-office-1",
|
||||
"affiliationId": "hanmac",
|
||||
"name": "가상직원 013",
|
||||
"position": "책임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-014",
|
||||
"organizationId": "saman-division-0",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상직원 014",
|
||||
"position": "수석",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-015",
|
||||
"organizationId": "saman-office-0",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상직원 015",
|
||||
"position": "사원",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-016",
|
||||
"organizationId": "saman-office-0",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상직원 016",
|
||||
"position": "선임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-017",
|
||||
"organizationId": "saman-division-1",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상직원 017",
|
||||
"position": "책임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-018",
|
||||
"organizationId": "saman-division-1",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상직원 018",
|
||||
"position": "수석",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-019",
|
||||
"organizationId": "saman-division-1",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상직원 019",
|
||||
"position": "사원",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
},
|
||||
{
|
||||
"id": "virtual-020",
|
||||
"organizationId": "saman-office-1",
|
||||
"affiliationId": "saman",
|
||||
"name": "가상직원 020",
|
||||
"position": "선임",
|
||||
"jobTitle": null,
|
||||
"profileImage": null,
|
||||
"workStatus": "active"
|
||||
}
|
||||
],
|
||||
"affiliations": [
|
||||
{
|
||||
"id": "hanmac",
|
||||
"name": "한맥기술"
|
||||
},
|
||||
{
|
||||
"id": "saman",
|
||||
"name": "삼안"
|
||||
},
|
||||
{
|
||||
"id": "jangheon-industry",
|
||||
"name": "장헌산업"
|
||||
}
|
||||
],
|
||||
"relations": [],
|
||||
"presentation": {
|
||||
"title": "확장형 조직도 · 가상 데이터",
|
||||
"description": "실제 직원 정보가 아닌 고정된 테스트 데이터입니다.",
|
||||
"hubText": null,
|
||||
"groups": {
|
||||
"showEmployees": true,
|
||||
"showSummary": false,
|
||||
"showDispatched": false,
|
||||
"showOnLeave": false,
|
||||
"showAffiliations": false
|
||||
},
|
||||
"organizationOrder": []
|
||||
},
|
||||
"metadata": {
|
||||
"asOfDate": "2026-10-12",
|
||||
"dataVersion": "p5-23-small-20",
|
||||
"updateNote": "가상 데이터 · 운영 정보 아님"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user