67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace app\traits\cms; | ||
|  | 
 | ||
|  | use app\model\Menu; | ||
|  | use think\Collection; | ||
|  | 
 | ||
|  | trait MenuTrait | ||
|  | { | ||
|  |     // 获取菜单列表
 | ||
|  |     public function getMenuList(string $type = 'all', string $show = 'all'): Collection | ||
|  |     { | ||
|  |         return Menu::field("id,pid,title,type,name,icon,href,target,sort") | ||
|  |             ->where('status', Menu::STATUS_NORMAL) | ||
|  |             ->when($type != 'all', function ($q) use ($show) { | ||
|  |                 $q->where('is_show', $show); | ||
|  |             }) | ||
|  |             ->when($type != 'all', function ($q) use ($type) { | ||
|  |                 $q->where('type', $type); | ||
|  |             }) | ||
|  |             ->order('sort', 'desc') | ||
|  |             ->order('id', 'asc') | ||
|  |             ->select(); | ||
|  |     } | ||
|  | 
 | ||
|  |     //递归获取子菜单
 | ||
|  |     public function buildMenuChild(int $pid, array $menus, string $childName = 'children'): array | ||
|  |     { | ||
|  |         $treeList = []; | ||
|  |         foreach ($menus as $v) { | ||
|  |             if ($pid == $v['pid']) { | ||
|  |                 $node                 = $v; | ||
|  |                 $node['has_children'] = false; | ||
|  |                 $child                = $this->buildMenuChild($v['id'], $menus, $childName); | ||
|  |                 if (!empty($child)) { | ||
|  |                     $node[$childName]     = $child; | ||
|  |                     $node['has_children'] = true; | ||
|  |                 } | ||
|  |                 // todo 后续此处加上用户的权限判断
 | ||
|  |                 $treeList[] = $node; | ||
|  |             } | ||
|  |         } | ||
|  |         return $treeList; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 检测批量数据下 是否有子栏目 | ||
|  |      * | ||
|  |      * @param  array  $ids | ||
|  |      * @return bool | ||
|  |      */ | ||
|  |     public function hasChildrenMenuByIds(array $ids): bool | ||
|  |     { | ||
|  |         return Menu::whereIn('pid', $ids)->count() > 0; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 批量删除 | ||
|  |      * | ||
|  |      * @param  array  $ids | ||
|  |      * @return bool | ||
|  |      */ | ||
|  |     public function delMenuByIds(array $ids): bool | ||
|  |     { | ||
|  |         return Menu::deleteByIds($ids); | ||
|  |     } | ||
|  | } |