grid = $grid; $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->expand(); }); $this->controller = $controller; if (request('in_iframe')) { $grid->model()->setConstraints([ 'in_iframe' => 1 ]); } GridHeader::gridHeader($grid); } public function columnId() { return $this->grid->column('id', 'ID')->sortable(); } /** * 创建时间 - 使用统一的时间格式 * * @param string $field 字段名,默认为created_at * @param string $label 标签名,默认为创建时间 * @return Grid\Column */ public function columnCreatedAt($field = 'created_at', $label = '创建时间') { return $this->columnDateTime($field, $label); } /** * 更新时间 - 使用统一的时间格式 * * @param string $field 字段名,默认为updated_at * @param string $label 标签名,默认为更新时间 * @return Grid\Column */ public function columnUpdatedAt($field = 'updated_at', $label = '更新时间') { return $this->columnDateTime($field, $label); } /** * 时间信息组合列 - 将创建时间和更新时间组合显示 * * @param string $createdAtField 创建时间字段名,默认为created_at * @param string $updatedAtField 更新时间字段名,默认为updated_at * @param string $label 标签名,默认为时间信息 * @return Grid\Column */ public function columnTimes($createdAtField = 'created_at', $updatedAtField = 'updated_at', $label = '时间信息') { return $this->grid->column($createdAtField, $label)->display(function ($createdAt) use ($updatedAtField) { $updatedAt = $this->{$updatedAtField} ?? ''; // 格式化创建时间 $createdAtFormatted = $this->formatDateTime($createdAt); $createdAtHtml = "
创建: {$createdAtFormatted}
"; // 格式化更新时间 $updatedAtHtml = ''; if ($updatedAt) { $updatedAtFormatted = $this->formatDateTime($updatedAt); $updatedAtHtml = "
更新: {$updatedAtFormatted}
"; } return $createdAtHtml . $updatedAtHtml; })->sortable(); } /** * 格式化时间的私有方法 * * @param mixed $value 时间值 * @return string 格式化后的时间字符串 */ private function formatDateTime($value) { // 检查空值(但不包括0,因为0是有效的时间戳) if (is_null($value) || $value === '') { return '-'; } // 如果是时间戳,转换为日期时间字符串 if (is_numeric($value)) { return date('Y-m-d H:i:s', $value); } // 如果是Carbon实例或DateTime对象 if ($value instanceof \Carbon\Carbon || $value instanceof \DateTime) { return $value->format('Y-m-d H:i:s'); } // 如果是字符串,尝试转换为标准格式 if (is_string($value)) { try { $date = new \DateTime($value); return $date->format('Y-m-d H:i:s'); } catch (\Exception $e) { return $value; // 如果转换失败,返回原值 } } return $value; } public function columnIdDesc() { $this->grid->column('id', 'ID')->sortable(); $this->grid->model()->orderByDesc('id'); return $this; } public function disableAll() { $this->grid->disableCreateButton(); $this->grid->disableBatchActions(); $this->grid->disableDeleteButton(); $this->grid->disableEditButton(); $this->grid->disableQuickEditButton(); $this->grid->disableViewButton(); // $this->grid->disableBatchActions(); return $this; } /** * * @param $field * @param $view * @return $this */ public function columnView($field, $view, $label = '') { $this->grid->column($field, $label)->view($view); return $this; } public function columnImg($field, $width = 100, $hei = 100, $label = '') { $this->grid->column($field, $label)->display(function ($p2) { // dump($p2); return Img::img2imgurl($p2); })->image('', $width, $hei); } public function columnExpand($field, $fields = [], $label = '') { $controller = $this->controller; $this->grid->column($field, $label)->expand(function (Grid\Displayers\Expand $exped) use ($fields, $controller) { // dump(func_get_args()); $headers = [ 'admin.kv.name', 'admin.kv.value', ]; $data = []; // $exped->row; // dd($exped); foreach ($fields as $f) { $data[] = [ $controller->_label($f), $exped->row->$f ]; } return Table::make($headers, $data); }); } /** * 翻译 字段内容 * * @param $field * @return void */ public function columnTranslation($field, $label = '') { $this->grid->column($field, $label)->display(function ($value, $column, $controller) { // dd(func_get_args()); /** * @var AdminController $controller */ return $controller->_translation('key.' . $value); }, $this->controller);; } /** * 展示的时候除以100 * * @param string $field * @return void */ public function columnc100($field, $label = '') { $this->grid->column($field, $label)->display(function ($p2) { return $p2 / 100; }); } public function columnc1000($field, $label = '') { return $this->grid->column($field, $label)->display(function ($p2) { return $p2 / 1000; }); } /** * 展示 时间戳 * * @param string $field * @return void */ public function columnAt($field, $label = '') { $this->grid->column($field, $label)->display(function ($p2) { return date(\DateTime::W3C, $p2); }); } public function columnAtd($field, $label = '') { $this->grid->column($field, $label)->display(function (/* \Carbon\Carbon*/ $p2) { if (!$p2) { return null; } // dd($p2); return $p2->format(CarbonInterface::DEFAULT_TO_STRING_FORMAT); })->width(105); } /** * 标准时间格式列 - 年-月-日 时:分:秒 * * @param string $field 字段名 * @param string $label 标签名 * @return Grid\Column */ public function columnDateTime($field, $label = '') { return $this->grid->column($field, $label)->display(function ($value) { return self::formatDateTimeStatic($value); })->sortable(); } /** * 使用枚举展示 * * @param $field * @param $enmu * @return $this */ public function columnUseing($field, $enmu, $label = '') { $this->grid->column($field, $label)->use($enmu); return $this; } /** * 使用枚举展示 * * @param $field * @param $enmu * @param $label * @return Grid\Column */ public function columnUseingEnmu($field, $enmuClass, $label = ''): Grid\Column { $option= $enmuClass::getValueDescription(); $default = ''; // dump($option); return $this->grid->column($field, $label)->display(function ($value) use ($option, $default) { if (is_null($value)) { return $default; } if ($value instanceof \UnitEnum) { $value = $value->value; } return Arr::get($option, $value, $default); }); } public function columnUsingVk($field, $enmu, $label = '') { $res = array_flip($enmu); // dd($res); return $this->grid->column($field, $label)->using($res); } public function columnUsingkv($field, $enmu, $label = '') { // dump($enmu); return $this->grid->column($field, $label)->using($enmu); } /** * 使用枚举展示.new * * @param $name * @param array $keys * @return Grid\Column */ public function fieldUseing($name, array $keys, $label = '') { return $this->grid->column($name, $label)->using($this->useing($name, $keys)); } /** * 使用lab * * @param $name * @param array $keys * @return Grid\Column */ public function fieldLable1($name, $label = '') { $c = $this->controller; return $this->grid->column($name, $label)->display(function ($value, Grid\Column $column) use ($c) { // $list = explode(',',$c) $list = []; foreach ($value as $item) { // dd($this); $list[] = $c->_option($column->getName() . '-' . $item); } return $list; })->label(); } /** * 模型字段展示-cats * * @param $name * @param $default * @param $label * @return Grid\Column * @throws \Exception */ public function columnModelCats($name, $default = null, $label = '', $edit = false) { $cates = $this->grid->model()->repository()->model()->getCasts(); $enmu = $cates[$name] ?? ""; if ($enmu === '') { throw new \Exception("$name is not a model casts"); } $values = $enmu::getValueDescription(); if ($edit) { $res = $this->grid->column($name)->display(function ($value) use ($values, $default) { if (is_null($value)) { return $default; } if ($value instanceof \UnitEnum) { $value = $value->value(); } return $value; })->radio($values); } else { $res = $this->grid->column($name, $label)->display(function ($value) use ($values, $default) { if (is_null($value)) { return $default; } if ($value instanceof \UnitEnum) { $value = $value->value(); } return Arr::get($values, $value, $default); }); } return $res; } /** * 格式化时间的静态方法 * * @param mixed $value 时间值 * @return string 格式化后的时间字符串 */ private static function formatDateTimeStatic($value) { // 检查空值(但不包括0,因为0是有效的时间戳) if (is_null($value) || $value === '') { return '-'; } // 如果是时间戳,转换为日期时间字符串 if (is_numeric($value)) { return date('Y-m-d H:i:s', $value); } // 如果是Carbon实例或DateTime对象 if ($value instanceof \Carbon\Carbon || $value instanceof \DateTime) { return $value->format('Y-m-d H:i:s'); } // 如果是字符串,尝试转换为标准格式 if (is_string($value)) { try { $date = new \DateTime($value); return $date->format('Y-m-d H:i:s'); } catch (\Exception $e) { return $value; // 如果转换失败,返回原值 } } return $value; } }