ShowHelperTrait.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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 $name 字段名
  24. * @param string $label 标签名
  25. * @return Show\Field
  26. */
  27. public function fieldUserId($name = 'user_id', $label = ''): Show\Field
  28. {
  29. $label = $label ?: '用户ID';
  30. return $this->show->field($name, $label)->expand(\App\Module\System\AdminLazyRenderable\UserInfo::make([
  31. 'user_id' => $this->show->model()->$name
  32. ]));
  33. }
  34. /**
  35. * 显示用户名
  36. *
  37. * 复用价值:高 - 在多个控制器中使用,提供统一的用户名显示
  38. *
  39. * @param string $field 字段名
  40. * @param string $label 标签名
  41. * @return Show\Field
  42. */
  43. public function fieldUsername(string $field = 'username', string $label = '用户名'): Show\Field
  44. {
  45. return $this->show->field($field, $label);
  46. }
  47. /**
  48. * 显示用户状态
  49. *
  50. * 复用价值:高 - 统一处理用户状态的显示,使用枚举类型
  51. *
  52. * @param string $field 字段名
  53. * @param string $label 标签名
  54. * @return Show\Field
  55. */
  56. public function fieldStatus(string $field = 'status2', string $label = '状态'): Show\Field
  57. {
  58. return $this->show->field($field, $label)->as(function ($value) {
  59. return STATUS2::tryFrom($value);
  60. });
  61. }
  62. /**
  63. * 显示用户头像
  64. *
  65. * 复用价值:高 - 统一处理用户头像的显示
  66. *
  67. * @param string $field 字段名
  68. * @param string $label 标签名
  69. * @return Show\Field
  70. */
  71. public function fieldAvatar(string $field = 'avatar', string $label = '头像'): Show\Field
  72. {
  73. return $this->show->field($field, $label)->image();
  74. }
  75. /**
  76. * 显示用户安全密码
  77. *
  78. * 复用价值:高 - 统一处理用户安全密码的显示,隐藏实际密码
  79. *
  80. * @param string $field 字段名
  81. * @param string $label 标签名
  82. * @return Show\Field
  83. */
  84. public function fieldSecretPassword(string $field = 'secret_password', string $label = '安全密码'): Show\Field
  85. {
  86. return $this->show->field($field, $label)->as(function ($value) {
  87. return $value ? '已设置' : '未设置';
  88. });
  89. }
  90. /**
  91. * 显示最后登录时间
  92. *
  93. * 复用价值:高 - 统一处理最后登录时间的显示
  94. *
  95. * @param string $field 字段名
  96. * @param string $label 标签名
  97. * @return Show\Field
  98. */
  99. public function fieldLastLoginTime(string $field = 'info.last_login_time', string $label = '最后登录时间'): Show\Field
  100. {
  101. return $this->show->field($field, $label)->as(function ($value) {
  102. return $value ?: '未登录';
  103. });
  104. }
  105. /**
  106. * 显示最后活动时间
  107. *
  108. * 复用价值:高 - 统一处理最后活动时间的显示
  109. *
  110. * @param string $field 字段名
  111. * @param string $label 标签名
  112. * @return Show\Field
  113. */
  114. public function fieldLastActivityTime(string $field = 'info.last_activity_time', string $label = '最后活动时间'): Show\Field
  115. {
  116. return $this->show->field($field, $label)->as(function ($value) {
  117. return $value ?: '无活动';
  118. });
  119. }
  120. /**
  121. * 显示奖励类型
  122. *
  123. * @param string $field 字段名
  124. * @param string $label 标签名
  125. * @return Show\Field
  126. */
  127. public function fieldRewardType(string $field = 'reward_type', string $label = '奖励类型'): Show\Field
  128. {
  129. return $this->show->field($field, $label)->as(function ($value) {
  130. return REWARD_TYPE::getName($value);
  131. });
  132. }
  133. /**
  134. * 显示奖励来源类型
  135. *
  136. * @param string $field 字段名
  137. * @param string $label 标签名
  138. * @return Show\Field
  139. */
  140. public function fieldRewardSourceType(string $field = 'source_type', string $label = '奖励来源'): Show\Field
  141. {
  142. return $this->show->field($field, $label)->as(function ($value) {
  143. return REWARD_SOURCE_TYPE::getName($value);
  144. });
  145. }
  146. /**
  147. * 显示奖励组
  148. *
  149. * @param string $field 字段名
  150. * @param string $label 标签名
  151. * @return Show\Field
  152. */
  153. public function fieldRewardGroup(string $field = 'group_id', string $label = '奖励组'): Show\Field
  154. {
  155. return $this->show->field($field, $label)->as(function ($value) {
  156. $group = GameRewardGroup::find($value);
  157. return $group ? "{$group->name} ({$group->code})" : "未知 ({$value})";
  158. });
  159. }
  160. /**
  161. * 显示奖励项
  162. *
  163. * @param string $field 字段名
  164. * @param string $label 标签名
  165. * @return Show\Field
  166. */
  167. public function fieldRewardItems(string $field = 'reward_items', string $label = '奖励项'): Show\Field
  168. {
  169. return $this->show->field($field, $label)->as(function ($value) {
  170. $items = json_decode($value, true);
  171. if (empty($items)) {
  172. return '无奖励项';
  173. }
  174. $headers = ['奖励类型', '目标ID', '参数1', '参数2', '数量', '额外数据'];
  175. $rows = [];
  176. foreach ($items as $item) {
  177. $rows[] = [
  178. REWARD_TYPE::getName($item['reward_type']),
  179. $item['target_id'],
  180. $item['param1'] ?? 0,
  181. $item['param2'] ?? 0,
  182. $item['quantity'],
  183. json_encode($item['extra_data'] ?? null)
  184. ];
  185. }
  186. return Card::make(
  187. Table::make($headers, $rows)
  188. );
  189. });
  190. }
  191. /**
  192. * 显示是否随机发放
  193. *
  194. * @param string $field 字段名
  195. * @param string $label 标签名
  196. * @return Show\Field
  197. */
  198. public function fieldIsRandom(string $field = 'is_random', string $label = '随机发放'): Show\Field
  199. {
  200. return $this->show->field($field, $label)->as(function ($value) {
  201. return $value ? '是' : '否';
  202. });
  203. }
  204. /**
  205. * 显示是否必中
  206. *
  207. * @param string $field 字段名
  208. * @param string $label 标签名
  209. * @return Show\Field
  210. */
  211. public function fieldIsGuaranteed(string $field = 'is_guaranteed', string $label = '必中'): Show\Field
  212. {
  213. return $this->show->field($field, $label)->as(function ($value) {
  214. return $value ? '是' : '否';
  215. });
  216. }
  217. }