UrsPartnerDividendDetailController.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. namespace App\Module\UrsPromotion\AdminControllers;
  3. use UCore\DcatAdmin\AdminController;
  4. use Spatie\RouteAttributes\Attributes\Resource;
  5. use App\Module\UrsPromotion\Models\UrsPartnerDividendDetail;
  6. use App\Module\UrsPromotion\Repositories\UrsPartnerDividendDetailRepository;
  7. use Dcat\Admin\Grid;
  8. use Dcat\Admin\Show;
  9. /**
  10. * URS合伙人分红详情管理控制器
  11. *
  12. * @route /admin/urs-promotion/partner-dividend-details
  13. */
  14. #[Resource('urs-promotion/partner-dividend-details')]
  15. class UrsPartnerDividendDetailController extends AdminController
  16. {
  17. /**
  18. * 页面标题
  19. */
  20. protected $title = '合伙人分红详情管理';
  21. /**
  22. * 模型类
  23. */
  24. protected $model = UrsPartnerDividendDetail::class;
  25. /**
  26. * 仓库类
  27. */
  28. protected $repository = UrsPartnerDividendDetailRepository::class;
  29. /**
  30. * 列表页面
  31. */
  32. protected function grid(): Grid
  33. {
  34. return Grid::make(new UrsPartnerDividendDetailRepository(['dividendRecord', 'user', 'transferOrder']), function (Grid $grid) {
  35. // 基础列配置
  36. $grid->column('id', 'ID')->sortable();
  37. $grid->column('dividend_record_id', '分红记录ID')->sortable()->display(function ($value) {
  38. return $value;
  39. })->link(function ($value) {
  40. return admin_url('urs-promotion/partner-dividend/' . $value);
  41. });
  42. $grid->column('dividendRecord.dividend_date', '分红日期')->sortable()->display(function ($value) {
  43. return $value ? date('Y-m-d', strtotime($value)) : '-';
  44. });
  45. $grid->column('user_id', '用户ID')->sortable()->display(function ($value) {
  46. return $value;
  47. })->link(function ($value) {
  48. return admin_url('user/users/' . $value);
  49. });
  50. $grid->column('urs_user_id', 'URS用户ID')->sortable();
  51. $grid->column('user.username', '用户名')->display(function ($value) {
  52. return $value ?: '未知用户';
  53. });
  54. $grid->column('talent_level', '达人等级')->sortable()->display(function ($value) {
  55. $levels = [
  56. 0 => '青铜',
  57. 1 => '白银',
  58. 2 => '黄金',
  59. 3 => '钻石',
  60. 4 => '至尊',
  61. 5 => '合伙人'
  62. ];
  63. return $levels[$value] ?? '未知';
  64. });
  65. $grid->column('dividend_amount', '分红金额')->sortable()->display(function ($value) {
  66. return number_format($value, 4) . ' 钻石';
  67. });
  68. $grid->column('status', '状态')->using([
  69. 'pending' => '待处理',
  70. 'completed' => '已完成',
  71. 'failed' => '失败'
  72. ])->label([
  73. 'pending' => 'warning',
  74. 'completed' => 'success',
  75. 'failed' => 'danger'
  76. ]);
  77. $grid->column('transfer_order_id', '转账订单ID')->display(function ($value) {
  78. if ($value) {
  79. return '<a href="' . admin_url('transfer/orders/' . $value) . '" target="_blank">' . $value . '</a>';
  80. }
  81. return '-';
  82. });
  83. $grid->column('error_message', '错误信息')->limit(50);
  84. $grid->column('created_at', '创建时间')->sortable()->display(function ($value) {
  85. return $value ? date('Y-m-d H:i:s', strtotime($value)) : '-';
  86. });
  87. // 筛选器
  88. $grid->filter(function (Grid\Filter $filter) {
  89. $filter->equal('dividend_record_id', '分红记录ID');
  90. $filter->equal('user_id', '用户ID');
  91. $filter->equal('urs_user_id', 'URS用户ID');
  92. $filter->equal('talent_level', '达人等级')->select([
  93. 0 => '青铜',
  94. 1 => '白银',
  95. 2 => '黄金',
  96. 3 => '钻石',
  97. 4 => '至尊',
  98. 5 => '合伙人'
  99. ]);
  100. $filter->equal('status', '状态')->select([
  101. 'pending' => '待处理',
  102. 'completed' => '已完成',
  103. 'failed' => '失败'
  104. ]);
  105. $filter->between('dividend_amount', '分红金额');
  106. $filter->between('created_at', '创建时间')->datetime();
  107. });
  108. // 操作配置
  109. $grid->actions(function (Grid\Displayers\Actions $actions) {
  110. $actions->disableEdit();
  111. $actions->disableDelete();
  112. });
  113. $grid->disableCreateButton();
  114. $grid->disableBatchActions();
  115. // 默认排序
  116. $grid->model()->orderBy('created_at', 'desc');
  117. });
  118. }
  119. /**
  120. * 详情页面
  121. */
  122. protected function detail($id): Show
  123. {
  124. return Show::make($id, new UrsPartnerDividendDetailRepository(['dividendRecord', 'user', 'transferOrder']), function (Show $show) {
  125. // 基础信息
  126. $show->field('id', 'ID');
  127. $show->field('dividend_record_id', '分红记录ID')->link(admin_url('urs-promotion/partner-dividend/{dividend_record_id}'), '_blank');
  128. $show->field('dividendRecord.dividend_date', '分红日期')->as(function ($value) {
  129. return $value ? date('Y-m-d', strtotime($value)) : '-';
  130. });
  131. $show->field('user_id', '用户ID')->link(admin_url('user/users/{user_id}'), '_blank');
  132. $show->field('urs_user_id', 'URS用户ID');
  133. $show->field('user.username', '用户名')->as(function ($value) {
  134. return $value ?: '未知用户';
  135. });
  136. $show->field('talent_level_name', '达人等级');
  137. $show->field('dividend_amount', '分红金额')->as(function ($value) {
  138. return number_format($value, 4) . ' 钻石';
  139. });
  140. $show->field('status', '状态')->as(function ($status) {
  141. $statuses = [
  142. 'pending' => '待处理',
  143. 'completed' => '已完成',
  144. 'failed' => '失败'
  145. ];
  146. return $statuses[$status] ?? '未知';
  147. });
  148. $show->field('error_message', '错误信息');
  149. $show->field('transfer_order_id', '转账订单ID')->as(function ($value) {
  150. if ($value) {
  151. return '<a href="' . admin_url('transfer/orders/' . $value) . '" target="_blank">' . $value . '</a>';
  152. }
  153. return '-';
  154. })->unescape();
  155. $show->field('created_at', '创建时间');
  156. $show->field('updated_at', '更新时间');
  157. // 显示关联的分红记录信息
  158. $show->divider('分红记录信息');
  159. $show->field('dividendRecord.total_fee_amount', '当日总手续费')->as(function ($value) {
  160. return number_format($value, 4) . ' 钻石';
  161. });
  162. $show->field('dividendRecord.dividend_amount', '分红总金额')->as(function ($value) {
  163. return number_format($value, 4) . ' 钻石';
  164. });
  165. $show->field('dividendRecord.partner_count', '合伙人数量');
  166. $show->field('dividendRecord.per_partner_amount', '人均分红')->as(function ($value) {
  167. return number_format($value, 4) . ' 钻石';
  168. });
  169. $show->field('dividendRecord.status', '分红记录状态')->as(function ($status) {
  170. $statuses = [
  171. 'pending' => '待处理',
  172. 'processing' => '处理中',
  173. 'completed' => '已完成',
  174. 'failed' => '失败'
  175. ];
  176. return $statuses[$status] ?? '未知';
  177. });
  178. // 显示转账订单信息
  179. if ($show->model()->transfer_order_id) {
  180. $show->divider('转账订单信息');
  181. $show->field('transferOrder.order_no', '订单号');
  182. $show->field('transferOrder.amount', '转账金额')->as(function ($value) {
  183. return number_format($value, 4) . ' 钻石';
  184. });
  185. $show->field('transferOrder.status', '转账状态');
  186. $show->field('transferOrder.created_at', '转账创建时间');
  187. $show->field('transferOrder.updated_at', '转账更新时间');
  188. }
  189. });
  190. }
  191. }