# Menu List - React 기반 최종 메뉴 구조

> **생성일**: 2025-12-20
> **기준**: React 라우트 기반 (React-First)

---

## 1. 메뉴 계층 구조

### 1.1 대시보드

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 1 | 대시보드 | /dashboard | layout-dashboard | - | 1 | all |

### 1.2 결재관리 (신규)

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 100 | 결재관리 | /approval | file-check | - | 2 | approval.view |
| 101 | 기안함 | /approval/draft | file-edit | 100 | 1 | approval.draft |
| 102 | 결재함 | /approval/inbox | inbox | 100 | 2 | approval.approve |
| 103 | 참조함 | /approval/reference | eye | 100 | 3 | approval.view |

### 1.3 게시판 (신규)

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 200 | 게시판 | /board | layout-list | - | 3 | board.view |
| 201 | 게시판 관리 | /board/board-management | settings | 200 | 1 | board.manage |

### 1.4 품목관리

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 300 | 품목관리 | /items | package | - | 4 | items.view |
| 301 | 품목기준관리 | /master-data/item-master-data-management | database | 300 | 1 | items.master |

### 1.5 판매관리

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 400 | 판매관리 | /sales | briefcase | - | 5 | sales.view |
| 401 | 거래처관리 | /sales/client-management-sales-admin | building-2 | 400 | 1 | sales.clients |
| 402 | 견적관리 | /sales/quote-management | calculator | 400 | 2 | sales.quotes |
| 403 | 단가관리 | /sales/pricing-management | dollar-sign | 400 | 3 | sales.pricing |

### 1.6 생산관리

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 500 | 생산관리 | /production | factory | - | 6 | production.view |
| 501 | 스크린 생산 | /production/screen-production | package | 500 | 1 | production.screen |

### 1.7 회계관리

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 600 | 회계관리 | /accounting | calculator | - | 7 | accounting.view |
| 601 | 거래처관리 | /accounting/vendors | building-2 | 600 | 1 | accounting.vendors |
| 602 | 거래처원장 | /accounting/vendor-ledger | file-text | 600 | 2 | accounting.ledger |
| 603 | 매출관리 | /accounting/sales | trending-up | 600 | 3 | accounting.sales |
| 604 | 매입관리 | /accounting/purchase | trending-down | 600 | 4 | accounting.purchase |
| 605 | 세금계산서 | /accounting/bills | receipt | 600 | 5 | accounting.bills |
| 606 | 입금관리 | /accounting/deposits | arrow-down-circle | 600 | 6 | accounting.deposits |
| 607 | 출금관리 | /accounting/withdrawals | arrow-up-circle | 600 | 7 | accounting.withdrawals |
| 608 | 은행거래 | /accounting/bank-transactions | landmark | 600 | 8 | accounting.bank |
| 609 | 카드거래 | /accounting/card-transactions | credit-card | 600 | 9 | accounting.card |
| 610 | 미수금현황 | /accounting/receivables-status | alert-circle | 600 | 10 | accounting.receivables |
| 611 | 예상비용 | /accounting/expected-expenses | clock | 600 | 11 | accounting.expenses |
| 612 | 대손채권회수 | /accounting/bad-debt-collection | shield | 600 | 12 | accounting.baddebt |
| 613 | 일일리포트 | /accounting/daily-report | file-bar-chart | 600 | 13 | accounting.report |
| 614 | 결제내역 | /payment-history | history | 600 | 14 | accounting.payment |

### 1.8 인사관리 (신규)

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 700 | 인사관리 | /hr | users | - | 8 | hr.view |
| 701 | 직원관리 | /hr/employee-management | user | 700 | 1 | hr.employees |
| 702 | 부서관리 | /hr/department-management | building | 700 | 2 | hr.departments |
| 703 | 카드관리 | /hr/card-management | credit-card | 700 | 3 | hr.cards |
| 704 | 근태현황 | /hr/attendance | clock | 700 | 4 | hr.attendance.view |
| 705 | 근태관리 | /hr/attendance-management | calendar-check | 700 | 5 | hr.attendance.manage |
| 706 | 급여관리 | /hr/salary-management | dollar-sign | 700 | 6 | hr.salary |
| 707 | 휴가관리 | /hr/vacation-management | calendar | 700 | 7 | hr.vacation |

### 1.9 리포트 (신규)

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 800 | 리포트 | /reports | bar-chart-3 | - | 9 | reports.view |
| 801 | 종합분석 | /reports/comprehensive-analysis | pie-chart | 800 | 1 | reports.analysis |

### 1.10 고객센터 (신규)

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 900 | 고객센터 | /customer-center | headphones | - | 10 | customer.view |
| 901 | 공지사항 | /customer-center/notices | megaphone | 900 | 1 | customer.notices |
| 902 | FAQ | /customer-center/faq | help-circle | 900 | 2 | customer.faq |
| 903 | 문의하기 | /customer-center/inquiries | message-circle | 900 | 3 | customer.inquiries |
| 904 | 이벤트 | /customer-center/events | calendar-star | 900 | 4 | customer.events |

### 1.11 설정 (신규)

| ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 |
|----|--------|-----|--------|------|------|------|
| 1000 | 설정 | /settings | settings | - | 11 | settings.view |
| 1001 | 계정정보 | /settings/account-info | user | 1000 | 1 | settings.account |
| 1002 | 계정관리 | /settings/accounts | users | 1000 | 2 | settings.accounts |
| 1003 | 권한관리 | /settings/permissions | shield | 1000 | 3 | settings.permissions |
| 1004 | 직급관리 | /settings/ranks | award | 1000 | 4 | settings.ranks |
| 1005 | 직책관리 | /settings/titles | badge | 1000 | 5 | settings.titles |
| 1006 | 근태설정 | /settings/attendance-settings | clock | 1000 | 6 | settings.attendance |
| 1007 | 휴가정책 | /settings/leave-policy | calendar | 1000 | 7 | settings.leave |
| 1008 | 근무일정 | /settings/work-schedule | calendar-days | 1000 | 8 | settings.schedule |
| 1009 | 알림설정 | /settings/notification-settings | bell | 1000 | 9 | settings.notifications |
| 1010 | 팝업관리 | /settings/popup-management | layout | 1000 | 10 | settings.popups |
| 1011 | 회사정보 | /company-info | building | 1000 | 11 | settings.company |
| 1012 | 구독관리 | /subscription | credit-card | 1000 | 12 | settings.subscription |

---

## 2. 권한 매핑 정의

### 2.1 권한 그룹

| 권한 그룹 | 설명 | 기본 권한 |
|-----------|------|----------|
| all | 모든 사용자 | 로그인 사용자 |
| approval.* | 결재 관련 | 결재 담당자 |
| board.* | 게시판 관련 | 일반 사용자 |
| items.* | 품목 관련 | 생산/구매 담당 |
| sales.* | 판매 관련 | 영업 담당 |
| production.* | 생산 관련 | 생산 담당 |
| accounting.* | 회계 관련 | 경리 담당 |
| hr.* | 인사 관련 | 인사 담당 |
| reports.* | 리포트 관련 | 관리자 |
| customer.* | 고객센터 관련 | 일반 사용자 |
| settings.* | 설정 관련 | 관리자 |

### 2.2 세부 권한

```
approval.view      - 결재 조회
approval.draft     - 기안 작성
approval.approve   - 결재 승인

board.view         - 게시판 조회
board.write        - 게시글 작성
board.manage       - 게시판 관리

items.view         - 품목 조회
items.create       - 품목 등록
items.edit         - 품목 수정
items.delete       - 품목 삭제
items.master       - 품목기준 관리

sales.view         - 판매 조회
sales.clients      - 거래처 관리
sales.quotes       - 견적 관리
sales.pricing      - 단가 관리

production.view    - 생산 조회
production.screen  - 스크린 생산

accounting.view    - 회계 조회
accounting.vendors - 거래처 관리
accounting.ledger  - 거래처원장
accounting.sales   - 매출 관리
accounting.purchase - 매입 관리
accounting.bills   - 세금계산서
accounting.deposits - 입금 관리
accounting.withdrawals - 출금 관리
accounting.bank    - 은행거래
accounting.card    - 카드거래
accounting.receivables - 미수금
accounting.expenses - 예상비용
accounting.baddebt - 대손채권
accounting.report  - 일일리포트
accounting.payment - 결제내역

hr.view            - 인사 조회
hr.employees       - 직원 관리
hr.departments     - 부서 관리
hr.cards           - 카드 관리
hr.attendance.view - 근태 조회
hr.attendance.manage - 근태 관리
hr.salary          - 급여 관리
hr.vacation        - 휴가 관리

reports.view       - 리포트 조회
reports.analysis   - 종합분석

customer.view      - 고객센터 조회
customer.notices   - 공지사항
customer.faq       - FAQ
customer.inquiries - 문의
customer.events    - 이벤트

settings.view      - 설정 조회
settings.account   - 계정정보
settings.accounts  - 계정관리
settings.permissions - 권한관리
settings.ranks     - 직급관리
settings.titles    - 직책관리
settings.attendance - 근태설정
settings.leave     - 휴가정책
settings.schedule  - 근무일정
settings.notifications - 알림설정
settings.popups    - 팝업관리
settings.company   - 회사정보
settings.subscription - 구독관리
```

---

## 3. mng 등록용 JSON

```json
[
  {
    "name": "대시보드",
    "url": "/dashboard",
    "icon": "layout-dashboard",
    "sort_order": 1,
    "children": []
  },
  {
    "name": "결재관리",
    "url": "/approval",
    "icon": "file-check",
    "sort_order": 2,
    "children": [
      {"name": "기안함", "url": "/approval/draft", "icon": "file-edit", "sort_order": 1},
      {"name": "결재함", "url": "/approval/inbox", "icon": "inbox", "sort_order": 2},
      {"name": "참조함", "url": "/approval/reference", "icon": "eye", "sort_order": 3}
    ]
  },
  {
    "name": "게시판",
    "url": "/board",
    "icon": "layout-list",
    "sort_order": 3,
    "children": [
      {"name": "게시판 관리", "url": "/board/board-management", "icon": "settings", "sort_order": 1}
    ]
  },
  {
    "name": "품목관리",
    "url": "/items",
    "icon": "package",
    "sort_order": 4,
    "children": [
      {"name": "품목기준관리", "url": "/master-data/item-master-data-management", "icon": "database", "sort_order": 1}
    ]
  },
  {
    "name": "판매관리",
    "url": "/sales",
    "icon": "briefcase",
    "sort_order": 5,
    "children": [
      {"name": "거래처관리", "url": "/sales/client-management-sales-admin", "icon": "building-2", "sort_order": 1},
      {"name": "견적관리", "url": "/sales/quote-management", "icon": "calculator", "sort_order": 2},
      {"name": "단가관리", "url": "/sales/pricing-management", "icon": "dollar-sign", "sort_order": 3}
    ]
  },
  {
    "name": "생산관리",
    "url": "/production",
    "icon": "factory",
    "sort_order": 6,
    "children": [
      {"name": "스크린 생산", "url": "/production/screen-production", "icon": "package", "sort_order": 1}
    ]
  },
  {
    "name": "회계관리",
    "url": "/accounting",
    "icon": "calculator",
    "sort_order": 7,
    "children": [
      {"name": "거래처관리", "url": "/accounting/vendors", "icon": "building-2", "sort_order": 1},
      {"name": "거래처원장", "url": "/accounting/vendor-ledger", "icon": "file-text", "sort_order": 2},
      {"name": "매출관리", "url": "/accounting/sales", "icon": "trending-up", "sort_order": 3},
      {"name": "매입관리", "url": "/accounting/purchase", "icon": "trending-down", "sort_order": 4},
      {"name": "세금계산서", "url": "/accounting/bills", "icon": "receipt", "sort_order": 5},
      {"name": "입금관리", "url": "/accounting/deposits", "icon": "arrow-down-circle", "sort_order": 6},
      {"name": "출금관리", "url": "/accounting/withdrawals", "icon": "arrow-up-circle", "sort_order": 7},
      {"name": "은행거래", "url": "/accounting/bank-transactions", "icon": "landmark", "sort_order": 8},
      {"name": "카드거래", "url": "/accounting/card-transactions", "icon": "credit-card", "sort_order": 9},
      {"name": "미수금현황", "url": "/accounting/receivables-status", "icon": "alert-circle", "sort_order": 10},
      {"name": "예상비용", "url": "/accounting/expected-expenses", "icon": "clock", "sort_order": 11},
      {"name": "대손채권회수", "url": "/accounting/bad-debt-collection", "icon": "shield", "sort_order": 12},
      {"name": "일일리포트", "url": "/accounting/daily-report", "icon": "file-bar-chart", "sort_order": 13},
      {"name": "결제내역", "url": "/payment-history", "icon": "history", "sort_order": 14}
    ]
  },
  {
    "name": "인사관리",
    "url": "/hr",
    "icon": "users",
    "sort_order": 8,
    "children": [
      {"name": "직원관리", "url": "/hr/employee-management", "icon": "user", "sort_order": 1},
      {"name": "부서관리", "url": "/hr/department-management", "icon": "building", "sort_order": 2},
      {"name": "카드관리", "url": "/hr/card-management", "icon": "credit-card", "sort_order": 3},
      {"name": "근태현황", "url": "/hr/attendance", "icon": "clock", "sort_order": 4},
      {"name": "근태관리", "url": "/hr/attendance-management", "icon": "calendar-check", "sort_order": 5},
      {"name": "급여관리", "url": "/hr/salary-management", "icon": "dollar-sign", "sort_order": 6},
      {"name": "휴가관리", "url": "/hr/vacation-management", "icon": "calendar", "sort_order": 7}
    ]
  },
  {
    "name": "리포트",
    "url": "/reports",
    "icon": "bar-chart-3",
    "sort_order": 9,
    "children": [
      {"name": "종합분석", "url": "/reports/comprehensive-analysis", "icon": "pie-chart", "sort_order": 1}
    ]
  },
  {
    "name": "고객센터",
    "url": "/customer-center",
    "icon": "headphones",
    "sort_order": 10,
    "children": [
      {"name": "공지사항", "url": "/customer-center/notices", "icon": "megaphone", "sort_order": 1},
      {"name": "FAQ", "url": "/customer-center/faq", "icon": "help-circle", "sort_order": 2},
      {"name": "문의하기", "url": "/customer-center/inquiries", "icon": "message-circle", "sort_order": 3},
      {"name": "이벤트", "url": "/customer-center/events", "icon": "calendar", "sort_order": 4}
    ]
  },
  {
    "name": "설정",
    "url": "/settings",
    "icon": "settings",
    "sort_order": 11,
    "children": [
      {"name": "계정정보", "url": "/settings/account-info", "icon": "user", "sort_order": 1},
      {"name": "계정관리", "url": "/settings/accounts", "icon": "users", "sort_order": 2},
      {"name": "권한관리", "url": "/settings/permissions", "icon": "shield", "sort_order": 3},
      {"name": "직급관리", "url": "/settings/ranks", "icon": "award", "sort_order": 4},
      {"name": "직책관리", "url": "/settings/titles", "icon": "badge", "sort_order": 5},
      {"name": "근태설정", "url": "/settings/attendance-settings", "icon": "clock", "sort_order": 6},
      {"name": "휴가정책", "url": "/settings/leave-policy", "icon": "calendar", "sort_order": 7},
      {"name": "근무일정", "url": "/settings/work-schedule", "icon": "calendar-days", "sort_order": 8},
      {"name": "알림설정", "url": "/settings/notification-settings", "icon": "bell", "sort_order": 9},
      {"name": "팝업관리", "url": "/settings/popup-management", "icon": "layout", "sort_order": 10},
      {"name": "회사정보", "url": "/company-info", "icon": "building", "sort_order": 11},
      {"name": "구독관리", "url": "/subscription", "icon": "credit-card", "sort_order": 12}
    ]
  }
]
```

---

## 4. 통계 요약

| 항목 | 값 |
|------|-----|
| 대메뉴 | 11개 |
| 중메뉴 | 54개 |
| 총 메뉴 | 65개 |
| 권한 그룹 | 11개 |
| 세부 권한 | 52개 |

---

## 5. 다음 단계

1. **GlobalMenuTemplateSeeder 업데이트**: JSON 데이터로 seeder 작성
2. **권한 테이블 업데이트**: permissions 테이블에 새 권한 추가
3. **React menuTransform.ts 업데이트**: 새 아이콘 매핑 추가
4. **테스트**: 메뉴 렌더링 및 권한 검증

---

*이 문서는 Phase 2 최종 산출물입니다.*