123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- namespace app\admin\model;
- class AdminMenu extends Base
- {
- //设置字段信息
- protected $schema = [
- 'id' =>'bigint',//
- 'menu_name' =>'varchar',//菜单名称
- 'menu_code' =>'varchar',//菜单code
- 'menu_img' =>'varchar',//菜单图片
- 'menu_route' =>'varchar',//菜单路由
- 'menu_url' =>'varchar',//菜单地址
- 'menu_api' =>'varchar',//接口地址
- 'pid' =>'bigint',//父级id
- 'is_show' =>'int',//是否禁用
- 'is_private' =>'int',//是否私有
- 'level' =>'tinyint',//菜单等级,0公共,1超管,2业务公司,3供应商
- 'is_display' =>'int',//是否展示
- 'weight' =>'double',//权重
- 'status' =>'int',//状态
- 'is_del' =>'int',//是否删除
- 'addtime' =>'datetime',//
- 'updatetime' =>'datetime',//
- 'menu_type' =>'tinyint',//1菜单2 页面
- ];
- protected $createTime = 'addtime';
- protected $updateTime = 'updatetime';
- //获取菜单信息
- public static function GetMenu($menuid){
- $info=self::where(["id"=>$menuid,"is_del"=>0])->findOrEmpty();
- if($info->pid>0){
- $paren = self::where(['id'=>$info->pid,'is_del'=>0])->findOrEmpty();
- }
- return ["menu_name"=>$info->menu_name,"parent_name"=>$paren->menu_name??"","parent_id"=>$info->pid];
- }
- public function ActionInfo(){
- return $this->hasMany(Action::class,"action_id")->where(["is_del"=>0]);
- }
- //由二级菜单获取父级集合
- public static function GetMenuBySecod($menuid,$result=[]){
- $menuArr = self::where(['id'=>$menuid])->findOrEmpty();
- if(!$menuArr->isEmpty()){
- if($menuArr->pid>0) self::GetMenuBySecod($menuArr->pid,$result);
- $result[] = ['id' => $menuid, 'rename' => $menuArr->menu_name, 'pid' => $menuArr->pid];
- }
- return $result;
- }
- //通过功能集合返回菜单树状集
- public function GetMenuByActionArr($actionArr,$where=[]){
- $menuArr = Action::with(["ActionInfo"])->whereIn("id",$actionArr)->select();
- $tree=[];
- if(!$menuArr->isEmpty()){
- $menuid = [];
- foreach ($menuArr as $item){
- $menuid[$item->menuid][] =$item->action_code;
- }
- $menuArrId = array_unique(array_column($menuArr->toArray(),"menuid"));
- $menuAll=$this->where($where)->column("menu_name,menu_img,menu_route,is_display,status,pid,weight,level","id");
- foreach ($menuArrId as $item){
- $this->buildForwardTree($item,$menuid[$item]??[],$menuAll,$tree);
- }
- $weight= array_column($tree,'weight');
- array_multisort($weight, SORT_DESC, $tree);
- }
- return $tree;
- }
- //有子找父级
- public function buildForwardTree($itemId, $child = [],&$items, &$menuTree=[]) {
- if(!isset($items[$itemId]))return;
- $node=$items[$itemId];
- if($node['pid']==0){
- if(!isset($menuTree[$itemId])){
- $menuTree[$itemId]=$node;
- }
- $menuTree[$itemId]['child'][]=$child;
- $weight= array_column($menuTree[$itemId]['child'],"weight");
- array_multisort($weight, SORT_DESC, $menuTree[$itemId]['child']);
- }else{
- $node['action']=$child;
- $this->buildForwardTree($node['pid'],$node,$items,$menuTree);
- }
- }
- public function GetMenuActionTree($pid=0,$level=[]){
- $where=['pid'=>$pid,'is_del'=>0,'status'=>1];
- if($level!='' && $pid>0) $where['level']=$level;
- $result = $this->field('menu_name,menu_img,menu_route,is_display,status,pid,weight,id,level')
- ->where($where)
- ->order(['weight'=>'desc','id'=>'desc'])->select();
- $remp=[];
- if($result->isEmpty())return $remp;
- foreach ($result as $item){
- $item->child = $this->GetMenuActionTree($item->id,$level);
- if($item->pid>0){
- $item->action = Action::with(["ActionInfo"])->field("id,action_code")->where
- (['menuid'=>$item->id,'is_del'=>0])->select();
- }
- $remp[] = $item;
- }
- return $remp;
- }
- }
|