grid = $grid; $this->controller = $controller; } /** * 添加ID列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnId(string $field = 'id', string $label = 'ID'): Grid\Column { return $this->grid->column($field, $label)->sortable(); } /** * 添加创建时间列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnCreatedAt(string $field = 'created_at', string $label = '创建时间'): Grid\Column { return $this->grid->column($field, $label)->sortable(); } /** * 添加更新时间列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnUpdatedAt(string $field = 'updated_at', string $label = '更新时间'): Grid\Column { return $this->grid->column($field, $label)->sortable(); } /** * 添加状态列 * * @param string $field * @param string $label * @param array $options * @return Grid\Column */ public function columnStatus(string $field = 'status', string $label = '状态', array $options = []): Grid\Column { $defaultOptions = [ 0 => '禁用', 1 => '启用', ]; $options = array_merge($defaultOptions, $options); return $this->grid->column($field, $label) ->using($options) ->dot([ 0 => 'danger', 1 => 'success', ], 'warning'); } /** * 添加操作列 * * @param string $label * @param callable|null $callback * @return Grid\Column */ public function columnActions(string $label = '操作', ?callable $callback = null): Grid\Column { $column = $this->grid->column('actions', $label); if ($callback) { $column->display($callback); } return $column; } /** * 添加图片列 * * @param string $field * @param string $label * @param int $width * @param int $height * @return Grid\Column */ public function columnImage(string $field, string $label, int $width = 50, int $height = 50): Grid\Column { return $this->grid->column($field, $label)->image('', $width, $height); } /** * 添加链接列 * * @param string $field * @param string $label * @param string $target * @return Grid\Column */ public function columnLink(string $field, string $label, string $target = '_blank'): Grid\Column { return $this->grid->column($field, $label)->link($target); } /** * 添加标签列 * * @param string $field * @param string $label * @param array $colors * @return Grid\Column */ public function columnLabel(string $field, string $label, array $colors = []): Grid\Column { $column = $this->grid->column($field, $label)->label(); if (!empty($colors)) { $column->using($colors); } return $column; } /** * 添加进度条列 * * @param string $field * @param string $label * @param string $style * @param int $max * @return Grid\Column */ public function columnProgressBar(string $field, string $label, string $style = 'primary', int $max = 100): Grid\Column { return $this->grid->column($field, $label)->progressBar($style, 'sm', $max); } /** * 添加开关列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnSwitch(string $field, string $label): Grid\Column { return $this->grid->column($field, $label)->switch(); } /** * 添加复选框列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnCheckbox(string $field = 'id', string $label = ''): Grid\Column { return $this->grid->column($field, $label)->checkbox(); } /** * 添加排序列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnSort(string $field = 'sort', string $label = '排序'): Grid\Column { return $this->grid->column($field, $label)->sortable()->editable(); } /** * 添加金额列 * * @param string $field * @param string $label * @param string $currency * @param int $decimals * @return Grid\Column */ public function columnMoney(string $field, string $label, string $currency = '¥', int $decimals = 2): Grid\Column { return $this->grid->column($field, $label)->display(function ($value) use ($currency, $decimals) { return $currency . number_format($value, $decimals); }); } /** * 添加百分比列 * * @param string $field * @param string $label * @param int $decimals * @return Grid\Column */ public function columnPercentage(string $field, string $label, int $decimals = 2): Grid\Column { return $this->grid->column($field, $label)->display(function ($value) use ($decimals) { return number_format($value, $decimals) . '%'; }); } /** * 添加文件大小列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnFileSize(string $field, string $label): Grid\Column { return $this->grid->column($field, $label)->display(function ($value) { return $this->formatBytes($value); }); } /** * 格式化字节数 * * @param int $bytes * @return string */ protected function formatBytes(int $bytes): string { if ($bytes === 0) { return '0 B'; } $units = ['B', 'KB', 'MB', 'GB', 'TB']; $power = floor(log($bytes, 1024)); return round($bytes / pow(1024, $power), 2) . ' ' . $units[$power]; } /** * 添加JSON列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnJson(string $field, string $label): Grid\Column { return $this->grid->column($field, $label)->display(function ($value) { if (is_array($value)) { return '
' . json_encode($value, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . ''; } return $value; }); } /** * 添加截断文本列 * * @param string $field * @param string $label * @param int $limit * @return Grid\Column */ public function columnLimit(string $field, string $label, int $limit = 50): Grid\Column { return $this->grid->column($field, $label)->limit($limit); } /** * 添加复制按钮列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnCopyable(string $field, string $label): Grid\Column { return $this->grid->column($field, $label)->copyable(); } /** * 添加二维码列 * * @param string $field * @param string $label * @return Grid\Column */ public function columnQrcode(string $field, string $label): Grid\Column { return $this->grid->column($field, $label)->qrcode(); } }