注意
- 1.这里是设置
查询过滤
的时候select-load
方法的默认选中 - -2.如果是在
form
页面(添加和修改页面)的select-load
,请参考
问题
在
list
页面查询过滤时,select-load
二级选项并没有默认选择。暴力改了源码,实现默认选中功能
查询代码
$grid->filter(function (Grid\Filter $filter){
$filter->disableIdFilter();
$filter->like('name','名称');
$filter->equal('s_id','门店')->select('接口地址')
->load('gs_id', $this->getUrl('接口地址');
$filter->equal('gs_id','商品分类')->select();
});
改的源代码
通过
getQueryVariable
方法获取GET
地址中的参数值,在通过Select2
设置默认选中的方法设置默认选中$(target).val(getQueryVariable("{$this->getClass($target)}")).trigger('change');
namespace Encore\Admin\Grid\Filter\Presenter;
/**
* Load options for other select when change.
*
* @param string $target
* @param string $resourceUrl
* @param string $idField
* @param string $textField
*
* @return $this
*/
public function load($target, $resourceUrl, $idField = 'id', $textField = 'text'): self
{
$column = $this->filter->getColumn();
$script = <<<EOT
// 获取url参数
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){return pair[1];}
}
return(false);
}
$(document).off('change', ".{$this->getClass($column)}");
$(document).on('change', ".{$this->getClass($column)}", function () {
var target = $(this).closest('form').find(".{$this->getClass($target)}");
$.get("$resourceUrl",{q : this.value}, function (data) {
target.find("option").remove();
$.each(data, function (i, item) {
$(target).append($('<option>', {
value: item.$idField,
text : item.$textField
}));
});
// 默认选中设置
var getQueryVariableval = getQueryVariable("{$this->getClass($target)}");
if(getQueryVariableval !== false)
{
$(target).val(getQueryVariableval).trigger('change');
}
else
{
$(target).val(null).trigger('change');
}
});
});
EOT;
Admin::script($script);
return $this;
}