SwitcherColumn.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace backend\widgets\grid;
  3. use backend\assets\SwitcherAsset;
  4. use yii\grid\DataColumn;
  5. use yii\helpers\Html;
  6. use common\enums\StatusEnum;
  7. use yii\helpers\Url;
  8. class SwitcherColumn extends DataColumn
  9. {
  10. public $reload = 0; //切换后是否重新加载页面,1重新加载,0不重新加载
  11. public $route = ['switcher'];
  12. public $onVal = StatusEnum::STATUS_ON; //开启的值
  13. public $offVal = StatusEnum::STATUS_OFF; //关闭的值
  14. public function registerClientScript()
  15. {
  16. SwitcherAsset::register($this->grid->view);
  17. $js = <<<'EOT'
  18. $('.js-switch').on('change', function(){
  19. var switchery = $(this).data("switchery");
  20. switchery.disable();
  21. var url = $(this).data("url");
  22. var reload = $(this).data("reload");
  23. var checked = $(this).is(':checked') ? $(this).data("on"): $(this).data("off");
  24. var data = $(this).data("params");
  25. data.value = checked;
  26. $.post( url, data, function(response){
  27. if(response.status == false){
  28. $.modal.error(response.msg);
  29. return;
  30. }
  31. if(reload){
  32. location.reload();
  33. }else{
  34. $.modal.success(response.msg);
  35. switchery.enable();
  36. }
  37. });
  38. });
  39. EOT;
  40. $this->grid->view->registerJs($js,\yii\web\View::POS_READY); //因为可能会被pjax加载所以放在这里
  41. }
  42. /**
  43. * @inheritdoc
  44. */
  45. protected function renderDataCellContent($model, $key, $index)
  46. {
  47. $params = is_array($key) ? $key : ['id' => (string) $key];
  48. $params["attribute"] = $this->attribute;
  49. $value = $this->getDataCellValue($model, $key, $index) ;
  50. if(is_string($value)) {
  51. $result = $value;
  52. } else {
  53. $this->registerClientScript();
  54. $result = Html::checkbox('', $value == $this->onVal, [
  55. 'class' => 'js-switch',
  56. 'data-url' => Url::to($this->route),
  57. 'data-params' => $params,
  58. 'data-reload' => $this->reload,
  59. 'data-toggle' => 'switcher',
  60. 'data-on' => $this->onVal,
  61. 'data-off' => $this->offVal,
  62. ]);
  63. }
  64. return $result;
  65. }
  66. }