116 lines
3.8 KiB
PHP
116 lines
3.8 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | Niucloud-admin 企业快速开发的saas管理平台
|
||
// +----------------------------------------------------------------------
|
||
// | 官方网址:https://www.niucloud-admin.com
|
||
// +----------------------------------------------------------------------
|
||
// | niucloud团队 版权所有 开源版本可自由商用
|
||
// +----------------------------------------------------------------------
|
||
// | Author: Niucloud Team
|
||
// +----------------------------------------------------------------------
|
||
|
||
namespace app\service\admin\install;
|
||
|
||
use app\dict\sys\AppTypeDict;
|
||
use app\dict\sys\MenuDict;
|
||
use app\model\sys\SysMenu;
|
||
use app\service\admin\sys\MenuService;
|
||
use app\service\core\menu\CoreMenuService;
|
||
use core\base\BaseAdminService;
|
||
use think\facade\Cache;
|
||
use think\facade\Db;
|
||
|
||
/**
|
||
* 系统安装
|
||
* Class InstallSystemService
|
||
* @package app\service\admin\init
|
||
*/
|
||
class InstallSystemService extends BaseAdminService
|
||
{
|
||
|
||
public $menu_list = [];//菜单列表
|
||
|
||
/**
|
||
* 安装
|
||
*/
|
||
public function install()
|
||
{
|
||
$this->installMenu();
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 菜单安装
|
||
*/
|
||
public function installMenu()
|
||
{
|
||
$sys_menu = new SysMenu();
|
||
|
||
//系统菜单
|
||
$admin_menus = $this->loadMenu(AppTypeDict::ADMIN);
|
||
$site_menus = $this->loadMenu(AppTypeDict::SITE);
|
||
$menus = array_merge($admin_menus, $site_menus);
|
||
Db::name("sys_menu")->where([ [ 'addon', '=', '' ], ['source', '=', MenuDict::SYSTEM] ])->delete();
|
||
$sys_menu->replace()->insertAll($menus);
|
||
//插件菜单
|
||
(new CoreMenuService())->refreshAllAddonMenu();
|
||
// 清除缓存
|
||
Cache::tag(MenuService::$cache_tag_name)->clear();
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 加载菜单
|
||
* @return array
|
||
*/
|
||
public function loadMenu($app_type)
|
||
{
|
||
//加载系统
|
||
$system_tree = include root_path() . str_replace('/', DIRECTORY_SEPARATOR, "app/dict/menu/" . $app_type . ".php");
|
||
$this->menuTreeToList($system_tree, '', $app_type);
|
||
$menu_list = $this->menu_list;
|
||
$this->menu_list = [];
|
||
return $menu_list;
|
||
}
|
||
|
||
/**
|
||
* 菜单数转为列表
|
||
* @param array $tree
|
||
* @param string $parent_key
|
||
* @param string $app_type
|
||
*/
|
||
private function menuTreeToList(array $tree, string $parent_key = '', string $app_type = AppTypeDict::ADMIN)
|
||
{
|
||
if (is_array($tree)) {
|
||
foreach ($tree as $key => $value) {
|
||
$item = [
|
||
'menu_name' => $value[ 'menu_name' ],
|
||
'menu_short_name' => $value[ 'menu_short_name' ] ?? '',
|
||
'menu_key' => $value[ 'menu_key' ],
|
||
'app_type' => $app_type,
|
||
'parent_key' => $value[ 'parent_key' ] ?? $parent_key,
|
||
'menu_type' => $value[ 'menu_type' ],
|
||
'icon' => $value[ 'icon' ] ?? '',
|
||
'api_url' => $value[ 'api_url' ] ?? '',
|
||
'router_path' => $value[ 'router_path' ] ?? '',
|
||
'view_path' => $value[ 'view_path' ] ?? '',
|
||
'methods' => $value[ 'methods' ] ?? '',
|
||
'sort' => $value[ 'sort' ] ?? '',
|
||
'status' => 1,
|
||
'is_show' => $value[ 'is_show' ] ?? 1
|
||
];
|
||
$refer = $value;
|
||
if (isset($refer[ 'children' ])) {
|
||
unset($refer[ 'children' ]);
|
||
$this->menu_list[] = $item;
|
||
$p_key = $refer[ 'menu_key' ];
|
||
$this->menuTreeToList($value[ 'children' ], $p_key, $app_type);
|
||
} else {
|
||
$this->menu_list[] = $item;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|