command->info('MNG 메뉴 시딩 시작...'); DB::transaction(function () { // 기존 메뉴 삭제 (tenant_id=1) Menu::withoutGlobalScopes() ->where('tenant_id', $this->tenantId) ->forceDelete(); $this->seedMainMenus(); $this->seedLabsMenus(); $this->seedDevToolsMenus(); }); $count = Menu::withoutGlobalScopes()->where('tenant_id', $this->tenantId)->count(); $this->command->info("MNG 메뉴 시딩 완료! (총 {$count}개)"); } protected function seedMainMenus(): void { $sortOrder = 0; // ======================================== // 대시보드 // ======================================== $this->createMenu([ 'name' => '대시보드', 'url' => '/dashboard', 'icon' => 'home', 'sort_order' => $sortOrder++, 'options' => [ 'route_name' => 'dashboard', 'section' => 'main', ], ]); // ======================================== // 프로젝트 관리 그룹 // ======================================== $pmGroup = $this->createMenu([ 'name' => '프로젝트 관리', 'url' => '#', 'icon' => 'folder', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'pm-group'], ], ]); $pmSubOrder = 0; $this->createMenu([ 'parent_id' => $pmGroup->id, 'name' => '프로젝트 대시보드', 'url' => '/pm', 'icon' => 'chart-bar', 'sort_order' => $pmSubOrder++, 'options' => ['route_name' => 'pm.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $pmGroup->id, 'name' => '프로젝트', 'url' => '/pm/projects', 'icon' => 'folder', 'sort_order' => $pmSubOrder++, 'options' => ['route_name' => 'pm.projects.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $pmGroup->id, 'name' => '일일 스크럼', 'url' => '/daily-logs', 'icon' => 'calendar', 'sort_order' => $pmSubOrder++, 'options' => ['route_name' => 'daily-logs.index', 'section' => 'main'], ]); // ======================================== // 시스템 관리 그룹 // ======================================== $systemGroup = $this->createMenu([ 'name' => '시스템 관리', 'url' => '#', 'icon' => 'cog', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'system-group'], ], ]); $systemSubOrder = 0; $this->createMenu([ 'parent_id' => $systemGroup->id, 'name' => '테넌트 관리', 'url' => '/tenants', 'icon' => 'building', 'sort_order' => $systemSubOrder++, 'options' => ['route_name' => 'tenants.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $systemGroup->id, 'name' => '사용자 관리', 'url' => '/users', 'icon' => 'users', 'sort_order' => $systemSubOrder++, 'options' => ['route_name' => 'users.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $systemGroup->id, 'name' => '부서 관리', 'url' => '/departments', 'icon' => 'building', 'sort_order' => $systemSubOrder++, 'options' => ['route_name' => 'departments.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $systemGroup->id, 'name' => '메뉴 관리', 'url' => '/menus', 'icon' => 'menu', 'sort_order' => $systemSubOrder++, 'options' => ['route_name' => 'menus.index', 'section' => 'main'], ]); // ======================================== // 권한 관리 그룹 // ======================================== $permGroup = $this->createMenu([ 'name' => '권한 관리', 'url' => '#', 'icon' => 'shield', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'permission-group'], ], ]); $permSubOrder = 0; $this->createMenu([ 'parent_id' => $permGroup->id, 'name' => '역할 관리', 'url' => '/roles', 'icon' => 'shield-check', 'sort_order' => $permSubOrder++, 'options' => ['route_name' => 'roles.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $permGroup->id, 'name' => '권한 관리', 'url' => '/permissions', 'icon' => 'lock', 'sort_order' => $permSubOrder++, 'options' => ['route_name' => 'permissions.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $permGroup->id, 'name' => '역할 권한 관리', 'url' => '/role-permissions', 'icon' => 'shield-check', 'sort_order' => $permSubOrder++, 'options' => ['route_name' => 'role-permissions.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $permGroup->id, 'name' => '부서 권한 관리', 'url' => '/department-permissions', 'icon' => 'building', 'sort_order' => $permSubOrder++, 'options' => ['route_name' => 'department-permissions.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $permGroup->id, 'name' => '개인 권한 관리', 'url' => '/user-permissions', 'icon' => 'user', 'sort_order' => $permSubOrder++, 'options' => ['route_name' => 'user-permissions.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $permGroup->id, 'name' => '권한 분석', 'url' => '/permission-analyze', 'icon' => 'chart-bar', 'sort_order' => $permSubOrder++, 'options' => ['route_name' => 'permission-analyze.index', 'section' => 'main'], ]); // ======================================== // 생산 관리 그룹 // ======================================== $productionGroup = $this->createMenu([ 'name' => '생산 관리', 'url' => '#', 'icon' => 'cube', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'production-group'], ], ]); $prodSubOrder = 0; $this->createMenu([ 'parent_id' => $productionGroup->id, 'name' => '품목기준 필드 관리', 'url' => '/item-fields', 'icon' => 'list', 'sort_order' => $prodSubOrder++, 'options' => ['route_name' => 'item-fields.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $productionGroup->id, 'name' => '견적수식 관리', 'url' => '/quote-formulas', 'icon' => 'calculator', 'sort_order' => $prodSubOrder++, 'options' => ['route_name' => 'quote-formulas.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $productionGroup->id, 'name' => '제품 관리', 'url' => '/products', 'icon' => 'cube', 'sort_order' => $prodSubOrder++, 'hidden' => true, 'options' => ['route_name' => 'products.index', 'section' => 'main', 'meta' => ['status' => 'preparing']], ]); $this->createMenu([ 'parent_id' => $productionGroup->id, 'name' => '자재 관리', 'url' => '/materials', 'icon' => 'archive', 'sort_order' => $prodSubOrder++, 'hidden' => true, 'options' => ['route_name' => 'materials.index', 'section' => 'main', 'meta' => ['status' => 'preparing']], ]); $this->createMenu([ 'parent_id' => $productionGroup->id, 'name' => 'BOM 관리', 'url' => '/bom', 'icon' => 'clipboard-list', 'sort_order' => $prodSubOrder++, 'hidden' => true, 'options' => ['route_name' => 'bom.index', 'section' => 'main', 'meta' => ['status' => 'preparing']], ]); $this->createMenu([ 'parent_id' => $productionGroup->id, 'name' => '카테고리 관리', 'url' => '/categories', 'icon' => 'tag', 'sort_order' => $prodSubOrder++, 'hidden' => true, 'options' => ['route_name' => 'categories.index', 'section' => 'main', 'meta' => ['status' => 'preparing']], ]); // ======================================== // 콘텐츠 관리 그룹 // ======================================== $contentGroup = $this->createMenu([ 'name' => '콘텐츠 관리', 'url' => '#', 'icon' => 'document-text', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'content-group'], ], ]); $this->createMenu([ 'parent_id' => $contentGroup->id, 'name' => '게시판 관리', 'url' => '/boards', 'icon' => 'clipboard', 'sort_order' => 0, 'options' => ['route_name' => 'boards.index', 'section' => 'main'], ]); // ======================================== // 재무관리 그룹 // ======================================== $financeGroup = $this->createMenu([ 'name' => '재무관리', 'url' => '#', 'icon' => 'currency-dollar', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'finance-group'], ], ]); $financeSubOrder = 0; // 대시보드/일보 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '재무 대시보드', 'url' => '/finance/dashboard', 'icon' => 'chart-bar', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.dashboard', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '일일자금일보', 'url' => '/finance/daily-fund', 'icon' => 'newspaper', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.daily-fund', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '자금계획일정', 'url' => '/finance/fund-schedules', 'icon' => 'calendar', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.fund-schedules.index', 'section' => 'main'], ]); // 계좌관리 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '계좌관리', 'url' => '/finance/accounts', 'icon' => 'credit-card', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.accounts.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '계좌거래내역', 'url' => '/finance/account-transactions', 'icon' => 'document-text', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.account-transactions', 'section' => 'main'], ]); // 카드관리 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '법인카드관리', 'url' => '/finance/corporate-cards', 'icon' => 'credit-card', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.corporate-cards', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '카드사용내역', 'url' => '/finance/card-transactions', 'icon' => 'document-text', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.card-transactions', 'section' => 'main'], ]); // 수입/지출 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '수입관리', 'url' => '/finance/income', 'icon' => 'arrow-down', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.income', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '지출관리', 'url' => '/finance/expense', 'icon' => 'arrow-up', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.expense', 'section' => 'main'], ]); // 매출/매입 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '매출관리', 'url' => '/finance/sales', 'icon' => 'trending-up', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.sales', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '매입관리', 'url' => '/finance/purchase', 'icon' => 'shopping-cart', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.purchase', 'section' => 'main'], ]); // 정산관리 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '영업수수료 정산', 'url' => '/finance/sales-commission', 'icon' => 'cash', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.sales-commission', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '컨설팅비용 정산', 'url' => '/finance/consulting-fee', 'icon' => 'briefcase', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.consulting-fee', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '고객사 정산', 'url' => '/finance/customer-settlement', 'icon' => 'users', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.customer-settlement', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '구독료 정산', 'url' => '/finance/subscription', 'icon' => 'refresh', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.subscription', 'section' => 'main'], ]); // 차량관리 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '법인차량관리', 'url' => '/finance/corporate-vehicles', 'icon' => 'truck', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.corporate-vehicles', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '차량정비이력', 'url' => '/finance/vehicle-maintenance', 'icon' => 'wrench', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.vehicle-maintenance', 'section' => 'main'], ]); // 거래처관리 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '고객사관리', 'url' => '/finance/customers', 'icon' => 'user-group', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.customers', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '협력사관리', 'url' => '/finance/partners', 'icon' => 'office-building', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.partners', 'section' => 'main'], ]); // 채권/채무 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '채권관리', 'url' => '/finance/receivables', 'icon' => 'document-add', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.receivables', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '채무관리', 'url' => '/finance/payables', 'icon' => 'document-remove', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.payables', 'section' => 'main'], ]); // 기타 $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '환불관리', 'url' => '/finance/refunds', 'icon' => 'receipt-refund', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.refunds', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $financeGroup->id, 'name' => '부가세관리', 'url' => '/finance/vat', 'icon' => 'calculator', 'sort_order' => $financeSubOrder++, 'options' => ['route_name' => 'finance.vat', 'section' => 'main'], ]); // ======================================== // 바로빌본사 그룹 (본사 관리용) // ======================================== $barobillHqGroup = $this->createMenu([ 'name' => '바로빌본사', 'url' => '#', 'icon' => 'office-building', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'barobill-hq-group'], ], ]); $barobillHqSubOrder = 0; $this->createMenu([ 'parent_id' => $barobillHqGroup->id, 'name' => '바로빌설정', 'url' => '/barobill/config', 'icon' => 'cog', 'sort_order' => $barobillHqSubOrder++, 'options' => ['route_name' => 'barobill.config.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $barobillHqGroup->id, 'name' => '회원사관리', 'url' => '/barobill/members', 'icon' => 'building', 'sort_order' => $barobillHqSubOrder++, 'options' => ['route_name' => 'barobill.members.index', 'section' => 'main'], ]); // ======================================== // 바로빌 그룹 (회원사용) // ======================================== $barobillGroup = $this->createMenu([ 'name' => '바로빌', 'url' => '#', 'icon' => 'receipt', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'barobill-group'], ], ]); $barobillSubOrder = 0; $this->createMenu([ 'parent_id' => $barobillGroup->id, 'name' => '설정', 'url' => '/barobill/settings', 'icon' => 'cog', 'sort_order' => $barobillSubOrder++, 'options' => ['route_name' => 'barobill.settings.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $barobillGroup->id, 'name' => '전자세금계산서', 'url' => '/barobill/etax', 'icon' => 'document-text', 'sort_order' => $barobillSubOrder++, 'options' => ['route_name' => 'barobill.etax.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $barobillGroup->id, 'name' => '계좌조회', 'url' => '/barobill/bank-account', 'icon' => 'credit-card', 'sort_order' => $barobillSubOrder++, 'options' => ['route_name' => 'barobill.bank-account.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $barobillGroup->id, 'name' => '카드사용내역', 'url' => '/barobill/card-usage', 'icon' => 'credit-card', 'sort_order' => $barobillSubOrder++, 'options' => ['route_name' => 'barobill.card-usage.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $barobillGroup->id, 'name' => '홈텍스매입/매출', 'url' => '/barobill/hometax', 'icon' => 'document-report', 'sort_order' => $barobillSubOrder++, 'options' => ['route_name' => 'barobill.hometax.index', 'section' => 'main'], ]); $this->createMenu([ 'parent_id' => $barobillGroup->id, 'name' => '사용량조회', 'url' => '/barobill/usage', 'icon' => 'chart-bar', 'sort_order' => $barobillSubOrder++, 'options' => ['route_name' => 'barobill.usage.index', 'section' => 'main'], ]); // ======================================== // 신용평가 그룹 // ======================================== $creditGroup = $this->createMenu([ 'name' => '신용평가', 'url' => '#', 'icon' => 'shield-check', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'credit-group'], ], ]); $creditSubOrder = 0; $this->createMenu([ 'parent_id' => $creditGroup->id, 'name' => '신용평가 조회', 'url' => '/credit/inquiry', 'icon' => 'search', 'sort_order' => $creditSubOrder++, 'options' => ['route_name' => 'credit.inquiry.index', 'section' => 'main'], ]); // ======================================== // 시스템 그룹 // ======================================== $settingsGroup = $this->createMenu([ 'name' => '시스템', 'url' => '#', 'icon' => 'cog', 'sort_order' => $sortOrder++, 'options' => [ 'section' => 'main', 'meta' => ['group_id' => 'system-settings-group'], ], ]); $settingsSubOrder = 0; $this->createMenu([ 'parent_id' => $settingsGroup->id, 'name' => '시스템 설정', 'url' => '/settings', 'icon' => 'cog', 'sort_order' => $settingsSubOrder++, 'hidden' => true, 'options' => ['route_name' => 'settings.index', 'section' => 'main', 'meta' => ['status' => 'preparing']], ]); $this->createMenu([ 'parent_id' => $settingsGroup->id, 'name' => '감사 로그', 'url' => '/audit-logs', 'icon' => 'document-text', 'sort_order' => $settingsSubOrder++, 'hidden' => true, 'options' => ['route_name' => 'audit-logs.index', 'section' => 'main', 'meta' => ['status' => 'preparing']], ]); $this->createMenu([ 'parent_id' => $settingsGroup->id, 'name' => '삭제된 데이터 백업', 'url' => '/archived-records', 'icon' => 'database', 'sort_order' => $settingsSubOrder++, 'options' => ['route_name' => 'archived-records.index', 'section' => 'main'], ]); } protected function seedLabsMenus(): void { // ======================================== // R&D Labs 그룹 (S/A/M 탭 구조) // ======================================== $labsGroup = $this->createMenu([ 'name' => 'R&D Labs', 'url' => '#', 'icon' => 'beaker', 'sort_order' => 100, 'options' => [ 'section' => 'labs', 'menu_type' => 'lab', 'meta' => [ 'group_id' => 'lab-group', 'tabs' => ['S', 'A', 'M'], ], ], ]); // S 탭 메뉴들 (Strategy) $sMenus = [ ['name' => '세무 전략', 'url' => '/lab/strategy/tax', 'route' => 'lab.strategy.tax'], ['name' => '노무 전략', 'url' => '/lab/strategy/labor', 'route' => 'lab.strategy.labor'], ['name' => '채권추심 전략', 'url' => '/lab/strategy/debt', 'route' => 'lab.strategy.debt'], ['name' => '스테이블코인 보고서', 'url' => '/lab/strategy/stablecoin', 'route' => 'lab.strategy.stablecoin'], ['name' => 'MRP 해외사례', 'url' => '/lab/strategy/mrp-overseas', 'route' => 'lab.strategy.mrp-overseas'], ['name' => '상담용 챗봇 전략', 'url' => '/lab/strategy/chatbot', 'route' => 'lab.strategy.chatbot'], ['name' => 'KoDATA vs NICE API', 'url' => '/lab/strategy/kodata-vs-nice', 'route' => 'lab.strategy.kodata-vs-nice'], ['name' => '바로빌 vs 팝빌 API', 'url' => '/lab/strategy/barobill-vs-popbill', 'route' => 'lab.strategy.barobill-vs-popbill'], ['name' => '사내 지식 검색 시스템', 'url' => '/lab/strategy/knowledge-search', 'route' => 'lab.strategy.knowledge-search'], ['name' => '챗봇 솔루션 비교 분석', 'url' => '/lab/strategy/chatbot-compare', 'route' => 'lab.strategy.chatbot-compare'], ['name' => 'RAG 스타트업 현황', 'url' => '/lab/strategy/rag-startups', 'route' => 'lab.strategy.rag-startups'], ['name' => '더존비즈온 분석', 'url' => '/lab/strategy/douzone', 'route' => 'lab.strategy.douzone'], ['name' => 'Confluence vs Notion', 'url' => '/lab/strategy/confluence-vs-notion', 'route' => 'lab.strategy.confluence-vs-notion'], ['name' => '차세대 QA 솔루션', 'url' => '/lab/strategy/qa-solution', 'route' => 'lab.strategy.qa-solution'], ['name' => 'SAM 영업전략', 'url' => '/lab/strategy/sales-strategy', 'route' => 'lab.strategy.sales-strategy'], ]; foreach ($sMenus as $i => $menu) { $this->createMenu([ 'parent_id' => $labsGroup->id, 'name' => $menu['name'], 'url' => $menu['url'], 'icon' => 'document', 'sort_order' => $i, 'options' => [ 'route_name' => $menu['route'], 'section' => 'labs', 'menu_type' => 'lab', 'meta' => ['tab' => 'S'], ], ]); } // A 탭 메뉴들 (AI/Automation) $aMenus = [ ['name' => '사업자등록증 OCR', 'url' => '/lab/ai/business-ocr', 'route' => 'lab.ai.business-ocr'], ['name' => '웹 녹음 AI 요약', 'url' => '/lab/ai/web-recording', 'route' => 'lab.ai.web-recording'], ['name' => '회의록 AI 요약', 'url' => '/lab/ai/meeting-summary', 'route' => 'lab.ai.meeting-summary'], ['name' => '업무협의록 AI 요약', 'url' => '/lab/ai/work-memo-summary', 'route' => 'lab.ai.work-memo-summary'], ['name' => '운영자용 챗봇', 'url' => '/lab/ai/operator-chatbot', 'route' => 'lab.ai.operator-chatbot'], ['name' => 'Vertex RAG 챗봇', 'url' => '/lab/ai/vertex-rag', 'route' => 'lab.ai.vertex-rag'], ['name' => '테넌트 지식 업로드', 'url' => '/lab/ai/tenant-knowledge', 'route' => 'lab.ai.tenant-knowledge'], ['name' => '테넌트 챗봇', 'url' => '/lab/ai/tenant-chatbot', 'route' => 'lab.ai.tenant-chatbot'], ['name' => 'SAM AI 메뉴 이동', 'url' => '/lab/ai/sam-ai-menu', 'route' => 'lab.ai.sam-ai-menu'], ['name' => 'SAM AI 알람음 제작', 'url' => '/lab/ai/sam-ai-alarm', 'route' => 'lab.ai.sam-ai-alarm'], ['name' => 'GPS 출퇴근 관리', 'url' => '/lab/ai/gps-attendance', 'route' => 'lab.ai.gps-attendance'], ['name' => '기업개황 조회', 'url' => '/lab/ai/company-overview', 'route' => 'lab.ai.company-overview'], ]; foreach ($aMenus as $i => $menu) { $this->createMenu([ 'parent_id' => $labsGroup->id, 'name' => $menu['name'], 'url' => $menu['url'], 'icon' => 'chip', 'sort_order' => 100 + $i, 'options' => [ 'route_name' => $menu['route'], 'section' => 'labs', 'menu_type' => 'lab', 'meta' => ['tab' => 'A'], ], ]); } // M 탭 메뉴들 (Management) $mMenus = [ ['name' => '바로빌 테넌트 관리', 'url' => '/lab/management/barobill-tenant', 'route' => 'lab.management.barobill-tenant'], ['name' => '전자세금계산서 전략', 'url' => '/lab/management/tax-invoice-strategy', 'route' => 'lab.management.tax-invoice-strategy'], ['name' => '전자세금계산서', 'url' => '/lab/management/tax-invoice', 'route' => 'lab.management.tax-invoice'], ['name' => '사업자등록번호 진위 확인', 'url' => '/lab/management/business-verify', 'route' => 'lab.management.business-verify'], ['name' => '영업관리 & 매니저 미팅관리', 'url' => '/lab/management/sales-meeting', 'route' => 'lab.management.sales-meeting'], ['name' => '카드 세무항목 매칭 전략', 'url' => '/lab/management/card-tax-matching', 'route' => 'lab.management.card-tax-matching'], ['name' => '한국 카드사 API 보고서', 'url' => '/lab/management/card-api-report', 'route' => 'lab.management.card-api-report'], ['name' => '카드 사용내역 수집 후 매칭', 'url' => '/lab/management/card-usage-matching', 'route' => 'lab.management.card-usage-matching'], ['name' => '계좌입출금 내역 조회 API', 'url' => '/lab/management/account-api', 'route' => 'lab.management.account-api'], ['name' => '영업관리 시나리오', 'url' => '/lab/management/sales-scenario', 'route' => 'lab.management.sales-scenario'], ['name' => '매니저 시나리오', 'url' => '/lab/management/manager-scenario', 'route' => 'lab.management.manager-scenario'], ]; foreach ($mMenus as $i => $menu) { $this->createMenu([ 'parent_id' => $labsGroup->id, 'name' => $menu['name'], 'url' => $menu['url'], 'icon' => 'briefcase', 'sort_order' => 200 + $i, 'options' => [ 'route_name' => $menu['route'], 'section' => 'labs', 'menu_type' => 'lab', 'meta' => ['tab' => 'M'], ], ]); } } protected function seedDevToolsMenus(): void { // ======================================== // 개발 도구 그룹 (하단 고정) // ======================================== $devToolsGroup = $this->createMenu([ 'name' => '개발 도구', 'url' => '#', 'icon' => 'code', 'sort_order' => 900, 'options' => [ 'section' => 'tools', 'menu_type' => 'tool', 'meta' => ['group_id' => 'dev-tools-group', 'position' => 'bottom'], ], ]); $devSubOrder = 0; $this->createMenu([ 'parent_id' => $devToolsGroup->id, 'name' => 'API 플로우 테스터', 'url' => '/dev-tools/flow-tester', 'icon' => 'terminal', 'sort_order' => $devSubOrder++, 'options' => [ 'route_name' => 'dev-tools.flow-tester.index', 'section' => 'tools', 'menu_type' => 'tool', ], ]); $this->createMenu([ 'parent_id' => $devToolsGroup->id, 'name' => 'API 요청 로그', 'url' => '/dev-tools/api-logs', 'icon' => 'document-text', 'sort_order' => $devSubOrder++, 'options' => [ 'route_name' => 'dev-tools.api-logs.index', 'section' => 'tools', 'menu_type' => 'tool', ], ]); } protected function createMenu(array $data): Menu { $defaults = [ 'tenant_id' => $this->tenantId, 'is_active' => true, 'hidden' => false, 'is_external' => false, 'is_customized' => false, ]; return Menu::create(array_merge($defaults, $data)); } }