选择公司,初始化上级部门,选择上级部门,再初始化所属部门。
路由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"> 新增</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;
}
}