FundLogController.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace App\Module\Fund\AdminControllers;
  3. use App\Module\Fund\Admin\Actions\BackToFundAction;
  4. use App\Module\Fund\AdminControllers\Helper\FilterHelper;
  5. use App\Module\Fund\AdminControllers\Helper\FormHelper;
  6. use App\Module\Fund\AdminControllers\Helper\GridHelper;
  7. use App\Module\Fund\AdminControllers\Helper\ShowHelper;
  8. use App\Module\Fund\Enums\LOG_TYPE;
  9. use App\Module\Fund\Enums\OPERATE_TYPE;
  10. use App\Module\Fund\Models\FundModel;
  11. use App\Module\Fund\Services\AccountService;
  12. use App\Module\Fund\Services\LogService;
  13. use Spatie\RouteAttributes\Attributes\Resource;
  14. use UCore\DcatAdmin\AdminController;
  15. use Dcat\Admin\Form;
  16. use Dcat\Admin\Grid;
  17. use Dcat\Admin\Show;
  18. use App\Module\Fund\Repositorys\FundLogRepository as FundLog;
  19. use UCore\DcatAdmin\Metrics\Examples\Link;
  20. /**
  21. * 资金日志
  22. */
  23. #[Resource('fund-logs', names: 'dcat.admin.fund-logs')]
  24. class FundLogController extends AdminController
  25. {
  26. /**
  27. * 页面标题
  28. *
  29. * @var string
  30. */
  31. protected $title = '资金日志';
  32. /**
  33. * 日志服务
  34. *
  35. * @var LogService
  36. */
  37. protected $service;
  38. /**
  39. * 构造函数
  40. */
  41. public function __construct()
  42. {
  43. $this->service = new LogService();
  44. }
  45. /**
  46. * 列表页面
  47. *
  48. * @return Grid
  49. */
  50. protected function grid()
  51. {
  52. return Grid::make(new FundLog(['user']), function (Grid $grid) {
  53. // 使用GridHelper
  54. $helper = new GridHelper($grid, $this);
  55. // 使用高复用价值的列方法
  56. $grid->column('id', 'ID')->sortable();
  57. $helper->columnUserFund(); // 组合列,显示用户ID和资金账户
  58. $helper->columnAmount(); // 格式化金额显示,带颜色
  59. $helper->columnMoney('before_balance', '之前余额'); // 格式化金额显示
  60. $helper->columnMoney('later_balance', '之后余额'); // 格式化金额显示
  61. $grid->column('remark', '备注')->limit(30);
  62. $helper->columnTimestamp('create_time', '操作时间'); // 格式化时间戳
  63. // 关联操作列
  64. $helper->columnModelCats('operate_type', '关联')->expand(function() {
  65. $url = admin_url('404');
  66. $title = '未知';
  67. if($this->operate_type === LOG_TYPE::CIRCULATION){
  68. $url = admin_route('fund-circulation.index',['id'=>$this->operate_id]);
  69. $title = '流转';
  70. }
  71. if($this->operate_type === LOG_TYPE::ADMIN){
  72. $url = admin_route('fund-admin.index',['id'=>$this->operate_id]);
  73. $title = '管理员操作';
  74. }
  75. // dump($this->operate_type);
  76. $link = new Link($title,$url);
  77. return $link;
  78. });
  79. // 禁用不需要的功能
  80. $grid->disableCreateButton();
  81. $grid->disableDeleteButton();
  82. // 筛选器
  83. $grid->filter(function (Grid\Filter $filter) {
  84. // 使用FilterHelper
  85. $helper = new FilterHelper($filter, $this);
  86. // 直接实现资金日志筛选组
  87. $filter->equal('user_id', '用户ID');
  88. $helper->equalFundId();
  89. $helper->betweenAmount();
  90. $filter->like('remark', '备注');
  91. $helper->betweenTimestamp('create_time', '创建时间');
  92. });
  93. // 操作按钮
  94. $grid->actions(function (Grid\Displayers\Actions $actions) {
  95. $actions->disableEdit();
  96. $actions->disableDelete();
  97. $actions->append(new BackToFundAction());
  98. });
  99. });
  100. }
  101. /**
  102. * 详情页面
  103. *
  104. * @param mixed $id
  105. * @return Show
  106. */
  107. protected function detail($id)
  108. {
  109. return Show::make($id, new FundLog(), function (Show $show) {
  110. // 使用ShowHelper
  111. $helper = new ShowHelper($show, $this);
  112. // 直接实现资金日志详情面板
  113. $show->divider('操作信息');
  114. $show->field('user_id', '用户ID');
  115. $helper->fieldFundId();
  116. $helper->fieldAmount();
  117. $helper->field('before_balance','操作前');
  118. $helper->field('later_balance','操作后');
  119. $helper->fieldOperateType();
  120. $show->field('remark', '备注');
  121. $helper->fieldTimestamp('create_time', '创建时间');
  122. // $later_balance
  123. // $before_balance
  124. // 显示关联的资金账户
  125. $show->relation('account', '资金账户', function ($model) {
  126. $show = Show::make($model, new FundModel( ));
  127. // 在关联显示中也使用ShowHelper
  128. $helper = new ShowHelper($show, $this);
  129. // 直接实现资金账户详情面板
  130. $show->divider('账户信息');
  131. $show->field('user_id', '用户ID');
  132. $helper->fieldFundId();
  133. $helper->fieldBalance();
  134. $helper->fieldTimestamp('create_time', '创建时间');
  135. $helper->fieldTimestamp('update_time', '更新时间');
  136. return $show;
  137. });
  138. });
  139. }
  140. /**
  141. * 表单页面
  142. *
  143. * @return Form
  144. */
  145. protected function form()
  146. {
  147. return Form::make(new FundLog(), function (Form $form) {
  148. // 使用FormHelper
  149. $helper = new FormHelper($form, $this);
  150. $form->display('id', 'ID');
  151. // 使用高复用价值的表单方法组
  152. $helper->addFundOperationFields(); // 添加完整的资金操作表单组
  153. $form->display('create_time', '创建时间');
  154. // 保存前回调
  155. $form->saving(function (Form $form) {
  156. // 检查用户和资金账户是否存在
  157. if ($form->isCreating()) {
  158. $userId = $form->user_id;
  159. $fundId = $form->fund_id;
  160. $user = \App\Module\User\Models\User::find($userId);
  161. if (!$user) {
  162. return $form->response()->error('用户ID不存在');
  163. }
  164. $account = \App\Module\Fund\Models\FundAccount::where('user_id', $userId)
  165. ->where('fund_id', $fundId)
  166. ->first();
  167. if (!$account) {
  168. return $form->response()->error('资金账户不存在');
  169. }
  170. }
  171. });
  172. // 保存后回调
  173. $form->saved(function (Form $form) {
  174. // 更新资金账户余额
  175. if ($form->isCreating()) {
  176. $this->service->updateAccountBalance($form->user_id, $form->fund_id, $form->amount);
  177. return $form->response()->success('保存成功,资金账户余额已更新');
  178. }
  179. });
  180. });
  181. }
  182. }