ProjectMenuController.php 4.4 KB
<?php

namespace App\Http\Controllers\Aside\User;

use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\User\ProjectMenuLogic;
use App\Http\Requests\Aside\User\ProjectMenuRequest;
use App\Http\Requests\Aside\User\ProjectRoleRequest;
use App\Models\User\ProjectMenu;
use App\Models\User\ProjectMenu as ProjectMenuModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/**
 * @remark :b端菜单管理
 * @name   :ProjectMenuController
 * @author :lyh
 * @time   :2023/6/17 16:23
 */
class ProjectMenuController extends BaseController
{

    /**
     * @remark :用户菜单列表
     * @name   :lists
     * @author :lyh
     * @method :post
     * @time   :2023/6/21 17:24
     */
    public function lists(){
        $menuModel = new ProjectMenuModel();
        $lists = $menuModel->lists($this->map,$this->page,$this->row,$this->order);
        $menu = array();
        foreach ($lists['list'] as $k => $v){
            $v = (array)$v;
            if ($v['pid'] == 0) {
                $v['sub'] = _get_child($v['id'], $lists);
                $menu[]   = $v;
            }
        }
        $this->response('success',Code::SUCCESS,$menu);
    }

    /**
     * @remark :添加菜单时获取菜单列表
     * @name   :list
     * @author :lyh
     * @method :post
     * @time   :2023/6/21 17:24
     */
    public function list(ProjectMenuLogic $projectMenuLogic){
        $lists = $projectMenuLogic->MenuList();
        $this->response('success',Code::SUCCESS,$lists);
    }

    /**
     * @param ProjectMenuLogic $projectMenuLogic
     * @remark :详情
     * @name   :info
     * @author :lyh
     * @method :post
     * @time   :2023/6/21 17:23
     */
    public function info(ProjectMenuLogic $projectMenuLogic){
        $this->request->validate([
            'id'=>'required'
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $info = $projectMenuLogic->menu_info();
        $this->response('success',Code::SUCCESS,$info);
    }

    /**
     * @param ProjectMenuRequest $request
     * @param ProjectMenuLogic $projectMenuLogic
     * @remark :添加菜单
     * @name   :add
     * @author :lyh
     * @method :post
     * @time   :2023/6/21 17:23
     */
    public function add(ProjectMenuRequest $request,ProjectMenuLogic $projectMenuLogic){
        $request->validated();
        $projectMenuLogic->menu_add();
        $this->response('success');
    }

    /**
     * @param ProjectMenuRequest $request
     * @param ProjectMenuLogic $projectMenuLogic
     * @remark :编辑菜单
     * @name   :edit
     * @author :lyh
     * @method :post
     * @time   :2023/6/21 17:22
     */
    public function edit(ProjectMenuRequest $request,ProjectMenuLogic $projectMenuLogic){
        $request->validate([
            'id'=>'required'
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $projectMenuLogic->menu_edit();
        $this->response('success');
    }

    /**
     * @param ProjectMenuLogic $projectMenuLogic
     * @remark :删除菜单
     * @name   :del
     * @author :lyh
     * @method :post
     * @time   :2023/6/21 17:22
     */
    public function del(ProjectMenuLogic $projectMenuLogic){
        $this->request->validate([
            'id'=>['required','array'],
        ],[
            'id.required' => 'ID不能为空',
            'id.array' => 'ID为数组',
        ]);
        $projectMenuLogic->menu_del();
        $this->response('success');
    }

    /**
     * @remark :获取所有的路由
     * @name   :routes
     * @author :lyh
     * @method :post
     * @time   :2023/7/25 14:44
     */
    public function routes(){
        //已绑定菜单的路由
        $menu_route = array_filter(ProjectMenu::pluck('action')->toArray());
        //路由
        $list = [];
        $routes = Route::getRoutes()->getRoutesByName();
        foreach ($routes as $name => $route) {
            if(Str::startsWith($name, 'admin.') && !Str::endsWith($name, '.white') && !in_array($name, $menu_route)){
                $list[] = $name;
            }
        }
        return $this->success($list);
    }

    /**
     * @remark :获取子菜单
     * @name   :getSonMenu
     * @author :lyh
     * @method :post
     * @time   :2023/8/3 14:19
     */
    public function getSonMenu(ProjectMenuLogic $projectMenuLogic){
        $list = $projectMenuLogic->roleMenuInfo();
        $this->response('success',Code::SUCCESS,$list);
    }
}