ShowHelperTrait.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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\Show;
  7. use Dcat\Admin\Widgets\Card;
  8. use Dcat\Admin\Widgets\Table;
  9. /**
  10. * 详情页辅助特性
  11. *
  12. * 提供游戏模块后台控制器的详情页构建功能的具体实现
  13. */
  14. trait ShowHelperTrait
  15. {
  16. /**
  17. * 显示奖励类型
  18. *
  19. * @param string $field 字段名
  20. * @param string $label 标签名
  21. * @return Show\Field
  22. */
  23. public function fieldRewardType(string $field = 'reward_type', string $label = '奖励类型'): Show\Field
  24. {
  25. return $this->show->field($field, $label)->as(function ($value) {
  26. return REWARD_TYPE::getName($value);
  27. });
  28. }
  29. /**
  30. * 显示奖励来源类型
  31. *
  32. * @param string $field 字段名
  33. * @param string $label 标签名
  34. * @return Show\Field
  35. */
  36. public function fieldRewardSourceType(string $field = 'source_type', string $label = '奖励来源'): Show\Field
  37. {
  38. return $this->show->field($field, $label)->as(function ($value) {
  39. return REWARD_SOURCE_TYPE::getName($value);
  40. });
  41. }
  42. /**
  43. * 显示奖励组
  44. *
  45. * @param string $field 字段名
  46. * @param string $label 标签名
  47. * @return Show\Field
  48. */
  49. public function fieldRewardGroup(string $field = 'group_id', string $label = '奖励组'): Show\Field
  50. {
  51. return $this->show->field($field, $label)->as(function ($value) {
  52. $group = GameRewardGroup::find($value);
  53. return $group ? "{$group->name} ({$group->code})" : "未知 ({$value})";
  54. });
  55. }
  56. /**
  57. * 显示奖励项
  58. *
  59. * @param string $field 字段名
  60. * @param string $label 标签名
  61. * @return Show\Field
  62. */
  63. public function fieldRewardItems(string $field = 'reward_items', string $label = '奖励项'): Show\Field
  64. {
  65. return $this->show->field($field, $label)->as(function ($value) {
  66. $items = json_decode($value, true);
  67. if (empty($items)) {
  68. return '无奖励项';
  69. }
  70. $headers = ['奖励类型', '目标ID', '参数1', '参数2', '数量', '额外数据'];
  71. $rows = [];
  72. foreach ($items as $item) {
  73. $rows[] = [
  74. REWARD_TYPE::getName($item['reward_type']),
  75. $item['target_id'],
  76. $item['param1'] ?? 0,
  77. $item['param2'] ?? 0,
  78. $item['quantity'],
  79. json_encode($item['extra_data'] ?? null)
  80. ];
  81. }
  82. return Card::make(
  83. Table::make($headers, $rows)
  84. );
  85. });
  86. }
  87. /**
  88. * 显示是否随机发放
  89. *
  90. * @param string $field 字段名
  91. * @param string $label 标签名
  92. * @return Show\Field
  93. */
  94. public function fieldIsRandom(string $field = 'is_random', string $label = '随机发放'): Show\Field
  95. {
  96. return $this->show->field($field, $label)->as(function ($value) {
  97. return $value ? '是' : '否';
  98. });
  99. }
  100. /**
  101. * 显示是否必中
  102. *
  103. * @param string $field 字段名
  104. * @param string $label 标签名
  105. * @return Show\Field
  106. */
  107. public function fieldIsGuaranteed(string $field = 'is_guaranteed', string $label = '必中'): Show\Field
  108. {
  109. return $this->show->field($field, $label)->as(function ($value) {
  110. return $value ? '是' : '否';
  111. });
  112. }
  113. }