show->field($field, $label); } /** * 显示文件原始名称 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldFileOriginalName(string $field = 'o_name', string $label = '原始名称'): Show\Field { return $this->show->field($field, $label); } /** * 显示文件大小 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldFileSize(string $field = 'fsize', string $label = '文件大小'): Show\Field { return $this->show->field($field, $label)->as(function ($value) { return $this->formatFileSize($value); }); } /** * 显示文件类型 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldFileType(string $field = 'type1', string $label = '文件类型'): Show\Field { return $this->show->field($field, $label); } /** * 显示文件状态 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldFileStatus(string $field = 'status', string $label = '文件状态'): Show\Field { return $this->show->field($field, $label)->as(function ($value) { return FILE_STATUS::getAll()[$value] ?? '未知'; }); } /** * 显示文件可见性 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldFileVisibility(string $field = 'private', string $label = '文件可见性'): Show\Field { return $this->show->field($field, $label)->as(function ($value) { return $value ? FILE_VISIBILITY::getAll()[FILE_VISIBILITY::PRIVATE->value] : FILE_VISIBILITY::getAll()[FILE_VISIBILITY::PUBLIC->value]; }); } /** * 显示存储磁盘 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldStorageDisk(string $field = 'storage_disk', string $label = '存储磁盘'): Show\Field { return $this->show->field($field, $label); } /** * 显示存储状态 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldStorageStatus(string $field = 'status', string $label = '存储状态'): Show\Field { return $this->show->field($field, $label)->as(function ($value) { return STORAGE_STATUS::getAll()[$value] ?? '未知'; }); } /** * 显示关联类型 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldRelationType(string $field = 're_type', string $label = '关联类型'): Show\Field { return $this->show->field($field, $label); } /** * 显示关联ID * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldRelationId(string $field = 're_id', string $label = '关联ID'): Show\Field { return $this->show->field($field, $label); } /** * 显示文件预览 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldFilePreview(string $field = 'path', string $label = '文件预览'): Show\Field { return $this->show->field($field, $label)->as(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 ""; } else { return "下载文件"; } })->unescape(); } /** * 显示图片预览 * * @param string $field 字段名 * @param string $label 标签名 * @return Show\Field */ public function fieldImagePreview(string $field = 'path', string $label = '图片预览'): Show\Field { return $this->show->field($field, $label)->image(); } /** * 格式化文件大小 * * @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]; } }