MenuLogic.php 5.6 KB
<?php

namespace App\Http\Logic\Aside\Manage;


use App\Helper\Arr;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Manage\Group;
use App\Models\Manage\Menu;

/**
 * Class MenuLogic
 * @package App\Http\Logic\Aside
 * @author zbj
 * @date 2023/4/19
 */
class MenuLogic extends  BaseLogic
{
    public function __construct()
    {
        parent::__construct();
        $this->model = new Menu();
        $this->param = $this->requestAll;
    }

    public function getInfo($id)
    {
        $info = $this->model->read(['id'=>$id]);
        if($info === false){
            $this->fail('当前数据不存在或已被删除');
        }
        return $this->success($info);
    }

    public function save($param){
        if(!empty($param['pid'])){
            if(!empty($param['id']) && $param['pid'] == $param['id']){
                $this->fail('上级菜单不能是本菜单');
            }
            $p_menu = $this->getCacheInfo($param['pid']);
            if(!$p_menu){
                $this->fail('上级菜单不存在');
            }
        }
        return parent::save($param);
    }

    public function delete($ids, $map = []){
        $ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
        foreach ($ids as $id){
            $info = $this->getCacheInfo($id);
            if(!$info){
                continue;
            }
            //是否有子菜单
            if(Menu::where('pid', $id)->count()){
                $this->fail("菜单{$info['title']}存在子菜单,不能删除");
            }
        }
        return parent::delete($ids);
    }

    /**
     * @remark :超级管理员获取菜单列表
     * @name   :getAllMenu
     * @author :lyh
     * @method :post
     * @time   :2023/7/25 14:37
     */
    public function getAllMenu(){
        $map = [
            'type' => 0,
            'status' => Menu::STATUS_NORMAL,
        ];
        $lists = $this->model->list($map,'sort');
        $menu = array();
        foreach ($lists as $k => $v){
            $v = (array)$v;
            if ($v['pid'] == 0) {
                $v['sub'] = _get_child($v['id'], $lists);
                $menu[]   = $v;
            }
        }
        return $this->success($menu);
    }

    /**
     * @remark :获取当前用户用户的菜单列表
     * @name   :getMenuByGroupId
     * @author :lyh
     * @method :post
     * @time   :2023/7/25 10:21
     */
    public function getMenuByGroupId($gid){
        $rights = Group::where(['id' => $gid, 'status' => Group::STATUS_NORMAL])->pluck('rights')->first();
        $map = [
            'type'=>0,
            'status' => Menu::STATUS_NORMAL,
            'id'=>['in',$rights] ,
        ];
        $lists = $this->model->list($map,'sort');
        $menu = array();
        foreach ($lists as $k => $v){
            $v = (array)$v;
            if ($v['pid'] == 0) {
                $v['sub'] = _get_child($v['id'], $lists);
                $menu[]   = $v;
            }
        }
        return $this->success($menu);
    }

    /**
     * @remark :获取所有权限菜单
     * @name   :roleMenuList
     * @author :lyh
     * @method :post
     * @time   :2023/7/25 14:17
     */
    public function roleMenuList($map = []){
        $lists = $this->model->list($map,'sort');
        $menu = array();
        foreach ($lists as $k => $v){
            $v = (array)$v;
            if ($v['pid'] == 0) {
                $v['sub'] = _get_child($v['id'], $lists);
                $menu[]   = $v;
            }
        }
        return $this->success($menu);
    }

    /**
     * @remark :保存权限节点
     * @name   :roleMenuSave
     * @author :lyh
     * @method :post
     * @time   :2023/7/25 14:22
     */
    public function roleMenuSave(){
        //设置为权限菜单
        $this->param['type'] = $this->model::STATUS_NORMAL;
        if(isset($this->param['id']) && !empty($this->param['id'])){
            $rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
        }else{
            $rs = $this->model->add($this->param);
        }
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @remark :删除权限节点
     * @name   :roleMenuDel
     * @author :lyh
     * @method :post
     * @time   :2023/7/25 14:32
     */
    public function roleMenuDel(){
        $ids = $this->param['id'];
        $this->param['id'] = ['in',$this->param['id']];
        foreach ($ids as $v){
            $menuModel = new Menu();
            $info = $menuModel->read(['id'=>$v,'type'=>$this->model::STATUS_NORMAL]);
            if($info === false){
                $this->fail('当前菜单不是权限菜单,不允许删除');
            }
        }
        $rs = $this->model->del($this->param);
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @remark :当前菜单下的所有权限子菜单
     * @name   :roleMenuInfo
     * @author :lyh
     * @method :post
     * @time   :2023/8/2 16:24
     */
    public function roleMenuInfo(){
        $list = $this->model->list(
            ['pid'=>$this->param['id'],
            'status'=>$this->model::STATUS_NORMAL,
            'type'=>$this->model::TYPE_NODE]);
        return $this->success($list);
    }

    /**
     * @remark :设置排序
     * @name   :setSort
     * @author :lyh
     * @method :post
     * @time   :2023/8/10 16:42
     */
    public function setParamStatus(){
        $rs = $this->model->edit(['sort'=>$this->param['sort']],['id'=>$this->param['id']]);
        if($rs === false){
            $this->fail('修改失败');
        }
        return $this->success();
    }
}