Radio.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace Dcat\Admin\Grid\Displayers;
  3. use Dcat\Admin\Admin;
  4. class Radio extends AbstractDisplayer
  5. {
  6. public function display($options = [], $refresh = false)
  7. {
  8. if ($options instanceof \Closure) {
  9. $options = $options->call($this, $this->row);
  10. }
  11. $radios = '';
  12. $name = $this->column->getName();
  13. foreach ($options as $value => $label) {
  14. $checked = ($value == $this->value) ? 'checked' : '';
  15. $radios .= <<<EOT
  16. <div class="vs-radio-con">
  17. <input type="radio" name="grid-radio-{$name}[]" value="{$value}" $checked >
  18. <span class="vs-radio">
  19. <span class="vs-radio--border"></span>
  20. <span class="vs-radio--circle"></span>
  21. </span>
  22. <span class="">{$label}</span>
  23. </div>
  24. EOT;
  25. }
  26. Admin::script($this->addScript($refresh));
  27. return <<<EOT
  28. <form class="form-group {$this->getElementClass()}" style="text-align: left" data-key="{$this->getKey()}">
  29. $radios
  30. <button type="submit" class="btn btn-primary btn-sm pull-left">
  31. <i class="feather icon-save"></i>&nbsp;{$this->trans('save')}
  32. </button>
  33. <button type="reset" class="btn btn-white btn-sm pull-left" style="margin-left:5px;">
  34. <i class="feather icon-trash"></i>&nbsp;{$this->trans('reset')}
  35. </button>
  36. </form>
  37. EOT;
  38. }
  39. protected function getElementClass()
  40. {
  41. return 'grid-radio-'.$this->column->getName();
  42. }
  43. protected function addScript($refresh)
  44. {
  45. return <<<JS
  46. (function () {
  47. $('form.{$this->getElementClass()}').on('submit', function () {
  48. var value = $(this).find('input:radio:checked').val(),
  49. btn = $(this).find('[type="submit"]'),
  50. reload = '{$refresh}';
  51. if (btn.attr('loading')) {
  52. return;
  53. }
  54. btn.attr('loading', 1);
  55. btn.buttonLoading();
  56. $.ajax({
  57. url: "{$this->resource()}/" + $(this).data('key'),
  58. type: "POST",
  59. data: {
  60. {$this->column->getName()}: value,
  61. _token: Dcat.token,
  62. _method: 'PUT'
  63. },
  64. success: function (data) {
  65. btn.buttonLoading(false);
  66. btn.removeAttr('loading');
  67. Dcat.success(data.message);
  68. reload && Dcat.reload()
  69. },
  70. error: function (a, b, c) {
  71. btn.buttonLoading(false);
  72. btn.removeAttr('loading');
  73. Dcat.handleAjaxError(a, b, c);
  74. },
  75. });
  76. return false;
  77. });
  78. })()
  79. JS;
  80. }
  81. }