GridHelper.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace App\Module\Friend\AdminControllers\Helper;
  3. use Dcat\Admin\Grid;
  4. use Dcat\Admin\Grid\Column;
  5. /**
  6. * 表格助手类
  7. *
  8. * 用于辅助构建后台表格
  9. */
  10. class GridHelper
  11. {
  12. /**
  13. * Grid 实例
  14. *
  15. * @var Grid
  16. */
  17. protected $grid;
  18. /**
  19. * 构造函数
  20. *
  21. * @param Grid $grid
  22. */
  23. public function __construct(Grid $grid)
  24. {
  25. $this->grid = $grid;
  26. }
  27. /**
  28. * 创建实例
  29. *
  30. * @param Grid $grid
  31. * @return static
  32. */
  33. public static function make(Grid $grid)
  34. {
  35. return new static($grid);
  36. }
  37. /**
  38. * 添加ID列
  39. *
  40. * @param string $label
  41. * @return Column
  42. */
  43. public function id(string $label = 'ID'): Column
  44. {
  45. return $this->grid->column('id', $label);
  46. }
  47. /**
  48. * 添加普通列
  49. *
  50. * @param string $name
  51. * @param string $label
  52. * @return Column
  53. */
  54. public function column(string $name, string $label): Column
  55. {
  56. return $this->grid->column($name, $label);
  57. }
  58. /**
  59. * 添加操作列
  60. *
  61. * @param string $label
  62. * @return Column
  63. */
  64. public function actions(string $label = '操作'): Column
  65. {
  66. return $this->grid->column('actions', $label);
  67. }
  68. /**
  69. * 添加批量操作
  70. *
  71. * @param string $title
  72. * @param callable $callback
  73. * @return Grid\Tools\BatchAction
  74. */
  75. public function batchAction(string $title, callable $callback)
  76. {
  77. return $this->grid->batchActions(function (Grid\Tools\BatchActions $actions) use ($title, $callback) {
  78. $actions->add($title, $callback);
  79. });
  80. }
  81. /**
  82. * 添加工具按钮
  83. *
  84. * @param string $title
  85. * @param callable $callback
  86. * @return Grid\Tools\ToolButton
  87. */
  88. public function toolButton(string $title, callable $callback)
  89. {
  90. return $this->grid->tools(function (Grid\Tools $tools) use ($title, $callback) {
  91. $tools->append($callback($tools->button($title)));
  92. });
  93. }
  94. /**
  95. * 添加导出按钮
  96. *
  97. * @param string $title
  98. * @param string $filename
  99. * @param array $columns
  100. * @return Grid
  101. */
  102. public function export(string $title, string $filename, array $columns = [])
  103. {
  104. return $this->grid->export()->filename($filename)->titles($columns)->rows(function (array $rows) {
  105. return $rows;
  106. });
  107. }
  108. /**
  109. * 添加快速创建
  110. *
  111. * @param callable $callback
  112. * @return Grid\Tools\QuickCreate
  113. */
  114. public function quickCreate(callable $callback)
  115. {
  116. return $this->grid->quickCreate(function (Grid\Tools\QuickCreate $create) use ($callback) {
  117. $callback($create);
  118. });
  119. }
  120. /**
  121. * 添加分页
  122. *
  123. * @param int $perPage
  124. * @return Grid
  125. */
  126. public function paginate(int $perPage = 20)
  127. {
  128. return $this->grid->paginate($perPage);
  129. }
  130. /**
  131. * 添加排序
  132. *
  133. * @param string $column
  134. * @param string $direction
  135. * @return Grid
  136. */
  137. public function orderBy(string $column, string $direction = 'desc')
  138. {
  139. return $this->grid->orderBy($column, $direction);
  140. }
  141. /**
  142. * 添加模型查询
  143. *
  144. * @param callable $callback
  145. * @return Grid
  146. */
  147. public function model(callable $callback)
  148. {
  149. return $this->grid->model()->where($callback);
  150. }
  151. }