| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | <?phpnamespace backend\widgets\grid;use backend\assets\SwitcherAsset;use yii\grid\DataColumn;use yii\helpers\Html;use common\enums\StatusEnum;use yii\helpers\Url;class SwitcherColumn extends  DataColumn{    public $reload = 0;                                   //切换后是否重新加载页面,1重新加载,0不重新加载    public $route = ['switcher'];    public $onVal = StatusEnum::STATUS_ON;              //开启的值    public $offVal = StatusEnum::STATUS_OFF;            //关闭的值    public function registerClientScript()    {        SwitcherAsset::register($this->grid->view);        $js = <<<'EOT'		    $('.js-switch').on('change', function(){		        var switchery =  $(this).data("switchery");		        switchery.disable();		        var url =  $(this).data("url");		        var reload =  $(this).data("reload");		        var checked =  $(this).is(':checked') ? $(this).data("on"): $(this).data("off");		        var data = $(this).data("params");		        data.value = checked;		        $.post( url, data, function(response){		            if(response.status == false){		                $.modal.error(response.msg);		                return;		            }		            if(reload){		                location.reload();		            }else{		            	$.modal.success(response.msg);		            	switchery.enable();		            }		        });		    });EOT;        $this->grid->view->registerJs($js,\yii\web\View::POS_READY); //因为可能会被pjax加载所以放在这里    }    /**     * @inheritdoc     */    protected function renderDataCellContent($model, $key, $index)    {        $params = is_array($key) ? $key : ['id' => (string) $key];        $params["attribute"] = $this->attribute;        $value = $this->getDataCellValue($model, $key, $index) ;        if(is_string($value)) {            $result =  $value;        } else {            $this->registerClientScript();            $result =  Html::checkbox('', $value == $this->onVal, [                'class' => 'js-switch',                'data-url' => Url::to($this->route),                'data-params' => $params,                'data-reload' => $this->reload,                'data-toggle' => 'switcher',                'data-on' => $this->onVal,                'data-off' => $this->offVal,            ]);        }        return $result;    }}
 |