FileController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace App\Module\File\AdminControllers;
  3. use App\Module\File\AdminControllers\Helper\FileHelper;
  4. use App\Module\File\AdminControllers\Helper\FilterHelper;
  5. use App\Module\File\AdminControllers\Helper\FormHelper;
  6. use App\Module\File\AdminControllers\Helper\GridHelper;
  7. use App\Module\File\AdminControllers\Helper\ShowHelper;
  8. use App\Module\File\Enums\FILE_STATUS;
  9. use App\Module\File\Enums\FILE_VISIBILITY;
  10. use App\Module\File\Models\FileFile;
  11. use App\Module\File\Services\FileService;
  12. use Dcat\Admin\Form;
  13. use Dcat\Admin\Grid;
  14. use Dcat\Admin\Show;
  15. use Spatie\RouteAttributes\Attributes\Resource;
  16. use UCore\DcatAdmin\AdminController;
  17. /**
  18. * 文件管理控制器
  19. */
  20. #[Resource('file-files', names: 'dcat.admin.file-files')]
  21. class FileController extends AdminController
  22. {
  23. /**
  24. * 页面标题
  25. *
  26. * @var string
  27. */
  28. protected $title = '文件管理';
  29. /**
  30. * 文件服务
  31. *
  32. * @var FileService
  33. */
  34. protected $service;
  35. /**
  36. * 构造函数
  37. */
  38. public function __construct()
  39. {
  40. $this->service = new FileService();
  41. }
  42. /**
  43. * 列表页面
  44. *
  45. * @return Grid
  46. */
  47. protected function grid()
  48. {
  49. return Grid::make(new FileFile(), function (Grid $grid) {
  50. $helper = new GridHelper($grid, $this);
  51. $helper->columnId();
  52. $helper->columnFilePath();
  53. $helper->columnFileOriginalName();
  54. $helper->columnFileSize();
  55. $helper->columnFileType();
  56. $helper->columnFileStatus();
  57. $helper->columnFileVisibility();
  58. $helper->columnRelationType();
  59. $helper->columnRelationId();
  60. $helper->columnFilePreview();
  61. $helper->columnCreatedAt();
  62. $helper->columnUpdatedAt();
  63. // 添加下载按钮
  64. $grid->column('download', '操作')->display(function () {
  65. $url = $this->service->getFileUrl($this->id);
  66. return "<a href='{$url}' target='_blank' class='btn btn-sm btn-primary'>下载</a>";
  67. })->unescape();
  68. // 筛选器
  69. $grid->filter(function (Grid\Filter $filter) {
  70. $helper = new FilterHelper($filter, $this);
  71. $helper->equalFileId();
  72. $helper->likeFilePath();
  73. $helper->likeFileOriginalName();
  74. $helper->equalFileType();
  75. $helper->equalFileStatus();
  76. $helper->equalFileVisibility();
  77. $helper->equalRelationType();
  78. $helper->equalRelationId();
  79. $helper->equalUserId();
  80. $helper->betweenCreatedAt();
  81. });
  82. });
  83. }
  84. /**
  85. * 详情页面
  86. *
  87. * @param mixed $id
  88. * @return Show
  89. */
  90. protected function detail($id)
  91. {
  92. return Show::make($id, new FileFile(), function (Show $show) {
  93. $helper = new ShowHelper($show, $this);
  94. $helper->fieldId();
  95. $helper->fieldFilePath();
  96. $helper->fieldFileOriginalName();
  97. $helper->fieldFileSize();
  98. $helper->fieldFileType();
  99. $helper->fieldFileStatus();
  100. $helper->fieldFileVisibility();
  101. $helper->fieldRelationType();
  102. $helper->fieldRelationId();
  103. $helper->fieldFilePreview();
  104. $helper->fieldCreatedAt();
  105. $helper->fieldUpdatedAt();
  106. // 添加下载按钮
  107. $show->html(function () use ($show) {
  108. $url = $this->service->getFileUrl($this->id);
  109. return "<a href='{$url}' target='_blank' class='btn btn-primary'>下载文件</a>";
  110. });
  111. });
  112. }
  113. /**
  114. * 表单页面
  115. *
  116. * @return Form
  117. */
  118. protected function form()
  119. {
  120. return Form::make(new FileFile(), function (Form $form) {
  121. $helper = new FormHelper($form, $this);
  122. $form->display('id');
  123. // 文件上传
  124. $helper->fileUpload();
  125. // 文件属性
  126. $helper->radioFileVisibility();
  127. $helper->radioFileStatus();
  128. $helper->textRelationType();
  129. $helper->numberRelationId();
  130. $helper->numberUserId();
  131. $form->display('created_at');
  132. $form->display('updated_at');
  133. // 保存前回调
  134. $form->saving(function (Form $form) {
  135. // 如果是新建文件,则使用文件服务上传
  136. if ($form->isCreating()) {
  137. $file = $form->file;
  138. if ($file) {
  139. $userId = $form->user_id ?: 0;
  140. $reType = $form->re_type ?: '';
  141. $reId = $form->re_id ?: 0;
  142. // 使用文件服务上传文件
  143. $fileModel = $this->service->uploadFile($file, $userId, $reType, $reId);
  144. // 将文件模型的属性赋值给表单
  145. $form->path = $fileModel->path;
  146. $form->o_name = $fileModel->o_name;
  147. $form->fsize = $fileModel->fsize;
  148. $form->type1 = $fileModel->type1;
  149. }
  150. }
  151. });
  152. });
  153. }
  154. }