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 ""; } elseif (in_array(strtolower($extension), ['mp4', 'webm', 'ogg'])) { return ""; } elseif (in_array(strtolower($extension), ['mp3', 'wav', 'ogg'])) { return ""; } elseif (in_array(strtolower($extension), ['pdf'])) { return ""; } elseif (in_array(strtolower($extension), ['doc', 'docx'])) { return ""; } elseif (in_array(strtolower($extension), ['xls', 'xlsx'])) { return ""; } elseif (in_array(strtolower($extension), ['ppt', 'pptx'])) { return ""; } elseif (in_array(strtolower($extension), ['zip', 'rar', '7z'])) { return ""; } elseif (in_array(strtolower($extension), ['txt'])) { return ""; } else { return ""; } })->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 "下载"; })->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]; } }