AjaxExpand.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Admin\Extensions\Displayers;
  3. use Encore\Admin\Admin;
  4. use Encore\Admin\Grid\Displayers\AbstractDisplayer;
  5. class AjaxExpand extends AbstractDisplayer
  6. {
  7. public function display()
  8. {
  9. $this->setupScript();
  10. $key = $this->getKey();
  11. if ($this->row->children->isEmpty()) {
  12. return <<<EOT
  13. <i class="fa fa-file-o fa-fw"></i><span style="margin-left: 4px">{$this->value}</span>
  14. EOT;
  15. }
  16. return <<<EOT
  17. <span class="grid-expand" data-inserted="0" data-level="1" data-key="{$key}" data-parent_group="collapse-g-{$key}">
  18. <a href="javascript:void(0)" style="color: #666666;"><i class="fa fa-folder fa-fw"></i><span style="margin-left: 4px">{$this->value}</span></a>
  19. </span>
  20. EOT;
  21. }
  22. protected function setupScript()
  23. {
  24. $script = <<<EOT
  25. $("tbody").off().delegate('.grid-expand',"click",function(){
  26. var expand=this;
  27. if ($(this).data('inserted') == '0') {
  28. $.ajax({
  29. method: 'get',
  30. url: "{$this->getResource()}?_expand_="+$(expand).data('key')+"&level="+$(expand).data('level')+"&parent_group="+$(expand).data('parent_group'),
  31. beforeSend: function () {
  32. $("i", expand).removeClass("fa-folder");
  33. $("i", expand).addClass("fa-refresh fa-spin");
  34. },
  35. success: function (data) {
  36. if (data.has_children == 0) {
  37. $("i", expand).removeClass("fa-refresh fa-spin");
  38. $("i", expand).addClass("fa-file-o");
  39. return false;
  40. }
  41. $("i", expand).removeClass("fa-refresh fa-spin");
  42. $("i", expand).addClass("fa-folder-open");
  43. var html = data.html;
  44. var row = $(expand).closest('tr');
  45. row.after(html);
  46. $(expand).data('inserted', 1);
  47. $('.{$this->grid->getGridRowName()}-checkbox').iCheck({checkboxClass:'icheckbox_minimal-blue'}).on('ifChanged', function () {
  48. if (this.checked) {
  49. $(this).closest('tr').css('background-color', '#ffffd5');
  50. } else {
  51. $(this).closest('tr').css('background-color', '');
  52. }
  53. });
  54. render_action_delete();
  55. }
  56. });
  57. } else {
  58. if ($("i", this).hasClass("fa-folder")) {
  59. //关闭状态,展开,展开只展开子类
  60. $('.collapse-c-'+$(this).data('key')).collapse('show');
  61. } else {
  62. //开启状态,关闭,关闭要关闭所有的子类
  63. $('.collapse-g-'+$(this).data('key')).collapse('hide');
  64. $('.collapse-g-'+$(this).data('key')).find("i.fa-folder-open").toggleClass("fa-folder fa-folder-open");
  65. }
  66. $("i", this).toggleClass("fa-folder fa-folder-open");
  67. }
  68. });
  69. EOT;
  70. Admin::script($script);
  71. }
  72. }