GridHelperTrait.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <?php
  2. namespace App\Module\System\AdminControllers\Helper;
  3. use App\Module\System\Enums\CONFIG_TYPE;
  4. use App\Module\System\Enums\VIEW_TYPE;
  5. use Dcat\Admin\Grid;
  6. use Dcat\Admin\Grid\Column;
  7. /**
  8. * 列表页辅助特性
  9. *
  10. * 提供系统模块后台控制器的列表页构建功能的具体实现
  11. */
  12. trait GridHelperTrait
  13. {
  14. /**
  15. * 添加ID列
  16. *
  17. * @param string $field 字段名
  18. * @param string $label 标签名
  19. * @return Column
  20. */
  21. public function columnId(string $field = 'id', string $label = 'ID'): Column
  22. {
  23. return $this->grid->column($field, $label)->sortable();
  24. }
  25. /**
  26. * 添加配置键名列
  27. *
  28. * @param string $field 字段名
  29. * @param string $label 标签名
  30. * @return Column
  31. */
  32. public function columnKeyname(string $field = 'keyname', string $label = '键名'): Column
  33. {
  34. return $this->grid->column($field, $label);
  35. }
  36. /**
  37. * 添加配置标题列
  38. *
  39. * @param string $field 字段名
  40. * @param string $label 标签名
  41. * @return Column
  42. */
  43. public function columnTitle(string $field = 'title', string $label = '标题'): Column
  44. {
  45. return $this->grid->column($field, $label);
  46. }
  47. /**
  48. * 添加配置类型列
  49. *
  50. * @param string $field 字段名
  51. * @param string $label 标签名
  52. * @return Column
  53. */
  54. public function columnConfigType(string $field = 'type', string $label = '类型'): Column
  55. {
  56. return $this->grid->column($field, $label)->display(function ($value) {
  57. $types = [
  58. CONFIG_TYPE::TYPE_INT->value => '整数',
  59. CONFIG_TYPE::TYPE_IMG->value => '图片',
  60. CONFIG_TYPE::TYPE_BOOL->value => '布尔值',
  61. CONFIG_TYPE::TYPE_STRING->value => '字符串',
  62. CONFIG_TYPE::TYPE_FLOAT->value => '浮点数',
  63. CONFIG_TYPE::TYPE_FILE->value => '文件',
  64. CONFIG_TYPE::TYPE_PERCENTAGE->value => '百分比',
  65. CONFIG_TYPE::TYPE_TIME->value => '时间',
  66. CONFIG_TYPE::TYPE_IS->value => '是否',
  67. CONFIG_TYPE::TYPE_JSON->value => 'JSON数组',
  68. CONFIG_TYPE::TYPE_EMBEDS->value => 'JSON键值对',
  69. ];
  70. return $types[$value] ?? '未知类型';
  71. });
  72. }
  73. /**
  74. * 添加配置值列
  75. *
  76. * @param string $field 字段名
  77. * @param string $label 标签名
  78. * @param int $limit 限制长度
  79. * @return Column
  80. */
  81. public function columnValue(string $field = 'value', string $label = '值', int $limit = 30): Column
  82. {
  83. return $this->grid->column($field, $label)->limit($limit);
  84. }
  85. /**
  86. * 添加配置分组列
  87. *
  88. * @param string $field 字段名
  89. * @param string $label 标签名
  90. * @return Column
  91. */
  92. public function columnGroup(string $field = 'group', string $label = '分组'): Column
  93. {
  94. return $this->grid->column($field, $label);
  95. }
  96. /**
  97. * 添加配置子分组列
  98. *
  99. * @param string $field 字段名
  100. * @param string $label 标签名
  101. * @return Column
  102. */
  103. public function columnGroup2(string $field = 'group2', string $label = '子分组'): Column
  104. {
  105. return $this->grid->column($field, $label);
  106. }
  107. /**
  108. * 添加配置描述列
  109. *
  110. * @param string $field 字段名
  111. * @param string $label 标签名
  112. * @param int $limit 限制长度
  113. * @return Column
  114. */
  115. public function columnDesc(string $field = 'desc', string $label = '描述', int $limit = 30): Column
  116. {
  117. return $this->grid->column($field, $label)->limit($limit);
  118. }
  119. /**
  120. * 添加是否客户端可用列
  121. *
  122. * @param string $field 字段名
  123. * @param string $label 标签名
  124. * @return Column
  125. */
  126. public function columnIsClient(string $field = 'is_client', string $label = '客户端可用'): Column
  127. {
  128. return $this->grid->column($field, $label)->bool();
  129. }
  130. /**
  131. * 添加视图类型列
  132. *
  133. * @param string $field 字段名
  134. * @param string $label 标签名
  135. * @return Column
  136. */
  137. public function columnViewType(string $field = 'type1', string $label = '视图类型'): Column
  138. {
  139. return $this->grid->column($field, $label)->display(function ($value) {
  140. if ($value instanceof VIEW_TYPE) {
  141. return match($value) {
  142. VIEW_TYPE::PRIVATE => '私有',
  143. VIEW_TYPE::PUBLIC => '公共',
  144. default => $value->value
  145. };
  146. }
  147. return $value;
  148. });
  149. }
  150. /**
  151. * 添加路由名称列
  152. *
  153. * @param string $field 字段名
  154. * @param string $label 标签名
  155. * @return Column
  156. */
  157. public function columnRouterName(string $field = 'router_name', string $label = '路由名称'): Column
  158. {
  159. return $this->grid->column($field, $label);
  160. }
  161. /**
  162. * 添加管理员ID列
  163. *
  164. * @param string $field 字段名
  165. * @param string $label 标签名
  166. * @return Column
  167. */
  168. public function columnAdminId(string $field = 'admin_id', string $label = '管理员ID'): Column
  169. {
  170. return $this->grid->column($field, $label);
  171. }
  172. /**
  173. * 添加创建时间列
  174. *
  175. * @param string $field 字段名
  176. * @param string $label 标签名
  177. * @return Column
  178. */
  179. public function columnCreatedAt(string $field = 'created_at', string $label = '创建时间'): Column
  180. {
  181. return $this->grid->column($field, $label)->sortable();
  182. }
  183. /**
  184. * 添加更新时间列
  185. *
  186. * @param string $field 字段名
  187. * @param string $label 标签名
  188. * @return Column
  189. */
  190. public function columnUpdatedAt(string $field = 'updated_at', string $label = '更新时间'): Column
  191. {
  192. return $this->grid->column($field, $label)->sortable();
  193. }
  194. }