InstallSystemService.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Niucloud-admin 企业快速开发的saas管理平台
  4. // +----------------------------------------------------------------------
  5. // | 官方网址:https://www.niucloud.com
  6. // +----------------------------------------------------------------------
  7. // | niucloud团队 版权所有 开源版本可自由商用
  8. // +----------------------------------------------------------------------
  9. // | Author: Niucloud Team
  10. // +----------------------------------------------------------------------
  11. namespace app\service\admin\install;
  12. use app\dict\sys\AppTypeDict;
  13. use app\dict\sys\MenuDict;
  14. use app\model\sys\SysMenu;
  15. use app\service\admin\sys\MenuService;
  16. use app\service\core\menu\CoreMenuService;
  17. use core\base\BaseAdminService;
  18. use think\facade\Cache;
  19. use think\facade\Db;
  20. /**
  21. * 系统安装
  22. * Class InstallSystemService
  23. * @package app\service\admin\init
  24. */
  25. class InstallSystemService extends BaseAdminService
  26. {
  27. public $menu_list = [];//菜单列表
  28. /**
  29. * 安装
  30. */
  31. public function install()
  32. {
  33. $this->installMenu();
  34. return true;
  35. }
  36. /**
  37. * 菜单安装
  38. */
  39. public function installMenu()
  40. {
  41. $sys_menu = new SysMenu();
  42. //系统菜单
  43. $admin_menus = $this->loadMenu(AppTypeDict::ADMIN);
  44. $site_menus = $this->loadMenu(AppTypeDict::SITE);
  45. $menus = array_merge($admin_menus, $site_menus);
  46. Db::name("sys_menu")->where([ [ 'addon', '=', '' ], ['source', '=', MenuDict::SYSTEM] ])->delete();
  47. $sys_menu->replace()->insertAll($menus);
  48. //插件菜单
  49. (new CoreMenuService())->refreshAllAddonMenu();
  50. // 清除缓存
  51. Cache::tag(MenuService::$cache_tag_name)->clear();
  52. return true;
  53. }
  54. /**
  55. * 加载菜单
  56. * @return array
  57. */
  58. public function loadMenu($app_type)
  59. {
  60. //加载系统
  61. $system_tree = include root_path() . str_replace('/', DIRECTORY_SEPARATOR, "app/dict/menu/" . $app_type . ".php");
  62. $this->menuTreeToList($system_tree, '', $app_type);
  63. $menu_list = $this->menu_list;
  64. $this->menu_list = [];
  65. return $menu_list;
  66. }
  67. /**
  68. * 菜单数转为列表
  69. * @param array $tree
  70. * @param string $parent_key
  71. * @param string $app_type
  72. */
  73. private function menuTreeToList(array $tree, string $parent_key = '', string $app_type = AppTypeDict::ADMIN)
  74. {
  75. if (is_array($tree)) {
  76. foreach ($tree as $key => $value) {
  77. $item = [
  78. 'menu_name' => $value[ 'menu_name' ],
  79. 'menu_short_name' => $value[ 'menu_short_name' ] ?? '',
  80. 'menu_key' => $value[ 'menu_key' ],
  81. 'app_type' => $app_type,
  82. 'parent_key' => $value[ 'parent_key' ] ?? $parent_key,
  83. 'menu_type' => $value[ 'menu_type' ],
  84. 'icon' => $value[ 'icon' ] ?? '',
  85. 'api_url' => $value[ 'api_url' ] ?? '',
  86. 'router_path' => $value[ 'router_path' ] ?? '',
  87. 'view_path' => $value[ 'view_path' ] ?? '',
  88. 'methods' => $value[ 'methods' ] ?? '',
  89. 'sort' => $value[ 'sort' ] ?? '',
  90. 'status' => 1,
  91. 'is_show' => $value[ 'is_show' ] ?? 1,
  92. 'menu_attr' => $value['menu_attr'] ?? ''
  93. ];
  94. $refer = $value;
  95. if (isset($refer[ 'children' ])) {
  96. unset($refer[ 'children' ]);
  97. $this->menu_list[] = $item;
  98. $p_key = $refer[ 'menu_key' ];
  99. $this->menuTreeToList($value[ 'children' ], $p_key, $app_type);
  100. } else {
  101. $this->menu_list[] = $item;
  102. }
  103. }
  104. }
  105. }
  106. }