InsertOpenAPIAdminMenu.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Module\System\Models\AdminMenu;
  4. use Illuminate\Console\Command;
  5. class InsertOpenAPIAdminMenu extends Command
  6. {
  7. /**
  8. * The name and signature of the console command.
  9. *
  10. * @var string
  11. */
  12. protected $signature = 'admin:insert-openapi-menu';
  13. /**
  14. * The console command description.
  15. *
  16. * @var string
  17. */
  18. protected $description = '添加OpenAPI模块的后台管理菜单';
  19. /**
  20. * Execute the console command.
  21. *
  22. * @return int
  23. */
  24. public function handle()
  25. {
  26. $this->info('开始添加OpenAPI模块后台菜单...');
  27. // 1. 创建顶级菜单'外接管理'
  28. $externalManageMenu = $this->createExternalManageMenu();
  29. // 2. 创建OpenAPI应用管理子菜单
  30. $this->createOpenAPIAppMenu($externalManageMenu->id);
  31. $this->info('OpenAPI模块后台菜单添加完成!');
  32. return 0;
  33. }
  34. /**
  35. * 创建顶级菜单'外接管理'
  36. *
  37. * @return AdminMenu
  38. */
  39. protected function createExternalManageMenu(): AdminMenu
  40. {
  41. // 检查是否已存在
  42. $existingMenu = AdminMenu::where('title', '外接管理')
  43. ->where('parent_id', 0)
  44. ->first();
  45. if ($existingMenu) {
  46. $this->info("顶级菜单'外接管理'已存在: ID = {$existingMenu->id}");
  47. return $existingMenu;
  48. }
  49. // 获取最大的order值
  50. $maxOrder = AdminMenu::max('order');
  51. $nextOrder = $maxOrder + 1;
  52. // 创建顶级菜单
  53. $menu = AdminMenu::create([
  54. 'parent_id' => 0,
  55. 'order' => $nextOrder,
  56. 'title' => '外接管理',
  57. 'icon' => 'fa-plug',
  58. 'uri' => '',
  59. 'show' => 1
  60. ]);
  61. $this->info("创建顶级菜单'外接管理': ID = {$menu->id}, Order = {$nextOrder}");
  62. return $menu;
  63. }
  64. /**
  65. * 创建OpenAPI应用管理子菜单
  66. *
  67. * @param int $parentId
  68. * @return AdminMenu
  69. */
  70. protected function createOpenAPIAppMenu(int $parentId): AdminMenu
  71. {
  72. // 检查是否已存在
  73. $existingMenu = AdminMenu::where('title', 'OpenAPI应用管理')
  74. ->where('parent_id', $parentId)
  75. ->first();
  76. if ($existingMenu) {
  77. $this->info("子菜单'OpenAPI应用管理'已存在: ID = {$existingMenu->id}");
  78. return $existingMenu;
  79. }
  80. // 获取父菜单下的最大order值
  81. $maxOrder = AdminMenu::where('parent_id', $parentId)->max('order');
  82. $nextOrder = $maxOrder ? $maxOrder + 1 : 1;
  83. // 创建子菜单
  84. $menu = AdminMenu::create([
  85. 'parent_id' => $parentId,
  86. 'order' => $nextOrder,
  87. 'title' => 'OpenAPI应用管理',
  88. 'icon' => 'fa-key',
  89. 'uri' => 'openapi-apps',
  90. 'show' => 1
  91. ]);
  92. $this->info("创建子菜单'OpenAPI应用管理': ID = {$menu->id}, URI = openapi-apps");
  93. return $menu;
  94. }
  95. /**
  96. * 显示菜单结构
  97. */
  98. protected function showMenuStructure()
  99. {
  100. $this->info("\n当前菜单结构:");
  101. $this->info("外接管理 (fa-plug)");
  102. $this->info(" └── OpenAPI应用管理 (fa-key) -> openapi-apps");
  103. }
  104. }