ShowHelperTrait.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace App\Module\Fund\AdminControllers\Helper;
  3. use App\Module\Fund\Enums\FUND_STATUS;
  4. use App\Module\Fund\Enums\FUND_TYPE;
  5. use App\Module\Fund\Enums\LOG_TYPE;
  6. use App\Module\Fund\Enums\OPERATE_TYPE;
  7. use App\Module\Fund\Services\AccountService;
  8. use Dcat\Admin\Show;
  9. /**
  10. * 详情页辅助特性
  11. *
  12. * 提供资金模块后台控制器的详情页构建功能的具体实现
  13. * 只保留具有复用价值的方法
  14. */
  15. trait ShowHelperTrait
  16. {
  17. /**
  18. * 显示资金账户
  19. *
  20. * 复用价值:高 - 统一处理资金账户的显示,使用AccountService获取账户描述
  21. *
  22. * @param string $field 字段名
  23. * @param string $label 标签名
  24. * @return Show\Field
  25. */
  26. public function fieldFundId(string $field = 'fund_id', string $label = '资金账户'): Show\Field
  27. {
  28. return $this->show->field($field, $label)->as(function ($value) {
  29. $fundsDesc = AccountService::getFundsDesc();
  30. return $fundsDesc[$value] ?? $value;
  31. });
  32. }
  33. /**
  34. * 显示资金余额
  35. *
  36. * 复用价值:高 - 统一处理余额的格式化显示,包括单位转换
  37. *
  38. * @param string $field 字段名
  39. * @param string $label 标签名
  40. * @return Show\Field
  41. */
  42. public function fieldBalance(string $field = 'balance', string $label = '余额'): Show\Field
  43. {
  44. return $this->show->field($field, $label)->as(function ($value) {
  45. return number_format($value / 1000, 3);
  46. });
  47. }
  48. public function fieldBalance1000(string $field = 'balance', string $label = '余额'): Show\Field
  49. {
  50. return $this->show->field($field, $label)->as(function ($value) {
  51. return number_format($value / 1000, 3);
  52. });
  53. }
  54. /**
  55. * 显示操作金额
  56. *
  57. *
  58. * @param string $field 字段名
  59. * @param string $label 标签名
  60. * @return Show\Field
  61. */
  62. public function fieldAmount(string $field = 'amount', string $label = '操作金额'): Show\Field
  63. {
  64. return $this->show->field($field, $label)->unescape()->as(function ($value) {
  65. if ($value > 0) {
  66. return "<span class='text-success'>+{$value}</span>";
  67. } elseif ($value < 0) {
  68. return "<span class='text-danger'>{$value}</span>";
  69. } else {
  70. return "<span>{$value}</span>";
  71. }
  72. });
  73. }
  74. /**
  75. * @param string $field
  76. * @param string $label
  77. * @return Show\Field
  78. */
  79. public function fieldAmount1000(string $field = 'amount', string $label = '操作金额'): Show\Field
  80. {
  81. return $this->show->field($field, $label)->unescape()->as(function ($value) {
  82. $formattedValue = number_format($value / 1000, 3);
  83. if ($value > 0) {
  84. return "<span class='text-success'>+{$formattedValue}</span>";
  85. } elseif ($value < 0) {
  86. return "<span class='text-danger'>{$formattedValue}</span>";
  87. } else {
  88. return "<span>{$formattedValue}</span>";
  89. }
  90. });
  91. }
  92. /**
  93. * 显示操作类型
  94. *
  95. * 复用价值:高 - 统一处理操作类型的显示,使用枚举类型
  96. *
  97. * @param string $field 字段名
  98. * @param string $label 标签名
  99. * @return Show\Field
  100. */
  101. public function fieldOperateType(string $field = 'operate_type', string $label = '操作类型'): Show\Field
  102. {
  103. return $this->show->field($field, $label)->as(function ($value) {
  104. try {
  105. // 使用 from() 方法获取枚举实例,然后获取描述
  106. return LOG_TYPE::from($value)->getDesc();
  107. } catch (\ValueError $e) {
  108. // 如果值不存在,返回原值
  109. return $value;
  110. }
  111. });
  112. }
  113. /**
  114. * 显示时间戳
  115. *
  116. * 复用价值:高 - 统一处理时间戳的格式化显示
  117. *
  118. * @param string $field 字段名
  119. * @param string $label 标签名
  120. * @param string $format 日期格式
  121. * @return Show\Field
  122. */
  123. public function fieldTimestamp(string $field, string $label, string $format = 'Y-m-d H:i:s'): Show\Field
  124. {
  125. return $this->show->field($field, $label)->as(function ($value) use ($format) {
  126. return $value ? date($format, $value) : '';
  127. });
  128. }
  129. /**
  130. * 显示金额(毫转元)
  131. *
  132. * 复用价值:高 - 统一处理金额的格式化显示,包括单位转换
  133. *
  134. * @param string $field 字段名
  135. * @param string $label 标签名
  136. * @param int $decimals 小数位数
  137. * @return Show\Field
  138. */
  139. public function fieldMoney(string $field, string $label, int $decimals = 3): Show\Field
  140. {
  141. return $this->show->field($field, $label)->as(function ($value) use ($decimals) {
  142. return number_format($value / 1000, $decimals);
  143. });
  144. }
  145. }