ShowHelperTrait.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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 App\Module\User\Enums\STATUS2;
  7. use Dcat\Admin\Show;
  8. use Dcat\Admin\Widgets\Card;
  9. use Dcat\Admin\Widgets\Table;
  10. /**
  11. * 游戏用户详情页辅助特性
  12. *
  13. * 提供游戏用户模块后台控制器的详情页构建功能的具体实现
  14. * 包含用户基础信息和游戏相关信息的显示方法
  15. */
  16. trait ShowHelperTrait
  17. {
  18. /**
  19. * 显示用户ID
  20. *
  21. * 复用价值:高 - 在多个控制器中使用,提供统一的用户ID显示
  22. *
  23. * @param string $field 字段名
  24. * @param string $label 标签名
  25. * @return Show\Field
  26. */
  27. public function fieldUserId(string $field = 'id', string $label = '用户ID'): Show\Field
  28. {
  29. return $this->show->field($field, $label)->expand(\App\Module\System\AdminLazyRenderable\UserInfo::make([
  30. 'user_id' => $this->show->model()->$field
  31. ]));
  32. }
  33. /**
  34. * 显示用户名
  35. *
  36. * 复用价值:高 - 在多个控制器中使用,提供统一的用户名显示
  37. *
  38. * @param string $field 字段名
  39. * @param string $label 标签名
  40. * @return Show\Field
  41. */
  42. public function fieldUsername(string $field = 'username', string $label = '用户名'): Show\Field
  43. {
  44. return $this->show->field($field, $label);
  45. }
  46. /**
  47. * 显示用户状态
  48. *
  49. * 复用价值:高 - 统一处理用户状态的显示,使用枚举类型
  50. *
  51. * @param string $field 字段名
  52. * @param string $label 标签名
  53. * @return Show\Field
  54. */
  55. public function fieldStatus(string $field = 'status2', string $label = '状态'): Show\Field
  56. {
  57. return $this->show->field($field, $label)->as(function ($value) {
  58. return STATUS2::tryFrom($value);
  59. });
  60. }
  61. /**
  62. * 显示用户头像
  63. *
  64. * 复用价值:高 - 统一处理用户头像的显示
  65. *
  66. * @param string $field 字段名
  67. * @param string $label 标签名
  68. * @return Show\Field
  69. */
  70. public function fieldAvatar(string $field = 'avatar', string $label = '头像'): Show\Field
  71. {
  72. return $this->show->field($field, $label)->image();
  73. }
  74. /**
  75. * 显示用户安全密码
  76. *
  77. * 复用价值:高 - 统一处理用户安全密码的显示,隐藏实际密码
  78. *
  79. * @param string $field 字段名
  80. * @param string $label 标签名
  81. * @return Show\Field
  82. */
  83. public function fieldSecretPassword(string $field = 'secret_password', string $label = '安全密码'): Show\Field
  84. {
  85. return $this->show->field($field, $label)->as(function ($value) {
  86. return $value ? '已设置' : '未设置';
  87. });
  88. }
  89. /**
  90. * 显示奖励类型
  91. *
  92. * @param string $field 字段名
  93. * @param string $label 标签名
  94. * @return Show\Field
  95. */
  96. public function fieldRewardType(string $field = 'reward_type', string $label = '奖励类型'): Show\Field
  97. {
  98. return $this->show->field($field, $label)->as(function ($value) {
  99. return REWARD_TYPE::getName($value);
  100. });
  101. }
  102. /**
  103. * 显示奖励来源类型
  104. *
  105. * @param string $field 字段名
  106. * @param string $label 标签名
  107. * @return Show\Field
  108. */
  109. public function fieldRewardSourceType(string $field = 'source_type', string $label = '奖励来源'): Show\Field
  110. {
  111. return $this->show->field($field, $label)->as(function ($value) {
  112. return REWARD_SOURCE_TYPE::getName($value);
  113. });
  114. }
  115. /**
  116. * 显示奖励组
  117. *
  118. * @param string $field 字段名
  119. * @param string $label 标签名
  120. * @return Show\Field
  121. */
  122. public function fieldRewardGroup(string $field = 'group_id', string $label = '奖励组'): Show\Field
  123. {
  124. return $this->show->field($field, $label)->as(function ($value) {
  125. $group = GameRewardGroup::find($value);
  126. return $group ? "{$group->name} ({$group->code})" : "未知 ({$value})";
  127. });
  128. }
  129. /**
  130. * 显示奖励项
  131. *
  132. * @param string $field 字段名
  133. * @param string $label 标签名
  134. * @return Show\Field
  135. */
  136. public function fieldRewardItems(string $field = 'reward_items', string $label = '奖励项'): Show\Field
  137. {
  138. return $this->show->field($field, $label)->as(function ($value) {
  139. $items = json_decode($value, true);
  140. if (empty($items)) {
  141. return '无奖励项';
  142. }
  143. $headers = ['奖励类型', '目标ID', '参数1', '参数2', '数量', '额外数据'];
  144. $rows = [];
  145. foreach ($items as $item) {
  146. $rows[] = [
  147. REWARD_TYPE::getName($item['reward_type']),
  148. $item['target_id'],
  149. $item['param1'] ?? 0,
  150. $item['param2'] ?? 0,
  151. $item['quantity'],
  152. json_encode($item['extra_data'] ?? null)
  153. ];
  154. }
  155. return Card::make(
  156. Table::make($headers, $rows)
  157. );
  158. });
  159. }
  160. /**
  161. * 显示是否随机发放
  162. *
  163. * @param string $field 字段名
  164. * @param string $label 标签名
  165. * @return Show\Field
  166. */
  167. public function fieldIsRandom(string $field = 'is_random', string $label = '随机发放'): Show\Field
  168. {
  169. return $this->show->field($field, $label)->as(function ($value) {
  170. return $value ? '是' : '否';
  171. });
  172. }
  173. /**
  174. * 显示是否必中
  175. *
  176. * @param string $field 字段名
  177. * @param string $label 标签名
  178. * @return Show\Field
  179. */
  180. public function fieldIsGuaranteed(string $field = 'is_guaranteed', string $label = '必中'): Show\Field
  181. {
  182. return $this->show->field($field, $label)->as(function ($value) {
  183. return $value ? '是' : '否';
  184. });
  185. }
  186. }