From 4108ca15301875b474474e06835f31fbb6b3ae29 Mon Sep 17 00:00:00 2001 From: blobt <380255922@qq.com> Date: Thu, 29 Aug 2019 08:36:07 +0800 Subject: [PATCH] =?UTF-8?q?grid=E4=BF=AE=E5=A4=8D70%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kcadmin/web/js/common.js | 3 - vendor/blobt/grid/Column.php | 17 ++++ vendor/blobt/grid/DataColumn.php | 126 ++++++++++++++++++++++++++++- vendor/blobt/web/GridViewAsset.php | 55 +++++++++++++ 4 files changed, 197 insertions(+), 4 deletions(-) diff --git a/kcadmin/web/js/common.js b/kcadmin/web/js/common.js index ff74713..e69de29 100644 --- a/kcadmin/web/js/common.js +++ b/kcadmin/web/js/common.js @@ -1,3 +0,0 @@ -$(function(){ - $("[data-toggle='tooltip']").tooltip(); -}); \ No newline at end of file diff --git a/vendor/blobt/grid/Column.php b/vendor/blobt/grid/Column.php index 2fde27d..4e8f930 100644 --- a/vendor/blobt/grid/Column.php +++ b/vendor/blobt/grid/Column.php @@ -34,7 +34,24 @@ use yii\grid\Column as YiiColumn; class Column extends YiiColumn { + /** + * @var string 列宽 + */ public $width; + + /** + * @var string 对齐 + */ public $align; + public function init() { + if (!empty($this->width)) { + $this->headerOptions["width"] = $this->width; + } + if (!empty($this->align)) { + $this->contentOptions["align"] = $this->align; + } + parent::init(); + } + } diff --git a/vendor/blobt/grid/DataColumn.php b/vendor/blobt/grid/DataColumn.php index 7842f39..12511d1 100644 --- a/vendor/blobt/grid/DataColumn.php +++ b/vendor/blobt/grid/DataColumn.php @@ -26,6 +26,15 @@ namespace blobt\grid; +use Closure; +use yii\base\Model; +use yii\data\ActiveDataProvider; +use yii\data\ArrayDataProvider; +use yii\db\ActiveQueryInterface; +use yii\helpers\ArrayHelper; +use yii\helpers\Html; +use yii\helpers\Inflector; + /** * * @@ -51,6 +60,11 @@ class DataColumn extends Column { */ public $encodeLabel = true; + /** + * @var string|Closure 字符串或匿名函数. + */ + public $value; + /** * @var string|array|Closure 每个数据模型的值应以哪种格式显示(例如“raw”`、“text”`、“html”`,`[date','php:y-m-d']`)。 * 默认格式为“文本” @@ -66,6 +80,116 @@ class DataColumn extends Column { /** * @var bool 是否开始排序 */ - public $enableSorting = false; + public $enableSorting = true; + + /** + * @var bool 排序a标签的html属性 + */ + public $sortLinkOptions = []; + + /** + * @var bool 筛选表单单 + */ + public $filter; + + /** + * 初始化参数 + */ + public function init() { + parent::init(); + } + + /** + * 渲染头单元. + */ + public function renderHeaderCell() { + return Html::tag('th', $this->renderHeaderCellContent(), $this->headerOptions); + } + + /** + * {@inheritdoc} + */ + protected function renderHeaderCellContent() { + if ($this->header !== null || $this->label === null && $this->attribute === null) { + return parent::renderHeaderCellContent(); + } + + $label = $this->getHeaderCellLabel(); + if ($this->encodeLabel) { + $label = Html::encode($label); + } + + if ($this->attribute !== null && $this->enableSorting && + ($sort = $this->grid->dataProvider->getSort()) !== false && $sort->hasAttribute($this->attribute)) { + return $sort->link($this->attribute, array_merge($this->sortLinkOptions, ['label' => $label])); + } + + return $label; + } + + /** + * {@inheritdoc] + */ + protected function getHeaderCellLabel() { + $provider = $this->grid->dataProvider; + + if ($this->label === null) { + if ($provider instanceof ActiveDataProvider && $provider->query instanceof ActiveQueryInterface) { + /* @var $modelClass Model */ + $modelClass = $provider->query->modelClass; + $model = $modelClass::instance(); + $label = $model->getAttributeLabel($this->attribute); + } elseif ($provider instanceof ArrayDataProvider && $provider->modelClass !== null) { + /* @var $modelClass Model */ + $modelClass = $provider->modelClass; + $model = $modelClass::instance(); + $label = $model->getAttributeLabel($this->attribute); + } else { + $models = $provider->getModels(); + if (($model = reset($models)) instanceof Model) { + /* @var $model Model */ + $label = $model->getAttributeLabel($this->attribute); + } else { + $label = Inflector::camel2words($this->attribute); + } + } + } else { + $label = $this->label; + } + + return $label; + } + + /** + * 返回单元格值 + * @param mixed $model + * @param mixed $key 模型ID + * @param int $index 行号 + * @return string + */ + public function getDataCellValue($model, $key, $index) { + if ($this->value !== null) { + if (is_string($this->value)) { + return ArrayHelper::getValue($model, $this->value); + } + + return call_user_func($this->value, $model, $key, $index, $this); + } elseif ($this->attribute !== null) { + return ArrayHelper::getValue($model, $this->attribute); + } + + return null; + } + + /** + * {@inheritdoc} + */ + protected function renderDataCellContent($model, $key, $index) { + if ($this->content === null) { + return $this->grid->formatter->format($this->getDataCellValue($model, $key, $index), $this->format); + } + + return parent::renderDataCellContent($model, $key, $index); + } } diff --git a/vendor/blobt/web/GridViewAsset.php b/vendor/blobt/web/GridViewAsset.php index e69de29..7dfac7f 100644 --- a/vendor/blobt/web/GridViewAsset.php +++ b/vendor/blobt/web/GridViewAsset.php @@ -0,0 +1,55 @@ +