MenuLogic.php 2.2 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;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;

/**
 * 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();
    }

    public function getInfo($id)
    {
        $info = parent::getInfo($id);
        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);
    }

    public function getAllMenu(){
        $map[] = ['type' => Menu::TYPE_MENU];
        $map[] = ['status' => Menu::STATUS_NORMAL];
        $list = parent::getList($map, ['id' => 'desc'], ['id', 'pid', 'title', 'icon', 'type', 'menu_path'], 0);
        return $this->success(Arr::listToTree($list));
    }

    public function getMenuByGroupId($gid){
        $rights = Group::where(['id' => $gid, 'status' => Group::STATUS_NORMAL])->pluck('rights')->first();
        $map[] = ['type' => Menu::TYPE_MENU];
        $map[] = ['status' => Menu::STATUS_NORMAL];
        $map[] = ['id', 'in', $rights];
        $list = parent::getList($map, ['id' => 'desc'], ['id', 'pid', 'title', 'icon', 'type', 'menu_path'], 0);
        return $this->success(Arr::listToTree($list));
    }
}