GridHelperTrait.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace App\Module\Game\AdminControllers\Helper;
  3. use App\Module\Game\Enums\REWARD_SOURCE_TYPE;
  4. use App\Module\Game\Enums\REWARD_TYPE;
  5. use App\Module\Game\Models\GameRewardGroup;
  6. use Dcat\Admin\Grid;
  7. use Dcat\Admin\Grid\Column;
  8. /**
  9. * 列表页辅助特性
  10. *
  11. * 提供游戏模块后台控制器的列表页构建功能的具体实现
  12. */
  13. trait GridHelperTrait
  14. {
  15. /**
  16. * 添加奖励类型列
  17. *
  18. * @param string $field 字段名
  19. * @param string $label 标签名
  20. * @return Column
  21. */
  22. public function columnRewardType(string $field = 'reward_type', string $label = '奖励类型'): Column
  23. {
  24. return $this->grid->column($field, $label)->display(function ($value) {
  25. return REWARD_TYPE::getName($value);
  26. })->label([
  27. REWARD_TYPE::ITEM->value => 'primary',
  28. REWARD_TYPE::CURRENCY->value => 'success',
  29. REWARD_TYPE::PET_EXP->value => 'info',
  30. REWARD_TYPE::PET_ENERGY->value => 'warning',
  31. REWARD_TYPE::OTHER->value => 'default',
  32. ]);
  33. }
  34. /**
  35. * 添加奖励来源类型列
  36. *
  37. * @param string $field 字段名
  38. * @param string $label 标签名
  39. * @return Column
  40. */
  41. public function columnRewardSourceType(string $field = 'source_type', string $label = '奖励来源'): Column
  42. {
  43. return $this->grid->column($field, $label)->display(function ($value) {
  44. return REWARD_SOURCE_TYPE::getName($value);
  45. })->label([
  46. REWARD_SOURCE_TYPE::TASK->value => 'primary',
  47. REWARD_SOURCE_TYPE::ACTIVITY->value => 'success',
  48. REWARD_SOURCE_TYPE::SIGN_IN->value => 'info',
  49. REWARD_SOURCE_TYPE::ACHIEVEMENT->value => 'warning',
  50. REWARD_SOURCE_TYPE::LEVEL->value => 'danger',
  51. REWARD_SOURCE_TYPE::CHEST->value => 'dark',
  52. REWARD_SOURCE_TYPE::SYSTEM->value => 'default',
  53. ]);
  54. }
  55. /**
  56. * 添加奖励组列
  57. *
  58. * @param string $field 字段名
  59. * @param string $label 标签名
  60. * @return Column
  61. */
  62. public function columnRewardGroup(string $field = 'group_id', string $label = '奖励组'): Column
  63. {
  64. return $this->grid->column($field, $label)->display(function ($value) {
  65. $group = GameRewardGroup::find($value);
  66. return $group ? "{$group->name} ({$group->code})" : "未知 ({$value})";
  67. });
  68. }
  69. /**
  70. * 添加奖励项列
  71. *
  72. * @param string $field 字段名
  73. * @param string $label 标签名
  74. * @return Column
  75. */
  76. public function columnRewardItems(string $field = 'reward_items', string $label = '奖励项'): Column
  77. {
  78. return $this->grid->column($field, $label)->display(function ($value) {
  79. $items = json_decode($value, true);
  80. if (empty($items)) {
  81. return '无奖励项';
  82. }
  83. $count = count($items);
  84. return "<span class=\"badge badge-primary\">{$count}个奖励项</span>";
  85. });
  86. }
  87. /**
  88. * 添加是否随机发放列
  89. *
  90. * @param string $field 字段名
  91. * @param string $label 标签名
  92. * @return Column
  93. */
  94. public function columnIsRandom(string $field = 'is_random', string $label = '随机发放'): Column
  95. {
  96. return $this->grid->column($field, $label)->switch();
  97. }
  98. /**
  99. * 添加是否必中列
  100. *
  101. * @param string $field 字段名
  102. * @param string $label 标签名
  103. * @return Column
  104. */
  105. public function columnIsGuaranteed(string $field = 'is_guaranteed', string $label = '必中'): Column
  106. {
  107. return $this->grid->column($field, $label)->switch();
  108. }
  109. /**
  110. * 添加权重列
  111. *
  112. * @param string $field 字段名
  113. * @param string $label 标签名
  114. * @return Column
  115. */
  116. public function columnWeight(string $field = 'weight', string $label = '权重'): Column
  117. {
  118. return $this->grid->column($field, $label)->sortable();
  119. }
  120. }