EpisodesListController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace App\Admin\Controllers\Episode;
  3. /* 设置内存 保证上传到 OSS */
  4. ini_set('memory_limit', '512M');
  5. use App\Admin\Actions\Grid\BatchEditEpisodeList;
  6. use App\Models\Episode;
  7. use App\Models\EpisodesList;
  8. use Dcat\Admin\Form;
  9. use Dcat\Admin\Grid;
  10. use Dcat\Admin\Layout\Content;
  11. use Dcat\Admin\Http\Controllers\AdminController;
  12. class EpisodesListController extends AdminController
  13. {
  14. /* @var Episode $episode */
  15. private $episode;
  16. protected function title()
  17. {
  18. return $this->episode->name;
  19. }
  20. protected function content(Content $content, $episodeId = 0)
  21. {
  22. $this->episode = Episode::find($episodeId);
  23. return $content
  24. ->translation($this->translation())
  25. ->breadcrumb(
  26. ['text' => $this->episode->name, 'url' => "/episodes/{$this->episode->id}/lists"],
  27. ['text' => '剧集上传'],
  28. )
  29. ->title($this->title())
  30. ->description('剧集上传');
  31. }
  32. public function index(Content $content, $episodeId = 0)
  33. {
  34. return $this->content($content, $episodeId)
  35. ->body($this->grid());
  36. }
  37. public function create(Content $content, $episodeId = 0)
  38. {
  39. return $this->content($content, $episodeId)
  40. ->body($this->form());
  41. }
  42. public function update($episodeId, $id = 0)
  43. {
  44. $this->episode = Episode::find($episodeId);
  45. return $this->form()->update($id);
  46. }
  47. public function store($episodeId = 0)
  48. {
  49. $this->episode = Episode::find($episodeId);
  50. return $this->form()->store();
  51. }
  52. public function edit($episodeId, Content $content, $id = 0)
  53. {
  54. return $this->content($content, $episodeId)
  55. ->body($this->form()->edit($id));
  56. }
  57. public function destroy($episodeId, $id = 0)
  58. {
  59. $this->episode = Episode::find($episodeId);
  60. parent::destroy($id);
  61. return $this->form()->destroy($id);
  62. }
  63. /**
  64. * Make a grid builder.
  65. *
  66. * @return Grid
  67. */
  68. protected function grid()
  69. {
  70. return Grid::make(EpisodesList::with(['episode'])->where('episodes_id', $this->episode->id), function (Grid $grid) {
  71. $grid->model()->orderBy('sort');
  72. // $grid->column('id');
  73. $grid->column('sort')->display(function () {
  74. return '第' . $this->sort . '集';
  75. })->editable(true);
  76. $grid->column('episode.name', '剧集名称');
  77. $grid->column('is_free')
  78. ->using(config('global.episode_free'))
  79. ->label(['success', 'primary'])->sortable();
  80. $grid->column('origin_price')->editable();
  81. $grid->column('sale_price')->editable();
  82. $grid->column('url')->display(function () {
  83. return '<a href="' . $this->url . '">视频链接</a>';
  84. });
  85. $url = admin_url('/episodes/batch/' . $this->episode->id . '/upload');
  86. $grid->tools('<a href="' . $url . '" class="btn btn-primary btn-outline">
  87. <i class="feather icon-upload"></i><span class="d-none d-sm-inline">&nbsp;&nbsp;批量上传</span></a>');
  88. $grid->hideColumns(['id']);
  89. $grid->batchActions([new BatchEditEpisodeList()]);
  90. $grid->disableViewButton();
  91. });
  92. }
  93. /**
  94. * Make a form builder.
  95. *
  96. * @return Form
  97. */
  98. protected function form()
  99. {
  100. return Form::make(new EpisodesList(), function (Form $form) {
  101. $sort = EpisodesList::where('episodes_id', $this->episode->id)->max('sort');
  102. $form->hidden('id');
  103. $form->hidden('episodes_id')->value($this->episode->id);
  104. $form->number('sort')->default($sort + 1)->min(1);
  105. $form->radio('is_free')
  106. ->options(config('global.episode_free'))
  107. ->when(0, function (Form $form) {
  108. $form->number('sale_price')->min(1);
  109. })->default(1);
  110. $form->file('url')
  111. ->chunkSize(4096)
  112. ->maxSize(1024 * 1024)
  113. ->saveFullUrl()
  114. ->mimeTypes('video/*')
  115. ->uniqueName()->autoUpload()
  116. ->autoSave(false)
  117. ->removable(false)
  118. ->width(4)->required();
  119. $form->display('created_at');
  120. $form->disableViewButton();
  121. $form->disableDeleteButton();
  122. $form->disableListButton();
  123. $form->disableEditingCheck();
  124. $form->disableViewCheck();
  125. $form->disableCreatingCheck();
  126. });
  127. }
  128. }