Laravel三级联动

38 篇文章 1 订阅
35 篇文章 2 订阅

选择公司,初始化上级部门,选择上级部门,再初始化所属部门。

在这里插入图片描述
路由routes.php

/**
 * 人员管理
 */
    $router->group(['prefix' => 'users'], function ($router) {
    $router->get('', UsersController::class.'@index');              //列表
    $router->get('create', UsersController::class.'@create');       //新增页
    $router->post('', UsersController::class.'@store');             //提交
    $router->get('{id}/edit', UsersController::class.'@edit');      //编辑页
    $router->put('{id}', UsersController::class.'@update');         //修改

    $router->get('api', UsersController::class.'@api');
});

控制器 UsersController.php

<?php

namespace App\Admin\Controllers;

use App\Models\Users;
use App\Models\PubDepartment;
use App\Models\PubJob;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class UsersController extends AdminController
{
    /**
     * Title for current resource.
     *
     * @var string
     */
    protected $title = '人员管理';
    protected $description = [
        'index'  => '列表',
        'edit'   => '编辑',
        'create' => '新增',
    ];

    public function index(Content $content)
    {
        $content->breadcrumb(
            ['text' => $this->title, 'url' => '/users']
        );
        return parent::index($content); // TODO: Change the autogenerated stub
    }

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Users);

        $grid->disableExport();
        $grid->disableRowSelector();
        $grid->disableCreateButton();
        //$grid->column('id', __('ID'));

        $grid->column('username', __('用户名'));
        $grid->column('name', __('姓名'));

        $grid->column('getCoSelectOptions.name', __('所属公司'));
        $grid->column('getHighdepSelectOptions.name',__('上级部门'));
        $grid->column('getDepSelectOptions.name',__('所属部门'));
        $grid->column('getJobSelectOptions.name',__('岗位'));
        $grid->tools(function ($tools){
            $tools->batch(function ($batch) {
                $batch->disableDelete();
            });
        });

//        //处理图片有专门的
//        //http://m.laravel.cc 这个是站点的域名,显示的时候自动把数据表的字段连接起来
//        $grid->head_image('头像')->image('http://m.laravel.cc', 30, 30);

        $grid->disableExport();
        $grid->tools(function ($tools){
            $tools->append('<a href="/admin/users/create" class="btn btn-sm btn-success" title="新增">
                        <i class="fa fa-plus"></i><span class="hidden-xs">&nbsp;&nbsp;新增</span>
                    </a>');
        });

        /**
         * 列表行 操作栏
         */
        $grid->actions(function ($actions){
            $actions->disableDelete();      //屏蔽删除
            $actions->disableView();        //屏蔽查看
            $actions->disableEdit();        //屏蔽修改
            $actions->append('<a href="/admin/users/'.$actions->getkey().'/edit" class="btn btn-sm btn-default" >修改</a>');
//            $actions->append('<a href="/admin/users/'.$actions->getKey().'/edit" >
//                                <i class="fa fa-edit"></i>
//                            </a>');
        });

        $grid->filter(function ($filter) {
            $filter->disableIdFilter();

            $filter->column(1/4, function ($filter) {
                $filter->equal('co_id','所属公司')->select(PubDepartment::getSelectOptions(['parent_id'=>'0']))->load('high_dep_id','/admin/users/api');
            });
            //dd(\request()->id);
            $filter->column(1/4, function ($filter) {
                $filter->equal('high_dep_id','上级部门')->select(PubDepartment::getSelectOptions(['parent_id'=>'0']))->load('depart_id','/admin/users/api');
            });
            $filter->column(1/4, function ($filter) {
                $filter->equal('depart_id','所属部门')->select(PubDepartment::all()->pluck('name', 'id'));
            });
            $filter->column(1/4, function ($filter) {
                $filter->like('name', '姓名');
            });
        });
        return $grid;
    }

    public function create(Content $content)
    {
        $content->breadcrumb(
            ['text' => $this->title, 'url' => '/users'],
            ['text' => '新增']
        )->row($this->form());
        return $content;
//        return parent::create($content); // TODO: Change the autogenerated stub
    }

    public function edit($id, Content $content)
    {
        $content->breadcrumb(
            ['text' => $this->title, 'url' => '/users'],
            ['text' => '编辑']
        );
        return parent::edit($id, $content); // TODO: Change the autogenerated stub
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Users());
        $form->text('username','用户名')->rules('required|unique:admin_users,username,{{id}}|max:50');
        $form->text('name', __('姓名'))->rules('required|max:50');

        $form->select('co_id','所属公司')->options(PubDepartment::getSelectOptions(['parent_id'=>'0']))->rules('required')->load('high_dep_id','/admin/users/api');
       // $highid =\request()->co_id;
        //dump(\request()->co_id);
        /**
         * 选择所属公司 初始化上级部门
         */
        $form->select('high_dep_id','上级部门')->rules('required')->load('depart_id','/admin/users/api');
        /**
         * 选择上级部门 初始化所属部门
         */
        $form->select('depart_id','所属部门')->rules('required');

        $form->select('job_id','岗位')->options(PubJob::getSelectOptions());

//        $form->image('head_image','头像');
//         //修改上传目录
//         $form->image('picture')->move('public/upload/image1/');
//         //使用随机生成文件名 (md5(uniqid()).extension)
//        $form->image('picture')->uniqueName();
//         //自定义文件名
//         $form->image('picture')->name(function ($file) {
//             return 'test.'.$file->guessExtension();
//         });

        $form->saving(function (Form $form) {
           //  dd($form->co_id);
            $form->model()->user_id = Admin::user()->id;
            $form->model()->password = bcrypt(mt_rand(0,35));
        });
        $form->tools(function ($tools){
            $tools->disableView();
            $tools->disableDelete();
        });

        $form->footer(function ($footer) {
            $footer->disableReset();
            //$footer->disableSubmit();
            $footer->disableSaves();
        });
        return $form;
    }

    public function api (Request $request)
    {
        $id = $request->get('q');
        return PubDepartment::where(['parent_id'=>$id])->get(['id', DB::raw('name as text')]);
    }

}

模型Users.php

<?php
/**
 * 人员管理
 */
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class Users extends Model
{

    protected $table = 'admin_users';

    protected $fillable = [
        'username','name','password','avatar','enabled','co_id',
        'high_dep_id','depart_id','job_id','user_id','created_at','updated_at'
    ];


    //所属公司
    public function getCoSelectOptions()
    {
        return $this->belongsTo(PubDepartment::class, 'co_id', 'id');
    }

    //上级部门
    public function getHighdepSelectOptions()
    {
        return $this->belongsTo(PubDepartment::class, 'high_dep_id', 'id');
    }

    //所属部门
    public function getDepSelectOptions()
    {
        return $this->belongsTo(PubDepartment::class, 'depart_id', 'id');
    }

    //岗位
    public function getJobSelectOptions()
    {
        return $this->belongsTo(PubJob::class, 'job_id', 'id');
    }

    public static function getSelectOptions($where = array())
    {
        $options = DB::table('admin_users')->where($where)->select('id','username','name','co_id',
            'high_dep_id','depart_id','job_id')->get();
        $selectOption = [];
        foreach ($options as $option){
            $selectOption[$option->id] = $option->username.'-'. $option->name;
        }
        return $selectOption;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值