| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- <?php
- namespace App\Module\Admin\AdminControllers\Helper;
- use Dcat\Admin\Grid;
- use UCore\DcatAdmin\AdminController;
- /**
- * 表格辅助类
- * 提供通用的表格列配置方法
- */
- class GridHelper
- {
- /**
- * @var Grid
- */
- protected Grid $grid;
- /**
- * @var AdminController
- */
- protected AdminController $controller;
- public function __construct(Grid $grid, AdminController $controller)
- {
- $this->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 '<pre>' . json_encode($value, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . '</pre>';
- }
- 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();
- }
- }
|