mirror of
https://gitee.com/celaraze/chemex.git
synced 2024-12-02 03:07:49 +08:00
115 lines
2.8 KiB
PHP
Executable File
115 lines
2.8 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App;
|
|
|
|
use Dcat\Admin\Grid\Column;
|
|
|
|
class Grid extends \Dcat\Admin\Grid
|
|
{
|
|
/**
|
|
* Add column to Grid.
|
|
*
|
|
* @param string $name
|
|
* @param string $label
|
|
* @param array $sorts
|
|
*
|
|
* @return Column
|
|
*/
|
|
public function column($name, $label = '', array $sorts = []): Column
|
|
{
|
|
$order = 99;
|
|
if (!empty($sorts)) {
|
|
$field = array_column($sorts, 'name');
|
|
$key = array_search($name, $field);
|
|
if ($key !== false) {
|
|
if (isset($sorts[$key])) {
|
|
$order = $sorts[$key]['order'];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->addColumn($name, $label, (int)$order);
|
|
}
|
|
|
|
/**
|
|
* Add column to grid.
|
|
*
|
|
* @param int $order
|
|
* @param string $field
|
|
* @param string $label
|
|
*
|
|
* @return Column
|
|
*/
|
|
protected function addColumn($field = '', $label = '', int $order = 99): Column
|
|
{
|
|
$column = $this->newColumn($field, $label, $order);
|
|
|
|
$this->columns->put($field, $column);
|
|
$this->allColumns->put($field, $column);
|
|
|
|
return $column;
|
|
}
|
|
|
|
/**
|
|
* @param int $order
|
|
* @param string $field
|
|
* @param string $label
|
|
*
|
|
* @return Column
|
|
*/
|
|
public function newColumn($field = '', $label = '', int $order = 99): Column
|
|
{
|
|
$column = new Column($field, $label);
|
|
$column->setGrid($this);
|
|
if ((substr($field, 0, 2) != '__')) {
|
|
$column->__order__ = $order;
|
|
}
|
|
|
|
return $column;
|
|
}
|
|
|
|
/**
|
|
* Build the grid.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function build()
|
|
{
|
|
if ($this->built) {
|
|
return;
|
|
}
|
|
|
|
$collection = clone $this->processFilter();
|
|
|
|
$this->prependRowSelectorColumn();
|
|
$this->appendActionsColumn();
|
|
|
|
Column::setOriginalGridModels($collection);
|
|
|
|
$columns = $this->columns->toArray();
|
|
$array = [];
|
|
if (isset($columns['__row_selector__'])) {
|
|
$__row_selector__ = $columns['__row_selector__'];
|
|
unset($columns['__row_selector__']);
|
|
$array = array_merge($array, ['__row_selector__' => $__row_selector__]);
|
|
}
|
|
$__actions__ = $columns['__actions__'];
|
|
unset($columns['__actions__']);
|
|
$keys = array_column($columns, '__order__');
|
|
array_multisort($keys, SORT_ASC, $columns);
|
|
$array = array_merge($array, $columns);
|
|
$array = array_merge($array, ['__actions__' => $__actions__]);
|
|
$this->columns = collect($array);
|
|
|
|
$this->columns->map(function (Column $column) use (&$collection) {
|
|
$column->fill($collection);
|
|
|
|
$this->columnNames[] = $column->getName();
|
|
});
|
|
|
|
$this->buildRows($collection);
|
|
|
|
$this->sortHeaders();
|
|
}
|
|
}
|