ShowHelperTrait.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. /**
  49. * 显示资金状态
  50. *
  51. * 复用价值:高 - 统一处理资金状态的显示,使用枚举类型
  52. *
  53. * @param string $field 字段名
  54. * @param string $label 标签名
  55. * @return Show\Field
  56. */
  57. public function fieldStatus(string $field = 'status', string $label = '状态'): Show\Field
  58. {
  59. return $this->show->field($field, $label)->as(function ($value) {
  60. return FUND_STATUS::getName($value);
  61. });
  62. }
  63. /**
  64. * 显示操作金额
  65. *
  66. * 复用价值:高 - 统一处理操作金额的格式化显示,包括正负值的颜色区分
  67. *
  68. * @param string $field 字段名
  69. * @param string $label 标签名
  70. * @return Show\Field
  71. */
  72. public function fieldAmount(string $field = 'amount', string $label = '操作金额'): Show\Field
  73. {
  74. return $this->show->field($field, $label)->as(function ($value) {
  75. $formattedValue = number_format($value / 1000, 3);
  76. if ($value > 0) {
  77. return "<span class='text-success'>+{$formattedValue}</span>";
  78. } elseif ($value < 0) {
  79. return "<span class='text-danger'>{$formattedValue}</span>";
  80. } else {
  81. return "<span>{$formattedValue}</span>";
  82. }
  83. });
  84. }
  85. /**
  86. * 显示操作类型
  87. *
  88. * 复用价值:高 - 统一处理操作类型的显示,使用枚举类型
  89. *
  90. * @param string $field 字段名
  91. * @param string $label 标签名
  92. * @return Show\Field
  93. */
  94. public function fieldOperateType(string $field = 'operate_type', string $label = '操作类型'): Show\Field
  95. {
  96. return $this->show->field($field, $label)->as(function ($value) {
  97. return LOG_TYPE::getName($value);
  98. });
  99. }
  100. /**
  101. * 显示时间戳
  102. *
  103. * 复用价值:高 - 统一处理时间戳的格式化显示
  104. *
  105. * @param string $field 字段名
  106. * @param string $label 标签名
  107. * @param string $format 日期格式
  108. * @return Show\Field
  109. */
  110. public function fieldTimestamp(string $field, string $label, string $format = 'Y-m-d H:i:s'): Show\Field
  111. {
  112. return $this->show->field($field, $label)->as(function ($value) use ($format) {
  113. return $value ? date($format, $value) : '';
  114. });
  115. }
  116. /**
  117. * 显示金额(毫转元)
  118. *
  119. * 复用价值:高 - 统一处理金额的格式化显示,包括单位转换
  120. *
  121. * @param string $field 字段名
  122. * @param string $label 标签名
  123. * @param int $decimals 小数位数
  124. * @return Show\Field
  125. */
  126. public function fieldMoney(string $field, string $label, int $decimals = 3): Show\Field
  127. {
  128. return $this->show->field($field, $label)->as(function ($value) use ($decimals) {
  129. return number_format($value / 1000, $decimals);
  130. });
  131. }
  132. }