GridHelperTrait.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. namespace App\Module\Ulogic\AdminControllers\Helper;
  3. use App\Module\AppMessage\Enums\APP_MESSAGE_STATUS;
  4. use App\Module\AppMessage\Enums\APP_MESSAGE_TYPE;
  5. use App\Module\AppMessage\Enums\APP_SENDER_TYPE;
  6. use App\Module\Ulogic\Enum\PUNISH_TYPE;
  7. use Dcat\Admin\Grid;
  8. use Dcat\Admin\Grid\Column;
  9. /**
  10. * 列表页辅助特性
  11. *
  12. * 提供用户逻辑模块后台控制器的列表页构建功能的具体实现
  13. */
  14. trait GridHelperTrait
  15. {
  16. /**
  17. * 添加ID列
  18. *
  19. * @param string $field 字段名
  20. * @param string $label 标签名
  21. * @return Column
  22. */
  23. public function columnId(string $field = 'id', string $label = 'ID'): Column
  24. {
  25. return $this->grid->column($field, $label)->sortable();
  26. }
  27. /**
  28. * 添加惩罚类型列
  29. *
  30. * @param string $field 字段名
  31. * @param string $label 标签名
  32. * @return Column
  33. */
  34. public function columnPunishType(string $field = 'type', string $label = '惩罚类型'): Column
  35. {
  36. return $this->grid->column($field, $label)->display(function ($value) {
  37. return $value instanceof PUNISH_TYPE ? $value->name : $value;
  38. });
  39. }
  40. /**
  41. * 添加惩罚等级列
  42. *
  43. * @param string $field 字段名
  44. * @param string $label 标签名
  45. * @return Column
  46. */
  47. public function columnPunishLevel(string $field = 'level', string $label = '惩罚等级'): Column
  48. {
  49. return $this->grid->column($field, $label);
  50. }
  51. /**
  52. * 添加描述列
  53. *
  54. * @param string $field 字段名
  55. * @param string $label 标签名
  56. * @param int $limit 限制长度
  57. * @return Column
  58. */
  59. public function columnDesc(string $field = 'desc', string $label = '描述', int $limit = 30): Column
  60. {
  61. return $this->grid->column($field, $label)->limit($limit);
  62. }
  63. /**
  64. * 添加消息标题列
  65. *
  66. * @param string $field 字段名
  67. * @param string $label 标签名
  68. * @param int $limit 限制长度
  69. * @return Column
  70. */
  71. public function columnMessageTitle(string $field = 'title', string $label = '消息标题', int $limit = 30): Column
  72. {
  73. return $this->grid->column($field, $label)->limit($limit);
  74. }
  75. /**
  76. * 添加消息内容列
  77. *
  78. * @param string $field 字段名
  79. * @param string $label 标签名
  80. * @param int $limit 限制长度
  81. * @return Column
  82. */
  83. public function columnMessageContent(string $field = 'content', string $label = '消息内容', int $limit = 50): Column
  84. {
  85. return $this->grid->column($field, $label)->limit($limit);
  86. }
  87. /**
  88. * 添加消息类型列
  89. *
  90. * @param string $field 字段名
  91. * @param string $label 标签名
  92. * @return Column
  93. */
  94. public function columnMessageType(string $field = 'type', string $label = '消息类型'): Column
  95. {
  96. return $this->grid->column($field, $label)->display(function ($value) {
  97. if ($value instanceof APP_MESSAGE_TYPE) {
  98. return match($value) {
  99. APP_MESSAGE_TYPE::SYSTEM => '系统消息',
  100. APP_MESSAGE_TYPE::USER => '用户消息',
  101. APP_MESSAGE_TYPE::BUSINESS => '业务消息',
  102. APP_MESSAGE_TYPE::SECURITY => '安全消息',
  103. default => $value->value
  104. };
  105. }
  106. return $value;
  107. });
  108. }
  109. /**
  110. * 添加消息状态列
  111. *
  112. * @param string $field 字段名
  113. * @param string $label 标签名
  114. * @return Column
  115. */
  116. public function columnMessageStatus(string $field = 'status', string $label = '消息状态'): Column
  117. {
  118. return $this->grid->column($field, $label)->display(function ($value) {
  119. if ($value instanceof APP_MESSAGE_STATUS) {
  120. return match($value) {
  121. APP_MESSAGE_STATUS::DRAFT => '草稿',
  122. APP_MESSAGE_STATUS::PUBLISHED => '已发布',
  123. APP_MESSAGE_STATUS::ARCHIVED => '已归档',
  124. default => $value->value
  125. };
  126. }
  127. return $value;
  128. })->label([
  129. APP_MESSAGE_STATUS::DRAFT->value => 'default',
  130. APP_MESSAGE_STATUS::PUBLISHED->value => 'success',
  131. APP_MESSAGE_STATUS::ARCHIVED->value => 'info',
  132. ]);
  133. }
  134. /**
  135. * 添加发送者类型列
  136. *
  137. * @param string $field 字段名
  138. * @param string $label 标签名
  139. * @return Column
  140. */
  141. public function columnSenderType(string $field = 'sender_type', string $label = '发送者类型'): Column
  142. {
  143. return $this->grid->column($field, $label)->display(function ($value) {
  144. if ($value instanceof APP_SENDER_TYPE) {
  145. return match($value) {
  146. APP_SENDER_TYPE::SYSTEM => '系统',
  147. APP_SENDER_TYPE::USER => '用户',
  148. APP_SENDER_TYPE::ADMIN => '管理员',
  149. default => $value->value
  150. };
  151. }
  152. return $value;
  153. });
  154. }
  155. /**
  156. * 添加发送者ID列
  157. *
  158. * @param string $field 字段名
  159. * @param string $label 标签名
  160. * @return Column
  161. */
  162. public function columnSenderId(string $field = 'sender_id', string $label = '发送者ID'): Column
  163. {
  164. return $this->grid->column($field, $label);
  165. }
  166. /**
  167. * 添加接收者ID列
  168. *
  169. * @param string $field 字段名
  170. * @param string $label 标签名
  171. * @return Column
  172. */
  173. public function columnReceiverId(string $field = 'receiver_id', string $label = '接收者ID'): Column
  174. {
  175. return $this->grid->column($field, $label);
  176. }
  177. /**
  178. * 添加是否允许回复列
  179. *
  180. * @param string $field 字段名
  181. * @param string $label 标签名
  182. * @return Column
  183. */
  184. public function columnAllowReply(string $field = 'allow_reply', string $label = '允许回复'): Column
  185. {
  186. return $this->grid->column($field, $label)->bool();
  187. }
  188. /**
  189. * 添加创建时间列
  190. *
  191. * @param string $field 字段名
  192. * @param string $label 标签名
  193. * @return Column
  194. */
  195. public function columnCreatedAt(string $field = 'created_at', string $label = '创建时间'): Column
  196. {
  197. return $this->grid->column($field, $label)->sortable();
  198. }
  199. /**
  200. * 添加更新时间列
  201. *
  202. * @param string $field 字段名
  203. * @param string $label 标签名
  204. * @return Column
  205. */
  206. public function columnUpdatedAt(string $field = 'updated_at', string $label = '更新时间'): Column
  207. {
  208. return $this->grid->column($field, $label)->sortable();
  209. }
  210. }