FarmSeedLazyRenderable.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace App\Module\Farm\AdminControllers\LazyRenderable;
  3. use App\Module\Farm\Enums\SEED_TYPE;
  4. use App\Module\Farm\Models\FarmSeed;
  5. use App\Module\Farm\Repositories\FarmSeedRepository;
  6. use Dcat\Admin\Grid;
  7. use UCore\DcatAdmin\Grid\SelectTable;
  8. /**
  9. * 种子选择表格渲染类
  10. */
  11. class FarmSeedLazyRenderable extends \UCore\DcatAdmin\Grid\LazyRenderable implements SelectTable
  12. {
  13. /**
  14. * 仓库类
  15. *
  16. * @var string
  17. */
  18. static $repository = FarmSeedRepository::class;
  19. /**
  20. * 渲染表格
  21. *
  22. * @return Grid
  23. */
  24. public function grid(): Grid
  25. {
  26. // 获取外部传递的参数
  27. $type = $this->type;
  28. return Grid::make(new self::$repository, function (Grid $grid) use ($type) {
  29. if ($type) {
  30. $grid->model()->where('type', $type);
  31. }
  32. $grid->column('id', 'ID')->sortable();
  33. $grid->column('name', '种子名称');
  34. $grid->column('type', '种子类型')->display(function ($value) {
  35. return "<span class='badge badge-info'>" . SEED_TYPE::getName($value) . "</span>";
  36. });
  37. $grid->column('item_id', '产出物品')->display(function ($value) {
  38. if (empty($value)) {
  39. return '-';
  40. }
  41. try {
  42. $item = \App\Module\GameItems\Models\Item::find($value);
  43. if ($item) {
  44. return "<span class='badge badge-success'>{$item->name}</span> <small>ID: {$item->id}</small>";
  45. }
  46. } catch (\Exception $e) {
  47. // 忽略异常
  48. }
  49. return $value;
  50. });
  51. $grid->column('min_output', '产出范围')->display(function () {
  52. return "{$this->min_output} - {$this->max_output}";
  53. });
  54. $grid->column('created_at', '创建时间')->sortable();
  55. $grid->quickSearch(['id', 'name']);
  56. $grid->filter(function (Grid\Filter $filter) {
  57. $filter->equal('id', 'ID');
  58. $filter->like('name', '种子名称');
  59. $filter->equal('type', '种子类型')->select(SEED_TYPE::getAll());
  60. $filter->equal('item_id', '产出物品ID');
  61. $filter->between('min_output', '最小产出');
  62. $filter->between('max_output', '最大产出');
  63. });
  64. $grid->paginate(10);
  65. $grid->disableActions();
  66. });
  67. }
  68. /**
  69. * 获取模型类名
  70. *
  71. * @return string
  72. */
  73. public function getModel(): string
  74. {
  75. return FarmSeed::class;
  76. }
  77. /**
  78. * 获取模型选择ID字段
  79. *
  80. * @return string
  81. */
  82. public function getModelSelectId(): string
  83. {
  84. return 'id';
  85. }
  86. /**
  87. * 获取模型显示名称字段
  88. *
  89. * @return string
  90. */
  91. public function getModelViewName(): string
  92. {
  93. return 'name';
  94. }
  95. }