dact-admin表格选择器的使用
-
使用场景
在使用dact下拉选择框时,如果选择框的数据很多几百条,这样在使用普通的选择框时就会很不友好,在dact-admin里面有一种表格选择器的东西,可以很好的解决这个问题。
2.效果图
想要实现上面的效果呢,其实也是很简单的。
3.首先创建异步加载类如下图
-
4.控制器中的写法
use App\Admin\Renderable\UserTable;
use App\Models\Userinfo;
protected function form()
{
return Form::make(new UserinfoImage(), function (Form $form) {
$form->display('id');
$form->selectTable('userinfo_id','用户')
->title('用户信息') //设备弹框的标题
->dialogWidth('50%') //设置弹框的宽度
->from(UserTable::make()) //设置渲染类实例,并支持自定义传递自定义参数如->from(UserTable::make(['id' => $form->getKey()])) //查询当前行的id
->model(Userinfo::class, 'id','wx_nickname'); // 设置编辑数据的显示
$form->image('image_path')->uniqueName()->autoUpload()
->accept( 'jpg,png,gif,jpeg' , 'image/*' );
$form->select('platform','所属平台')->options(config('myconfig.config.platform'));
$form->display('created_at');
$form->display('updated_at');
});
}
5.加载类中的写法
<?php
namespace App\Admin\Renderable;
use App\Models\Userinfo as UserinfoModels;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\LazyRenderable;
class UserTable extends LazyRenderable
{
public function grid(): Grid
{
// 获取外部传递的参数
$id = $this->id;
return Grid::make(new UserinfoModels(), function (Grid $grid) {
$grid->column('id');
$grid->column('wx_nickname','用户微信昵称');
$grid->column('created_at');
$grid->column('updated_at');
//指定行选择器选中时显示的值的字段名称
$grid->rowSelector()->titleColumn('wx_nickname');
//下面这个目前不太清除 注释掉也能使用(不知道有什么具体的作用)
$grid->quickSearch(['id', 'wx_nickname']);
$grid->paginate(10); //每页十条数据
$grid->disableActions(); //禁止操作
//设置筛选
$grid->filter(function (Grid\Filter $filter) {
$filter->like('wx_nickname','微信用户昵称')->width(4);
});
});
}
}
6.到此结束,一定要注意加载类的引入以及命名空间的写法。多选和单选的原理都是一样的只不过是把selectTable换成multipleSelectTable。
7.注意:单选和多选不能使用同一个加载类,不然多选就会失效。