PointConfigController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Module\Point\AdminControllers;
  3. use App\Module\Point\AdminControllers\Helper\FilterHelper;
  4. use App\Module\Point\AdminControllers\Helper\FormHelper;
  5. use App\Module\Point\AdminControllers\Helper\GridHelper;
  6. use App\Module\Point\AdminControllers\Helper\ShowHelper;
  7. use App\Module\Point\Models\PointConfigModel;
  8. use App\Module\Point\Models\PointCurrencyModel;
  9. use App\Module\Point\Repositorys\PointConfigRepository;
  10. use Dcat\Admin\Form;
  11. use Dcat\Admin\Grid;
  12. use Dcat\Admin\Show;
  13. use Spatie\RouteAttributes\Attributes\Resource;
  14. use UCore\DcatAdmin\AdminController;
  15. /**
  16. * 种植点数配置控制器
  17. *
  18. * 路由: /admin/point/point-config
  19. * 菜单: 积分管理 -> 点数配置
  20. * 功能: 管理种植点数账户的配置信息
  21. */
  22. #[Resource('point-point-config', names: 'dcat.admin.point-config')]
  23. class PointConfigController extends AdminController
  24. {
  25. /**
  26. * 数据仓库
  27. */
  28. protected string $repository = PointConfigRepository::class;
  29. /**
  30. * 页面标题
  31. */
  32. protected $title = '点数配置';
  33. /**
  34. * 列表页面
  35. */
  36. protected function grid(): Grid
  37. {
  38. return Grid::make(new PointConfigRepository(), function (Grid $grid) {
  39. $gridHelper = new GridHelper($grid,$this);
  40. $grid->column('id', 'ID')->sortable();
  41. $grid->column('name', '配置名称');
  42. $grid->column('currency.name', '积分类型');
  43. $gridHelper->columnPointId('type', '账户类型');
  44. $gridHelper->columnTimestamp('create_time', '创建时间');
  45. $gridHelper->columnTimestamp('update_time', '更新时间');
  46. $grid->filter(function (Grid\Filter $filter) {
  47. $filterHelper = new FilterHelper($filter,$this);
  48. $filter->like('name', '配置名称');
  49. $filter->equal('currency_id', '积分类型')->select(PointCurrencyModel::getAllCurrencies()->pluck('name', 'id')->toArray());
  50. $filterHelper->equalPointId('type', '账户类型');
  51. $filterHelper->betweenTimestamp('create_time', '创建时间');
  52. });
  53. $grid->tools(function (Grid\Tools $tools) {
  54. $tools->append('<a href="/admin/point/point-currency" class="btn btn-sm btn-primary">积分类型</a>');
  55. });
  56. });
  57. }
  58. /**
  59. * 详情页面
  60. */
  61. protected function detail($id): Show
  62. {
  63. return Show::make($id, new PointConfigRepository(), function (Show $show) {
  64. $showHelper = new ShowHelper($show,$this);
  65. $show->field('id', 'ID');
  66. $show->field('name', '配置名称');
  67. $show->field('currency.name', '积分类型');
  68. $showHelper->fieldPointId('type', '账户类型');
  69. $showHelper->fieldJson('display_attributes', '显示属性');
  70. $showHelper->fieldTimestamp('create_time', '创建时间');
  71. $showHelper->fieldTimestamp('update_time', '更新时间');
  72. });
  73. }
  74. /**
  75. * 表单页面
  76. */
  77. protected function form(): Form
  78. {
  79. return Form::make(new PointConfigRepository(), function (Form $form) {
  80. $formHelper = new FormHelper($form,$this);
  81. $form->display('id', 'ID');
  82. $form->text('name', '配置名称')->required();
  83. $form->select('currency_id', '积分类型')->options(PointCurrencyModel::getAllCurrencies()->pluck('name', 'id')->toArray())->required();
  84. $formHelper->selectPointId('type', '账户类型');
  85. $formHelper->textareaJson('display_attributes', '显示属性');
  86. $formHelper->hiddenTimestamps();
  87. $form->saving(function (Form $form) {
  88. // 检查类型是否已存在
  89. $excludeId = $form->isEditing() ? $form->model()->id : null;
  90. if ($excludeId) {
  91. // 编辑时检查是否有其他记录使用相同类型
  92. $exists = PointConfigModel::where('type', $form->type)
  93. ->where('id', '!=', $excludeId)
  94. ->exists();
  95. } else {
  96. // 新建时检查类型是否已存在
  97. $exists = PointConfigModel::typeExists($form->type);
  98. }
  99. if ($exists) {
  100. return $form->response()->error('该积分账户类型已存在');
  101. }
  102. if ($form->isCreating()) {
  103. $form->create_time = time();
  104. }
  105. $form->update_time = time();
  106. });
  107. });
  108. }
  109. }