| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- <?php
- namespace App\Module\File\AdminControllers\Helper;
- use App\Module\File\Enums\FILE_STATUS;
- use App\Module\File\Enums\FILE_VISIBILITY;
- use App\Module\File\Enums\STORAGE_STATUS;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Grid\Column;
- /**
- * 列表页辅助特性
- *
- * 提供文件模块后台控制器的列表页构建功能的具体实现
- */
- trait GridHelperTrait
- {
- /**
- * 添加文件路径列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @param int $limit 限制长度
- * @return Column
- */
- public function columnFilePath(string $field = 'path', string $label = '文件路径', int $limit = 30): Column
- {
- return $this->grid->column($field, $label)->limit($limit);
- }
- /**
- * 添加文件原始名称列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @param int $limit 限制长度
- * @return Column
- */
- public function columnFileOriginalName(string $field = 'o_name', string $label = '原始名称', int $limit = 30): Column
- {
- return $this->grid->column($field, $label)->limit($limit);
- }
- /**
- * 添加文件大小列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnFileSize(string $field = 'fsize', string $label = '文件大小'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return $this->formatFileSize($value);
- });
- }
- /**
- * 添加文件类型列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnFileType(string $field = 'type1', string $label = '文件类型'): Column
- {
- return $this->grid->column($field, $label);
- }
- /**
- * 添加文件状态列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnFileStatus(string $field = 'status', string $label = '文件状态'): Column
- {
- return $this->grid->column($field, $label)
- ->using(FILE_STATUS::getAll())
- ->label([
- FILE_STATUS::NORMAL->value => 'success',
- FILE_STATUS::DELETED->value => 'danger',
- ]);
- }
- /**
- * 添加文件可见性列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnFileVisibility(string $field = 'private', string $label = '文件可见性'): Column
- {
- return $this->grid->column($field, $label)
- ->display(function ($value) {
- return $value ? FILE_VISIBILITY::getAll()[FILE_VISIBILITY::PRIVATE->value] : FILE_VISIBILITY::getAll()[FILE_VISIBILITY::PUBLIC->value];
- })
- ->label([
- 0 => 'info',
- 1 => 'warning',
- ]);
- }
- /**
- * 添加存储磁盘列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnStorageDisk(string $field = 'storage_disk', string $label = '存储磁盘'): Column
- {
- return $this->grid->column($field, $label);
- }
- /**
- * 添加存储状态列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnStorageStatus(string $field = 'status', string $label = '存储状态'): Column
- {
- return $this->grid->column($field, $label)
- ->using(STORAGE_STATUS::getAll())
- ->label([
- STORAGE_STATUS::DISABLED->value => 'danger',
- STORAGE_STATUS::ENABLED->value => 'success',
- ]);
- }
- /**
- * 添加关联类型列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnRelationType(string $field = 're_type', string $label = '关联类型'): Column
- {
- return $this->grid->column($field, $label);
- }
- /**
- * 添加关联ID列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnRelationId(string $field = 're_id', string $label = '关联ID'): Column
- {
- return $this->grid->column($field, $label);
- }
- /**
- * 添加文件预览列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnFilePreview(string $field = 'path', string $label = '文件预览'): Column
- {
- return $this->grid->column($field, $label)->display(function ($path) {
- $extension = pathinfo($path, PATHINFO_EXTENSION);
- $url = $this->getFileUrl($this->id);
-
- if (in_array(strtolower($extension), ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'])) {
- return "<img src='{$url}' style='max-width:50px;max-height:50px;' />";
- } elseif (in_array(strtolower($extension), ['mp4', 'webm', 'ogg'])) {
- return "<i class='fa fa-file-video-o'></i>";
- } elseif (in_array(strtolower($extension), ['mp3', 'wav', 'ogg'])) {
- return "<i class='fa fa-file-audio-o'></i>";
- } elseif (in_array(strtolower($extension), ['pdf'])) {
- return "<i class='fa fa-file-pdf-o'></i>";
- } elseif (in_array(strtolower($extension), ['doc', 'docx'])) {
- return "<i class='fa fa-file-word-o'></i>";
- } elseif (in_array(strtolower($extension), ['xls', 'xlsx'])) {
- return "<i class='fa fa-file-excel-o'></i>";
- } elseif (in_array(strtolower($extension), ['ppt', 'pptx'])) {
- return "<i class='fa fa-file-powerpoint-o'></i>";
- } elseif (in_array(strtolower($extension), ['zip', 'rar', '7z'])) {
- return "<i class='fa fa-file-archive-o'></i>";
- } elseif (in_array(strtolower($extension), ['txt'])) {
- return "<i class='fa fa-file-text-o'></i>";
- } else {
- return "<i class='fa fa-file-o'></i>";
- }
- })->unescape();
- }
- /**
- * 添加图片预览列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnImagePreview(string $field = 'path', string $label = '图片预览'): Column
- {
- return $this->grid->column($field, $label)->image('', 50, 50);
- }
- /**
- * 添加文件操作列
- *
- * @return Column
- */
- public function columnFileActions(): Column
- {
- return $this->grid->column('操作')->display(function () {
- $url = $this->getFileUrl($this->id);
- return "<a href='{$url}' target='_blank' class='btn btn-sm btn-primary'>下载</a>";
- })->unescape();
- }
- /**
- * 格式化文件大小
- *
- * @param int $size 文件大小(字节)
- * @return string
- */
- protected function formatFileSize(int $size): string
- {
- $units = ['B', 'KB', 'MB', 'GB', 'TB'];
-
- $i = 0;
- while ($size >= 1024 && $i < count($units) - 1) {
- $size /= 1024;
- $i++;
- }
-
- return round($size, 2) . ' ' . $units[$i];
- }
- }
|