UrsPartnerDividendController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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\UrsPartnerDividendRecord;
  6. use App\Module\UrsPromotion\Repositories\UrsPartnerDividendRepository;
  7. use Dcat\Admin\Grid;
  8. use Dcat\Admin\Show;
  9. /**
  10. * URS合伙人分红管理控制器
  11. *
  12. * @route /admin/urs-promotion/partner-dividend
  13. */
  14. #[Resource('urs-promotion/partner-dividend')]
  15. class UrsPartnerDividendController extends AdminController
  16. {
  17. /**
  18. * 页面标题
  19. */
  20. protected $title = '合伙人分红管理';
  21. /**
  22. * 模型类
  23. */
  24. protected $model = UrsPartnerDividendRecord::class;
  25. /**
  26. * 仓库类
  27. */
  28. protected $repository = UrsPartnerDividendRepository::class;
  29. /**
  30. * 列表页面
  31. */
  32. protected function grid(): Grid
  33. {
  34. return Grid::make(new UrsPartnerDividendRepository(), function (Grid $grid) {
  35. // 基础列配置
  36. $grid->column('id', 'ID')->sortable();
  37. $grid->column('dividend_date', '分红日期')->sortable();
  38. $grid->column('total_fee_amount', '总手续费')->sortable()->display(function ($value) {
  39. return number_format($value, 4) . ' 钻石';
  40. });
  41. $grid->column('dividend_amount', '分红金额')->sortable()->display(function ($value) {
  42. return number_format($value, 4) . ' 钻石';
  43. });
  44. $grid->column('partner_count', '合伙人数')->sortable();
  45. $grid->column('per_partner_amount', '人均分红')->sortable()->display(function ($value) {
  46. return number_format($value, 4) . ' 钻石';
  47. });
  48. $grid->column('status', '状态')->using([
  49. 'pending' => '待处理',
  50. 'processing' => '处理中',
  51. 'completed' => '已完成',
  52. 'failed' => '失败'
  53. ])->label([
  54. 'pending' => 'warning',
  55. 'processing' => 'info',
  56. 'completed' => 'success',
  57. 'failed' => 'danger'
  58. ]);
  59. $grid->column('created_at', '创建时间')->sortable();
  60. // 操作配置
  61. $grid->actions(function (Grid\Displayers\Actions $actions) {
  62. $actions->disableEdit();
  63. $actions->disableDelete();
  64. });
  65. $grid->disableCreateButton();
  66. $grid->disableBatchActions();
  67. // 默认排序
  68. $grid->model()->orderBy('dividend_date', 'desc');
  69. });
  70. }
  71. /**
  72. * 详情页面
  73. */
  74. protected function detail($id): Show
  75. {
  76. return Show::make($id, new UrsPartnerDividendRepository(), function (Show $show) use ($id) {
  77. // 基础信息
  78. $show->field('id', 'ID');
  79. $show->field('dividend_date', '分红日期');
  80. $show->field('total_fee_amount', '总手续费')->as(function ($value) {
  81. return number_format($value, 4) . ' 钻石';
  82. });
  83. $show->field('dividend_amount', '分红金额')->as(function ($value) {
  84. return number_format($value, 4) . ' 钻石';
  85. });
  86. $show->field('partner_count', '合伙人数');
  87. $show->field('per_partner_amount', '人均分红')->as(function ($value) {
  88. return number_format($value, 4) . ' 钻石';
  89. });
  90. $show->field('status', '状态')->as(function ($status) {
  91. $statuses = [
  92. 'pending' => '待处理',
  93. 'processing' => '处理中',
  94. 'completed' => '已完成',
  95. 'failed' => '失败'
  96. ];
  97. return $statuses[$status] ?? '未知';
  98. });
  99. $show->field('error_message', '错误信息');
  100. $show->field('created_at', '创建时间');
  101. $show->field('updated_at', '更新时间');
  102. // 显示分红详情链接
  103. $show->field('partner_count', '分红详情')->as(function ($value) use ($id) {
  104. // 使用传入的ID参数构建链接
  105. $detailsUrl = admin_url('urs-promotion/partner-dividend-details?dividend_record_id=' . $id);
  106. return '<a href="' . $detailsUrl . '" class="btn btn-primary btn-sm" target="_blank">
  107. <i class="fa fa-list-alt"></i> 查看分红详情 (' . $value . '个合伙人)
  108. </a>';
  109. })->unescape();
  110. });
  111. }
  112. }